<?php
namespace App\Controller;
use App\Entity\Users;
use App\Service\AltenteIntegration;
use App\Service\User\UserGuestLandingService;
use App\Service\User\UserLoginService;
use App\Service\User\UsersManagementService;
use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Http\Event\LogoutEvent;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
class LobbyController extends AbstractController
{
/** @var UsersManagementService */
protected $usersManagementService;
/** @var UserLoginService */
protected $userLoginService;
public function __construct(
UsersManagementService $usersManagementService,
UserLoginService $userLoginService
) {
$this->usersManagementService = $usersManagementService;
$this->userLoginService = $userLoginService;
}
/**
* @Route("/", name="lobby.home")
*/
public function index(Request $request, JWTTokenManagerInterface $jwt): Response
{
return $this->playAuth($request, $jwt);
}
/**
* @Route("/game/{sysname}", name="lobby.game")
*/
public function game(string $sysname, AltenteIntegration $altenteIntegration): Response
{
return $this->redirect($altenteIntegration->demoAuth($sysname));
}
/**
* @Route("/support", name="lobby.test")
*/
public function testDevice(Request $request, UserGuestLandingService $userGuestLandingService): Response
{
return $this->render('landing/index.html.twig', [
'games' => AltenteIntegration::ALTENTE_SLOTS_MAP
]);
}
/**
* @Route("/terms", name="terms")
*/
public function terms(Request $request): Response
{
//eturn $this->render('pages/terms.html.twig');
return $this->render('landing/terms_of_use.html.twig');
}
/**
* @Route("/privacy", name="privacy")
*/
public function privacy(Request $request): Response
{
return $this->render('landing/privacy_policy.html.twig');
}
/**
* @Route("/contact", name="contact")
*/
public function contact(Request $request)
{
return $this->render('landing/support.html.twig');
}
/**
* @Route("/play", name="lobby.play", methods={"POST"})
*/
public function play(Request $request, JWTTokenManagerInterface $jwt): JsonResponse
{
/** @var Users $user */
$user = $this->getUser();
if ($user === null) {
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("/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()) {
return $logoutEvent->getResponse();
}
return $this->redirectToRoute('lobby.play.auth');
}
/**
* @Route("/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 ($user !== null) {
$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("/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'
]
);
}
}