src/Controller/SecurityController.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Entity\UserLog;
  5. use LogicException;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  10. class SecurityController extends AbstractController
  11. {
  12. /**
  13. * @Route("/login", name="app_login")
  14. * @param AuthenticationUtils $authenticationUtils
  15. * @return Response
  16. */
  17. public function login(AuthenticationUtils $authenticationUtils): Response
  18. {
  19. if ($this->getUser()) {
  20. return $this->redirectToRoute('home');
  21. }
  22. // get the login error if there is one
  23. $error = $authenticationUtils->getLastAuthenticationError();
  24. // last username entered by the user
  25. $lastUsername = $authenticationUtils->getLastUsername();
  26. return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
  27. }
  28. /**
  29. * @Route("/logout/devices", name="app_logout_devices")
  30. */
  31. public function logOutOnAllDevices(): Response
  32. {
  33. if (!$this->getUser()) {
  34. return $this->redirectToRoute('app_logout');
  35. }
  36. $entityManager = $this->getDoctrine()->getManager();
  37. $devices = $this->getUser()->getDevices();
  38. foreach ($devices as $device) {
  39. $entityManager->remove($device);
  40. }
  41. $entityManager->flush();
  42. $this->log($this->getUser(), UserLog::USER_LOGOUT_ALL);
  43. return $this->redirectToRoute('app_logout');
  44. }
  45. /**
  46. * @Route("/logout", name="app_logout")
  47. */
  48. public function logout()
  49. {
  50. throw new LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  51. }
  52. /**
  53. * @param User $user
  54. * @param $event
  55. */
  56. private function log(User $user, $event){
  57. $userLog = new UserLog();
  58. $userLog->setUser($user);
  59. $userLog->setEventType($event);
  60. $entityManager = $this->getDoctrine()->getManager();
  61. $entityManager->persist($userLog);
  62. $entityManager->flush();
  63. }
  64. }