src/App/Controller/LobbyController.php line 113

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\RegistrationRequest;
  4. use App\Entity\Users;
  5. use App\Service\AltenteIntegration;
  6. use App\Service\User\UserLoginService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
  9. use OpenApi\Attributes as OA;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\RedirectResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Attribute\Route;
  16. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  17. use Symfony\Component\Security\Http\Event\LogoutEvent;
  18. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  19. #[OA\Tag(name'Lobby')]
  20. class LobbyController extends AbstractController
  21. {
  22.     public function __construct(
  23.         private readonly UserLoginService $userLoginService,
  24.         private readonly EntityManagerInterface $em
  25.     ) {}
  26.     #[Route(path'/'name'lobby.home')]
  27.     public function index(Request $requestJWTTokenManagerInterface $jwt): Response
  28.     {
  29.         return $this->playAuth($request$jwt);
  30.     }
  31.     #[Route(path'/game/{sysname}'name'lobby.game')]
  32.     public function game(string $sysnameAltenteIntegration $altenteIntegration): Response
  33.     {
  34.         return $this->redirect($altenteIntegration->demoAuth($sysname));
  35.     }
  36.     #[Route(path'/support'name'lobby.test')]
  37.     public function testDevice(): Response
  38.     {
  39.         return $this->render('landing/index.html.twig', [
  40.             'games' => AltenteIntegration::ALTENTE_SLOTS_MAP
  41.         ]);
  42.     }
  43.     #[Route(path'/terms'name'terms')]
  44.     public function terms(): Response
  45.     {
  46.         return $this->render('landing/terms_of_use.html.twig');
  47.     }
  48.     #[Route(path'/privacy'name'privacy')]
  49.     public function privacy(): Response
  50.     {
  51.         return $this->render('landing/privacy_policy.html.twig');
  52.     }
  53.     #[Route(path'/contact'name'contact')]
  54.     public function contact()
  55.     {
  56.         return $this->render('landing/support.html.twig');
  57.     }
  58.     #[Route(path'/confirm-email'name'lobby.confirm-email'methods: ['GET'])]
  59.     public function confirmEmail(Request $requestJWTTokenManagerInterface $jwt): RedirectResponse
  60.     {
  61.         $data json_decode(base64_decode($request->query->get('data'), true), true);
  62.         $email $data['email'];
  63.         $code $data['code'];
  64.         /** @var RegistrationRequest|null $rr */
  65.         $rr $this->em->createQueryBuilder()
  66.             ->from(RegistrationRequest::class, 'rr')
  67.             ->select('rr')
  68.             ->where('rr.email = :email')
  69.             ->setParameter('email'$email)
  70.             ->getQuery()
  71.             ->getOneOrNullResult();
  72.         if (null === $rr) {
  73.             throw $this->createNotFoundException();
  74.         }
  75.         if (!$rr->verify($code)) {
  76.             throw $this->createNotFoundException();
  77.         }
  78.         $this->em->flush();
  79.         $token $jwt->create($rr->getUser());
  80.         $this->userLoginService->callLoginRoutines($rr->getUser(), $request);
  81.         $queryParams $request->request->get('qp');
  82.         $domain $request->server->get('MAIN_DOMAIN');
  83.         $url "https://html5.$domain/?jwt=$token&$queryParams";
  84.         return new RedirectResponse($url);
  85.     }
  86.     #[Route(path'/play'name'lobby.play'methods: ['POST'])]
  87.     public function play(Request $requestJWTTokenManagerInterface $jwt): JsonResponse
  88.     {
  89.         /** @var Users $user */
  90.         $user $this->getUser();
  91.         if (null === $user) {
  92.             throw $this->createAccessDeniedException();
  93.         }
  94.         $token $jwt->create($user);
  95.         $this->userLoginService->callLoginRoutines($user$request);
  96.         $queryParams $request->request->get('qp');
  97.         $domain $request->server->get('MAIN_DOMAIN');
  98.         return new JsonResponse([
  99.             'url' => "https://html5.$domain/?jwt=$token&$queryParams",
  100.             'uid' => $user->getId()
  101.         ]);
  102.     }
  103.     #[Route(path'/logout'name'lobby.logout'methods: ['GET'])]
  104.     public function logout(Request $requestTokenStorageInterface $tokenStorageEventDispatcherInterface $eventDispatcher): Response
  105.     {
  106.         $logoutEvent = new LogoutEvent($request$tokenStorage->getToken());
  107.         $eventDispatcher->dispatch($logoutEvent);
  108.         $tokenStorage->setToken(null);
  109.         if ($logoutEvent->getResponse() instanceof Response) {
  110.             return $logoutEvent->getResponse();
  111.         }
  112.         return $this->redirectToRoute('lobby.play.auth');
  113.     }
  114.     #[Route(path'/play'name'lobby.play.auth'methods: ['GET'])]
  115.     public function playAuth(Request $requestJWTTokenManagerInterface $jwt): Response
  116.     {
  117.         $queryParams $request->query->all();
  118.         $queryParams['cashier_provider'] = 'xsolla';
  119.         $qs http_build_query($queryParams);
  120.         $domain $request->server->get('MAIN_DOMAIN');
  121.         /** @var Users $user */
  122.         $user $this->getUser();
  123.         $url null;
  124.         $uid null;
  125.         if (null !== $user) {
  126.             $token $jwt->create($user);
  127.             $this->userLoginService->callLoginRoutines($user$request);
  128.             $url "https://html5.$domain/?jwt=$token&$qs";
  129.             $uid $user->getId();
  130.         }
  131.         return $this->render(
  132.             'play.html.twig',
  133.             [
  134.                 'facebookPage' => $_ENV['FACEBOOK_APP_CANVAS'],
  135.                 'facebookPageId' => $_ENV['OAUTH_FACEBOOK_ID'],
  136.                 'domain' => $request->server->get('MAIN_DOMAIN'),
  137.                 'queryParams' => http_build_query($queryParams),
  138.                 'appType' => 'web',
  139.                 'uid' => $uid,
  140.                 'appUrl' => $url,
  141.                 'oauthGoogleId' => $_ENV['OAUTH_GOOGLE_CLIENT_ID']
  142.             ]
  143.         );
  144.     }
  145.     #[Route(path'/facebook'name'lobby.facebook')]
  146.     public function facebook(Request $requestJWTTokenManagerInterface $jwt): Response
  147.     {
  148.         /** @var Users $user */
  149.         $user $this->getUser();
  150.         if (!$user) {
  151.             return $this->render(
  152.                 'facebook_login.html.twig',
  153.                 [
  154.                     'facebookPage' => $_ENV['FACEBOOK_APP_CANVAS'],
  155.                     'facebookPageId' => $_ENV['OAUTH_FACEBOOK_ID'],
  156.                 ]
  157.             );
  158.         }
  159.         $token $jwt->create($user);
  160.         $this->userLoginService->callLoginRoutines($user$request);
  161.         return $this->render(
  162.             'base.html.twig',
  163.             [
  164.                 'domain' => $request->server->get('MAIN_DOMAIN'),
  165.                 'queryParams' => http_build_query($request->query->all()),
  166.                 'facebookPageId' => $_ENV['OAUTH_FACEBOOK_ID'],
  167.                 'userId' => $user->getId(),
  168.                 'facebookId' => $user->getFbUserid(),
  169.                 'token' => $token,
  170.                 'appType' => 'fb'
  171.             ]
  172.         );
  173.     }
  174. }