From ef9307dd8321fba18bf2094847bc6212738419b6 Mon Sep 17 00:00:00 2001 From: Nyx <144965845+nnyyxxxx@users.noreply.github.com> Date: Thu, 19 Sep 2024 22:17:18 -0400 Subject: [PATCH] Fix account manager (#553) * Fix account manager * Fix missing escalation tools and checkenv --------- Co-authored-by: nnyyxxxx --- .../monitor-control/auto_detect_displays.sh | 2 +- .../monitor-control/change_orientation.sh | 2 +- .../utils/monitor-control/disable_monitor.sh | 2 +- .../monitor-control/duplicate_displays.sh | 2 +- .../utils/monitor-control/enable_monitor.sh | 2 +- .../monitor-control/manage_arrangement.sh | 2 +- .../utils/monitor-control/reset_scaling.sh | 2 +- .../utils/monitor-control/scale_monitor.sh | 2 +- .../utils/monitor-control/set_brightness.sh | 2 +- .../monitor-control/set_primary_monitor.sh | 2 +- .../utils/monitor-control/set_resolutions.sh | 2 +- .../user-account-manager/add_to_group.sh | 54 +++++---- .../utils/user-account-manager/add_user.sh | 42 ++++--- .../user-account-manager/change_password.sh | 37 +++++-- .../utils/user-account-manager/delete_user.sh | 39 ++++--- .../user-account-manager/remove_from_group.sh | 53 +++++---- .../user-account-manager/utility_functions.sh | 103 ------------------ .../utility_functions.sh | 25 +++++ 18 files changed, 175 insertions(+), 200 deletions(-) delete mode 100755 core/tabs/utils/user-account-manager/utility_functions.sh rename core/tabs/utils/{monitor-control => }/utility_functions.sh (84%) diff --git a/core/tabs/utils/monitor-control/auto_detect_displays.sh b/core/tabs/utils/monitor-control/auto_detect_displays.sh index 44352f6e..51af3b08 100755 --- a/core/tabs/utils/monitor-control/auto_detect_displays.sh +++ b/core/tabs/utils/monitor-control/auto_detect_displays.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -. ./utility_functions.sh +. ../utility_functions.sh . ../../common-script.sh diff --git a/core/tabs/utils/monitor-control/change_orientation.sh b/core/tabs/utils/monitor-control/change_orientation.sh index 19e085f4..f9f047fc 100755 --- a/core/tabs/utils/monitor-control/change_orientation.sh +++ b/core/tabs/utils/monitor-control/change_orientation.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -. ./utility_functions.sh +. ../utility_functions.sh . ../../common-script.sh diff --git a/core/tabs/utils/monitor-control/disable_monitor.sh b/core/tabs/utils/monitor-control/disable_monitor.sh index 8a400701..03c5297f 100755 --- a/core/tabs/utils/monitor-control/disable_monitor.sh +++ b/core/tabs/utils/monitor-control/disable_monitor.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -. ./utility_functions.sh +. ../utility_functions.sh . ../../common-script.sh diff --git a/core/tabs/utils/monitor-control/duplicate_displays.sh b/core/tabs/utils/monitor-control/duplicate_displays.sh index aee3a15f..53aa260d 100755 --- a/core/tabs/utils/monitor-control/duplicate_displays.sh +++ b/core/tabs/utils/monitor-control/duplicate_displays.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -. ./utility_functions.sh +. ../utility_functions.sh . ../../common-script.sh diff --git a/core/tabs/utils/monitor-control/enable_monitor.sh b/core/tabs/utils/monitor-control/enable_monitor.sh index 2173f7f1..c2121b2c 100755 --- a/core/tabs/utils/monitor-control/enable_monitor.sh +++ b/core/tabs/utils/monitor-control/enable_monitor.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -. ./utility_functions.sh +. ../utility_functions.sh . ../../common-script.sh diff --git a/core/tabs/utils/monitor-control/manage_arrangement.sh b/core/tabs/utils/monitor-control/manage_arrangement.sh index 684dbfd4..9820b78e 100755 --- a/core/tabs/utils/monitor-control/manage_arrangement.sh +++ b/core/tabs/utils/monitor-control/manage_arrangement.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -. ./utility_functions.sh +. ../utility_functions.sh . ../../common-script.sh diff --git a/core/tabs/utils/monitor-control/reset_scaling.sh b/core/tabs/utils/monitor-control/reset_scaling.sh index ffca6c1b..63eac1d7 100755 --- a/core/tabs/utils/monitor-control/reset_scaling.sh +++ b/core/tabs/utils/monitor-control/reset_scaling.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -. ./utility_functions.sh +. ../utility_functions.sh . ../../common-script.sh diff --git a/core/tabs/utils/monitor-control/scale_monitor.sh b/core/tabs/utils/monitor-control/scale_monitor.sh index ac386d77..1817f0f0 100755 --- a/core/tabs/utils/monitor-control/scale_monitor.sh +++ b/core/tabs/utils/monitor-control/scale_monitor.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -. ./utility_functions.sh +. ../utility_functions.sh . ../../common-script.sh diff --git a/core/tabs/utils/monitor-control/set_brightness.sh b/core/tabs/utils/monitor-control/set_brightness.sh index bd3b3d55..0e20fa67 100644 --- a/core/tabs/utils/monitor-control/set_brightness.sh +++ b/core/tabs/utils/monitor-control/set_brightness.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -. ./utility_functions.sh +. ../utility_functions.sh # Function to adjust brightness for a selected monitor adjust_monitor_brightness() { diff --git a/core/tabs/utils/monitor-control/set_primary_monitor.sh b/core/tabs/utils/monitor-control/set_primary_monitor.sh index c1a70416..173fff59 100755 --- a/core/tabs/utils/monitor-control/set_primary_monitor.sh +++ b/core/tabs/utils/monitor-control/set_primary_monitor.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -. ./utility_functions.sh +. ../utility_functions.sh . ../../common-script.sh diff --git a/core/tabs/utils/monitor-control/set_resolutions.sh b/core/tabs/utils/monitor-control/set_resolutions.sh index 85d7e0cb..3bd95836 100755 --- a/core/tabs/utils/monitor-control/set_resolutions.sh +++ b/core/tabs/utils/monitor-control/set_resolutions.sh @@ -1,6 +1,6 @@ #!/bin/sh -e -. ./utility_functions.sh +. ../utility_functions.sh . ../../common-script.sh diff --git a/core/tabs/utils/user-account-manager/add_to_group.sh b/core/tabs/utils/user-account-manager/add_to_group.sh index bc66da1b..665cf72a 100755 --- a/core/tabs/utils/user-account-manager/add_to_group.sh +++ b/core/tabs/utils/user-account-manager/add_to_group.sh @@ -1,37 +1,47 @@ #!/bin/sh -e . ../../common-script.sh -. ./utility_functions.sh -clear -printf "%b\n" "${YELLOW}Add to group${RC}" -printf "%b\n" "${YELLOW}=================${RC}" +. ../utility_functions.sh -username=$(promptUsername "" "non-root") || exit 1 -user_groups=$(groups "$username" | cut -d: -f2 | sort | tr '\n' ' ') +addToGroup() { + clear + printf "%b\n" "${YELLOW}Add to group${RC}" + printf "%b\n" "${YELLOW}=================${RC}" -printf "%b\n" "${YELLOW}Groups user $username is in:${RC} $user_groups" -printf "%b\n" "${YELLOW}=================${RC}" + printf "%b" "${YELLOW}Enter the username: ${RC}" + read -r username + user_groups=$(groups "$username" | cut -d: -f2 | sort | tr '\n' ' ') -available_groups=$(cut -d: -f1 /etc/group | sort | tr '\n' ' ') + printf "%b\n" "${YELLOW}Groups user $username is in:${RC} $user_groups" + printf "%b\n" "${YELLOW}=================${RC}" -printf "%b\n" "${YELLOW}Available groups:${RC} $available_groups" -printf "%b\n" "${YELLOW}=================${RC}" + available_groups=$(cut -d: -f1 /etc/group | sort | tr '\n' ' ') -printf "%b\n" "${YELLOW}Enter the groups you want to add user $username to (space-separated):${RC} " -read -r groups + printf "%b\n" "${YELLOW}Available groups:${RC} $available_groups" + printf "%b\n" "${YELLOW}=================${RC}" -checkEmpty "$groups" || exit 1 -checkGroupAvailabe "$groups" "$available_groups" || exit 1 + printf "%b" "${YELLOW}Enter the groups you want to add user $username to (space-separated): ${RC}" + read -r groups -groups_to_add=$(echo "$groups" | tr ' ' ',') + checkEmpty "$groups" || exit 1 + if ! checkGroups "$groups" "$available_groups"; then + printf "%b\n" "${RED}One or more groups are not available.${RC}" + exit 1 + fi -printf "Are you sure you want to add user $username to $groups_to_add? [Y/N]: " -read -r confirm -confirmAction || exit 1 + groups_to_add=$(echo "$groups" | tr ' ' ',') -$ESCALATION_TOOL usermod -aG $groups_to_add "$username" + printf "%b" "${YELLOW}Are you sure you want to add user $username to $groups_to_add? [Y/n]: ${RC}" + read -r confirm + confirmAction || exit 1 -printf "%b\n" "${GREEN}User successfully added to the $groups_to_add${RC}" + "$ESCALATION_TOOL" usermod -aG "$groups_to_add" "$username" -checkEnv \ No newline at end of file + printf "%b\n" "${GREEN}User successfully added to the $groups_to_add${RC}" +} + +checkEnv +checkEscalationTool +checkGroups +addToGroup \ No newline at end of file diff --git a/core/tabs/utils/user-account-manager/add_user.sh b/core/tabs/utils/user-account-manager/add_user.sh index d26dbfc6..26435f41 100755 --- a/core/tabs/utils/user-account-manager/add_user.sh +++ b/core/tabs/utils/user-account-manager/add_user.sh @@ -1,26 +1,38 @@ #!/bin/sh -e . ../../common-script.sh -. ./utility_functions.sh -clear -printf "%b\n" "${YELLOW}Create a new user${RC}" -printf "%b\n" "${YELLOW}=================${RC}" +. ../utility_functions.sh -username=$(promptUsername "add" "non-root") || exit 1 +createUser() { + clear + printf "%b\n" "${YELLOW}Create a new user${RC}" + printf "%b\n" "${YELLOW}=================${RC}" + printf "%b" "${YELLOW}Enter the username: ${RC}" + read -r username -# Check if username is valid -if ! echo "$username" | grep '^[a-z][-a-z0-9_]*$' > /dev/null; then - printf "%b\n" "${RED}Username must only contain letters, numbers, hyphens, and underscores. It cannot start with a number or contain spaces.${RC}" - exit 1 -fi + if ! echo "$username" | grep '^[a-zA-Z]*$' > /dev/null; then + printf "%b\n" "${RED}Username must only contain letters and cannot contain spaces.${RC}" + exit 1 + fi -password=$(promptPassword) || exit 1 + printf "%b" "${YELLOW}Enter the password: ${RC}" + read -r password + printf "%b" "${YELLOW}Enter the password again: ${RC}" + read -r password_confirmation -$ESCALATION_TOOL useradd -m "$username" -g users -s /bin/bash -echo "$username:$password" | "$ESCALATION_TOOL" chpasswd + if [ "$password" != "$password_confirmation" ]; then + printf "%b\n" "${RED}Passwords do not match${RC}" + exit 1 + fi -printf "%b\n" "${GREEN}User $username created successfully${RC}" -printf "%b\n" "${GREEN}To add additional groups use Add User To Groups${RC}" + "$ESCALATION_TOOL" useradd -m "$username" -g users -s /bin/bash + echo "$username:$password" | "$ESCALATION_TOOL" chpasswd + + printf "%b\n" "${GREEN}User $username created successfully${RC}" + printf "%b\n" "${GREEN}To add additional groups use Add User To Groups${RC}" +} checkEnv +checkEscalationTool +createUser diff --git a/core/tabs/utils/user-account-manager/change_password.sh b/core/tabs/utils/user-account-manager/change_password.sh index 677dcd75..a909a5b2 100755 --- a/core/tabs/utils/user-account-manager/change_password.sh +++ b/core/tabs/utils/user-account-manager/change_password.sh @@ -1,20 +1,33 @@ #!/bin/sh -e . ../../common-script.sh -. ./utility_functions.sh -clear -printf "%b\n" "${YELLOW}Change password${RC}" -printf "%b\n" "${YELLOW}=================${RC}" +. ../utility_functions.sh -username=$(promptUsername "" "root") || exit 1 -password=$(promptPassword) || exit 1 +changePassword() { + clear + printf "%b\n" "${YELLOW}Change password${RC}" + printf "%b\n" "${YELLOW}=================${RC}" -printf "Are you sure you want to change password for $username? [Y/N]: " -read -r confirm -confirmAction || exit 1 + printf "%b" "${YELLOW}Enter the username: ${RC}" + read -r username -echo "$username:$password" | "$ESCALATION_TOOL" chpasswd -printf "%b\n" "${GREEN}Password changed successfully${RC}" + if id "$username" > /dev/null 2>&1; then + printf "%b" "${YELLOW}Enter new password: ${RC}" + read -r password -checkEnv \ No newline at end of file + printf "%b" "${YELLOW}Are you sure you want to change password for ""$username""? [Y/n]: ${RC}" + read -r confirm + confirmAction || exit 1 + + echo "$username:$password" | "$ESCALATION_TOOL" chpasswd + printf "%b\n" "${GREEN}Password changed successfully${RC}" + else + printf "%b\n" "${RED}User $username does not exist.${RC}" + exit 1 + fi +} + +checkEnv +checkEscalationTool +changePassword \ No newline at end of file diff --git a/core/tabs/utils/user-account-manager/delete_user.sh b/core/tabs/utils/user-account-manager/delete_user.sh index e776a063..aee9482e 100755 --- a/core/tabs/utils/user-account-manager/delete_user.sh +++ b/core/tabs/utils/user-account-manager/delete_user.sh @@ -1,27 +1,30 @@ #!/bin/sh -e . ../../common-script.sh -. ./utility_functions.sh -clear -printf "%b\n" "${YELLOW}Delete a user${RC}" -printf "%b\n" "${YELLOW}=================${RC}" +. ../utility_functions.sh -username=$(promptUsername "" "non-root") || exit 1 +deleteUser() { + clear + printf "%b\n" "${YELLOW}Delete a user${RC}" + printf "%b\n" "${YELLOW}=================${RC}" -# Check if current user -if [ "$username" = "$USER" ]; then - printf "%b\n" "${RED}Cannot delete the current user${RC}" - printf "%b\n" "${RED}Press [Enter] to continue...${RC}" - read -r dummy - return -fi + printf "%b" "${YELLOW}Enter the username: ${RC}" + read -r username -printf "Are you sure you want to delete user $username? [Y/N]: " -read -r confirm -confirmAction || exit 1 + if id "$username" > /dev/null 2>&1; then + printf "%b" "${YELLOW}Are you sure you want to delete user ""$username""? [Y/n]: ${RC}" + read -r confirm + confirmAction || exit 1 -$ESCALATION_TOOL userdel --remove "$username" 2>/dev/null -printf "%b\n" "${GREEN}User $username deleted successfully${RC}" + $ESCALATION_TOOL userdel --remove "$username" 2>/dev/null + printf "%b\n" "${GREEN}User $username deleted successfully${RC}" + else + printf "%b\n" "${RED}User $username does not exist.${RC}" + exit 1 + fi +} -checkEnv \ No newline at end of file +checkEnv +checkEscalationTool +deleteUser \ No newline at end of file diff --git a/core/tabs/utils/user-account-manager/remove_from_group.sh b/core/tabs/utils/user-account-manager/remove_from_group.sh index f56a5d9e..23935b5e 100755 --- a/core/tabs/utils/user-account-manager/remove_from_group.sh +++ b/core/tabs/utils/user-account-manager/remove_from_group.sh @@ -1,32 +1,47 @@ #!/bin/sh -e . ../../common-script.sh -. ./utility_functions.sh -clear -printf "%b\n" "${YELLOW}Remove from group${RC}" -printf "%b\n" "${YELLOW}=================${RC}" +. ../utility_functions.sh -username=$(promptUsername "" "non-root") || exit 1 -user_groups=$(groups "$username" | cut -d: -f2 | sort | tr '\n' ' ') +removeFromGroup() { + clear + printf "%b\n" "${YELLOW}Remove from group${RC}" + printf "%b\n" "${YELLOW}=================${RC}" -printf "%b\n" "${YELLOW}Groups user $username is in:${RC} $user_groups" -printf "%b\n" "${YELLOW}=================${RC}" + printf "%b" "${YELLOW}Enter the username: ${RC}" + read -r username -printf "%b\n" "${YELLOW}Enter the groups you want to remove user $username from (space-separated):${RC} " -read -r groups + if ! id "$username" > /dev/null 2>&1; then + printf "%b\n" "${RED}User $username does not exist.${RC}" + exit 1 + fi -checkEmpty "$groups" || exit 1 -checkGroupAvailabe "$groups" "$user_groups" || exit 1 + user_groups=$(groups "$username" | cut -d: -f2 | sort | tr '\n' ' ') -groups_to_remove=$(echo "$groups" | tr ' ' ',') + printf "%b\n" "${YELLOW}Groups user $username is in:${RC} $user_groups" + printf "%b\n" "${YELLOW}=================${RC}" -printf "Are you sure you want to remove user $username from $groups_to_remove? [Y/N]: " -read -r confirm -confirmAction || exit 1 + printf "%b" "${YELLOW}Enter the groups you want to remove user $username from (space-separated): ${RC} " + read -r groups -$ESCALATION_TOOL usermod -rG $groups_to_remove "$username" + checkEmpty "$groups" || exit 1 + if ! checkGroups "$groups" "$user_groups"; then + printf "%b\n" "${RED}One or more specified groups do not exist.${RC}" + exit 1 + fi -printf "%b\n" "${GREEN}User successfully removed from $groups_to_remove${RC}" + groups_to_remove=$(echo "$groups" | tr ' ' ',') -checkEnv \ No newline at end of file + printf "%b" "${YELLOW}Are you sure you want to remove user $username from $groups_to_remove? [Y/n]: ${RC}" + read -r confirm + confirmAction || exit 1 + + $ESCALATION_TOOL usermod -rG $groups_to_remove "$username" + + printf "%b\n" "${GREEN}User successfully removed from $groups_to_remove${RC}" +} + +checkEnv +checkEscalationTool +removeFromGroup \ No newline at end of file diff --git a/core/tabs/utils/user-account-manager/utility_functions.sh b/core/tabs/utils/user-account-manager/utility_functions.sh deleted file mode 100755 index b6af5f53..00000000 --- a/core/tabs/utils/user-account-manager/utility_functions.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/bin/sh -e - -. ../../common-script.sh - -# Prompt for username -promptUsername() { - printf "Enter the username: " - read -r username - - checkEmpty "$username"; - - if [ "$1" = "add" ]; then - checkUserExistence "$username" "$1" - else - checkUserExistence "$username" "$1" - checkReservedUsername "$username" "$2" - fi - echo "$username" -} - - -# Prompt for password -promptPassword() { - stty -echo - printf "Enter the password (PASSWORD IS HIDDEN): " - read -r password1 - echo >&2 - printf "Re-enter the password (PASSWORD IS HIDDEN): " - read -r password2 - echo >&2 - stty echo - - if ! checkEmpty "$password1"; then - promptPassword - fi - - if [ "$password1" != "$password2" ]; then - printf "%b\n" "${RED}Passwords do not match${RC}" >&2 - promptPassword - else - echo $password1 - fi -} - -# Check if input is empty -checkEmpty() { - if [ -z "$1" ]; then - printf "%b\n" "${RED}Empty value is not allowed${RC}" >&2 - exit 1 - fi -} - -# Check if user exists -checkUserExistence() { - if [ "$2" = "add" ]; then - if id "$1" > /dev/null 2>&1; then - printf "%b\n" "${RED}User already exists${RC}" >&2 - exit 1 - fi - else - if ! id "$1" > /dev/null 2>&1; then - printf "%b\n" "${RED}User does not exist${RC}" >&2 - exit 1 - fi - fi -} - -# Check if user is reserved -checkReservedUsername() { - uid=$(id -u "$1") - if [ "$2" = "root" ]; then - if [ "$uid" -le 999 ] && [ "$uid" -ne 0 ]; then - printf "%b\n" "${RED}Cannot modify system users${RC}" >&2 - exit 1 - fi - else - if [ "$(id -u "$1")" -le 999 ]; then - printf "%b\n" "${RED}Cannot modify system users${RC}" >&2 - exit 1 - fi - fi -} - -# Check if user is reserved -confirmAction() { - if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then - printf "%b\n" "${RED}Cancelled operation...${RC}" >&2 - exit 1 - fi -} - -# Check if group is available -checkGroupAvailabe() { - for group in $1; do - if ! echo "$2" | grep -wq "$group"; then - printf "%b\n" "${RED}Group $group not avaiable${RC}" >&2 - exit 1 - fi - done -} - -checkEnv -checkEscalationTool \ No newline at end of file diff --git a/core/tabs/utils/monitor-control/utility_functions.sh b/core/tabs/utils/utility_functions.sh similarity index 84% rename from core/tabs/utils/monitor-control/utility_functions.sh rename to core/tabs/utils/utility_functions.sh index 5bccd94d..523fb7a2 100755 --- a/core/tabs/utils/monitor-control/utility_functions.sh +++ b/core/tabs/utils/utility_functions.sh @@ -84,6 +84,31 @@ confirm_action() { fi } +checkEmpty() { + if [ -z "$1" ]; then + printf "%b\n" "${RED}Empty value is not allowed${RC}" >&2 + exit 1 + fi +} + +checkGroups() { + groups="$1" + available_groups="$2" + for group in $groups; do + if ! echo "$available_groups" | grep -q -w "$group"; then + return 1 + fi + done + return 0 +} + +confirmAction() { + if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then + printf "%b\n" "${RED}Cancelled operation...${RC}" >&2 + exit 1 + fi +} + checkEnv checkEscalationTool setup_xrandr