Less home code more F3

This commit is contained in:
julien
2026-03-29 21:01:07 +02:00
parent ed6321e8f3
commit d71cf304a9
6 changed files with 212 additions and 68 deletions

View File

@@ -24,8 +24,9 @@ abstract class BaseController
? $data['flash']
: $this->pullFlash();
// Jeton CSRF stable par session : plus simple et plus robuste que le
// pool précédent, tout en restant compatible multi-onglets.
// On s'appuie sur Session(..., 'CSRF') pour la génération F3 du
// jeton, mais on le persiste en session pour qu'il reste valide
// entre la requête GET qui rend le formulaire et le POST suivant.
$this->ensureCsrfToken();
$this->f3->mset($data + [
@@ -34,7 +35,7 @@ abstract class BaseController
'metaDescription' => null,
'adminMode' => false,
'currentUser' => $currentUser,
'FORM_CSRF' => (string) $this->f3->get('SESSION.csrf_token'),
'CSRF_TOKEN' => (string) $this->f3->get('SESSION.csrf_token'),
]);
echo Template::instance()->render('layout.html');
@@ -44,13 +45,15 @@ abstract class BaseController
// stocke dans le hive — accessible partout, y compris les templates.
protected function currentUser(): ?array
{
if (!$this->f3->exists('currentUser', $user)) {
if (!$this->f3->exists('ctx.current_user_loaded')) {
$userId = (int) ($this->f3->get('SESSION.user_id') ?? 0);
$user = $userId > 0 ? (new User())->findById($userId) : null;
$this->f3->set('currentUser', $user);
$this->f3->set('ctx.current_user_loaded', true);
}
return $user;
return $this->f3->get('currentUser');
}
protected function requireAuth(): void
@@ -94,7 +97,12 @@ abstract class BaseController
return;
}
$this->f3->set('SESSION.csrf_token', bin2hex(random_bytes(32)));
$seed = trim((string) ($this->f3->get('CSRF') ?? ''));
if ($seed === '') {
$seed = bin2hex(random_bytes(32));
}
$this->f3->set('SESSION.csrf_token', $seed);
}
private function pullFlash(): array