first
This commit is contained in:
2
modules/system/user-groups/config.sh
Normal file
2
modules/system/user-groups/config.sh
Normal file
@@ -0,0 +1,2 @@
|
||||
POSTINSTALL_USER_GROUPS_TARGET_USER="${POSTINSTALL_DEFAULT_USER:-gilles}"
|
||||
POSTINSTALL_USER_GROUPS_DEFAULT_GROUPS="audio,video,plugdev,dialout,netdev,lpadmin,scanner"
|
||||
4
modules/system/user-groups/metadata.conf
Normal file
4
modules/system/user-groups/metadata.conf
Normal file
@@ -0,0 +1,4 @@
|
||||
MODULE_ID="system/user-groups"
|
||||
MODULE_NAME="Configuration groupes utilisateur"
|
||||
MODULE_CATEGORY="system"
|
||||
MODULE_DESCRIPTION="Ajoute un utilisateur cible a une liste de groupes systeme utiles"
|
||||
93
modules/system/user-groups/module.sh
Normal file
93
modules/system/user-groups/module.sh
Normal file
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
MODULE_USER_GROUPS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
MODULE_USER_GROUPS_PROJECT_ROOT="$(cd "$MODULE_USER_GROUPS_DIR/../../.." && pwd)"
|
||||
|
||||
# shellcheck source=modules/system/user-groups/config.sh
|
||||
source "$MODULE_USER_GROUPS_DIR/config.sh"
|
||||
# shellcheck source=modules/system/user-groups/metadata.conf
|
||||
source "$MODULE_USER_GROUPS_DIR/metadata.conf"
|
||||
|
||||
module_user_groups_metadata() {
|
||||
printf '%s|%s|%s\n' "$MODULE_ID" "$MODULE_NAME" "$MODULE_DESCRIPTION"
|
||||
}
|
||||
|
||||
module_user_groups_normalize_csv() {
|
||||
local raw_groups="$1"
|
||||
|
||||
printf '%s\n' "$raw_groups" \
|
||||
| tr ',' '\n' \
|
||||
| sed 's/^[[:space:]]*//;s/[[:space:]]*$//' \
|
||||
| sed '/^$/d'
|
||||
}
|
||||
|
||||
module_user_groups_check() {
|
||||
local target_user="${1:-$POSTINSTALL_USER_GROUPS_TARGET_USER}"
|
||||
local requested_groups="${2:-$POSTINSTALL_USER_GROUPS_DEFAULT_GROUPS}"
|
||||
local group_name=""
|
||||
|
||||
if ! system_user_exists "$target_user"; then
|
||||
ui_error "Utilisateur introuvable : $target_user"
|
||||
return 1
|
||||
fi
|
||||
|
||||
while IFS= read -r group_name; do
|
||||
if ! system_group_exists "$group_name"; then
|
||||
ui_warn "Groupe introuvable : $group_name"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! system_user_in_group "$target_user" "$group_name"; then
|
||||
ui_warn "Utilisateur $target_user non membre du groupe $group_name"
|
||||
return 1
|
||||
fi
|
||||
done < <(module_user_groups_normalize_csv "$requested_groups")
|
||||
|
||||
ui_success "Tous les groupes demandes sont deja appliques a $target_user"
|
||||
}
|
||||
|
||||
module_user_groups_install() {
|
||||
local target_user="${1:-$POSTINSTALL_USER_GROUPS_TARGET_USER}"
|
||||
local requested_groups="${2:-$POSTINSTALL_USER_GROUPS_DEFAULT_GROUPS}"
|
||||
local group_name=""
|
||||
local changed=0
|
||||
|
||||
if ! system_user_exists "$target_user"; then
|
||||
ui_error "Impossible de configurer les groupes : utilisateur absent ($target_user)"
|
||||
return 1
|
||||
fi
|
||||
|
||||
while IFS= read -r group_name; do
|
||||
if ! system_group_exists "$group_name"; then
|
||||
ui_warn "Groupe ignore car absent : $group_name"
|
||||
continue
|
||||
fi
|
||||
|
||||
if system_user_in_group "$target_user" "$group_name"; then
|
||||
ui_info "Aucun changement : $target_user est deja dans $group_name"
|
||||
continue
|
||||
fi
|
||||
|
||||
usermod -aG "$group_name" "$target_user"
|
||||
log_info "Utilisateur $target_user ajoute au groupe $group_name"
|
||||
ui_success "Utilisateur $target_user ajoute au groupe $group_name"
|
||||
changed=1
|
||||
done < <(module_user_groups_normalize_csv "$requested_groups")
|
||||
|
||||
if [[ "$changed" -eq 0 ]]; then
|
||||
ui_info "Aucun changement de groupes necessaire"
|
||||
fi
|
||||
}
|
||||
|
||||
module_user_groups_test() {
|
||||
local target_user="${1:-$POSTINSTALL_USER_GROUPS_TARGET_USER}"
|
||||
local requested_groups="${2:-$POSTINSTALL_USER_GROUPS_DEFAULT_GROUPS}"
|
||||
local group_name=""
|
||||
|
||||
system_user_exists "$target_user" || return 1
|
||||
|
||||
while IFS= read -r group_name; do
|
||||
system_group_exists "$group_name" || return 1
|
||||
system_user_in_group "$target_user" "$group_name" || return 1
|
||||
done < <(module_user_groups_normalize_csv "$requested_groups")
|
||||
}
|
||||
25
modules/system/user-groups/tests.sh
Executable file
25
modules/system/user-groups/tests.sh
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
MODULE_USER_GROUPS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$MODULE_USER_GROUPS_DIR/../../.." && pwd)"
|
||||
|
||||
# shellcheck source=lib/ui.sh
|
||||
source "$PROJECT_ROOT/lib/ui.sh"
|
||||
# shellcheck source=lib/log.sh
|
||||
source "$PROJECT_ROOT/lib/log.sh"
|
||||
# shellcheck source=lib/system.sh
|
||||
source "$PROJECT_ROOT/lib/system.sh"
|
||||
# shellcheck source=core/runtime.sh
|
||||
source "$PROJECT_ROOT/core/runtime.sh"
|
||||
# shellcheck source=modules/system/user-groups/module.sh
|
||||
source "$MODULE_USER_GROUPS_DIR/module.sh"
|
||||
|
||||
runtime_init "$PROJECT_ROOT"
|
||||
log_init
|
||||
|
||||
if module_user_groups_test "${1:-gilles}" "${2:-audio,video}"; then
|
||||
printf 'user-groups test OK\n'
|
||||
else
|
||||
printf 'user-groups test FAILED\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user