version: 0.1 id: addsftp type: update description: An addon to add new SFTP users. It can also manage created user accounts. name: Add SFTP User targetNodes: nodeGroup: cp settings: sfpform: fields: - type: string inputType: text name: root_directory caption: Root Directory default: "/var/www/webroot/ROOT/" description: "A user-specific directory will be created under this path." required: false - type: checkbox name: enable_ssh caption: Also enable SSH access default: false manageUserForm: fields: - type: string inputType: text name: manage_username caption: Username to Manage description: "Input the username you want to manage." required: true globals: username: "user${fn.random(10000,99999)}" password: ${fn.password(min)} sftpHost: ${env.domain} sftpPort: 22 onInstall: - cmd [cp]: user: root commands: |- mkdir -p /home/jelastic/add-sftp-user-addon/ mkdir -p /home/jelastic/add-sftp-user-addon/logs touch /home/jelastic/add-sftp-user-addon/logs/script_output.log touch /home/jelastic/add-sftp-user-addon/logs/sftp-users.log 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 chmod +x /home/jelastic/add-sftp-user-addon/*.sh - cmd[cp]: user: root commands: - echo -e "\nMatch User user*\nPasswordAuthentication yes" >> /etc/ssh/sshd_config - cmd[cp]: user: root commands: - systemctl restart sshd - api: environment.control.RestartContainer nodeGroup: cp nodeid: ${nodes.cp.id} - return: installSuccess menu: confirmText: "Do you want to list all users?" loadingText: "Loading users..." action: "list_users" caption: "List Users" successText: "Users listed successfully!" logsPath: "/home/jelastic/add-sftp-user-addon/logs/sftp-users.log" logsNodeGroup: cp actions: add_sftp_user: - cmd[cp]: # Use cmd action to check if user exists commands: id ${globals.username} || echo "User not found" - if ("${response.out}" == "User not found"): # If user doesn't exist - cmd[cp]: user: root commands: bash /home/jelastic/add-sftp-user-addon/add-sftp.sh ${globals.username} ${globals.password} - if ("${response.exitStatus}" != "0"): return: createUserError - else: - setGlobals: username: "user${fn.random(10000,99999)}" - cmd[cp]: # Check again with the new username commands: id ${globals.username} || echo "User not found" - if ("${response.out}" != "User not found"): return: userExistsError - return: sftpSuccess change_password: - cmd[cp]: user: root commands: - echo "${settings.manage_username}:${globals.password}" | chpasswd - echo "Password changed for ${settings.manage_username}" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log - if ("${response.exitStatus}" != "0"): return: passwordChangeError - return: passwordChangeSuccess delete_user: - cmd[cp]: user: root commands: - userdel ${settings.manage_username} - echo "User ${settings.manage_username} deleted" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log - if ("${response.exitStatus}" != "0"): return: deleteUserError - return: deleteUserSuccess list_users: - cmd[cp]: user: root commands: "grep -oP '^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} - user\\d{5}' /home/litespeed/add-sftp-user-addon/logs/script_output.log | while read line; do printf \"%s\\n\" \"$line\"; done" - return: listUsers responses: installSuccess: type: success message: "Installed Successfully" sftpError: type: error message: "Failed to add SFTP user. Please check the server logs for more details." sftpSuccess: type: success message: "Connection Details\n\nSFTP Host: ${globals.sftpHost}\n\nPort: ${globals.sftpPort}\n\nLogin Credentials\n\nUsername: ${globals.username}\n\nPassword: ${globals.password}" passwordChangeError: type: error message: "Failed to change password for ${settings.manage_username}. Check logs for details." passwordChangeSuccess: type: success message: "Password changed successfully for ${settings.manage_username}.\n\n New password: ${globals.password}" deleteUserError: type: error message: "Failed to delete user ${settings.manage_username}. Check logs for details." deleteUserSuccess: type: success message: "User ${settings.manage_username} deleted successfully." listUsers: type: info message: "${response.out}" buttons: - settings: sfpform action: add_sftp_user caption: Add SFTP/SSH User confirmText: "Are you sure you want to add this SFTP user?" - settings: manageUserForm action: change_password caption: Change Password confirmText: "Are you sure you want to change the password for this user?" - settings: manageUserForm action: delete_user caption: Delete User confirmText: "Are you sure you want to delete this user?" onUninstall: - cmd[cp]: user: root commands: - rm -rf /home/jelastic/add-sftp-user-addon/