Un lien "Mot de passe oublié ?" (login.html) mène à /forgot-password : si l'adresse saisie correspond à un compte, un jeton à haute entropie (secrets.token_urlsafe, valable 1h) est généré et envoyé par email via smtplib (auth/send_email.py, aucune dépendance ajoutée) — configuré uniquement par variables d'environnement (SMTP_HOST/PORT/USER/PASSWORD/ FROM, voir .env.example et docker-compose.prod.yml), n'importe quel serveur SMTP existant convient (Mailcow compris). Seul le hash SHA-256 du jeton est stocké (auth/password_reset.py, table _password_reset_tokens) : un jeton envoyé par email reste inutilisable même en cas de fuite de la base. Le même message générique s'affiche que l'adresse corresponde à un compte ou non, pour ne jamais permettre à ce formulaire de servir à deviner quelles adresses sont déjà inscrites. Un échec d'envoi (SMTP non configuré) est journalisé côté serveur seulement, jamais révélé à l'utilisateur. /reset-password/<token> vérifie le jeton (non expiré, non déjà utilisé), applique les mêmes règles de mot de passe fort qu'à l'inscription (même schéma visuel), puis consomme le jeton et remet à zéro le compteur anti-bruteforce du compte (auth/set_password.py) — une identité prouvée par email est une voie de récupération légitime même pour un compte verrouillé. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
26 lines
1001 B
Bash
26 lines
1001 B
Bash
# Ce fichier ne configure PAS l'application (elle ne lit aucune variable
|
|
# d'environnement) — il configure uniquement docker-compose.prod.yml sur le
|
|
# serveur de production. Copier en ".env" à côté de docker-compose.prod.yml
|
|
# sur le serveur et adapter les valeurs ; ne jamais committer ce ".env".
|
|
|
|
# Adresse complète de l'image dans le registre Gitea, ex :
|
|
# gitea.exemple.com/mon-compte/forge-engine
|
|
REGISTRY_IMAGE=
|
|
|
|
# Tag d'image à déployer (le pipeline CI le fixe généralement au commit SHA)
|
|
IMAGE_TAG=latest
|
|
|
|
# Port exposé sur l'hôte de production
|
|
PORT=5050
|
|
|
|
# Réinitialisation de mot de passe par email (auth/send_email.py) — un
|
|
# serveur SMTP existant (ex. Mailcow) suffit, aucun service tiers requis.
|
|
# Laisser vide désactive l'envoi (le lien de réinitialisation n'est alors
|
|
# jamais transmis à l'utilisateur, seule une erreur est journalisée côté
|
|
# serveur — jamais montrée telle quelle à l'utilisateur).
|
|
SMTP_HOST=
|
|
SMTP_PORT=587
|
|
SMTP_USER=
|
|
SMTP_PASSWORD=
|
|
SMTP_FROM=
|