src/Controller/SecurityController.php line 112

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Company\Brand;
  4. use App\Entity\Mail;
  5. use App\Entity\User;
  6. use App\Form\User\ForgottenPasswordType;
  7. use App\Form\User\UserResetPasswordType;
  8. use App\Service\MailerService;
  9. use App\Service\SecurityService;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use KnpU\OAuth2ClientBundle\Client\ClientRegistry;
  12. use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
  13. use League\OAuth2\Client\Provider\Google;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController as Controller;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  19. class SecurityController extends Controller
  20. {
  21.     /**
  22.      * @Route("/connexion", name="login")
  23.      */
  24.     public function loginAction(AuthenticationUtils $authUtils)
  25.     {
  26.         $error $authUtils->getLastAuthenticationError();
  27.         $lastUsername $authUtils->getLastUsername();
  28.         return $this->render('Security/login.html.twig', array(
  29.             'last_username' => $lastUsername,
  30.             'error'         => $error,
  31.         ));
  32.     }
  33.     /**
  34.      * @Route("/logout", name="logout")
  35.      */
  36.     public function logoutAction()
  37.     {
  38.     }
  39.     /**
  40.      * @Route(
  41.      *   "/enregistrer",
  42.      *   name="user_register"
  43.      * )
  44.      */
  45.     public function register()
  46.     {
  47.         return $this->render('Security/login.html.twig', array(
  48.             'last_username' => null,
  49.             'error'         => null,
  50.         ));
  51.     }
  52.     /**
  53.      * @Route(
  54.      *   "/mot-de-passe-oublie/changement/{tokenUrl}",
  55.      *   requirements={"tokenUrl"=".*"},
  56.      *   name="forgotten_password_confirmation"
  57.      * )
  58.      */
  59.     public function reinitPasswordConfirmation(
  60.         Request $request,
  61.         EntityManagerInterface $em,
  62.         SecurityService $securityService,
  63.         $tokenUrl
  64.     ){
  65.         $token $securityService->encode(Brand::class, $tokenUrl);
  66.         /** @var $user User */
  67.         $user $em->getRepository(User::class)->findOneByUserToken($token);
  68.         if (null === $user || $user->getUserTokenType() !== User::RESETPWD) {
  69.             throw new NotFoundHttpException('app.error.404');
  70.         }
  71.         $form $this->createForm(UserResetPasswordType::class);
  72.         if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
  73.             $data $form->getData();
  74.             $password $securityService->encode(User::class, $data->getPassword());
  75.             $user->setIsActive(true);
  76.             $user->setPassword($password);
  77.             $em->persist($user);
  78.             $em->flush();
  79.             $request->getSession()->getFlashBag()->add('success''app.reinit_pwd.confirmation');
  80.             return $this->redirectToRoute('login');
  81.         }
  82.         return $this->render('Security/forgottenPasswordReset.html.twig', array('form' => $form->createView(),));
  83.     }
  84.     /**
  85.      * @Route(
  86.      *   "/mot-de-passe-oublie/{type}",
  87.      *   defaults={"type"="forgotten"},
  88.      *   requirements={"type"=".*"},
  89.      *   name="forgotten_password"
  90.      * )
  91.      * @Route(
  92.      *   "/premiere-connexion/{type}",
  93.      *   defaults={"type"="first"},
  94.      *   requirements={"type"=".*"},
  95.      *   name="first_connexion"
  96.      * )
  97.      */
  98.     public function forgottenPasswordAction(
  99.         Request $request,
  100.         EntityManagerInterface $em,
  101.         SecurityService $securityService,
  102.         MailerService $mailerService,
  103.         $type
  104.     ){
  105.         $form $this->createForm(ForgottenPasswordType::class);
  106.         if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
  107.             $data $form->getData();
  108.             /** @var $user User */
  109.             $user $em->getRepository(User::class)->findOneByEmail($data['email']);
  110.             if (null !== $user) {
  111.                 $token $securityService->createToken();
  112.                 $user->setUserToken($token['encoded']);
  113.                 $user->setUserTokenType(User::RESETPWD);
  114.                 $em->persist($user);
  115.                 $em->flush();
  116.                 $data $form->getData();
  117.                 $vars = ['user' => $user'email' => $data['email'], 'token' => $token['url']];
  118.                 $mail $em->getRepository(Mail::class)->getOneBySlug('reintialisation-de-mot-de-passe');
  119.                 $mailerService->sendGenericMail($mail$vars);
  120.             }
  121.             $request->getSession()->getFlashBag()->add('success''app.reinit_pwd.success');
  122.             return $this->redirectToRoute('index');
  123.         }
  124.         return $this->render('Security/forgottenPassword.html.twig', ['form' => $form->createView(), 'type' => $type]);
  125.     }
  126.     /**
  127.      * @Route("/connexion/google/check", name="connect_google_check")
  128.      * @Route("/connexion/facebook/check", name="connect_facebook_check")
  129.      * @Route("/connexion/amazon/check", name="connect_amazon_check")
  130.      */
  131.     public function connectNetworkCheck()
  132.     {
  133.         return $this->redirectToRoute('index');
  134.     }
  135.     /**
  136.      * @Route(
  137.      *     "/connexion/social/{network}",
  138.      *     requirements={"network"=".*"},
  139.      *     name="connect_network_start"
  140.      * )
  141.      */
  142.     public function connectNeworkStart(ClientRegistry $clientRegistry$network)
  143.     {
  144.         if ($network === 'amazon') {
  145.             $scope = ['profile'];
  146.         } else {
  147.             $scope = ['email'];
  148.         }
  149.         return $clientRegistry
  150.             ->getClient($network.'_main')
  151.             ->redirect($scope,[]);
  152.     }
  153.     /**
  154.      * @Route("/connexion/facebook/check2", name="connect_facebook_check2")
  155.      */
  156.     public function connectCheckFacebook2(Request $requestEntityManagerInterface $emClientRegistry $clientRegistry)
  157.     {
  158.         /** @var \KnpU\OAuth2ClientBundle\Client\Provider\FacebookClient $client */
  159.         $client $clientRegistry->getClient('facebook_main');
  160.         try {
  161.             // the exact class depends on which provider you're using
  162.             /** @var \League\OAuth2\Client\Provider\FacebookUser $facebookUser */
  163.             $facebookUser $client->fetchUser();
  164.             //$facebookUser->getId(),
  165.             //$facebookUser->getName(),
  166.             //$facebookUser->getEmail(),
  167.             //$facebookUser->getPictureUrl()
  168.             $user $em->getRepository(User::class)->findOneBy(['email' => $facebookUser->getEmail()]);
  169.             if (null === $user) {
  170.             }
  171.             die;
  172.         } catch (IdentityProviderException $e) {
  173.             // something went wrong!
  174.             // probably you should return the reason to the user
  175.             dump('oups',$e->getMessage()); die;
  176.         }
  177.     }
  178.     /**
  179.      * @Route("/connexion/google/check2", name="connect_google_check2")
  180.      */
  181.     public function connectCheckGoogle(Request $requestEntityManagerInterface $emClientRegistry $clientRegistry)
  182.     {
  183.         /** @var \KnpU\OAuth2ClientBundle\Client\Provider\GoogleClient $client */
  184.         $client $clientRegistry->getClient('google_main');
  185.         try {
  186.             // the exact class depends on which provider you're using
  187.             /** @var \League\OAuth2\Client\Provider\GoogleUser $googleUser */
  188.             $googleUser $client->fetchUser();
  189.             //$googleUser->getId(),
  190.             //$googleUser->getName(),
  191.             //$googleUser->getEmail(),
  192.             //$googleUser->getAvatar()
  193.             $user $em->getRepository(User::class)->findOneBy(['email' => $googleUser->getEmail()]);
  194.             if (null === $user) {
  195.             }
  196.         } catch (IdentityProviderException $e) {
  197.             // something went wrong!
  198.             // probably you should return the reason to the user
  199.             dump('oups',$e->getMessage()); die;
  200.         }
  201.         return $this->redirectToRoute('index');
  202.     }
  203. }