diff --git a/core/tabs/utils/monitor-control/auto_detect_displays.sh b/core/tabs/utils/monitor-control/auto_detect_displays.sh index 44352f6ea..51af3b08f 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 19e085f48..f9f047fce 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 8a400701c..03c5297f8 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 aee3a15f8..53aa260d3 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 2173f7f1b..c2121b2cc 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 684dbfd4c..9820b78ee 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 ffca6c1b1..63eac1d74 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 ac386d777..1817f0f0a 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 bd3b3d557..0e20fa67f 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 c1a704168..173fff59e 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 85d7e0cb5..3bd958364 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 bc66da1b4..665cf72ac 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 d26dbfc65..26435f412 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 677dcd759..a909a5b2b 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 e776a063f..aee9482e3 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 f56a5d9e3..23935b5e4 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 b6af5f538..000000000 --- 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 5bccd94da..523fb7a2f 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