version: 0.2 id: addsftp type: update description: An addon to add new SFTP users. It can also manage created user accounts. If SSH is enabled, WP-CLI will attempt to be installed if it is not yet installed. name: Add SFTP User targetNodes: nodeGroup: cp settings: sfpform: submitUnchanged: true fields: - type: displayfield name: infoField caption: Root Directory /var/www/webroot/ROOT/ description: "A user-specific directory will be created under /home/username" required: false - 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 manageUserForm: fields: - type: list name: manage_username caption: Username to Manage description: "Input the username you want to manage." required: true values: [] onBeforeInit: | let cmd = 'ls -ld /home/sftpusers/* | awk \'{printf "%s,%s %s %s\\n", substr($9, 17), $6, $7, $8}\'' let resp = api.env.control.ExecCmdByGroup({ envName: "${env.name}", nodeGroup: "cp", commandList: [{ command: cmd }] }) api.marketplace.console.WriteLog("list users cmd resp: " + resp) if (resp.result == 0) { let users = resp.responses[0].out.split('\n') for (let user of users) { let userData = user.split(',') let userName = userData[0] let createdDate = userData[1] settings.fields[0].values.push({ caption: userName + ' (' + createdDate + ')', value: userName }) } } api.marketplace.console.WriteLog("users: " + settings.fields[0].values) return settings 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 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!" logsNodeGroup: cp actions: add_sftp_user: - cmd[cp]: user: root commands: bash /home/jelastic/add-sftp-user-addon/add-sftp.sh ${globals.username} ${globals.password} - cmd[cp]: user: root commands: echo $CREATED_USERNAME - setGlobals: username: ${response.out} - cmd[cp]: user: root commands: echo $CREATED_PASSWORD - setGlobals: password: ${response.out} - return: type: info message: "Connection Details\n\nSFTP Host: ${globals.sftpHost}\n\nPort: ${globals.sftpPort}\n\nLogin Credentials\n\nUsername: ${globals.username}\n\nPassword: ${globals.password}" 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} - rm -rf /home/sftpusers/${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: ls -ld /home/sftpusers/* | awk '{printf "Username %s - Created %s %s %s\n", substr($9, 17), $6, $7, $8}' - 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." noUsersFound: type: error message: "No SFTP users have been created yet." 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?" submitButtonText: Add 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/