mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
196 lines
6 KiB
Bash
196 lines
6 KiB
Bash
#!/bin/bash
|
|
|
|
# Check if a YunoHost user exists
|
|
#
|
|
# usage: ynh_user_exists --username=username
|
|
# | arg: -u, --username= - the username to check
|
|
# | ret: 0 if the user exists, 1 otherwise.
|
|
#
|
|
# example: ynh_user_exists 'toto' || echo "User does not exist"
|
|
#
|
|
# Requires YunoHost version 2.2.4 or higher.
|
|
ynh_user_exists() {
|
|
# Declare an array to define the options of this helper.
|
|
local legacy_args=u
|
|
local -A args_array=([u]=username=)
|
|
local username
|
|
# Manage arguments with getopts
|
|
ynh_handle_getopts_args "$@"
|
|
|
|
yunohost user list --output-as json --quiet | jq -e ".users.\"${username}\"" >/dev/null
|
|
}
|
|
|
|
# Retrieve a YunoHost user information
|
|
#
|
|
# usage: ynh_user_get_info --username=username --key=key
|
|
# | arg: -u, --username= - the username to retrieve info from
|
|
# | arg: -k, --key= - the key to retrieve
|
|
# | ret: the value associate to that key
|
|
#
|
|
# example: mail=$(ynh_user_get_info --username="toto" --key=mail)
|
|
#
|
|
# Requires YunoHost version 2.2.4 or higher.
|
|
ynh_user_get_info() {
|
|
# Declare an array to define the options of this helper.
|
|
local legacy_args=uk
|
|
local -A args_array=([u]=username= [k]=key=)
|
|
local username
|
|
local key
|
|
# Manage arguments with getopts
|
|
ynh_handle_getopts_args "$@"
|
|
|
|
yunohost user info "$username" --output-as json --quiet | jq -r ".$key"
|
|
}
|
|
|
|
# Get the list of YunoHost users
|
|
#
|
|
# usage: ynh_user_list
|
|
# | ret: one username per line as strings
|
|
#
|
|
# example: for u in $(ynh_user_list); do ... ; done
|
|
#
|
|
# Requires YunoHost version 2.4.0 or higher.
|
|
ynh_user_list() {
|
|
yunohost user list --output-as json --quiet | jq -r ".users | keys[]"
|
|
}
|
|
|
|
# Check if a user exists on the system
|
|
#
|
|
# [packagingv1]
|
|
#
|
|
# usage: ynh_system_user_exists --username=username
|
|
# | arg: -u, --username= - the username to check
|
|
# | ret: 0 if the user exists, 1 otherwise.
|
|
#
|
|
# Requires YunoHost version 2.2.4 or higher.
|
|
ynh_system_user_exists() {
|
|
# Declare an array to define the options of this helper.
|
|
local legacy_args=u
|
|
local -A args_array=([u]=username=)
|
|
local username
|
|
# Manage arguments with getopts
|
|
ynh_handle_getopts_args "$@"
|
|
|
|
getent passwd "$username" &>/dev/null
|
|
}
|
|
|
|
# Check if a group exists on the system
|
|
#
|
|
# [packagingv1]
|
|
#
|
|
# usage: ynh_system_group_exists --group=group
|
|
# | arg: -g, --group= - the group to check
|
|
# | ret: 0 if the group exists, 1 otherwise.
|
|
#
|
|
# Requires YunoHost version 3.5.0.2 or higher.
|
|
ynh_system_group_exists() {
|
|
# Declare an array to define the options of this helper.
|
|
local legacy_args=g
|
|
local -A args_array=([g]=group=)
|
|
local group
|
|
# Manage arguments with getopts
|
|
ynh_handle_getopts_args "$@"
|
|
|
|
getent group "$group" &>/dev/null
|
|
}
|
|
|
|
# Create a system user
|
|
#
|
|
# [packagingv1]
|
|
#
|
|
# usage: ynh_system_user_create --username=user_name [--home_dir=home_dir] [--use_shell] [--groups="group1 group2"]
|
|
# | arg: -u, --username= - Name of the system user that will be create
|
|
# | arg: -h, --home_dir= - Path of the home dir for the user. Usually the final path of the app. If this argument is omitted, the user will be created without home
|
|
# | arg: -s, --use_shell - Create a user using the default login shell if present. If this argument is omitted, the user will be created with /usr/sbin/nologin shell
|
|
# | arg: -g, --groups - Add the user to system groups. Typically meant to add the user to the ssh.app / sftp.app group (e.g. for borgserver, my_webapp)
|
|
#
|
|
# Create a nextcloud user with no home directory and /usr/sbin/nologin login shell (hence no login capability) :
|
|
# ```
|
|
# ynh_system_user_create --username=nextcloud
|
|
# ```
|
|
# Create a discourse user using /var/www/discourse as home directory and the default login shell :
|
|
# ```
|
|
# ynh_system_user_create --username=discourse --home_dir=/var/www/discourse --use_shell
|
|
# ```
|
|
#
|
|
# Requires YunoHost version 2.6.4 or higher.
|
|
ynh_system_user_create() {
|
|
# Declare an array to define the options of this helper.
|
|
local legacy_args=uhs
|
|
local -A args_array=([u]=username= [h]=home_dir= [s]=use_shell [g]=groups=)
|
|
local username
|
|
local home_dir
|
|
local use_shell
|
|
local groups
|
|
|
|
# Manage arguments with getopts
|
|
ynh_handle_getopts_args "$@"
|
|
use_shell="${use_shell:-0}"
|
|
home_dir="${home_dir:-}"
|
|
groups="${groups:-}"
|
|
|
|
if ! ynh_system_user_exists "$username"; then # Check if the user exists on the system
|
|
# If the user doesn't exist
|
|
if [ -n "$home_dir" ]; then # If a home dir is mentioned
|
|
local user_home_dir="--home-dir $home_dir"
|
|
else
|
|
local user_home_dir="--no-create-home"
|
|
fi
|
|
if [ $use_shell -eq 1 ]; then # If we want a shell for the user
|
|
local shell="" # Use default shell
|
|
else
|
|
local shell="--shell /usr/sbin/nologin"
|
|
fi
|
|
useradd $user_home_dir --system --user-group $username $shell || ynh_die --message="Unable to create $username system account"
|
|
fi
|
|
|
|
local group
|
|
for group in $groups; do
|
|
usermod -a -G "$group" "$username"
|
|
done
|
|
}
|
|
|
|
# Delete a system user
|
|
#
|
|
# [packagingv1]
|
|
#
|
|
# usage: ynh_system_user_delete --username=user_name
|
|
# | arg: -u, --username= - Name of the system user that will be create
|
|
#
|
|
# Requires YunoHost version 2.6.4 or higher.
|
|
ynh_system_user_delete() {
|
|
# Declare an array to define the options of this helper.
|
|
local legacy_args=u
|
|
local -A args_array=([u]=username=)
|
|
local username
|
|
# Manage arguments with getopts
|
|
ynh_handle_getopts_args "$@"
|
|
|
|
# Check if the user exists on the system
|
|
if ynh_system_user_exists "$username"; then
|
|
deluser $username
|
|
else
|
|
ynh_print_warn --message="The user $username was not found"
|
|
fi
|
|
|
|
# Check if the group exists on the system
|
|
if ynh_system_group_exists "$username"; then
|
|
delgroup $username
|
|
fi
|
|
}
|
|
|
|
# Execute a command as another user
|
|
#
|
|
# usage: ynh_exec_as $USER COMMAND [ARG ...]
|
|
#
|
|
# Requires YunoHost version 4.1.7 or higher.
|
|
ynh_exec_as() {
|
|
local user=$1
|
|
shift 1
|
|
|
|
if [[ $user = $(whoami) ]]; then
|
|
eval "$@"
|
|
else
|
|
sudo -u "$user" "$@"
|
|
fi
|
|
}
|