#!/bin/bash
# Basé sur un travail de Cédric Abonnel / Cédrix sous licence CC BY-NC 4.0

# Récupérer le nom d’hôte complet (FQDN)
SERVER_NAME=$(hostname -f)  # Privilégier hostname -f

# Vérifier si le FQDN est vide (cas rare)
if [[ -z "$SERVER_NAME" ]]; then
    SERVER_NAME=$(cat /etc/hostname)  # Lecture depuis /etc/hostname
fi

# Construire l'URL du serveur
SERVER_URL="http://$SERVER_NAME/passwords"

echo "Serveur détecté : $SERVER_NAME"

DOVECOT_USERS="/etc/dovecot/users"
WEB_DIR="/var/www/passwords"
EXPIRATION_TIME=600  # 10 minutes avant suppression

if [[ -z "$1" ]]; then
    echo "Usage: $0 <adresse email>"
    exit 1
fi

EMAIL=$1

# Vérifier si l'utilisateur existe
if ! grep -q "^$EMAIL:" "$DOVECOT_USERS"; then
    echo "Erreur : L'utilisateur $EMAIL n'existe pas. Utilisez 'create_user.sh' d'abord."
    exit 1
fi

# Génération d'un mot de passe sécurisé
PASSWORD=$(tr -dc 'A-Za-z0-9@#%&*()-_=+' </dev/urandom | head -c 20)

# Hachage sécurisé du mot de passe
HASHED_PASS=$(doveadm pw -s SHA512-CRYPT -p "$PASSWORD")

# Mettre à jour le mot de passe dans le fichier des utilisateurs
sed -i "s|^$EMAIL:.*|$EMAIL:$HASHED_PASS|" "$DOVECOT_USERS"

# Génération d'un lien temporaire
mkdir -p "$WEB_DIR"
chmod 750 "$WEB_DIR"

FILE_ID=$(uuidgen)
FILE_PATH="$WEB_DIR/$FILE_ID.html"

# Création de la page HTML temporaire
cat <<EOF > "$FILE_PATH"
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Votre nouveau mot de passe</title>
    <style>
        body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }
        .container { background: #f4f4f4; padding: 20px; border-radius: 10px; display: inline-block; }
        h1 { color: #333; }
        .password { font-size: 20px; font-weight: bold; background: #ddd; padding: 10px; border-radius: 5px; }
    </style>
</head>
<body>
    <div class="container">
        <h1>Votre nouveau mot de passe</h1>
        <p>Adresse email : <strong>$EMAIL</strong></p>
        <p>Mot de passe temporaire :</p>
        <p class="password">$PASSWORD</p>
        <p><strong>Notez-le, cette page sera supprimée après consultation.</strong></p>
    </div>
    <script>
        fetch(window.location.href, { method: 'DELETE' }).then(() => console.log('Fichier supprimé'));
    </script>
</body>
</html>
EOF

chmod 600 "$FILE_PATH"

# Suppression automatique après expiration
(sleep $EXPIRATION_TIME && rm -f "$FILE_PATH") &

echo "Mot de passe mis à jour pour $EMAIL"
echo "Lien temporaire pour récupérer le mot de passe : $SERVER_URL/$FILE_ID.html"