5633969d98
Carte Leaflet (annuaire Éducation nationale) + API PHP/MySQL : fiche établissement (effectifs, IPS, population INSEE, DPE ADEME), GED documents/photos, commentaires par groupe, gestion utilisateurs et politique de mots de passe. Imports opendata (effectifs, IPS, population, DPE, IRIS). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
65 lines
2.5 KiB
HTML
65 lines
2.5 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Réinitialiser le mot de passe</title>
|
|
<link rel="stylesheet" href="style.css"/>
|
|
</head>
|
|
<body>
|
|
<div class="auth-wrap">
|
|
<div class="auth-card">
|
|
<h1>Nouveau mot de passe</h1>
|
|
<form id="reset-form" autocomplete="off">
|
|
<div class="field">
|
|
<label for="pw">Nouveau mot de passe</label>
|
|
<input id="pw" type="password" required>
|
|
<div id="pw-meter" class="pw-meter"></div>
|
|
</div>
|
|
<div class="field">
|
|
<label for="pw2">Confirmer</label>
|
|
<input id="pw2" type="password" required>
|
|
</div>
|
|
<button type="submit" class="btn-primary">Valider</button>
|
|
<p id="msg" class="propose-msg"></p>
|
|
</form>
|
|
<p class="auth-foot"><a href="admin.html">← Retour à la connexion</a></p>
|
|
</div>
|
|
</div>
|
|
<script src="pwpolicy.js"></script>
|
|
<script>
|
|
const $ = (id) => document.getElementById(id);
|
|
const token = new URLSearchParams(location.search).get('token') || '';
|
|
PWPolicy.attach($('pw'), $('pw-meter'));
|
|
|
|
if (!token) {
|
|
$('reset-form').hidden = true;
|
|
$('msg').className = 'propose-msg err';
|
|
$('msg').textContent = 'Lien invalide : jeton manquant.';
|
|
}
|
|
|
|
$('reset-form').addEventListener('submit', async (ev) => {
|
|
ev.preventDefault();
|
|
const pw = $('pw').value, pw2 = $('pw2').value;
|
|
const r = PWPolicy.check(pw);
|
|
if (!r.ok) { showErr('Mot de passe trop faible : ' + r.unmet.join(' ; ') + '.'); return; }
|
|
if (pw !== pw2) { showErr('Les deux mots de passe ne correspondent pas.'); return; }
|
|
try {
|
|
const res = await fetch('api/auth.php?action=reset', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ token, new: pw }),
|
|
});
|
|
const data = await res.json().catch(() => ({}));
|
|
if (!res.ok) { showErr(data.error || ('HTTP ' + res.status)); return; }
|
|
$('reset-form').hidden = true;
|
|
$('msg').className = 'propose-msg ok';
|
|
$('msg').innerHTML = '✅ Mot de passe mis à jour. <a href="admin.html">Se connecter</a>.';
|
|
} catch (err) { showErr('Erreur : ' + err.message); }
|
|
});
|
|
|
|
function showErr(t) { $('msg').className = 'propose-msg err'; $('msg').textContent = t; }
|
|
</script>
|
|
</body>
|
|
</html>
|