♻️  refactor(ReserverController): Déplace les routes de réservation à la racine.

♻️  refactor(RedirecListener): Corrige la redirection pour l'intranet.

♻️  refactor(HomeController): Met à jour les routes pour l'intranet.

♻️  refactor(KeycloakAuthenticator): Nettoie KeycloakAuthenticator.

♻️  refactor(security): Modifie les patterns de firewall pour l'intranet.

 feat(assets): Met à jour l'URL de web-vitals dans reserve.js.

 feat(pwa): Met à jour les URLs du catalogue et des formules dans pwa.yaml.
```
This commit is contained in:
Serreau Jovann
2026-01-28 13:41:31 +01:00
parent 8b50ad82c3
commit f54029cc2a
7 changed files with 47 additions and 47 deletions

View File

@@ -7,7 +7,7 @@ import { onLCP, onINP, onCLS } from 'web-vitals';
// --- CONFIGURATION & ÉTAT ---
const CONFIG = {
sentryDsn: "https://803814be6540031b1c37bf92ba9c0f79@sentry.esy-web.dev/24",
vitalsUrl: '/reservation/web-vitals'
vitalsUrl: '/web-vitals'
};
// --- UTILS ---

View File

@@ -47,14 +47,14 @@ pwa:
- name: "Nos structures"
short_name: "Nos structures"
description: "Nos structures"
url: "/reservation/catalogue"
url: "/catalogue"
icons:
- src: "%kernel.project_dir%/public/provider/images/favicon.png"
sizes: [ 96 ]
- name: "Nos structures"
short_name: "Nos Formules"
description: "Nos Formules"
url: "/reservation/formules"
url: "/formules"
icons:
- src: "%kernel.project_dir%/public/provider/images/favicon.png"
sizes: [ 96 ]

View File

@@ -18,21 +18,10 @@ security:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
# --- NOUVEAU FIREWALL DÉDIÉ CLIENTS ---
customer_reservation:
pattern: ^/reservation
provider: reserve_account_provider # Force l'entité Customer ici
custom_authenticator: App\Security\CustomerAuthenticator
user_checker: App\Security\UserChecker # Si vous voulez vérifier l'activation du compte
logout:
path: reservation_logout
target: reservation_login # Redirige vers le login client après déconnexion
remember_me:
secret: '%kernel.secret%'
lifetime: 604800
# --- FIREWALL PRINCIPAL (CRM / ADMIN) ---
main:
intranet:
pattern: ^/(intranet|crm|2fa)
lazy: true
provider: app_account_provider # Force l'entité Account (Admin) ici
user_checker: App\Security\UserChecker
@@ -54,6 +43,18 @@ security:
logout:
path: app_logout
target: app_home
# --- FIREWALL PRINCIPAL (CRM / ADMIN) ---
main:
pattern: ^/
provider: reserve_account_provider # Force l'entité Customer ici
custom_authenticator: App\Security\CustomerAuthenticator
user_checker: App\Security\UserChecker # Si vous voulez vérifier l'activation du compte
logout:
path: reservation_logout
target: reservation_login # Redirige vers le login client après déconnexion
remember_me:
secret: '%kernel.secret%'
lifetime: 604800
role_hierarchy:
ROLE_ROOT: [ROLE_ADMIN, ROLE_CLIENT_MAIN, ROLE_CUSTOMER]

View File

@@ -25,7 +25,7 @@ use Symfony\Contracts\HttpClient\HttpClientInterface;
class HomeController extends AbstractController
{
#[Route('/connect/keycloak', name: 'connect_keycloak_start')]
#[Route('/intranet/connect/keycloak', name: 'connect_keycloak_start')]
public function connect(ClientRegistry $clientRegistry)
{
// Redirects to Keycloak
@@ -34,12 +34,12 @@ class HomeController extends AbstractController
->redirect(['email', 'profile','openid'], []);
}
#[Route('/oauth/sso', name: 'connect_keycloak_check')]
#[Route('/intranet/oauth/sso', name: 'connect_keycloak_check')]
public function connectCheck(Request $request)
{
// This method stays empty; the authenticator will intercept it!
}
#[Route(path: '/', name: 'app_home', options: ['sitemap' => false], methods: ['GET','POST'])]
#[Route(path: '/intranet', name: 'app_home', options: ['sitemap' => false], methods: ['GET','POST'])]
public function index(AuthenticationUtils $authenticationUtils): Response
{
if($this->getUser()){
@@ -51,12 +51,12 @@ class HomeController extends AbstractController
]);
}
#[Route(path: '/logout', name: 'app_logout', options: ['sitemap' => false], methods: ['GET','POST'])]
#[Route(path: '/intranet/logout', name: 'app_logout', options: ['sitemap' => false], methods: ['GET','POST'])]
public function logout(): Response
{
}
#[Route(path: '/mot-de-passe-oublie', name: 'app_forgot_password', options: ['sitemap' => false], methods: ['GET','POST'])]
#[Route(path: '/intranet/mot-de-passe-oublie', name: 'app_forgot_password', options: ['sitemap' => false], methods: ['GET','POST'])]
public function forgotPassword(Request $request,EventDispatcherInterface $eventDispatcher): Response
{
$requestPasswordRequest = new ResetPasswordEvent();
@@ -71,14 +71,14 @@ class HomeController extends AbstractController
]);
}
#[Route(path: '/mot-de-passe-oublie/sent', name: 'app_forgot_password_sent', options: ['sitemap' => false], methods: ['GET','POST'])]
#[Route(path: '/intranet/mot-de-passe-oublie/sent', name: 'app_forgot_password_sent', options: ['sitemap' => false], methods: ['GET','POST'])]
public function forgotPasswordSent(Request $request,EventDispatcherInterface $eventDispatcher): Response
{
return $this->render('security/forgot_password_success.twig', [
]);
}
#[Route(path: '/mot-de-passe-oublie/{id}/{token}', name: 'app_forgot_password_confirm', options: ['sitemap' => false], methods: ['GET','POST'])]
#[Route(path: '/intranet/mot-de-passe-oublie/{id}/{token}', name: 'app_forgot_password_confirm', options: ['sitemap' => false], methods: ['GET','POST'])]
public function forgotPasswordConfirm(UserPasswordHasherInterface $userPasswordHasher,EventDispatcherInterface $eventDispatcher,Request $request,EntityManagerInterface $entityManager,string $id,string $token): Response
{
$errorMessage = "Requête non valide.";

View File

@@ -56,7 +56,7 @@ class ReserverController extends AbstractController
'Content-Type' => 'text/plain'
]);
}
#[Route('/reservation', name: 'reservation')]
#[Route('/', name: 'reservation')]
public function revervation(FormulesRepository $formulesRepository,ProductRepository $productRepository): Response
{
$products =$productRepository->findBy([], ['updatedAt' => 'DESC'],3);
@@ -66,7 +66,7 @@ class ReserverController extends AbstractController
'formules' => $formules,
]);
}
#[Route('/reservation/web-vitals', name: 'reservation_web-vitals', methods: ['POST'])]
#[Route('/web-vitals', name: 'reservation_web-vitals', methods: ['POST'])]
public function webVitals(Request $request, EntityManagerInterface $em): Response
{
$data = json_decode($request->getContent(), true);
@@ -96,7 +96,7 @@ class ReserverController extends AbstractController
return new Response('', Response::HTTP_NO_CONTENT);
}
#[Route('/reservation/umami', name: 'reservation_umami', methods: ['POST'])]
#[Route('/umami', name: 'reservation_umami', methods: ['POST'])]
public function umami(
Request $request,
CustomerTrackingRepository $customerTrackingRepository,
@@ -136,7 +136,7 @@ class ReserverController extends AbstractController
return new JsonResponse(['status' => 'success']);
}
#[Route('/reservation/catalogue', name: 'reservation_catalogue')]
#[Route('/catalogue', name: 'reservation_catalogue')]
public function revervationCatalogue(ProductRepository $productRepository): Response
{
@@ -144,7 +144,7 @@ class ReserverController extends AbstractController
'products' => $productRepository->findAll(),
]);
}
#[Route('/reservation/formules', name: 'reservation_formules')]
#[Route('/formules', name: 'reservation_formules')]
public function revervationFormules(FormulesRepository $formulesRepository): Response
{
@@ -152,7 +152,7 @@ class ReserverController extends AbstractController
'formules' => $formulesRepository->findBy(['isPublish'=>true],['updatedAt' => 'DESC']),
]);
}
#[Route('/reservation/formules/{slug}', name: 'reservation_formule_show')]
#[Route('/formules/{slug}', name: 'reservation_formule_show')]
public function revervationView(string $slug,FormulesRepository $formulesRepository): Response
{
$parts = explode('-', $slug);
@@ -169,7 +169,7 @@ class ReserverController extends AbstractController
'formule' => $formule
]);
}
#[Route('/reservation/comment-reserver', name: 'reservation_workflow')]
#[Route('/comment-reserver', name: 'reservation_workflow')]
public function revervationWorkfkow(): Response
{
@@ -178,13 +178,13 @@ class ReserverController extends AbstractController
]);
}
#[Route('/reservation/options/{id}', name: 'reservation_options_show')]
#[Route('/options/{id}', name: 'reservation_options_show')]
public function revervationShowOpitons(string $id, ProductRepository $productRepository): Response
{
}
#[Route('/reservation/produit/{id}', name: 'reservation_product_show')]
#[Route('/produit/{id}', name: 'reservation_product_show')]
public function revervationShowProduct(string $id, ProductRepository $productRepository): Response
{
// 1. Extraction de l'ID (ex: "15-chateau-fort" -> 15)
@@ -210,7 +210,7 @@ class ReserverController extends AbstractController
'otherProducts' => array_slice($otherProducts, 0, 4)
]);
}
#[Route('/reservation/connexion', name: 'reservation_login')]
#[Route('/connexion', name: 'reservation_login')]
public function revervationLogin(AuthenticationUtils $authenticationUtils): Response
{
return $this->render('revervation/login.twig',[
@@ -219,12 +219,12 @@ class ReserverController extends AbstractController
]);
}
#[Route('/reservation/logout', name: 'reservation_logout')]
#[Route('/logout', name: 'reservation_logout')]
public function revervationLogout(): Response
{
return $this->redirectToRoute('reservation');
}
#[Route('/reservation/creation-compte', name: 'reservation_register')]
#[Route('/creation-compte', name: 'reservation_register')]
public function revervationRegister(
Request $request,
Mailer $mailer,
@@ -265,7 +265,7 @@ class ReserverController extends AbstractController
return $this->render('revervation/register.twig');
}
#[Route('/reservation/mot-de-passe', name: 'reservation_password')]
#[Route('/mot-de-passe', name: 'reservation_password')]
public function forgotPassword(
Request $request,
CustomerRepository $repository,
@@ -341,7 +341,7 @@ class ReserverController extends AbstractController
'email' => $session->get('reset_password')['email'] ?? null
]);
}
#[Route('/reservation/contact', name: 'reservation_contact')]
#[Route('/contact', name: 'reservation_contact')]
public function revervationContact(Request $request, Mailer $mailer): Response
{
$form = $this->createFormBuilder()
@@ -390,7 +390,7 @@ class ReserverController extends AbstractController
'form' => $formObject->createView()
]);
}
#[Route('/reservation/recherche', name: 'reservation_search')]
#[Route('/recherche', name: 'reservation_search')]
public function recherche(UploaderHelper $uploaderHelper,Client $client,Request $request,ProductRepository $productRepository): Response
{
$results = $client->search('product',$request->query->get('q',''));
@@ -415,27 +415,27 @@ class ReserverController extends AbstractController
]);
}
#[Route('/reservation/mentions-legales', name: 'reservation_mentions-legal')]
#[Route('/mentions-legales', name: 'reservation_mentions-legal')]
public function revervationLegal()
{
return $this->render('revervation/legal.twig');
}
#[Route('/reservation/rgpd', name: 'reservation_rgpd')]
#[Route('/rgpd', name: 'reservation_rgpd')]
public function revervationRgpd()
{
return $this->render('revervation/rgpd.twig');
}
#[Route('/reservation/cookies', name: 'reservation_cookies')]
#[Route('/cookies', name: 'reservation_cookies')]
public function revervationCookies()
{
return $this->render('revervation/cookies.twig');
}
#[Route('/reservation/cgv', name: 'reservation_cgv')]
#[Route('/cgv', name: 'reservation_cgv')]
public function revervationCgv()
{
return $this->render('revervation/cgv.twig');
}
#[Route('/reservation/hosting', name: 'reservation_hosting')]
#[Route('/hosting', name: 'reservation_hosting')]
public function revervationHosting()
{
return $this->render('revervation/hosting.twig');

View File

@@ -34,7 +34,6 @@ class KeycloakAuthenticator extends OAuth2Authenticator implements Authenticatio
public function supports(Request $request): ?bool
{
// match the route name from the controller
return $request->attributes->get('_route') === 'connect_keycloak_check';
}

View File

@@ -23,8 +23,8 @@ class RedirecListener
{
$request = $event->getRequest();
if($request->getPathInfo() == "/") {
if($request->getHost() =="reservation.ludikevent.fr"){
$redirect = new RedirectResponse("https://reservation.ludikevent.fr/reservation");
if($request->getHost() =="intranet.ludikevent.fr"){
$redirect = new RedirectResponse("https://intranet.ludikevent.fr/intranet");
$event->setResponse($redirect);
$event->stopPropagation();
}