<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\Users;
use App\Entity\UsersMisionReference;
use App\Entity\UserBadgeReference;
use App\Entity\Clientes;
class SecurityController extends AbstractController
{
public function loginAction(AuthenticationUtils $authenticationUtils, Request $request): Response
{
// return $this->redirectToRoute('end_page');
$this->expireTokens();
$session = $request->getSession();
$session->start();
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
if($session->get('playerNickname') && $session->get('gameLanguage') && !$error){
return $this->redirectToRoute('competition_users_list', array("categoryname"=>$session->get('categoryname')));
} else {
$session->invalidate();
}
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('Security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
}
public function registrationAction($errorMsg = "", $lastUsername = ""): Response
{
return $this->render('Security/registration.html.twig', ["error_msg"=>$errorMsg, "last_username"=>$lastUsername]);
}
public function registerUser(Request $request): Response
{
$password = $request->request->get('password');
$userName = $request->request->get('userName');
$em = $this->getDoctrine()->getManager();
$ps = $em->getRepository("App\Entity\PlatformSettings")->findOneBy(array('parameterSettings'=>'platform_password', 'valueSettings'=> base64_encode($password)));
if ($ps) {
$user = new Users();
$user->setRole("ROLE_USER");
$user->setCliente(29);
$password= "JohnDeere";
$encoder = $this->container->get('security.password_encoder');
$encoded = $encoder->encodePassword($user, $password);
$user->setPassword($encoded);
$user->setChangedPassword(0);
$user->setImage("default.png");
$user->setUpdatedAt(new \DateTime('now'));
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
$comp = $em->getRepository('App\Entity\Competition')->findOneBy(array('name'=>'JohnDeere'));
$comp->addUser($user);
$em->flush();
$this->addBadgesToUser($user);
$successMessage = 'Usuario creado correctamente';
$this->addFlash('mensaje', $successMessage);
return $this->redirectToRoute('user_client_list', array('id'=>$usuario->getCliente()->getId()));
}
return $this->redirectToRoute('registration', array('errorMsg'=>"ContraseƱa incorrecta", 'lastUsername'=>$userName));
}
public function logoutAction(Request $request)
{
$session = $request->getSession();
$session->invalidate();
}
public function expireTokens(){
$em = $this->getDoctrine()->getManager();
$date = (new \DateTime())->modify('-24 hours');
$usersTokens = $em->getRepository('App\Entity\TokenUsers')->createQueryBuilder('ut')
->where('ut.createdAt < :date ')
->setParameter('date', $date)
->getQuery()->getResult();
if($usersTokens){
foreach ($usersTokens as $ut) {
$em->remove($ut);
}
$em->flush();
}
}
public function checkPlayerNickname($playerNickname){
$em = $this->getDoctrine()->getManager();
$usuario= $em->getRepository("App\Entity\Attempt")->findBy(array("playerNickname"=>$playerNickname));
if($usuario) {
return new Response(json_encode(array('message'=>'ko')),
200,
array('Content-Type'=>'application/json'));
} else {
return new Response(json_encode(array('message'=>'ok')),
200,
array('Content-Type'=>'application/json'));
}
}
}