Implemente mlt.md section 12 : AUTHENTICATE_USER (12.1), LOGOUT_USER (12.2), RESET_PASSWORD (12.3). Sessions PHP + argon2id, regeneration d'ID a la connexion, idle 4h / absolu 10h via SessionGuard (cable en P3), jeton CSRF synchroniseur, backoff degressif anti brute-force par compte et par IP source (login_throttle), audit_log append-only (login_success/failed, password_reset), defenses anti-enumeration d'email (timing + profil d'ecritures identique), fail-closed sur erreur base. Vues login/forgot/reset rendues serveur. Routes posees sur le vhost admin (pas de prefixe /admin : docroot = public/admin). PHPUnit sans Composer (unit + integration DB auto-skippee sans base) et PHPStan L6 restent verts.
22 lines
548 B
PHP
22 lines
548 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Tests\Support;
|
|
|
|
use App\Auth\Mailer;
|
|
|
|
/**
|
|
* Double de Mailer : capture les appels au lieu d'envoyer. Permet d'asserter
|
|
* qu'un lien de reinitialisation a (ou n'a pas) ete emis et d'en inspecter l'URL.
|
|
*/
|
|
final class SpyMailer implements Mailer
|
|
{
|
|
/** @var list<array{email: string, resetUrl: string}> */
|
|
public array $sent = [];
|
|
|
|
public function sendPasswordReset(string $email, string $resetUrl): void
|
|
{
|
|
$this->sent[] = ['email' => $email, 'resetUrl' => $resetUrl];
|
|
}
|
|
}
|