83 lines
2.5 KiB
Bash
Executable File
83 lines
2.5 KiB
Bash
Executable File
# 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" |