diff --git a/add-sftp.sh b/add-sftp.sh index 60860c5..c89662b 100644 --- a/add-sftp.sh +++ b/add-sftp.sh @@ -24,9 +24,14 @@ log_debug() { fi } -# Generate random username -generate_username() { - echo "user$(shuf -i 10000-99999 -n 1)" +# Validate username format +validate_username() { + local username=$1 + if ! [[ "$username" =~ ^[a-zA-Z0-9_]{3,32}$ ]]; then + log_error "Invalid username format: $username" + return 1 + fi + return 0 } USERNAME=$1 @@ -35,11 +40,17 @@ SSH_ENABLED=$3 log "Script started" -# Check if user already exists, if yes generate a new one -while id "$USERNAME" &>/dev/null; do - USERNAME=$(generate_username) - log_warning "Username $USERNAME already exists, generating a new username." -done +# Validate username +if ! validate_username "$USERNAME"; then + log_error "Invalid username format. Username must be 3-32 characters long and contain only letters, numbers, and underscores." + exit 1 +fi + +# Check if user already exists +if id "$USERNAME" &>/dev/null; then + log_error "Username $USERNAME already exists. Please choose a different username." + exit 1 +fi USER_HOME="/home/sftpusers/$USERNAME" ROOT_DIRECTORY="/var/www/webroot/ROOT" diff --git a/manifest.jps b/manifest.jps index 4701643..5a1d387 100644 --- a/manifest.jps +++ b/manifest.jps @@ -16,6 +16,13 @@ settings: caption: Root Directory /var/www/webroot/ROOT/ description: "A user-specific directory will be created under /home/username" required: false + - type: textfield + name: username + caption: SFTP 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" - type: checkbox name: allow caption: Accept User Creation @@ -60,7 +67,7 @@ settings: globals: - username: "user${fn.random(10000,99999)}" + username: ${settings.username} password: ${fn.password(min)} sftpHost: ${env.domain} sftpPort: 22