Fix getBotsData + Routes dans les controllers
This commit is contained in:
@@ -4,24 +4,6 @@ controllers:
|
|||||||
namespace: App\Controller
|
namespace: App\Controller
|
||||||
type: attribute
|
type: attribute
|
||||||
|
|
||||||
slash:
|
kernel:
|
||||||
path: /
|
resource: App\Kernel
|
||||||
controller: App\Controller\RootController::redirectToFrontend
|
type: attribute
|
||||||
|
|
||||||
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
|
|
||||||
@@ -12,6 +12,8 @@ use Symfony\Component\HttpFoundation\Request;
|
|||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
||||||
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
||||||
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
|
||||||
class AuthController extends AbstractController
|
class AuthController extends AbstractController
|
||||||
{
|
{
|
||||||
@@ -22,9 +24,7 @@ class AuthController extends AbstractController
|
|||||||
$this->discordApiService = $discordApiService;
|
$this->discordApiService = $discordApiService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Route('/discord/auth/redirect', name: 'discord_auth_redirect')]
|
||||||
* @Route("/discord/auth/redirect", name="discord_auth_redirect")
|
|
||||||
*/
|
|
||||||
public function redirectToDiscord(): RedirectResponse
|
public function redirectToDiscord(): RedirectResponse
|
||||||
{
|
{
|
||||||
$clientId = $_ENV['DISCORD_CLIENT_ID'];
|
$clientId = $_ENV['DISCORD_CLIENT_ID'];
|
||||||
@@ -36,9 +36,7 @@ class AuthController extends AbstractController
|
|||||||
return $this->redirect($discordAuthUrl);
|
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
|
public function handleDiscordCallback(Request $request, EntityManagerInterface $entityManager, SessionInterface $session): Response
|
||||||
{
|
{
|
||||||
$code = $request->query->get('code');
|
$code = $request->query->get('code');
|
||||||
@@ -83,4 +81,28 @@ class AuthController extends AbstractController
|
|||||||
// Redirection vers le frontend
|
// Redirection vers le frontend
|
||||||
return $this->redirect($_ENV['DISCORD_FRONTEND_REDIRECT_URI']);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -13,6 +13,7 @@ use Symfony\Component\HttpFoundation\Request;
|
|||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
||||||
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
|
||||||
class BotController extends AbstractController
|
class BotController extends AbstractController
|
||||||
{
|
{
|
||||||
@@ -45,19 +46,17 @@ class BotController extends AbstractController
|
|||||||
return $user;
|
return $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Route('/discord/bots', name: 'discord_bots')]
|
||||||
* @Route("/discord/bots", name="discord_bots")
|
|
||||||
*/
|
|
||||||
public function getBotsDetails(SessionInterface $session, EntityManagerInterface $entityManager): Response
|
public function getBotsDetails(SessionInterface $session, EntityManagerInterface $entityManager): Response
|
||||||
{
|
{
|
||||||
try { $user = $this->getUserToken($session, $entityManager); }
|
try { $user = $this->getUserToken($session, $entityManager); }
|
||||||
catch (DiscordApiException $e) { return new JsonResponse(['error' => $e->getMessage()], $e->getStatusCode());}
|
catch (DiscordApiException $e) { return new JsonResponse(['error' => $e->getMessage()], $e->getStatusCode());}
|
||||||
|
|
||||||
// Obtenir les informations utilisateur supplémentaires depuis Discord
|
// Obtenir les informations des bots depuis Discord
|
||||||
try { $discordBots = $this->discordApiService->getBotsData($user->getAccessToken()); }
|
try { $discordBots = $this->discordApiService->getBotsData(); }
|
||||||
catch (DiscordApiException $e) { return new JsonResponse(['error' => $e->getMessage()], $e->getStatusCode());}
|
catch (DiscordApiException $e) { return new JsonResponse(['error' => $e->getMessage()], $e->getStatusCode());}
|
||||||
|
|
||||||
// Renvoyer les détails de l'utilisateur en JSON
|
// Renvoyer les détails de l'utilisateur en JSON
|
||||||
return new JsonResponse($discordUser);
|
return new JsonResponse($discordBots);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,12 +4,11 @@ namespace App\Controller;
|
|||||||
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
||||||
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
|
||||||
class RootController extends AbstractController
|
class RootController extends AbstractController
|
||||||
{
|
{
|
||||||
/**
|
#[Route('/', name: 'slash')]
|
||||||
* @Route("/", name="slash")
|
|
||||||
*/
|
|
||||||
public function redirectToFrontend(): RedirectResponse
|
public function redirectToFrontend(): RedirectResponse
|
||||||
{
|
{
|
||||||
return $this->redirect($_ENV['FRONTEND_REDIRECT_URI']);
|
return $this->redirect($_ENV['FRONTEND_REDIRECT_URI']);
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ use Symfony\Component\HttpFoundation\Request;
|
|||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
||||||
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
|
||||||
class UserController extends AbstractController
|
class UserController extends AbstractController
|
||||||
{
|
{
|
||||||
@@ -45,9 +46,7 @@ class UserController extends AbstractController
|
|||||||
return $user;
|
return $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Route('/discord/user', name: 'discord_user')]
|
||||||
* @Route("/discord/user", name="discord_user")
|
|
||||||
*/
|
|
||||||
public function getUserDetails(SessionInterface $session, EntityManagerInterface $entityManager): Response
|
public function getUserDetails(SessionInterface $session, EntityManagerInterface $entityManager): Response
|
||||||
{
|
{
|
||||||
try { $user = $this->getUserToken($session, $entityManager); }
|
try { $user = $this->getUserToken($session, $entityManager); }
|
||||||
@@ -68,9 +67,7 @@ class UserController extends AbstractController
|
|||||||
return new JsonResponse($discordUser);
|
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
|
public function getUserGuilds(SessionInterface $session, EntityManagerInterface $entityManager): Response
|
||||||
{
|
{
|
||||||
try { $user = $this->getUserToken($session, $entityManager); }
|
try { $user = $this->getUserToken($session, $entityManager); }
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ class DiscordApiService
|
|||||||
private $client;
|
private $client;
|
||||||
private $clientId;
|
private $clientId;
|
||||||
private $clientSecret;
|
private $clientSecret;
|
||||||
|
private $clientToken;
|
||||||
private $redirectUri;
|
private $redirectUri;
|
||||||
private $baseUrl;
|
private $baseUrl;
|
||||||
|
|
||||||
@@ -22,6 +23,7 @@ class DiscordApiService
|
|||||||
$this->client = $client;
|
$this->client = $client;
|
||||||
$this->clientId = $_ENV['DISCORD_CLIENT_ID'];
|
$this->clientId = $_ENV['DISCORD_CLIENT_ID'];
|
||||||
$this->clientSecret = $_ENV['DISCORD_CLIENT_SECRET'];
|
$this->clientSecret = $_ENV['DISCORD_CLIENT_SECRET'];
|
||||||
|
$this->clientToken = $_ENV['DISCORD_CLIENT_TOKEN'];
|
||||||
$this->redirectUri = $_ENV['DISCORD_BACKEND_REDIRECT_URI'];
|
$this->redirectUri = $_ENV['DISCORD_BACKEND_REDIRECT_URI'];
|
||||||
$this->baseUrl = $_ENV['DISCORD_API_BASE_URL'];
|
$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();
|
$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']];
|
$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 {
|
try {
|
||||||
$response = $this->client->request('GET', $this->baseUrl . '/users/' . $botId, [
|
$response = $this->client->request('GET', $this->baseUrl . '/users/' . $botId, [
|
||||||
'headers' => [
|
'headers' => [
|
||||||
'Authorization' => 'Bearer ' . $accessToken,
|
'Authorization' => 'Bot ' . $this->clientToken,
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
array_push($output, $response->toArray());
|
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);
|
throw new DiscordApiException($e->getCode(), 'Erreur lors de la requête à l\'API Discord: ' . $e->getMessage(), $e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new JsonResponse($output);
|
return $output;
|
||||||
*/
|
/*
|
||||||
try {
|
try {
|
||||||
$response = $this->client->request('GET', $this->baseUrl . '/users/' . '262299921082875904', [
|
$response = $this->client->request('GET', $this->baseUrl . '/users/' . '223831938346123275', [
|
||||||
'headers' => [
|
'headers' => [
|
||||||
'Authorization' => 'Bearer ' . $accessToken,
|
//'Authorization' => 'Bearer ' . $accessToken,
|
||||||
|
'Authorization' => 'Bot ' . $this->clientToken,
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
return $response->toArray();
|
return $response->toArray();
|
||||||
} catch (ClientExceptionInterface | ServerExceptionInterface | RedirectionExceptionInterface | TransportExceptionInterface $e) {
|
} catch (ClientExceptionInterface | ServerExceptionInterface | RedirectionExceptionInterface | TransportExceptionInterface $e) {
|
||||||
throw new DiscordApiException($e->getCode(), 'Erreur lors de la requête à l\'API Discord: ' . $e->getMessage(), $e);
|
throw new DiscordApiException($e->getCode(), 'Erreur lors de la requête à l\'API Discord: ' . $e->getMessage(), $e);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUserData(string $accessToken): array
|
public function getUserData(string $accessToken): array
|
||||||
|
|||||||
Reference in New Issue
Block a user