#!/bin/bash

# 0) Comprobamos que el usuario que lanza el script es el usuario root:
[[ "$(whoami)" != "root" ]] && "#> Problema, se requiere ser el usuario root para expirar cuentas de usuario" && exit 1


# 1) Comprobamos que recibimos parámetros de entrada:
[[ ! "${1}" ]] && echo "#> Problema, se requiere pasar como parámetro las cuentas de usuario a expirar..." && exit 2


# Expiramos la cuenta de usuario y evitamos que salga en la lista de lightdm:
for USUARIO in "${@}" ; do
    # 3) Comprobamos que el usuario pasado como parámetro existe:
    getent passwd "${USUARIO}" > /dev/null 2>&1 || continue
    
    # 4) Inhabilitamos y expiramos la cuenta de usuario:
    echo "#> Expiramos la cuenta de usuario: ${USUARIO}"
    
    # Calculamos la fecha de mañana en formato YYYY-MM-DD:
    FECHA_MANANA=$(date -d tomorrow +%Y-%m-%d)
    FECHA_HOY=$(date -d today +%Y-%m-%d)
    
    # passwd -l: impide el acceso vía password, la inhabilita. Lo delata /etc/shadow en su 2º campo empiezando por "!"
    sudo passwd -l "${USUARIO}"             # Bloquea la contraseña
    # usermod -s /usr/sbin/nologin: imponemos una shell no válida para que lightdm y otros servicios lo tengan en cuenta
    sudo usermod -s /usr/sbin/nologin "${USUARIO}"   # Shell nologin
    # Configuramos la fecha de expiración: usermod -e => indica el número de días transcurridos desde 1970-01-01 como fecha de expiración
    # -e 1 => Indica que la cuenta expiró el 1970-01-02, un día después de 1970-01-01 ya expiró la cuenta
    # -e 1 "${USUARIO}" => Provoca la expiración de la cuenta instantaneamente, al dejar de ser válida el 1970-01-02
    # -e "${FECHA_MANANA}" "${USUARIO}" => Expirará la cuenta al día siguiente del actual
    # -e "${FECHA_HOY}" => Expiramos la cuenta hoy. Esta fecha de expiración queda registrada en el 8º campo de /etc/shadow, como el número de días transcurridos desde 1970-01-01
    sudo usermod -e "${FECHA_HOY}" "${USUARIO}" && \
    echo "La cuenta '$USUARIO' expirará a partir de las 00:00 del día ${FECHA_MANANA}"
    
    # Para evitar que salga en la lista de lightDM y sea tenido en cuenta /etc/lightdm/users.conf como usuario con shell falsa:
    FICH_ACCOUNT_USER="/var/lib/AccountsService/users/${USUARIO}"
    [[ -f "${FICH_ACCOUNT_USER}" ]] && \
    crudini --set "${FICH_ACCOUNT_USER}" "User" "SystemAccount" "true"
done