L'app tourne désormais pour soi sans rien configurer. Sans relais
SMTP, le lien de création de compte s'affiche directement à l'écran,
construit depuis l'URL en cours — aucune config d'URL nécessaire,
même en naviguant par IP sur le LAN (le contrôle anti-open-redirect
du Host ne concerne que le chemin par email). allowed_email_domain
vide accepte tous les emails : l'adresse ne sert que d'identifiant.
Le fichier d'exemple de config était périmé : il datait d'avant les
plages, force_secure_cookies et login_rate_limit_per_min, et
laissait croire le SMTP obligatoire. Il reflète maintenant les clés
réelles, toutes optionnelles et vides par défaut.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
65 lines
1.9 KiB
HTML
65 lines
1.9 KiB
HTML
{% extends "base.html" %}
|
|
{% block content %}
|
|
<div class="login-wrap">
|
|
<div class="login-card">
|
|
<div class="login-header">
|
|
<span class="login-eyebrow">Décompte Horaire</span>
|
|
<h1 class="login-title">Connexion</h1>
|
|
</div>
|
|
|
|
{% if error %}
|
|
<div class="login-error">{{ error }}</div>
|
|
{% endif %}
|
|
|
|
{% if step == "email" %}
|
|
<form method="post" action="/login" class="login-form">
|
|
<label class="login-label" for="email">Adresse email</label>
|
|
<input
|
|
id="email"
|
|
class="login-input"
|
|
type="email"
|
|
name="email"
|
|
value="{{ email }}"
|
|
autocomplete="email"
|
|
autofocus
|
|
placeholder="prenom.nom@domaine.fr"
|
|
required
|
|
>
|
|
<button class="login-btn" type="submit">Continuer</button>
|
|
</form>
|
|
|
|
{% elif step == "password" %}
|
|
<form method="post" action="/login/password" class="login-form">
|
|
<input type="hidden" name="email" value="{{ email }}">
|
|
<label class="login-label">{{ email }}</label>
|
|
<input
|
|
id="password"
|
|
class="login-input"
|
|
type="password"
|
|
name="password"
|
|
autocomplete="current-password"
|
|
autofocus
|
|
placeholder="Mot de passe"
|
|
required
|
|
>
|
|
<button class="login-btn" type="submit">Se connecter</button>
|
|
</form>
|
|
|
|
{% elif step == "sent" %}
|
|
<p class="login-hint">
|
|
Un email a été envoyé à <b>{{ email }}</b> avec un lien pour définir ton mot de passe.
|
|
Le lien est valable 24h.
|
|
</p>
|
|
|
|
{% elif step == "link" %}
|
|
<p class="login-hint">
|
|
Aucun serveur SMTP n'est configuré (optionnel) : le lien pour définir le mot de passe
|
|
de <b>{{ email }}</b> s'affiche ici au lieu d'être envoyé par email.
|
|
Il est valable 24h.
|
|
</p>
|
|
<p class="login-link"><a href="{{ link }}">{{ link }}</a></p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|