From af8889bd3effc71f1683b1d3896ffb8dffefc89c Mon Sep 17 00:00:00 2001 From: Anthony Date: Fri, 11 Apr 2025 01:48:07 +0800 Subject: [PATCH] Added log helper --- log_helper.sh | 24 ++++ manifest.jps | 329 +++++++++++++++++++++++--------------------------- 2 files changed, 176 insertions(+), 177 deletions(-) create mode 100644 log_helper.sh diff --git a/log_helper.sh b/log_helper.sh new file mode 100644 index 0000000..7a2f79d --- /dev/null +++ b/log_helper.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Simple logging function for SFTP User Addon +log_message() { + local level="$1" + local message="$2" + local logfile="$3" + local timestamp=$(date +"%Y-%m-%d %H:%M:%S") + + echo "[$timestamp][$level] $message" >> "/home/jelastic/add-sftp-user-addon/logs/$logfile" + + # Also log to main log + echo "[$timestamp][$level] $message" >> "/home/jelastic/add-sftp-user-addon/logs/script_output.log" + + # Log errors/warnings + if [[ "$level" == "ERROR" || "$level" == "WARNING" ]]; then + echo "[$timestamp][$level] $message" >> "/home/jelastic/add-sftp-user-addon/logs/errors.log" + fi + + # Log success/info + if [[ "$level" == "INFO" || "$level" == "SUCCESS" ]]; then + echo "[$timestamp][$level] $message" >> "/home/jelastic/add-sftp-user-addon/logs/operations.log" + fi +} \ No newline at end of file diff --git a/manifest.jps b/manifest.jps index c223fec..cd1f59c 100644 --- a/manifest.jps +++ b/manifest.jps @@ -11,52 +11,52 @@ settings: sfpform: submitUnchanged: true fields: - - type: displayfield - name: infoField - caption: Root Directory /var/www/webroot/ROOT/ - description: "Files will be accessible in a data/ROOT directory within the user's home" - required: false - - type: string - name: custom_username - caption: Custom Username - description: "Enter a custom username (3-32 characters, alphanumeric + underscore only)" - required: true - regex: ^[a-zA-Z0-9_]{3,32}$ - regexText: "Username must be 3-32 characters long and contain only letters, numbers, and underscores" - - type: checkbox - name: allow - caption: Accept User Creation - default: false - required: false - - type: checkbox - name: enable_ssh - caption: Also enable SSH access - default: false - required: false - tip: "If enabled, the user will have both SFTP and SSH access. Otherwise, only SFTP access will be granted." + - type: displayfield + name: infoField + caption: Root Directory /var/www/webroot/ROOT/ + description: "Files will be accessible in a data/ROOT directory within the user's home" + required: false + - type: string + name: custom_username + caption: Custom Username + description: "Enter a custom username (3-32 characters, alphanumeric + underscore only)" + required: true + regex: ^[a-zA-Z0-9_]{3,32}$ + regexText: "Username must be 3-32 characters long and contain only letters, numbers, and underscores" + - type: checkbox + name: allow + caption: Accept User Creation + default: false + required: false + - type: checkbox + name: enable_ssh + caption: Also enable SSH access + default: false + required: false + tip: "If enabled, the user will have both SFTP and SSH access. Otherwise, only SFTP access will be granted." manageUserForm: fields: - - type: string - name: manage_username - caption: Username to Manage - description: "Enter the username you want to manage." - required: true - regex: ^[a-zA-Z0-9_]{3,32}$ - regexText: "Username must be 3-32 characters long and contain only letters, numbers, and underscores" - - type: string - name: custom_password - caption: New Password - description: "Enter a new password for the user (leave empty to generate random password)" - required: false + - type: string + name: manage_username + caption: Username to Manage + description: "Enter the username you want to manage." + required: true + regex: ^[a-zA-Z0-9_]{3,32}$ + regexText: "Username must be 3-32 characters long and contain only letters, numbers, and underscores" + - type: string + name: custom_password + caption: New Password + description: "Enter a new password for the user (leave empty to generate random password)" + required: false deleteUserForm: fields: - - type: string - name: manage_username - caption: Username to Delete - description: "Enter the username you want to delete." - required: true - regex: ^[a-zA-Z0-9_]{3,32}$ - regexText: "Username must be 3-32 characters long and contain only letters, numbers, and underscores" + - type: string + name: manage_username + caption: Username to Delete + description: "Enter the username you want to delete." + required: true + regex: ^[a-zA-Z0-9_]{3,32}$ + regexText: "Username must be 3-32 characters long and contain only letters, numbers, and underscores" globals: username: ${settings.custom_username} @@ -65,7 +65,7 @@ globals: sftpPort: 22 onInstall: - - cmd [cp]: + - cmd[cp]: user: root commands: |- # Create required directories and files @@ -76,7 +76,10 @@ onInstall: # Download scripts wget https://deploy-proxy.mightybox.io/addons/add-sftp-user/raw/branch/main/add-sftp.sh -O /home/jelastic/add-sftp-user-addon/add-sftp.sh + wget https://deploy-proxy.mightybox.io/addons/add-sftp-user/raw/branch/main/log_helper.sh -O /home/jelastic/add-sftp-user-addon/log_helper.sh + chmod +x /home/jelastic/add-sftp-user-addon/add-sftp.sh + chmod +x /home/jelastic/add-sftp-user-addon/log_helper.sh # Very important - fix /home directory permissions for SFTP chroot echo "$(date) - Checking and fixing /home directory permissions for SFTP chroot" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log @@ -91,16 +94,6 @@ onInstall: chmod 755 /home echo "Fixed /home ownership to root:root with 755 permissions" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log - - # Create standard SFTP config helper - cat > /home/jelastic/add-sftp-user-addon/log_helper.sh << 'EOF' - #!/bin/bash - # Logging helper script - # ... content of log_helper.sh ... - EOF - - chmod +x /home/jelastic/add-sftp-user-addon/log_helper.sh - echo "$(date) - Installing SFTP addon on Jelastic environment" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log - cmd[cp]: @@ -216,24 +209,22 @@ actions: LOG_FILE="/home/jelastic/add-sftp-user-addon/logs/password_change.log" touch "$LOG_FILE" - # Silent source and redirect all logging - { - source /home/jelastic/add-sftp-user-addon/log_helper.sh &>/dev/null - - jps_log "INFO" "======== STARTING PASSWORD CHANGE ========" "password_change.log" - jps_log "INFO" "Verifying user exists: ${settings.manage_username}" "password_change.log" - - # Check if user exists without logging to stdout - if id ${settings.manage_username} &>/dev/null; then - jps_log "INFO" "User ${settings.manage_username} exists" "password_change.log" - exit 0 - else - jps_log "ERROR" "User ${settings.manage_username} does not exist" "password_change.log" - # Only output the error message - echo "User does not exist" - exit 1 - fi - } &>> "$LOG_FILE" + # Source the logging helper + source /home/jelastic/add-sftp-user-addon/log_helper.sh + + # Log start of process + log_message "INFO" "======== STARTING PASSWORD CHANGE ========" "password_change.log" + log_message "INFO" "Verifying user exists: ${settings.manage_username}" "password_change.log" + + # Check if user exists + if id ${settings.manage_username} &>/dev/null; then + log_message "INFO" "User ${settings.manage_username} exists" "password_change.log" + exit 0 + else + log_message "ERROR" "User ${settings.manage_username} does not exist" "password_change.log" + echo "User does not exist" + exit 1 + fi - if ("${response.exitStatus}" != "0"): return: type: error @@ -251,24 +242,22 @@ actions: - cmd[cp]: user: root commands: |- - # Redirect all logging - { - source /home/jelastic/add-sftp-user-addon/log_helper.sh &>/dev/null - - jps_log "INFO" "Changing password for user: ${settings.manage_username}" "password_change.log" - - # Change password using echo and chpasswd - if echo "${settings.manage_username}:${globals.password}" | /usr/sbin/chpasswd; then - jps_log "SUCCESS" "Password changed successfully for ${settings.manage_username}" "password_change.log" - echo "Password changed for ${settings.manage_username} at $(date)" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log - exit 0 - else - jps_log "ERROR" "Failed to change password for ${settings.manage_username}" "password_change.log" - exit 1 - fi - - jps_log "SUCCESS" "======== PASSWORD CHANGE COMPLETED ========" "password_change.log" - } &>> /home/jelastic/add-sftp-user-addon/logs/password_change.log + # Source the logging helper + source /home/jelastic/add-sftp-user-addon/log_helper.sh + + log_message "INFO" "Changing password for user: ${settings.manage_username}" "password_change.log" + + # Change password using echo and chpasswd + if echo "${settings.manage_username}:${globals.password}" | /usr/sbin/chpasswd; then + log_message "SUCCESS" "Password changed successfully for ${settings.manage_username}" "password_change.log" + echo "Password changed for ${settings.manage_username} at $(date)" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log + exit 0 + else + log_message "ERROR" "Failed to change password for ${settings.manage_username}" "password_change.log" + exit 1 + fi + + log_message "SUCCESS" "======== PASSWORD CHANGE COMPLETED ========" "password_change.log" - if ("${response.exitStatus}" != "0"): return: passwordChangeError - return: passwordChangeSuccess @@ -281,23 +270,22 @@ actions: LOG_FILE="/home/jelastic/add-sftp-user-addon/logs/user_deletion.log" touch "$LOG_FILE" - # Silent source and redirect all logging - { - source /home/jelastic/add-sftp-user-addon/log_helper.sh &>/dev/null - - jps_log "INFO" "======== STARTING USER DELETION ========" "user_deletion.log" - jps_log "INFO" "Verifying user exists: ${settings.manage_username}" "user_deletion.log" - - # Check if user exists without logging to stdout - if id ${settings.manage_username} &>/dev/null; then - jps_log "INFO" "User ${settings.manage_username} exists" "user_deletion.log" - else - jps_log "ERROR" "User ${settings.manage_username} does not exist" "user_deletion.log" - # Only output the error message - echo "User does not exist" - exit 1 - fi - } &>> "$LOG_FILE" + # Source the logging helper + source /home/jelastic/add-sftp-user-addon/log_helper.sh + + # Log start of process + log_message "INFO" "======== STARTING USER DELETION ========" "user_deletion.log" + log_message "INFO" "Verifying user exists: ${settings.manage_username}" "user_deletion.log" + + # Check if user exists + if id ${settings.manage_username} &>/dev/null; then + log_message "INFO" "User ${settings.manage_username} exists" "user_deletion.log" + exit 0 + else + log_message "ERROR" "User ${settings.manage_username} does not exist" "user_deletion.log" + echo "User does not exist" + exit 1 + fi - if ("${response.exitStatus}" != "0"): return: type: error @@ -307,21 +295,19 @@ actions: - cmd[cp]: user: root commands: |- - # Redirect all logging - { - source /home/jelastic/add-sftp-user-addon/log_helper.sh &>/dev/null - - jps_log "INFO" "Checking home directory for: ${settings.manage_username}" "user_deletion.log" - - if test -d /home/sftpusers/${settings.manage_username}; then - jps_log "INFO" "Home directory found: /home/sftpusers/${settings.manage_username}" "user_deletion.log" - else - jps_log "ERROR" "Home directory not found for user: ${settings.manage_username}" "user_deletion.log" - # Only output the error message - echo "User home directory not found" - exit 1 - fi - } &>> /home/jelastic/add-sftp-user-addon/logs/user_deletion.log + # Source the logging helper + source /home/jelastic/add-sftp-user-addon/log_helper.sh + + log_message "INFO" "Checking home directory for: ${settings.manage_username}" "user_deletion.log" + + if test -d /home/sftpusers/${settings.manage_username}; then + log_message "INFO" "Home directory found: /home/sftpusers/${settings.manage_username}" "user_deletion.log" + exit 0 + else + log_message "ERROR" "Home directory not found for user: ${settings.manage_username}" "user_deletion.log" + echo "User home directory not found" + exit 1 + fi - if ("${response.exitStatus}" != "0"): return: type: error @@ -331,44 +317,40 @@ actions: - cmd[cp]: user: root commands: |- - # Redirect all logging - { - source /home/jelastic/add-sftp-user-addon/log_helper.sh &>/dev/null - - jps_log "INFO" "Starting deletion of user: ${settings.manage_username}" "user_deletion.log" - - # First unmount any bind mounts - if mount | grep -q "/home/sftpusers/${settings.manage_username}/data/ROOT"; then - jps_log "INFO" "Unmounting bind mount for user: ${settings.manage_username}" "user_deletion.log" - umount /home/sftpusers/${settings.manage_username}/data/ROOT - fi - - # Remove from fstab - if grep -q "/home/sftpusers/${settings.manage_username}/data/ROOT" /etc/fstab; then - jps_log "INFO" "Removing bind mount from fstab for user: ${settings.manage_username}" "user_deletion.log" - sed -i "\|/home/sftpusers/${settings.manage_username}/data/ROOT|d" /etc/fstab - fi - - # Delete user account - if userdel ${settings.manage_username}; then - jps_log "SUCCESS" "User account deleted: ${settings.manage_username}" "user_deletion.log" - else - jps_log "ERROR" "Failed to delete user account: ${settings.manage_username}" "user_deletion.log" - exit 1 - fi - - # Remove home directory - if rm -rf /home/sftpusers/${settings.manage_username}; then - jps_log "SUCCESS" "Home directory removed: /home/sftpusers/${settings.manage_username}" "user_deletion.log" - else - jps_log "WARNING" "Failed to remove home directory for: ${settings.manage_username}" "user_deletion.log" - fi - - # Log to main log file - echo "User ${settings.manage_username} deleted at $(date)" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log - - jps_log "SUCCESS" "======== USER DELETION COMPLETED ========" "user_deletion.log" - } &>> /home/jelastic/add-sftp-user-addon/logs/user_deletion.log + # Source the logging helper + source /home/jelastic/add-sftp-user-addon/log_helper.sh + + log_message "INFO" "Starting deletion of user: ${settings.manage_username}" "user_deletion.log" + + # First unmount any bind mounts + if mount | grep -q "/home/sftpusers/${settings.manage_username}/data/ROOT"; then + log_message "INFO" "Unmounting bind mount for user: ${settings.manage_username}" "user_deletion.log" + umount /home/sftpusers/${settings.manage_username}/data/ROOT + fi + + # Remove from fstab + if grep -q "/home/sftpusers/${settings.manage_username}/data/ROOT" /etc/fstab; then + log_message "INFO" "Removing bind mount from fstab for user: ${settings.manage_username}" "user_deletion.log" + sed -i "\|/home/sftpusers/${settings.manage_username}/data/ROOT|d" /etc/fstab + fi + + # Delete user account + if userdel ${settings.manage_username}; then + log_message "SUCCESS" "User account deleted: ${settings.manage_username}" "user_deletion.log" + else + log_message "ERROR" "Failed to delete user account: ${settings.manage_username}" "user_deletion.log" + exit 1 + fi + + # Remove home directory + if rm -rf /home/sftpusers/${settings.manage_username}; then + log_message "SUCCESS" "Home directory removed: /home/sftpusers/${settings.manage_username}" "user_deletion.log" + else + log_message "WARNING" "Failed to remove home directory for: ${settings.manage_username}" "user_deletion.log" + fi + + log_message "SUCCESS" "======== USER DELETION COMPLETED ========" "user_deletion.log" + exit 0 - if ("${response.exitStatus}" != "0"): return: deleteUserError - return: deleteUserSuccess @@ -380,32 +362,25 @@ actions: LOG_FILE="/home/jelastic/add-sftp-user-addon/logs/list_users.log" touch "$LOG_FILE" - # For list_users, log only to file, return clean output to response - { - source /home/jelastic/add-sftp-user-addon/log_helper.sh &>/dev/null - - jps_log "INFO" "======== LISTING SFTP USERS ========" "list_users.log" - jps_log "INFO" "Retrieving list of SFTP users" "list_users.log" - } &>> "$LOG_FILE" + # Source the logging helper + source /home/jelastic/add-sftp-user-addon/log_helper.sh + + # Log start of process + log_message "INFO" "======== LISTING SFTP USERS ========" "list_users.log" + log_message "INFO" "Retrieving list of SFTP users" "list_users.log" # List users without logging to stdout - only return the clean list USERS_LIST=$(ls -ld /home/sftpusers/* 2>/dev/null | grep -v "total" | awk '{printf "Username: %s - Created: %s %s %s\n", substr($9, 17), $6, $7, $8}') # Check if any users were found if [ -z "$USERS_LIST" ]; then - { - source /home/jelastic/add-sftp-user-addon/log_helper.sh &>/dev/null - jps_log "WARNING" "No SFTP users found" "list_users.log" - jps_log "INFO" "======== USER LISTING COMPLETED ========" "list_users.log" - } &>> "$LOG_FILE" + log_message "WARNING" "No SFTP users found" "list_users.log" + log_message "INFO" "======== USER LISTING COMPLETED ========" "list_users.log" echo "" else - { - source /home/jelastic/add-sftp-user-addon/log_helper.sh &>/dev/null - jps_log "SUCCESS" "Retrieved list of SFTP users" "list_users.log" - jps_log "DEBUG" "Found users: $(echo "$USERS_LIST" | wc -l)" "list_users.log" - jps_log "INFO" "======== USER LISTING COMPLETED ========" "list_users.log" - } &>> "$LOG_FILE" + log_message "SUCCESS" "Retrieved list of SFTP users" "list_users.log" + log_message "DEBUG" "Found users: $(echo "$USERS_LIST" | wc -l)" "list_users.log" + log_message "INFO" "======== USER LISTING COMPLETED ========" "list_users.log" echo "$USERS_LIST" fi - if ("${response.exitStatus}" != "0" || "${response.out}" == ""):