src/Controller/HomeController.php line 114

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Meeting;
  4. use App\Repository\UserRepository;
  5. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Component\Routing\Generator\UrlGenerator;
  12. class HomeController extends AbstractController
  13. {
  14.     /**
  15.      * @return RedirectResponse
  16.      */
  17.     #[Route(path'/patient/listing'name'patient_list_redirection')]
  18.     public function patientListRedirection(): RedirectResponse
  19.     {
  20.         return $this->redirectToRoute('react_app');
  21.     }
  22.     /**
  23.      * @return RedirectResponse|Response
  24.      */
  25.     #[Route(path'/'name'homepage')]
  26.     public function home(): RedirectResponse|Response
  27.     {
  28.         if ($this->isGranted('ROLE_DOCTOR')) {
  29.             return $this->redirectToRoute('react_app');
  30.         }
  31.         if ($this->isGranted('ROLE_ESTABLISHMENT_ADMIN') || $this->isGranted('ROLE_SUPER_ADMIN')) {
  32.             return $this->redirectToRoute('admin_user');
  33.         }
  34.         return $this->render('patient/home.html.twig');
  35.     }
  36.     /**
  37.      * @return RedirectResponse
  38.      */
  39.     #[Route(path'/logout'name'app_logout')]
  40.     public function logout(): RedirectResponse
  41.     {
  42.         session_unset();
  43.         $route $_SERVER['OIDC_BASE_URI'] . 'auth/realms/' $_SERVER['OIDC_REALM'] . '/protocol/openid-connect/logout?redirect_uri=' $this->generateUrl('homepage', [
  44.                 '_locale' => 'fr'
  45.             ], UrlGenerator::ABSOLUTE_URL);
  46.         return $this->redirect($routeResponse::HTTP_TEMPORARY_REDIRECT);
  47.     }
  48.     /**
  49.      * Point d’entrée application React
  50.      * @return Response
  51.      */
  52.     #[Route(path'/app'name'react_app')]
  53.     public function webApp(): Response
  54.     {
  55.         return $this->render('webapp.html.twig');
  56.     }
  57.     /**
  58.      * Point d’entrée Cgu
  59.      * @return Response
  60.      */
  61.     #[Route(path'/cguEnsweet'name'cgu_ensweet')]
  62.     public function cgu(): Response
  63.     {
  64.         return $this->render('cgu.html.twig');
  65.     }
  66.     /**
  67.      * Point d’entrée Ifu
  68.      * @return Response
  69.      */
  70.     #[Route(path'/ifuEnsweet'name'ifu_ensweet')]
  71.     public function ifu(): Response
  72.     {
  73.         return $this->render('ifu.html.twig');
  74.     }
  75.     /**
  76.      * Point d’entrée onBoarding
  77.      * @return Response
  78.      */
  79.     #[Route(path'/onBoardingEnsweet'name'onBoarding_ensweet')]
  80.     public function onBoarding(): Response
  81.     {
  82.         return $this->render('onBoarding.html.twig');
  83.     }
  84.     /**
  85.      * Point d’entrée onBoarding
  86.      * @return Response
  87.      */
  88.     #[Route(path'/welcomeBookletEnsweet'name'welcomeBooklet_ensweet')]
  89.     public function welcomeBooklet(): Response
  90.     {
  91.         return $this->render('welcomeBooklet.html.twig');
  92.     }
  93.     /**
  94.      * Point de test pour les sondes kubernetes & pictime
  95.      * @return JsonResponse
  96.      */
  97.     #[Route(path'/_health'name'health_check')]
  98.     public function health(): JsonResponse
  99.     {
  100.         return $this->json([
  101.             'result' => 'OK'
  102.         ]);
  103.     }
  104.     /**
  105.      * ⚠️ Route sans authentification (hors token)
  106.      * @param UserRepository $userRepository
  107.      * @param Meeting $meeting
  108.      * @param string $token
  109.      * @return Response
  110.      */
  111.     #[ParamConverter('id', class: Meeting::class)]
  112.     #[Route(path'/conference/{id}/{token}'name'join_conference')]
  113.     public function conference(UserRepository $userRepositoryMeeting $meetingstring $token): Response
  114.     {
  115.         $meta $meeting->getMetadata();
  116.         $isDoctor false;
  117.         $isGuest in_array($token$meta['tokens']['guest']);
  118.         $isPresenter in_array($token$meta['tokens']['presenter']);
  119.         $isExternal = isset($meta['tokens']['external']) && in_array($token$meta['tokens']['external']);
  120.         if (!$isGuest && !$isPresenter && !$isExternal) {
  121.             return $this->json([
  122.                 'error' => 'Token not accepted'
  123.             ], Response::HTTP_FORBIDDEN);
  124.         }
  125.         if (!$isExternal && ($uuid $isGuest array_search($token$meta['tokens']['guest']) : array_search($token$meta['tokens']['presenter']))) {
  126.             $user $userRepository->findOneBy([
  127.                 'uniqKey' => $uuid
  128.             ]);
  129.             if (!$user) {
  130.                 return $this->json(['error' => 'User not found'], Response::HTTP_NOT_FOUND);
  131.             }
  132.             $userName $user->getFirstname() . ' ' $user->getLastname();
  133.             $isDoctor in_array('ROLE_DOCTOR'$user->getRoles());
  134.         } else {
  135.             $userName array_search($token$meta['tokens']['external']);
  136.         }
  137.         $data = [
  138.             'token' => $token,
  139.             'meetingUrl' => $meeting->getMetadata()['room']['url'],
  140.             'userName' => $userName,
  141.             'isDoctor' => $isDoctor
  142.         ];
  143.         if ($meeting->getBoardId() != null) {
  144.             $data['whiteBoardUrl'] = $isDoctor 'https://miro.com/app/board/' $meeting->getBoardId() . '/' 'https://miro.com/app/board/' $meeting->getBoardId() . '/?embedMode=view_only_without_ui';
  145.         } else {
  146.             $data['whiteBoardUrl'] = null;
  147.         }
  148.         $data['etpBoards'] = null;
  149.         if($meeting->getEtpBoardIds()) {
  150.             $data['etpBoards'] = array_map(function($board) {
  151.                 return [
  152.                     'url' => 'https://miro.com/app/board/' $board['id'] . '/',
  153.                     'name' => $board['name']
  154.                 ];
  155.             }, $meeting->getEtpBoardIds());
  156.         }
  157.         return $this->render('conference.html.twig'$data);
  158.     }
  159. }