Fix account manager (#553)

* Fix account manager

* Fix missing escalation tools and checkenv

---------

Co-authored-by: nnyyxxxx <nnyyxxxx@users.noreply.github.com>
This commit is contained in:
Nyx 2024-09-19 22:17:18 -04:00 committed by GitHub
parent 28533b9f38
commit ef9307dd83
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 175 additions and 200 deletions

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ./utility_functions.sh . ../utility_functions.sh
. ../../common-script.sh . ../../common-script.sh

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ./utility_functions.sh . ../utility_functions.sh
. ../../common-script.sh . ../../common-script.sh

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ./utility_functions.sh . ../utility_functions.sh
. ../../common-script.sh . ../../common-script.sh

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ./utility_functions.sh . ../utility_functions.sh
. ../../common-script.sh . ../../common-script.sh

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ./utility_functions.sh . ../utility_functions.sh
. ../../common-script.sh . ../../common-script.sh

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ./utility_functions.sh . ../utility_functions.sh
. ../../common-script.sh . ../../common-script.sh

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ./utility_functions.sh . ../utility_functions.sh
. ../../common-script.sh . ../../common-script.sh

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ./utility_functions.sh . ../utility_functions.sh
. ../../common-script.sh . ../../common-script.sh

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ./utility_functions.sh . ../utility_functions.sh
# Function to adjust brightness for a selected monitor # Function to adjust brightness for a selected monitor
adjust_monitor_brightness() { adjust_monitor_brightness() {

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ./utility_functions.sh . ../utility_functions.sh
. ../../common-script.sh . ../../common-script.sh

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ./utility_functions.sh . ../utility_functions.sh
. ../../common-script.sh . ../../common-script.sh

View File

@ -1,37 +1,47 @@
#!/bin/sh -e #!/bin/sh -e
. ../../common-script.sh . ../../common-script.sh
. ./utility_functions.sh
clear . ../utility_functions.sh
printf "%b\n" "${YELLOW}Add to group${RC}"
printf "%b\n" "${YELLOW}=================${RC}"
username=$(promptUsername "" "non-root") || exit 1 addToGroup() {
user_groups=$(groups "$username" | cut -d: -f2 | sort | tr '\n' ' ') 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" "${YELLOW}Enter the username: ${RC}"
printf "%b\n" "${YELLOW}=================${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" available_groups=$(cut -d: -f1 /etc/group | sort | tr '\n' ' ')
printf "%b\n" "${YELLOW}=================${RC}"
printf "%b\n" "${YELLOW}Enter the groups you want to add user $username to (space-separated):${RC} " printf "%b\n" "${YELLOW}Available groups:${RC} $available_groups"
read -r groups printf "%b\n" "${YELLOW}=================${RC}"
checkEmpty "$groups" || exit 1 printf "%b" "${YELLOW}Enter the groups you want to add user $username to (space-separated): ${RC}"
checkGroupAvailabe "$groups" "$available_groups" || exit 1 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]: " groups_to_add=$(echo "$groups" | tr ' ' ',')
read -r confirm
confirmAction || exit 1
$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 printf "%b\n" "${GREEN}User successfully added to the $groups_to_add${RC}"
}
checkEnv
checkEscalationTool
checkGroups
addToGroup

View File

@ -1,26 +1,38 @@
#!/bin/sh -e #!/bin/sh -e
. ../../common-script.sh . ../../common-script.sh
. ./utility_functions.sh
clear . ../utility_functions.sh
printf "%b\n" "${YELLOW}Create a new user${RC}"
printf "%b\n" "${YELLOW}=================${RC}"
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-zA-Z]*$' > /dev/null; then
if ! echo "$username" | grep '^[a-z][-a-z0-9_]*$' > /dev/null; then printf "%b\n" "${RED}Username must only contain letters and cannot contain spaces.${RC}"
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
exit 1 fi
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 if [ "$password" != "$password_confirmation" ]; then
echo "$username:$password" | "$ESCALATION_TOOL" chpasswd printf "%b\n" "${RED}Passwords do not match${RC}"
exit 1
fi
printf "%b\n" "${GREEN}User $username created successfully${RC}" "$ESCALATION_TOOL" useradd -m "$username" -g users -s /bin/bash
printf "%b\n" "${GREEN}To add additional groups use Add User To Groups${RC}" 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 checkEnv
checkEscalationTool
createUser

View File

@ -1,20 +1,33 @@
#!/bin/sh -e #!/bin/sh -e
. ../../common-script.sh . ../../common-script.sh
. ./utility_functions.sh
clear . ../utility_functions.sh
printf "%b\n" "${YELLOW}Change password${RC}"
printf "%b\n" "${YELLOW}=================${RC}"
username=$(promptUsername "" "root") || exit 1 changePassword() {
password=$(promptPassword) || exit 1 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]: " printf "%b" "${YELLOW}Enter the username: ${RC}"
read -r confirm read -r username
confirmAction || exit 1
echo "$username:$password" | "$ESCALATION_TOOL" chpasswd if id "$username" > /dev/null 2>&1; then
printf "%b\n" "${GREEN}Password changed successfully${RC}" printf "%b" "${YELLOW}Enter new password: ${RC}"
read -r password
checkEnv 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

View File

@ -1,27 +1,30 @@
#!/bin/sh -e #!/bin/sh -e
. ../../common-script.sh . ../../common-script.sh
. ./utility_functions.sh
clear . ../utility_functions.sh
printf "%b\n" "${YELLOW}Delete a user${RC}"
printf "%b\n" "${YELLOW}=================${RC}"
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 printf "%b" "${YELLOW}Enter the username: ${RC}"
if [ "$username" = "$USER" ]; then read -r username
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 "Are you sure you want to delete user $username? [Y/N]: " if id "$username" > /dev/null 2>&1; then
read -r confirm printf "%b" "${YELLOW}Are you sure you want to delete user ""$username""? [Y/n]: ${RC}"
confirmAction || exit 1 read -r confirm
confirmAction || exit 1
$ESCALATION_TOOL userdel --remove "$username" 2>/dev/null $ESCALATION_TOOL userdel --remove "$username" 2>/dev/null
printf "%b\n" "${GREEN}User $username deleted successfully${RC}" printf "%b\n" "${GREEN}User $username deleted successfully${RC}"
else
printf "%b\n" "${RED}User $username does not exist.${RC}"
exit 1
fi
}
checkEnv checkEnv
checkEscalationTool
deleteUser

