src/Auth/Authenticator.php line 49

Open in your IDE?
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: samuelp
  5. * Date: 10/20/17
  6. * Time: 10:33 PM
  7. */
  8. namespace App\Auth;
  9. use App\Entity\OrganizationUser;
  10. use App\Entity\User;
  11. use App\Entity\UserStation;
  12. use App\Form\LoginForm;
  13. use Doctrine\ORM\EntityManager;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Symfony\Component\Form\FormFactoryInterface;
  16. use Symfony\Component\HttpFoundation\RedirectResponse;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  20. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  21. use Symfony\Component\Routing\RouterInterface;
  22. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  23. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  24. use Symfony\Component\Security\Core\Exception\CustomUserMessageAccountStatusException;
  25. use Symfony\Component\Security\Core\Security;
  26. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  27. use Symfony\Component\Security\Core\User\UserInterface;
  28. use Symfony\Component\Security\Core\User\UserProviderInterface;
  29. use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
  30. use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
  31. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
  32. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
  33. use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
  34. use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
  35. use UnexpectedValueException;
  36. class Authenticator extends AbstractLoginFormAuthenticator implements PasswordAuthenticatedUserInterface{
  37. private EntityManagerInterface $entityManager;
  38. private UserPasswordHasherInterface $passwordHasher;
  39. private UrlGeneratorInterface $urlGenerator;
  40. private FormFactoryInterface $formFactory;
  41. private User $user;
  42. public function __construct(UrlGeneratorInterface $urlGenerator,
  43. EntityManagerInterface $entityManager,
  44. CsrfTokenManagerInterface $csrfTokenManager,
  45. UserPasswordHasherInterface $passwordHasher,
  46. Security $security)
  47. {
  48. $this->urlGenerator = $urlGenerator;
  49. $this->entityManager = $entityManager;
  50. $this->csrfTokenManager = $csrfTokenManager;
  51. $this->passwordHasher = $passwordHasher;
  52. $this->security = $security;
  53. }
  54. protected function getLoginUrl(Request $request): string
  55. {
  56. // TODO: Implement getLoginUrl() method.
  57. return $this->urlGenerator->generate('security_signin');
  58. }
  59. public function authenticate(Request $request) {
  60. // TODO: Implement getCredentials() method.
  61. $username = $request->request->get('username', '');
  62. // dump($username);
  63. // die;
  64. $request->getSession()->set(Security::LAST_USERNAME, $username);
  65. $user = $this->entityManager->getRepository(User::class)->findOneBy([
  66. 'username' => $username,
  67. 'isActive' => true
  68. ]);
  69. if(!$user){
  70. throw new CustomUserMessageAccountStatusException("invalid Username or Password ");
  71. }
  72. return new Passport(
  73. new UserBadge($user),
  74. new PasswordCredentials($request->request->get('password', '')),
  75. [
  76. new CsrfTokenBadge('authenticate', $request->get('_csrf_token')),
  77. ]
  78. );
  79. }
  80. public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response
  81. {
  82. $user = $token->getUser();
  83. /** @var OrganizationUser $saccoUser */
  84. $saccoUser = $this->entityManager->getRepository( OrganizationUser::class)->findOneBy([
  85. 'user' => $user
  86. ]);
  87. $request->getSession()->set('ORGANIZATION', $saccoUser->getOrganization()->getId());
  88. if(!$saccoUser) {
  89. return new RedirectResponse($this->urlGenerator->generate('no_mans_land'));
  90. }
  91. /** @var UserStation $userStation */
  92. $userStation = $this->entityManager->getRepository(UserStation::class)->findOneBy([
  93. 'user' => $user,
  94. 'isActive' => true
  95. ]);
  96. if($userStation) {
  97. $request->getSession()->set('STATION', $userStation->getStation()->getId());
  98. return new RedirectResponse($this->urlGenerator->generate('parcels_homepage'));
  99. }
  100. return new RedirectResponse($this->urlGenerator->generate('homepage'));
  101. }
  102. public function getPassword(): ?string
  103. {
  104. return '';
  105. }
  106. }