212 lines
7.2 KiB
Plaintext
212 lines
7.2 KiB
Plaintext
version: 0.4
|
|
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
|
|
value: /var/www/webroot/ROOT/
|
|
description: "A user-specific directory will be created under /home/username"
|
|
required: false
|
|
- type: string
|
|
inputType: text
|
|
name: username
|
|
caption: SFTP Username
|
|
placeholder: "Enter username"
|
|
description: "Enter the desired username (3-32 characters, letters, numbers, and underscores 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"
|
|
hideLabel: false
|
|
hidden: 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: "${settings.sfpform.username}"
|
|
password: ${fn.password(min)}
|
|
sftpHost: ${env.domain}
|
|
sftpPort: 22
|
|
enable_ssh: ${settings.sfpform.enable_ssh:false}
|
|
|
|
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: |-
|
|
if grep -qE "^Match User [a-zA-Z0-9_]*$" /etc/ssh/sshd_config; then
|
|
sed -i '/^Match User [a-zA-Z0-9_]*/!b;n;c\ PasswordAuthentication yes' /etc/ssh/sshd_config
|
|
else
|
|
echo -e "\n# Added by SFTP addon\nMatch User *\n\tPasswordAuthentication yes" >> /etc/ssh/sshd_config
|
|
fi
|
|
awk '!seen[$0]++' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config
|
|
systemctl restart sshd
|
|
- 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:
|
|
- setGlobals:
|
|
enable_ssh: ${settings.sfpform.enable_ssh:false}
|
|
- cmd[cp]:
|
|
user: root
|
|
commands: |-
|
|
bash /home/jelastic/add-sftp-user-addon/add-sftp.sh "${globals.username}" "${globals.password}" "${globals.enable_ssh}"
|
|
- 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/ |