<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class SiteController extends AbstractController
{
/**
* @Route("/", name="app_home", defaults={"_locale":"%locale%"}, methods={"GET"})
* @Route("/{_locale}/", requirements={"_locale":"%app_locales%"}, methods={"GET"})
*/
public function index(): Response
{
// return $this->render('home/index.html.twig', [
// 'controller_name' => 'HomeController',
// ]);
return $this->redirectToRoute('app_login');
}
/**
* @Route("/login", name="app_login", defaults={"_locale":"%locale%"}, methods={"GET", "POST"})
* @Route("/{_locale}/login", requirements={"_locale":"%app_locales%"}, methods={"GET", "POST"})
*/
public function login( SessionInterface $session, HttpClientInterface $httpClient, Request $request): Response
{
$form_error = "";
$last_name = "";
$user = $session->get('user-data');
if(!$user){
if ( ($request->request->get('username') !== null) || ($request->request->get('password') != "") ) {
if ( ($request->request->get('username') === null) || ($request->request->get('username') == "")) {
$form_error = "Usuario obligatorio";
} else {
$last_name = $request->request->get('username');
if ( ($request->request->get('password') === null) || ($request->request->get('password') == "")) {
$form_error = "ContraseƱa obligatoria";
} else {
$response = $httpClient->request(
'POST',
$this->getParameter('API_base_url') . '/oauth/v2/token',
[
'body' => [
"client_id" => $this->getParameter('API_client_id'),
"client_secret" => $this->getParameter('API_client_secret'),
"info" => array("uuid" => $this->getParameter('API_token')),
"grant_type" => "password",
"username" => $request->request->get('username'),
"password" => $request->request->get('password'),
"lang" => "es"
]
]
);
// dd($response->getContent(false));
$decodedPayload = (array) json_decode($response->getContent(false));
if ( array_key_exists("error", $decodedPayload) || !isset($decodedPayload['access_token'])) {
$session->set('user-session', null);
$session->set('user-data', null);
$form_error = "Usuario incorrecto";
} else {
$session->set('user-session', $decodedPayload);
$response = $httpClient->request(
'GET',
$this->getParameter('API_base_url') . '/api/user/token/' . $decodedPayload['access_token'],
[
'headers' => [
'Authorization' => 'Bearer ' . $decodedPayload['access_token'],
]
]
);
$decodedPayload = (array) json_decode($response->getContent(false));
if ( array_key_exists("error", $decodedPayload) ) {
$session->set('user-session', null);
$session->set('user-data', null);
$form_error = "Usuario desactivado";
}else{
$decodedPayload = $response->toArray();
if( in_array("ROLE_ADMIN", $decodedPayload['roleNames']) || in_array("ROLE_GESTOR", $decodedPayload['roleNames']) || in_array("ROLE_NEWS", $decodedPayload['roleNames'])){
$session->set('user-data', $decodedPayload);
if(in_array("ROLE_ADMIN",$decodedPayload["roleNames"]) || in_array("ROLE_NEWS",$decodedPayload["roleNames"]) || in_array("ROLE_GESTOR",$decodedPayload["roleNames"])){
if(!in_array("ROLE_GESTOR",$decodedPayload["roleNames"])){
return $this->redirectToRoute('news');
}else{
return $this->redirectToRoute('matches');
}
}else{
return $this->redirectToRoute('app_logout');
}
}else{
$session->set('user-session', null);
$session->set('user-data', null);
$form_error = "Usuario no autorizado";
}
}
}
}
}
}
//dd($form_error);
return $this->render('security/login.html.twig', [
'controller_name' => 'SiteController',
'error' => $form_error,
'last_username' => $last_name,
'url_api' => $this->getParameter('API_base_url') . '/api/',
]);
}else{
if(in_array("ROLE_ADMIN",$user["roleNames"]) || in_array("ROLE_NEWS",$user["roleNames"]) || in_array("ROLE_GESTOR",$user["roleNames"])){
if(!in_array("ROLE_GESTOR",$user["roleNames"])){
return $this->redirectToRoute('news');
}else{
return $this->redirectToRoute('matches');
}
}else{
return $this->redirectToRoute('app_logout');
}
}
}
/**
* @Route("/logout", name="app_logout", defaults={"_locale":"%locale%"}, methods={"GET", "POST"})
* @Route("/{_locale}/logout", requirements={"_locale":"%app_locales%"}, methods={"GET", "POST"})
*/
public function logout( SessionInterface $session, Request $request): Response
{
$session->set('user-session', null);
$session->set('user-data', null);
return $this->redirectToRoute('app_login');
}
}