src/App/Controller/LobbyController.php line 113
<?phpnamespace App\Controller;use App\Entity\RegistrationRequest;use App\Entity\Users;use App\Service\AltenteIntegration;use App\Service\User\UserLoginService;use Doctrine\ORM\EntityManagerInterface;use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;use OpenApi\Attributes as OA;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Attribute\Route;use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;use Symfony\Component\Security\Http\Event\LogoutEvent;use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;#[OA\Tag(name: 'Lobby')]class LobbyController extends AbstractController{public function __construct(private readonly UserLoginService $userLoginService,private readonly EntityManagerInterface $em) {}#[Route(path: '/', name: 'lobby.home')]public function index(Request $request, JWTTokenManagerInterface $jwt): Response{return $this->playAuth($request, $jwt);}#[Route(path: '/game/{sysname}', name: 'lobby.game')]public function game(string $sysname, AltenteIntegration $altenteIntegration): Response{return $this->redirect($altenteIntegration->demoAuth($sysname));}#[Route(path: '/support', name: 'lobby.test')]public function testDevice(): Response{return $this->render('landing/index.html.twig', ['games' => AltenteIntegration::ALTENTE_SLOTS_MAP]);}#[Route(path: '/terms', name: 'terms')]public function terms(): Response{return $this->render('landing/terms_of_use.html.twig');}#[Route(path: '/privacy', name: 'privacy')]public function privacy(): Response{return $this->render('landing/privacy_policy.html.twig');}#[Route(path: '/contact', name: 'contact')]public function contact(){return $this->render('landing/support.html.twig');}#[Route(path: '/confirm-email', name: 'lobby.confirm-email', methods: ['GET'])]public function confirmEmail(Request $request, JWTTokenManagerInterface $jwt): RedirectResponse{$data = json_decode(base64_decode($request->query->get('data'), true), true);$email = $data['email'];$code = $data['code'];/** @var RegistrationRequest|null $rr */$rr = $this->em->createQueryBuilder()->from(RegistrationRequest::class, 'rr')->select('rr')->where('rr.email = :email')->setParameter('email', $email)->getQuery()->getOneOrNullResult();if (null === $rr) {throw $this->createNotFoundException();}if (!$rr->verify($code)) {throw $this->createNotFoundException();}$this->em->flush();$token = $jwt->create($rr->getUser());$this->userLoginService->callLoginRoutines($rr->getUser(), $request);$queryParams = $request->request->get('qp');$domain = $request->server->get('MAIN_DOMAIN');$url = "https://html5.$domain/?jwt=$token&$queryParams";return new RedirectResponse($url);}#[Route(path: '/play', name: 'lobby.play', methods: ['POST'])]public function play(Request $request, JWTTokenManagerInterface $jwt): JsonResponse{/** @var Users $user */$user = $this->getUser();if (null === $user) {throw $this->createAccessDeniedException();}$token = $jwt->create($user);$this->userLoginService->callLoginRoutines($user, $request);$queryParams = $request->request->get('qp');$domain = $request->server->get('MAIN_DOMAIN');return new JsonResponse(['url' => "https://html5.$domain/?jwt=$token&$queryParams",'uid' => $user->getId()]);}#[Route(path: '/logout', name: 'lobby.logout', methods: ['GET'])]public function logout(Request $request, TokenStorageInterface $tokenStorage, EventDispatcherInterface $eventDispatcher): Response{$logoutEvent = new LogoutEvent($request, $tokenStorage->getToken());$eventDispatcher->dispatch($logoutEvent);$tokenStorage->setToken(null);if ($logoutEvent->getResponse() instanceof Response) {return $logoutEvent->getResponse();}return $this->redirectToRoute('lobby.play.auth');}#[Route(path: '/play', name: 'lobby.play.auth', methods: ['GET'])]public function playAuth(Request $request, JWTTokenManagerInterface $jwt): Response{$queryParams = $request->query->all();$queryParams['cashier_provider'] = 'xsolla';$qs = http_build_query($queryParams);$domain = $request->server->get('MAIN_DOMAIN');/** @var Users $user */$user = $this->getUser();$url = null;$uid = null;if (null !== $user) {$token = $jwt->create($user);$this->userLoginService->callLoginRoutines($user, $request);$url = "https://html5.$domain/?jwt=$token&$qs";$uid = $user->getId();}return $this->render('play.html.twig',['facebookPage' => $_ENV['FACEBOOK_APP_CANVAS'],'facebookPageId' => $_ENV['OAUTH_FACEBOOK_ID'],'domain' => $request->server->get('MAIN_DOMAIN'),'queryParams' => http_build_query($queryParams),'appType' => 'web','uid' => $uid,'appUrl' => $url,'oauthGoogleId' => $_ENV['OAUTH_GOOGLE_CLIENT_ID']]);}#[Route(path: '/facebook', name: 'lobby.facebook')]public function facebook(Request $request, JWTTokenManagerInterface $jwt): Response{/** @var Users $user */$user = $this->getUser();if (!$user) {return $this->render('facebook_login.html.twig',['facebookPage' => $_ENV['FACEBOOK_APP_CANVAS'],'facebookPageId' => $_ENV['OAUTH_FACEBOOK_ID'],]);}$token = $jwt->create($user);$this->userLoginService->callLoginRoutines($user, $request);return $this->render('base.html.twig',['domain' => $request->server->get('MAIN_DOMAIN'),'queryParams' => http_build_query($request->query->all()),'facebookPageId' => $_ENV['OAUTH_FACEBOOK_ID'],'userId' => $user->getId(),'facebookId' => $user->getFbUserid(),'token' => $token,'appType' => 'fb']);}}