- Inscription sans redirection HelloAsso (acte volontaire séparé) - Génération automatique d'identifiant AlpID (prenom.code mnémotechnique) - Profil en tuiles : identité, compte, mot de passe, OTP, adhésion, adresse, connexions - Double authentification : activation/suppression OTP via Keycloak - Page d'accueil contextuelle (bienvenue si connecté, CTA adhésion si non adhérent) - Historique des connexions avec statistiques et graphiques Chart.js - Géocodage Nominatim + lien OpenStreetMap pour l'adresse - HelloAsso : checkout intent, validation paiement, mise à jour Dolibarr Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
66 lines
1.9 KiB
PHP
66 lines
1.9 KiB
PHP
<?php
|
|
require_once __DIR__ . '/inc/config.php';
|
|
require_once __DIR__ . '/inc/auth.php';
|
|
require_once __DIR__ . '/inc/keycloak.php';
|
|
|
|
session_start_safe();
|
|
require_login();
|
|
|
|
$user = current_user();
|
|
$errors = [];
|
|
$success = false;
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$pw = $_POST['password'] ?? '';
|
|
$pw2 = $_POST['password2'] ?? '';
|
|
|
|
if (!$pw) {
|
|
$errors[] = 'Le mot de passe ne peut pas être vide.';
|
|
} elseif ($pw !== $pw2) {
|
|
$errors[] = 'Les mots de passe ne correspondent pas.';
|
|
} elseif (strlen($pw) < 8) {
|
|
$errors[] = 'Le mot de passe doit contenir au moins 8 caractères.';
|
|
}
|
|
|
|
if (!$errors) {
|
|
try {
|
|
kc_set_password($user['sub'], $pw);
|
|
$success = true;
|
|
} catch (Exception $e) {
|
|
$errors[] = 'Erreur : ' . $e->getMessage();
|
|
}
|
|
}
|
|
}
|
|
|
|
$title = 'Changer mon mot de passe';
|
|
require __DIR__ . '/views/layout.php';
|
|
?>
|
|
|
|
<div class="card">
|
|
<h1>Changer mon mot de passe</h1>
|
|
|
|
<?php if ($success): ?>
|
|
<div class="alert alert-success">Mot de passe modifié avec succès.</div>
|
|
<?php endif; ?>
|
|
|
|
<?php if ($errors): ?>
|
|
<div class="alert alert-error">
|
|
<ul><?php foreach ($errors as $e): ?><li><?= htmlspecialchars($e) ?></li><?php endforeach; ?></ul>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<form method="post" novalidate>
|
|
<div class="form-group">
|
|
<label for="password">Nouveau mot de passe</label>
|
|
<input type="password" id="password" name="password" required minlength="8" autocomplete="new-password">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="password2">Confirmer le nouveau mot de passe</label>
|
|
<input type="password" id="password2" name="password2" required autocomplete="new-password">
|
|
</div>
|
|
<button type="submit" class="btn-primary">Enregistrer</button>
|
|
<a href="/dashboard.php" class="btn-outline">Annuler</a>
|
|
</form>
|
|
</div>
|
|
|
|
<?php require __DIR__ . '/views/layout_end.php'; ?>
|