119 lines
4.6 KiB
Bash
119 lines
4.6 KiB
Bash
#!/bin/bash
|
|
# -----------------------------------------------------------------------------------------------
|
|
# --------------------------------- Media Permissions Script -----------------------------------
|
|
# -----------------------------------------------------------------------------------------------
|
|
# Applies permissions and ownership to all configured media shares.
|
|
# Shares, permissions mode and owner are configured in Master.conf.
|
|
# Supports --dry-run to preview what would be changed without making changes.
|
|
# -----------------------------------------------------------------------------------------------
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
source "$SCRIPT_DIR/../Master.conf"
|
|
source "$SCRIPT_DIR/../common.sh"
|
|
|
|
parse_args "$@"
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
# ━━━ $ICON_GEAR Setup ━━━
|
|
# -----------------------------------------------------------------------------------------------
|
|
echo ""
|
|
echo "━━━ $ICON_GEAR Setup ━━━"
|
|
|
|
if [[ "$EUID" -ne 0 ]]; then
|
|
error "Must be run as root"
|
|
exit 1
|
|
fi
|
|
|
|
success "Running as root"
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
# ━━━ $ICON_SUMMARY Status ━━━
|
|
# -----------------------------------------------------------------------------------------------
|
|
if [[ "$SHOW_STATUS" == true ]]; then
|
|
echo ""
|
|
echo "━━━━━ $ICON_SUMMARY STATUS ━━━━━"
|
|
echo "$ICON_PERMS Mode: $PERMISSIONS_MODE"
|
|
echo "$ICON_PERMS Owner: $PERMISSIONS_OWNER"
|
|
echo "$ICON_PERMS Shares: ${#MEDIA_PERMISSION_SHARES[@]}"
|
|
echo "$ICON_GEAR Dry Run: $DRY_RUN"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━"
|
|
exit 0
|
|
fi
|
|
|
|
[[ "$DRY_RUN" == true ]] && warn "DRY RUN — no changes will be made"
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
# ━━━ $ICON_PERMS Media Permissions ━━━
|
|
# -----------------------------------------------------------------------------------------------
|
|
echo ""
|
|
echo "━━━ $ICON_PERMS Media Permissions ━━━"
|
|
echo "$ICON_PERMS Mode: $PERMISSIONS_MODE"
|
|
echo "$ICON_PERMS Owner: $PERMISSIONS_OWNER"
|
|
echo "$ICON_PERMS Shares: ${#MEDIA_PERMISSION_SHARES[@]}"
|
|
echo ""
|
|
|
|
START=$(date +%s)
|
|
FAILED=()
|
|
UPDATED=()
|
|
SKIPPED=()
|
|
|
|
for SHARE in "${MEDIA_PERMISSION_SHARES[@]}"; do
|
|
SHARE_NAME=$(basename "$SHARE")
|
|
|
|
if [[ ! -d "$SHARE" ]]; then
|
|
warn "$ICON_PERMS $SHARE_NAME not found — skipping"
|
|
SKIPPED+=("$SHARE_NAME")
|
|
continue
|
|
fi
|
|
|
|
if [[ "$DRY_RUN" == true ]]; then
|
|
warn "DRY RUN — would apply $PERMISSIONS_MODE $PERMISSIONS_OWNER to $SHARE"
|
|
continue
|
|
fi
|
|
|
|
info "$ICON_PERMS Updating $SHARE_NAME..."
|
|
|
|
CHMOD_OK=true
|
|
CHOWN_OK=true
|
|
|
|
chmod -R "$PERMISSIONS_MODE" "$SHARE" 2>/dev/null || CHMOD_OK=false
|
|
chown -R "$PERMISSIONS_OWNER" "$SHARE" 2>/dev/null || CHOWN_OK=false
|
|
|
|
if [[ "$CHMOD_OK" == true && "$CHOWN_OK" == true ]]; then
|
|
echo "$ICON_UNLOCKED $SHARE_NAME — permissions applied"
|
|
UPDATED+=("$SHARE_NAME")
|
|
else
|
|
error "$SHARE_NAME — permissions failed (chmod=$CHMOD_OK chown=$CHOWN_OK)"
|
|
FAILED+=("$SHARE_NAME")
|
|
fi
|
|
done
|
|
|
|
END=$(date +%s)
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
# ━━━ $ICON_SUMMARY Summary ━━━
|
|
# -----------------------------------------------------------------------------------------------
|
|
echo ""
|
|
echo "━━━━━ $ICON_SUMMARY MEDIA PERMISSIONS SUMMARY ━━━━━"
|
|
echo "$ICON_PERMS Mode: $PERMISSIONS_MODE"
|
|
echo "$ICON_PERMS Owner: $PERMISSIONS_OWNER"
|
|
echo "$ICON_TIME Duration: $(format_duration $((END - START)))"
|
|
echo ""
|
|
[[ ${#UPDATED[@]} -gt 0 ]] && echo " $ICON_UNLOCKED Updated: ${#UPDATED[@]}"
|
|
[[ ${#SKIPPED[@]} -gt 0 ]] && echo " $ICON_WARN Skipped: ${#SKIPPED[@]}"
|
|
[[ ${#FAILED[@]} -gt 0 ]] && echo " $ICON_ERROR Failed: ${#FAILED[@]} — ${FAILED[*]}"
|
|
echo ""
|
|
if [[ "$DRY_RUN" == true ]]; then
|
|
echo "$ICON_WARN Status: DRY RUN — no changes made"
|
|
elif [[ ${#FAILED[@]} -gt 0 ]]; then
|
|
echo "$ICON_ERROR Status: $ICON_ERROR SOME SHARES FAILED"
|
|
notify "Media permissions failed on $(hostname) — ${FAILED[*]}" "Media Permissions" "warning"
|
|
else
|
|
echo "$ICON_DONE Status: $ICON_SUCCESS DONE"
|
|
notify "Media permissions applied on $(hostname) — ${#UPDATED[@]} shares updated" "Media Permissions" "normal"
|
|
fi
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
|
|
[[ ${#FAILED[@]} -gt 0 ]] && exit 1
|
|
exit 0 |