#!/usr/bin/bash

#========== HELLO WORLD ============
#=========== 10/02/2026 ============
#===================================
#======== Baptiste HESCHUNG ========
#===================================
# Ce script importe des utilisateurs 
# en utilisant le fichier user.csv
#===================================
# Exécution en root uniquement !
#===================================

set -euo pipefail
# -e : stop si une commande échoue
# -u : erreur si variable non définie
# -o pipefail : une erreur dans un pipeline remonte

FILE="users.csv"  # Fichier CSV source

CREATED_COUNT=0 # Compteur d’utilisateurs créés

# Vérifier que le fichier existe
if [[ ! -f "$FILE" ]]; then
  echo "Erreur: fichier '$FILE' introuvable."
  exit 1
fi

# Vérifier l’exécution en root
if [[ $EUID -ne 0 ]]; then
  echo "Le script doit être exécuté en root."
  exit 1
fi

# Lire le CSV ligne par ligne
while IFS= read -r line || [[ -n "$line" ]]; do

  # Ignorer les lignes vides
  [[ -z "$line" ]] && continue

  # Découper la ligne CSV : nom,prenom,username,password,mail,groupe,shell
  IFS=',' read -r nom prenom username password mail groupe shell <<< "$line"

  # Vérifier que tous les champs obligatoires sont rempli
  if [[ -z "$nom" || -z "$prenom" || -z "$username" || -z "$password" || -z "$mail" || -z "$groupe" || -z "$shell" ]]; then
    echo "Ligne invalide (champ manquant): '$line'"
    continue
  fi

  # Vérifier si l’utilisateur existe déjà
  if id -u "$username" >/dev/null 2>&1; then
    echo "'$username' existe déjà."
    continue
  fi

  # Vérifier que le shell est valide
  if [[ ! -x "$shell" ]]; then
    echo "Shell invalide pour '$username' ($shell)"
    continue
  fi

  # Créer l’utilisateur (home + GECOS + shell)
  useradd -m -c "${prenom} ${nom} <${mail}>" -s "$shell" "$username"

  # Assigner le groupe (si le groupe n’existe pas, erreur gérée et ligne irgnorée)
  if getent group "$groupe" >/dev/null 2>&1; then
    usermod -aG "$groupe" "$username"
  else
    echo "Groupe inexistant pour '$username' ($groupe)"
    continue
  fi

  # Définir le mot de passe
  chpasswd <<< "${username}:${password}"

  # Forcer le changement de mot de passe au premier login
  passwd -e "$username" >/dev/null 2>&1 || true

  # Incrémenter le compteur de création des users
  CREATED_COUNT=$((CREATED_COUNT + 1))

  # Confirmer la création
  echo "Utilisateur $username créé."

done < "$FILE"

# Message final global
if [[ "$CREATED_COUNT" -gt 0 ]]; then
  echo "Les utilisateurs sont fichés avec succès."
else
  echo "Aucun nouvel utilisateur n’a été fiché."
fi