· 5 years ago · May 25, 2020, 07:54 PM
1<?php
2
3namespace App\Controller;
4
5use App\Entity\User;
6use App\Repository\UserRepository;
7use App\Form\RegistrationFormType;
8use App\Security\LoginFormAuthenticator;
9use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
10use Symfony\Component\HttpFoundation\Request;
11use Symfony\Component\HttpFoundation\Response;
12use Symfony\Component\Routing\Annotation\Route;
13use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
14use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
15use App\Notification\Notification;
16
17
18class RegistrationController extends AbstractController
19{
20 /**
21 * @Route("/register", name="register", methods={"GET","POST"})
22 */
23 public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder, GuardAuthenticatorHandler $guardHandler,
24 LoginFormAuthenticator $authenticator, Notification $notification ): Response
25 {
26 if ($this->getUser())
27 {
28 return $this->redirectToRoute('admin.home.index');
29
30 }else if ($this->getUser() && $this->isGranted('ROLE_PLAYER'))
31 {
32 return $this->redirectToRoute('home');
33
34 }else{
35 // On récupère les clés du reCaptcha de Google
36 $siteKey = '6LcKXfsUAAAAAN8GVzeGsHHsB87koYkejOeBSx2Y';
37 $secretKey = '6LcKXfsUAAAAACCNTgPcorXj_jSl88b9d31XL4p_';
38
39 $user = new User();
40 $form = $this->createForm(RegistrationFormType::class, $user);
41 $form->handleRequest($request);
42
43 if ($form->isSubmitted() && $form->isValid())
44 {
45
46 $email = $request->request->get('registration_form')['email'];
47 $username = $request->request->get('registration_form')['username'];
48 $user->setEmail(strip_tags($email));
49 $user->setUsername(strip_tags($username));
50 $user->setPassword(strip_tags(
51 $passwordEncoder->encodePassword(
52 $user,
53 $form->get('plainPassword')->getData()
54 )
55 ));
56 $user->setLastConnection(new \DateTime());
57 $user->setIp($request->getClientIp());
58 $user->setImage('unknownUser.png');
59
60 // On génère un token et on l'enregistre
61 $token= $user->setActivationToken(md5(
62 uniqid()
63 ));
64
65 //On envoie un mail de confirmation
66 $notification->contact($user, $token);
67
68 $entityManager = $this->getDoctrine()->getManager();
69 $entityManager->persist($user);
70 $entityManager->flush();
71
72
73 return $guardHandler->authenticateUserAndHandleSuccess(
74 $user,
75 $request,
76 $authenticator,
77 'main' // firewall name in security.yaml
78 );
79
80 }
81
82 return $this->render('registration/register.html.twig', [
83 'registrationForm' => $form->createView(),
84 'siteKey' => $siteKey
85 ]);
86 }
87 }
88
89
90 /**
91 * @Route("/activation/{token}", name="activation")
92 */
93 public function activation($token, UserRepository $users)
94 {
95 // On recherche si un utilisateur avec ce token existe dans la base de données
96 $user = $users->findOneBy(['activation_token' => $token]);
97
98 // Si aucun utilisateur n'est associé à ce token
99 if(!$user){
100 // On renvoie une erreur 404
101 throw $this->createNotFoundException('Cet utilisateur n\'existe pas');
102 }
103
104 // On supprime le token
105 $user->setActivationToken(null);
106 $entityManager = $this->getDoctrine()->getManager();
107 $entityManager->persist($user);
108 $entityManager->flush();
109
110 // On génère un message
111 $this->addFlash('message', 'Utilisateur activé avec succès');
112
113 // On retourne à l'accueil
114 return $this->redirectToRoute('home');
115 }
116
117
118}