From 89349adc26c5e9a3ea5746aecc8eafeb079fee96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C4=83rcziem=20=E2=84=A2?= <118485377+spalencsar@users.noreply.github.com> Date: Fri, 3 Oct 2025 12:18:55 +0200 Subject: [PATCH] feat(users): interactive helper to create admin user if missing; call during config --- lib/common.sh | 40 ++++++++++++++++++++++++++++++++++++++++ setup.sh | 2 ++ 2 files changed, 42 insertions(+) diff --git a/lib/common.sh b/lib/common.sh index 9b9adbf..4fc6dbb 100644 --- a/lib/common.sh +++ b/lib/common.sh @@ -326,6 +326,46 @@ load_config() { fi } +# Ensure a given user exists; if not, offer to create them interactively. +# Usage: ensure_user_exists_interactive +ensure_user_exists_interactive() { + local user="$1" + + if id -u "$user" >/dev/null 2>&1; then + log_debug "User '$user' already exists" + return 0 + fi + + log_warning "User '$user' does not exist on this system." + if ! ask_yes_no "Create user '$user' now?" "y"; then + log_info "Skipping creation of user '$user'. Some features may require this user to exist." + return 1 + fi + + # Create user and set password interactively + log_info "Creating user '$user'..." + if sudo useradd -m -s /bin/bash "$user"; then + log_success "User '$user' created" + # Add to sudo group + sudo usermod -aG sudo "$user" || true + + # Ask for password + local pw + pw=$(ask_password "Set password for user $user") + echo "$user:$pw" | sudo chpasswd + + # Record rollback action + if declare -F add_rollback_action >/dev/null 2>&1; then + add_rollback_action "sudo userdel -r $user || true" + fi + + return 0 + else + log_error "Failed to create user '$user'" + return 2 + fi +} + # Cleanup function cleanup() { log_info "Performing cleanup..." diff --git a/setup.sh b/setup.sh index efacb8b..dcc9bef 100644 --- a/setup.sh +++ b/setup.sh @@ -313,6 +313,8 @@ create_interactive_config() { # User configuration local username=$(ask_input "Admin username" "$NEW_USER" "validate_username") save_config "ADMIN_USER" "$username" + # Ensure the configured admin user exists (offer interactive creation) + ensure_user_exists_interactive "$username" || log_warning "Admin user '$username' not created; some features may require it." # Network configuration if ask_yes_no "Configure static IP?" "n"; then