From 4276d6ecc43b70ebbed237d169aade8278508651 Mon Sep 17 00:00:00 2001 From: Dimitri Date: Mon, 10 Feb 2025 17:37:59 +0100 Subject: [PATCH] [Event] inject magic link for live alert (#11453) --- .../Renaissance/LiveStreamController.php | 10 +++++---- src/JeMengage/Alert/Alert.php | 4 ++-- .../Alert/Provider/LiveAlertProvider.php | 22 ++++++++++++++++--- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/Controller/Renaissance/LiveStreamController.php b/src/Controller/Renaissance/LiveStreamController.php index c6699522dc..c3a2dcd6a7 100644 --- a/src/Controller/Renaissance/LiveStreamController.php +++ b/src/Controller/Renaissance/LiveStreamController.php @@ -34,11 +34,13 @@ public function liveStreamAction(LiveStream $liveStream, UserInterface $user): R #[Route('/live-event/{slug}', name: 'app_live_event', methods: ['GET'])] public function liveEventAction(Request $request, OAuthAuthenticator $authAuthenticator, Event $event): Response { - $newRequest = $request->duplicate([]); - $newRequest->headers->set('Authorization', 'Bearer '.$request->query->get('token')); + if (!($user = $this->getUser()) instanceof Adherent) { + $newRequest = $request->duplicate([]); + $newRequest->headers->set('Authorization', 'Bearer '.$request->query->get('token')); - /** @var Adherent $user */ - $user = $authAuthenticator->authenticate($newRequest)->getUser(); + /** @var Adherent $user */ + $user = $authAuthenticator->authenticate($newRequest)->getUser(); + } if (!$user->isRenaissanceAdherent()) { $this->addFlash('info', 'Vous devez être adhérent pour accéder à cet événement.'); diff --git a/src/JeMengage/Alert/Alert.php b/src/JeMengage/Alert/Alert.php index ed9d0ed5cf..fdf467c5c4 100644 --- a/src/JeMengage/Alert/Alert.php +++ b/src/JeMengage/Alert/Alert.php @@ -36,7 +36,7 @@ public static function createElection( ); } - public static function createLive(Event $event): self + public static function createLive(Event $event, string $url): self { $now = new \DateTimeImmutable(); @@ -46,7 +46,7 @@ public static function createLive(Event $event): self $event->getName(), '', 'Voir', - '/evenements/'.$event->getSlug(), + $url, ); } } diff --git a/src/JeMengage/Alert/Provider/LiveAlertProvider.php b/src/JeMengage/Alert/Provider/LiveAlertProvider.php index 99d9763a84..c5c9c146bb 100644 --- a/src/JeMengage/Alert/Provider/LiveAlertProvider.php +++ b/src/JeMengage/Alert/Provider/LiveAlertProvider.php @@ -5,11 +5,16 @@ use App\Entity\Adherent; use App\JeMengage\Alert\Alert; use App\Repository\Event\EventRepository; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Symfony\Component\Security\Http\LoginLink\LoginLinkHandlerInterface; class LiveAlertProvider implements AlertProviderInterface { - public function __construct(private readonly EventRepository $eventRepository) - { + public function __construct( + private readonly EventRepository $eventRepository, + private readonly LoginLinkHandlerInterface $loginLinkHandler, + private readonly UrlGeneratorInterface $urlGenerator, + ) { } public function getAlerts(Adherent $adherent): array @@ -19,9 +24,20 @@ public function getAlerts(Adherent $adherent): array } $alerts = []; + $now = new \DateTimeImmutable(); foreach ($events as $event) { - $alerts[] = Alert::createLive($event); + $url = '/evenements/'.$event->getSlug(); + + if ($adherent->getAuthAppVersion() < 5140101 && $event->getBeginAt() < $now) { + $url = $this->loginLinkHandler->createLoginLink( + $adherent, + lifetime: 3600, + targetPath: parse_url($this->urlGenerator->generate('app_live_event', ['slug' => $event->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL), \PHP_URL_PATH), + )->getUrl(); + } + + $alerts[] = Alert::createLive($event, $url); } return $alerts;