- /login professionnel, cookie HMAC 7 jours, next local seulement, CSRF double-submit réutilisé, /logout réel + lien Sortir. - Middleware : session OU Basic ; navigateurs redirigés vers /login, API en 401 JSON ; /static et /login publics.
37 lines
1.6 KiB
HTML
37 lines
1.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr" data-theme="dark">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="csrf-token" content="{{ csrf_token }}">
|
|
<title>Connexion — Kanbante</title>
|
|
<link rel="stylesheet" href="/static/css/style.css">
|
|
</head>
|
|
<body class="login-body">
|
|
<main class="login-wrap">
|
|
<section class="login-card">
|
|
<div class="login-brand">
|
|
<span class="login-mark" aria-hidden="true">📋</span>
|
|
<h1>Kanbante</h1>
|
|
<p class="login-sub">Pilotage de projets, adossé à votre Gitea</p>
|
|
</div>
|
|
{% if error %}
|
|
<p class="login-error" role="alert">⚠️ {{ error }}</p>
|
|
{% endif %}
|
|
<form method="post" action="/login" class="login-form">
|
|
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
|
<input type="hidden" name="next" value="{{ next }}">
|
|
<label>Nom d'utilisateur
|
|
<input type="text" name="username" autocomplete="username" required autofocus>
|
|
</label>
|
|
<label>Mot de passe
|
|
<input type="password" name="password" autocomplete="current-password" required>
|
|
</label>
|
|
<button type="submit" class="login-submit">Se connecter</button>
|
|
</form>
|
|
<p class="login-foot">Accès restreint — session de {{ 7 }} jours, déconnexion depuis le menu latéral.</p>
|
|
</section>
|
|
</main>
|
|
</body>
|
|
</html>
|