From 5bca66a86b74de82b662b8c3dd1479931c5fcf53 Mon Sep 17 00:00:00 2001 From: Angels-dev Date: Sat, 24 Aug 2024 02:28:44 +0200 Subject: [PATCH] Fix getBotsData + Routes dans les controllers --- config/routes.yaml | 24 +++------------------- src/Controller/AuthController.php | 34 +++++++++++++++++++++++++------ src/Controller/BotController.php | 11 +++++----- src/Controller/RootController.php | 5 ++--- src/Controller/UserController.php | 9 +++----- src/Service/DiscordApiService.php | 17 +++++++++------- 6 files changed, 51 insertions(+), 49 deletions(-) diff --git a/config/routes.yaml b/config/routes.yaml index bb5a17a..4d2b0a2 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -4,24 +4,6 @@ controllers: namespace: App\Controller type: attribute -slash: - path: / - controller: App\Controller\RootController::redirectToFrontend - -discord_auth_redirect: - path: /discord/auth/redirect - controller: App\Controller\AuthController::redirectToDiscord -discord_auth_callback: - path: /discord/auth/callback - controller: App\Controller\AuthController::handleDiscordCallback - -discord_user: - path: /discord/user - controller: App\Controller\UserController::getUserDetails -discord_user_guilds: - path: /discord/user/guilds - controller: App\Controller\UserController::getUserGuilds - -discord_bots: - path: /discord/bots - controller: App\Controller\BotController::getBotsDetails \ No newline at end of file +kernel: + resource: App\Kernel + type: attribute \ No newline at end of file diff --git a/src/Controller/AuthController.php b/src/Controller/AuthController.php index 2bab83d..8c8c363 100644 --- a/src/Controller/AuthController.php +++ b/src/Controller/AuthController.php @@ -12,6 +12,8 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Session\SessionInterface; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Symfony\Component\Routing\Attribute\Route; class AuthController extends AbstractController { @@ -22,9 +24,7 @@ class AuthController extends AbstractController $this->discordApiService = $discordApiService; } - /** - * @Route("/discord/auth/redirect", name="discord_auth_redirect") - */ + #[Route('/discord/auth/redirect', name: 'discord_auth_redirect')] public function redirectToDiscord(): RedirectResponse { $clientId = $_ENV['DISCORD_CLIENT_ID']; @@ -36,9 +36,7 @@ class AuthController extends AbstractController return $this->redirect($discordAuthUrl); } - /** - * @Route("/discord/auth/callback", name="discord_auth_callback") - */ + #[Route('/discord/auth/callback', name: 'discord_auth_callback')] public function handleDiscordCallback(Request $request, EntityManagerInterface $entityManager, SessionInterface $session): Response { $code = $request->query->get('code'); @@ -83,4 +81,28 @@ class AuthController extends AbstractController // Redirection vers le frontend return $this->redirect($_ENV['DISCORD_FRONTEND_REDIRECT_URI']); } + + #[Route('/discord/auth/logout', name: 'discord_auth_logout')] + public function userLogout(EntityManagerInterface $entityManager, SessionInterface $session): Response + { + // Vérifier si une session est en cours + if (!$session->has('user_id')) throw $this->createNotFoundException('Non authentifié'); + + $user = $entityManager->getRepository(User::class)->find($session->get('user_id')); + if (!$user) throw $this->createNotFoundException('Utilisateur non trouvé'); + + // Supprimer le token d'accès et de refresh de l'utilisateur + $user->setAccessToken(''); + $user->setRefreshToken(''); + $user->setTokenExpiresAt(new DateTime()); + + $entityManager->persist($user); + $entityManager->flush(); + + // Supprimer la session de l'utilisateur + $session->remove('user_id'); + + // Réponse HTTP 204 No Content + return new Response('User disconnected.', Response::HTTP_NO_CONTENT); + } } \ No newline at end of file diff --git a/src/Controller/BotController.php b/src/Controller/BotController.php index 58e3969..6a44e1d 100644 --- a/src/Controller/BotController.php +++ b/src/Controller/BotController.php @@ -13,6 +13,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Session\SessionInterface; +use Symfony\Component\Routing\Attribute\Route; class BotController extends AbstractController { @@ -45,19 +46,17 @@ class BotController extends AbstractController return $user; } - /** - * @Route("/discord/bots", name="discord_bots") - */ + #[Route('/discord/bots', name: 'discord_bots')] public function getBotsDetails(SessionInterface $session, EntityManagerInterface $entityManager): Response { try { $user = $this->getUserToken($session, $entityManager); } catch (DiscordApiException $e) { return new JsonResponse(['error' => $e->getMessage()], $e->getStatusCode());} - // Obtenir les informations utilisateur supplémentaires depuis Discord - try { $discordBots = $this->discordApiService->getBotsData($user->getAccessToken()); } + // Obtenir les informations des bots depuis Discord + try { $discordBots = $this->discordApiService->getBotsData(); } catch (DiscordApiException $e) { return new JsonResponse(['error' => $e->getMessage()], $e->getStatusCode());} // Renvoyer les détails de l'utilisateur en JSON - return new JsonResponse($discordUser); + return new JsonResponse($discordBots); } } diff --git a/src/Controller/RootController.php b/src/Controller/RootController.php index 25a25f2..9fbca33 100644 --- a/src/Controller/RootController.php +++ b/src/Controller/RootController.php @@ -4,12 +4,11 @@ namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\RedirectResponse; +use Symfony\Component\Routing\Attribute\Route; class RootController extends AbstractController { - /** - * @Route("/", name="slash") - */ + #[Route('/', name: 'slash')] public function redirectToFrontend(): RedirectResponse { return $this->redirect($_ENV['FRONTEND_REDIRECT_URI']); diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index 30e0afe..6380bc5 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -13,6 +13,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Session\SessionInterface; +use Symfony\Component\Routing\Attribute\Route; class UserController extends AbstractController { @@ -45,9 +46,7 @@ class UserController extends AbstractController return $user; } - /** - * @Route("/discord/user", name="discord_user") - */ + #[Route('/discord/user', name: 'discord_user')] public function getUserDetails(SessionInterface $session, EntityManagerInterface $entityManager): Response { try { $user = $this->getUserToken($session, $entityManager); } @@ -68,9 +67,7 @@ class UserController extends AbstractController return new JsonResponse($discordUser); } - /** - * @Route("/discord/user/guilds", name="discord_user_guilds") - */ + #[Route('/discord/user/guilds', name: 'discord_user_guilds')] public function getUserGuilds(SessionInterface $session, EntityManagerInterface $entityManager): Response { try { $user = $this->getUserToken($session, $entityManager); } diff --git a/src/Service/DiscordApiService.php b/src/Service/DiscordApiService.php index ad76461..5f9cbdb 100644 --- a/src/Service/DiscordApiService.php +++ b/src/Service/DiscordApiService.php @@ -14,6 +14,7 @@ class DiscordApiService private $client; private $clientId; private $clientSecret; + private $clientToken; private $redirectUri; private $baseUrl; @@ -22,6 +23,7 @@ class DiscordApiService $this->client = $client; $this->clientId = $_ENV['DISCORD_CLIENT_ID']; $this->clientSecret = $_ENV['DISCORD_CLIENT_SECRET']; + $this->clientToken = $_ENV['DISCORD_CLIENT_TOKEN']; $this->redirectUri = $_ENV['DISCORD_BACKEND_REDIRECT_URI']; $this->baseUrl = $_ENV['DISCORD_API_BASE_URL']; } @@ -62,9 +64,8 @@ class DiscordApiService } } - public function getBotsData(string $accessToken): array + public function getBotsData(): array { - /** $output = array(); $botsId = [$_ENV['DISCORD_BOT_TAMISEUR_ID'], $_ENV['DISCORD_BOT_GROOVE_ID'], $_ENV['DISCORD_BOT_FUNKY_ID'], $_ENV['DISCORD_BOT_JUJUL_ID'], $_ENV['DISCORD_BOT_CHANTIER_ID']]; @@ -73,7 +74,7 @@ class DiscordApiService try { $response = $this->client->request('GET', $this->baseUrl . '/users/' . $botId, [ 'headers' => [ - 'Authorization' => 'Bearer ' . $accessToken, + 'Authorization' => 'Bot ' . $this->clientToken, ], ]); array_push($output, $response->toArray()); @@ -81,18 +82,20 @@ class DiscordApiService throw new DiscordApiException($e->getCode(), 'Erreur lors de la requête à l\'API Discord: ' . $e->getMessage(), $e); } } - return new JsonResponse($output); - */ + return $output; + /* try { - $response = $this->client->request('GET', $this->baseUrl . '/users/' . '262299921082875904', [ + $response = $this->client->request('GET', $this->baseUrl . '/users/' . '223831938346123275', [ 'headers' => [ - 'Authorization' => 'Bearer ' . $accessToken, + //'Authorization' => 'Bearer ' . $accessToken, + 'Authorization' => 'Bot ' . $this->clientToken, ], ]); return $response->toArray(); } catch (ClientExceptionInterface | ServerExceptionInterface | RedirectionExceptionInterface | TransportExceptionInterface $e) { throw new DiscordApiException($e->getCode(), 'Erreur lors de la requête à l\'API Discord: ' . $e->getMessage(), $e); } + */ } public function getUserData(string $accessToken): array