#!/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