<?php
namespace App\Services;
use Symfony\Component\HttpFoundation\RequestStack;
use Firebase\JWT\JWT;
class TokenService
{
private const SESSION_AYILAA_TOKEN = 'ayilaa_token';
private RequestStack $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack =$requestStack;
}
public function isTokenValid(): bool
{
$session = $this->requestStack->getSession();
$token = $session->get(self::SESSION_AYILAA_TOKEN);
// Vérifie si le token existe
if (!$token) {
return false;
}
// Vérifie si le token est valide (par exemple, s'il n'a pas expiré)
if (!$this->isValidToken($token)) {
return false;
}
return true;
}
//recupération du token dans lma session
public function getToken(){
$session = $this->requestStack->getSession();
return $session->get(self::SESSION_AYILAA_TOKEN);
}
public function setToken($token): void
{
$session = $this->requestStack->getSession();
$session->set(self::SESSION_AYILAA_TOKEN, $token);
}
//recuperer l'utilisateur de la session
public function getUser(){
$session = $this->requestStack->getSession();
$user = $session->get('user');
return $user;
}
//supprimer l'utilisateur et le token de la session
public function empty(){
$this->requestStack->getSession()->set('user',null);
$this->requestStack->getSession()->set(self::SESSION_AYILAA_TOKEN,null);
}
private function isValidToken($token): bool
{
try {
$tokenParts = explode(".", $token);
$tokenHeader = base64_decode($tokenParts[0]);
$tokenPayload = base64_decode($tokenParts[1]);
$jwtHeader = json_decode($tokenHeader);
$jwtPayload = json_decode($tokenPayload);
// print $jwtPayload->username;
$jwt = $jwtPayload;
} catch (\Exception $e) {
return false;
}
// Vérifie si le token a expiré
if (isset($jwt->exp) && time() > $jwt->exp) {
return false;
}
// Votre logique de validation du token ici
return true;
}
public function generateKeycode(): string
{
$dt = new \DateTime();
$day = (int)$dt->format('d');
$month = (int)$dt->format('m');
$year = (int)$dt->format('Y');
return "1411116" . ($day * $month * $year);
}
}