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.
31 lines
914 B
PHP
31 lines
914 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* Amorce PHPUnit sans Composer : on charge l'autoloader manuel du Core puis on
|
|
* l'enregistre, exactement comme le fait le front controller en production
|
|
* (src/public/admin/index.php). Les tests resolvent ainsi App\... via PSR-4.
|
|
*/
|
|
|
|
require __DIR__ . '/../src/app/Core/Autoloader.php';
|
|
|
|
App\Core\Autoloader::register();
|
|
|
|
// Autoloader PSR-4 dedie aux classes de support de test (doubles, helpers) :
|
|
// App\Tests\... -> tests/... . Permet de partager un FakeDatabase entre suites
|
|
// sans le dupliquer dans chaque fichier de test.
|
|
spl_autoload_register(static function (string $class): void {
|
|
$prefix = 'App\\Tests\\';
|
|
|
|
if (!str_starts_with($class, $prefix)) {
|
|
return;
|
|
}
|
|
|
|
$relative = substr($class, strlen($prefix));
|
|
$path = __DIR__ . '/' . str_replace('\\', '/', $relative) . '.php';
|
|
|
|
if (is_file($path)) {
|
|
require $path;
|
|
}
|
|
});
|