Fix getBotsData + Routes dans les controllers

This commit is contained in:
Angels-dev
2024-08-24 02:28:44 +02:00
parent 6d4fc1bb08
commit 5bca66a86b
6 changed files with 51 additions and 49 deletions

View File

@@ -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
kernel:
resource: App\Kernel
type: attribute

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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']);

View File

@@ -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); }

View File

@@ -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