projet par cursor
This commit is contained in:
1 parent
236f75ecdd
commit
b785db1b84
47 files changed
+3902
No files matched your search
+135
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
final class Auth
|
||||
{
|
||||
private const CLE_UTILISATEUR = "utilisateur_id";
|
||||
|
||||
public function __construct(
|
||||
private readonly UtilisateurService $utilisateurService
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
public function demarrerSession(): void
|
||||
{
|
||||
if (session_status() === PHP_SESSION_ACTIVE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$duree = Config::get("sessionLifetime", 86400);
|
||||
|
||||
session_set_cookie_params([
|
||||
"lifetime" => $duree,
|
||||
"path" => "/",
|
||||
"httponly" => true,
|
||||
"samesite" => "Lax",
|
||||
"secure" => false
|
||||
]);
|
||||
|
||||
session_start();
|
||||
}
|
||||
|
||||
public function connecter(array $utilisateur): void
|
||||
{
|
||||
session_regenerate_id(true);
|
||||
$_SESSION[self::CLE_UTILISATEUR] = $utilisateur["id"];
|
||||
}
|
||||
|
||||
public function deconnecter(): void
|
||||
{
|
||||
$_SESSION = [];
|
||||
|
||||
if (ini_get("session.use_cookies"))
|
||||
{
|
||||
$params = session_get_cookie_params();
|
||||
setcookie(
|
||||
session_name(),
|
||||
"",
|
||||
time() - 42000,
|
||||
$params["path"],
|
||||
$params["domain"] ?? "",
|
||||
(bool) $params["secure"],
|
||||
(bool) $params["httponly"]
|
||||
);
|
||||
}
|
||||
|
||||
session_destroy();
|
||||
}
|
||||
|
||||
public function estConnecte(): bool
|
||||
{
|
||||
return $this->utilisateurCourant() !== null;
|
||||
}
|
||||
|
||||
public function utilisateurCourant(): ?array
|
||||
{
|
||||
$id = $_SESSION[self::CLE_UTILISATEUR] ?? null;
|
||||
|
||||
if (!is_string($id) || $id === "")
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
$utilisateur = $this->utilisateurService->trouverParId($id);
|
||||
|
||||
if ($utilisateur === null || !($utilisateur["actif"] ?? false))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return $utilisateur;
|
||||
}
|
||||
|
||||
public function exigerConnexion(): array
|
||||
{
|
||||
$utilisateur = $this->utilisateurCourant();
|
||||
|
||||
if ($utilisateur === null)
|
||||
{
|
||||
Flash::definir("warning", "Veuillez vous connecter pour continuer.");
|
||||
Helpers::rediriger("/connexion");
|
||||
}
|
||||
|
||||
return $utilisateur;
|
||||
}
|
||||
|
||||
public function exigerAdmin(): array
|
||||
{
|
||||
$utilisateur = $this->exigerConnexion();
|
||||
|
||||
if (($utilisateur["role"] ?? "") !== "admin")
|
||||
{
|
||||
Flash::definir("danger", "Accès réservé aux administrateurs.");
|
||||
Helpers::rediriger("/");
|
||||
}
|
||||
|
||||
return $utilisateur;
|
||||
}
|
||||
|
||||
public function tenterConnexion(string $identifiant, string $motDePasse): bool
|
||||
{
|
||||
$utilisateur = $this->utilisateurService->trouverParIdentifiant($identifiant);
|
||||
|
||||
if ($utilisateur === null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!($utilisateur["actif"] ?? false))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!password_verify($motDePasse, $utilisateur["motDePasseHash"]))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->connecter($utilisateur);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||