View File

@ -1,32 +1,47 @@
#!/bin/sh -e #!/bin/sh -e
. ../../common-script.sh . ../../common-script.sh
. ./utility_functions.sh
clear . ../utility_functions.sh
printf "%b\n" "${YELLOW}Remove from group${RC}"
printf "%b\n" "${YELLOW}=================${RC}"
username=$(promptUsername "" "non-root") || exit 1 removeFromGroup() {
user_groups=$(groups "$username" | cut -d: -f2 | sort | tr '\n' ' ') 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" "${YELLOW}Enter the username: ${RC}"
printf "%b\n" "${YELLOW}=================${RC}" read -r username
printf "%b\n" "${YELLOW}Enter the groups you want to remove user $username from (space-separated):${RC} " if ! id "$username" > /dev/null 2>&1; then
read -r groups printf "%b\n" "${RED}User $username does not exist.${RC}"
exit 1
fi
checkEmpty "$groups" || exit 1 user_groups=$(groups "$username" | cut -d: -f2 | sort | tr '\n' ' ')
checkGroupAvailabe "$groups" "$user_groups" || exit 1
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]: " printf "%b" "${YELLOW}Enter the groups you want to remove user $username from (space-separated): ${RC} "
read -r confirm read -r groups
confirmAction || exit 1
$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 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

View File

@ -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

View File

@ -84,6 +84,31 @@ confirm_action() {
fi 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 checkEnv
checkEscalationTool checkEscalationTool
setup_xrandr setup_xrandr