#!/bin/bash
# lastact: arturo@2022-2-15
# desc: pasamos como parámetros el nombre y un lista separados por comas de los grupos a asignar.  Si no se indica nada se degradará el usuario indicado a unos grupos básicos:


FICHFUNCS="/usr/bin/vx-funcs-bash"
[ -f "${FICHFUNCS}" ] && . "${FICHFUNCS}" "null"

# Comprobamos que el usuario root es que quiere ejecutar el script:
! vx-check_user_root && exit 1

# Mostramos la ayuda si se pasa como parámetro -h o --help:
AYUDA="Script encargado de modificar los grupos de pertenencia del usuario pasado como primer parámetro."
AYUDA+="\nComo segundo parámetro debe inciarse una lista de grupos separados por comas: lpadmin,sudo,epoptes,..."
AYUDA+="\nEn caso de no indicar ninguna lista de grupos se asignará una lista de grupos básicos que degradarán la cuenta del usuario:"
AYUDA+="\nGrupos básicos de pertenecia: dialout plugdev dip cdrom audio video sambashare"
EJEMPLOS=("${0} \"docente\" \"profesor,cdrom,audio,video,epoptes,dialout\"# Llamada con los valores por defecto")
EJEMPLOS+=("${0} \"estudiante\" \"alumno,cdrom,audio,video,dialout\"# Llamada con los valores por defecto")
vx-check_need_help "${1}" && \
vx-show_help "${0}" "${AYUDA}" "${EJEMPLOS[@]}" && \
exit 0

# Preparamos la auditoria del servicio:
LOG="vx-check-servicio.log"
vx-log_xsession -o "${LOG}"

[[ -z "${1}" ]] && \
echo "=> Error. Se necesita pasar al menos un parámetro: el usuario a modificar sus grupos de pertenencia" && \
exit 2

USUARIO="${1}"
USUARIO="$(vx-check-usu-igualdad "${USUARIO}")"

! vx-funcs-users vx-check_exit_users "${USUARIO}" && \
echo "=> Error. El usuario pasado como primer parámetro no existe" && \
exit 3

if [[ -z "${2}" ]] ; then
    [[ "${USUARIO}" =~ ^profesor$|^docente$ ]] && \
    LISTA_GRUPOS_SECUNDARIOS=("profesor" "docentes" "dialout" "plugdev" "dip" "cdrom" "audio" "video" "sambashare" "epoptes" ) || \
    LISTA_GRUPOS_SECUNDARIOS=("alumno" "estudiantes" "dialout" "plugdev" "dip" "cdrom" "audio" "video" "sambashare")
else
    LISTA_GRUPOS_SECUNDARIOS=(${2//,/ })
fi

# Comprobamos que los grupos a asignar al usuario existen:
LISTA_A_ASIGNAR=()
for GRUPO in "${LISTA_GRUPOS_SECUNDARIOS[@]}" ; do
    vx-funcs-users vx-check_exit_groups "${GRUPO}" && \
    LISTA_A_ASIGNAR+=( "${GRUPO}" )
done

# Obtenemos la lista actual del usuario a modificar sus grupos:
LISTA_ACTUAL=( $(id -nG ${USUARIO}) )

if ! vx-arrays_compare LISTA_A_ASIGNAR LISTA_ACTUAL ; then
    echo "=> Modificamos los grupos de pertencia de la cuenta de usuario: ${USUARIO} => ${LISTA_A_ASIGNAR[*]}"
    usermod \
    -G "$(echo "${LISTA_A_ASIGNAR[*]}" | tr -s " " ",")" \
    "${USUARIO}"
else
    echo "=> El usuario ${USUARIO} ya tiene los grupos de pertenencia deseados: ${LISTA_A_ASIGNAR[*]}"
fi

exit 0