SecurityController.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <?php
  2. namespace AppBundle\Controller;
  3. use AppBundle\Form\UserEditPasswordType;
  4. use AppBundle\Form\UserEditType;
  5. use AppBundle\Form\UserRegisterType;
  6. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  7. use Symfony\Component\Form\Extension\Core\Type\SearchType;
  8. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use AppBundle\Form\UserType;
  12. use AppBundle\Entity\User;
  13. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  14. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  15. class SecurityController extends Controller
  16. {
  17. public function loginAction(Request $request)
  18. {
  19. if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  20. return $this->redirectToRoute('videotheque_liste');
  21. }
  22. $authenticationUtils = $this->get('security.authentication_utils');
  23. return $this->render('@App/security/login.html.twig', array (
  24. 'last_username' => $authenticationUtils->getLastUsername(),
  25. 'error' => $authenticationUtils->getLastAuthenticationError()
  26. ));
  27. }
  28. /**
  29. * @Route("/admin/createuser", name="admin_createuser")
  30. */
  31. public function createUserAction(Request $request, UserPasswordEncoderInterface $encoder)
  32. {
  33. $user = new User;
  34. $form = $this->createForm(UserType::class, $user);
  35. $form->handleRequest($request);
  36. if ($form->isSubmitted() && $form->isValid())
  37. {
  38. $encoded = $encoder->encodePassword($user, $user->getPassword());
  39. $user->setPassword($encoded);
  40. $em = $this->getDoctrine()->getManager();
  41. $em->persist($user);
  42. $em->flush();
  43. $this->addFlash('success', 'L\'utilisateur a été ajouté');
  44. return $this->redirectToRoute('admin_index');
  45. }
  46. return $this->render('@App/security/createuser.html.twig', array (
  47. 'form' => $form->createView()
  48. ));
  49. }
  50. /**
  51. * @Route("/admin/edituser/{id}", name="admin_edituser")
  52. */
  53. public function editUserAction(Request $request, UserPasswordEncoderInterface $encoder, User $user)
  54. {
  55. $form = $this->createForm(UserEditType::class, $user);
  56. $form->handleRequest($request);
  57. if ($form->isSubmitted() && $form->isValid())
  58. {
  59. $em = $this->getDoctrine()->getManager();
  60. $em->flush();
  61. $this->addFlash('success', 'L\'utilisateur a été modifié');
  62. return $this->redirectToRoute('admin_index');
  63. }
  64. return $this->render('@App/security/createuser.html.twig', array (
  65. 'form' => $form->createView()
  66. ));
  67. }
  68. /**
  69. * @Route("/admin", name="admin_index")
  70. */
  71. public function indexAction(Request $request)
  72. {
  73. $em = $this->getDoctrine()->getManager();
  74. $repo = $em->getRepository('AppBundle:User');
  75. $users = $repo->findAll();
  76. return $this->render('@App/security/liste.html.twig', array(
  77. 'users' => $users
  78. ));
  79. }
  80. /**
  81. * @Route("/admin/deluser/{id}", name="admin_deluser")
  82. */
  83. public function delUserAction (Request $request, User $user)
  84. {
  85. $form = $this->get('form.factory')->create();
  86. $form->handleRequest($request);
  87. if ($form->isSubmitted() && $form->isValid()) {
  88. $em = $this->getDoctrine()->getManager();
  89. $em->remove($user);
  90. $em->flush();
  91. $this->addFlash("success", "L'utilisateur a bien été supprimé");
  92. return $this->redirectToRoute('admin_index');
  93. }
  94. return $this->render('@App/security/supprimeruser.html.twig', array (
  95. 'user' => $user,
  96. 'form' => $form->createView()
  97. ));
  98. }
  99. /**
  100. * @Route("/register", name="security_register")
  101. */
  102. public function registerAction(Request $request, UserPasswordEncoderInterface $encoder)
  103. {
  104. $user = new User();
  105. $user->setActivated(false);
  106. $form = $this->createForm(UserRegisterType::class, $user);
  107. $form->handleRequest($request);
  108. if ($form->isSubmitted() && $form->isValid())
  109. {
  110. $user->setRoles(array('ROLE_USER'));
  111. $encoded = $encoder->encodePassword($user, $user->getPassword());
  112. $user->setPassword($encoded);
  113. $em = $this->getDoctrine()->getManager();
  114. $em->persist($user);
  115. $em->flush();
  116. $adresse = $this->generateUrl('security_activate', array('token'=>$user->getToken()), UrlGeneratorInterface::ABSOLUTE_URL);
  117. $mail = $this->get('film.mail');
  118. $mail->sendMailActivation($user, $adresse);
  119. $this->addFlash('success', 'Votre compte a été créé. Un mail vient d\'être envoyé pour l\'activation du compte');
  120. return $this->redirectToRoute('login');
  121. }
  122. return $this->render('@App/security/register.html.twig', array(
  123. 'form' => $form->createView()
  124. ));
  125. }
  126. /**
  127. * @Route("/motdepasseoublie", name="security_envoyertoken")
  128. */
  129. public function recupMdpAction(Request $request)
  130. {
  131. $form = $this->createFormBuilder()
  132. ->add('email', SearchType::class)
  133. ->add('Envoyer mail', SubmitType::class)
  134. ->getForm();
  135. $form->handleRequest($request);
  136. if ($form->isSubmitted() && $form->isValid()) {
  137. $em = $this->getDoctrine()->getManager();
  138. $data = $form->getData();
  139. $user = $em->getRepository('AppBundle:User')->findOneBy(array('mail'=>$data['email']));
  140. if ($user != null)
  141. {
  142. $user->setToken();
  143. $em->flush();
  144. $adresse = $this->generateUrl('security_resetpassword', array('token'=>$user->getToken()), UrlGeneratorInterface::ABSOLUTE_URL);
  145. $mail = $this->get('film.mail');
  146. $mail->sendMailTokenMp($user, $adresse);
  147. $this->addFlash('success', "Un mail vous a été envoyé à ".$user->getUsername()." pour récupérer le mot de passe");
  148. return $this->redirectToRoute('login');
  149. } else {
  150. $this->addFlash('warning', "Cet email n'existe pas");
  151. }
  152. }
  153. return $this->render('@App/security/chercheruserpourpassword.html.twig', array (
  154. 'form' => $form->createView()
  155. ));
  156. }
  157. /**
  158. * @Route("/resetpassword/token={token}", name="security_resetpassword")
  159. */
  160. public function resetPasswordAction(Request $request, UserPasswordEncoderInterface $encoder, User $user = null)
  161. {
  162. if ($user != null) {
  163. if ($user->isValidToken()) {
  164. $form = $this->createForm(UserEditPasswordType::class, $user);
  165. $form->handleRequest($request);
  166. if ($form->isSubmitted() && $form->isValid()) {
  167. $encoded = $encoder->encodePassword($user, $user->getPassword());
  168. $user->setPassword($encoded);
  169. $user->setToken();
  170. $em = $this->getDoctrine()->getManager();
  171. $em->flush();
  172. $this->addFlash('success', 'Mot de passe changé, veuillez vous connecter');
  173. return $this->redirectToRoute('videotheque_liste');
  174. }
  175. return $this->render('@App/security/password.html.twig', array(
  176. 'form' => $form->createView()
  177. ));
  178. }
  179. }
  180. $this->addFlash('warning', "Ce token n'est plus valide");
  181. return $this->redirectToRoute('videotheque_liste');
  182. }
  183. /**
  184. * Ne pas utiliser
  185. * @Route("/admin/resettokens", name="admin_resettokens")
  186. */
  187. public function resetTokensAction()
  188. {
  189. $em = $this->getDoctrine()->getManager();
  190. $users = $em->getRepository('AppBundle:User')->findAll();
  191. foreach ($users as $user)
  192. {
  193. $user->setToken();
  194. }
  195. $em->flush();
  196. return $this->redirectToRoute('admin_index');
  197. }
  198. /**
  199. * @Route("/activate/token={token}", name="security_activate")
  200. */
  201. public function activateAction(Request $request, User $user = null)
  202. {
  203. if ($user != null)
  204. {
  205. if ($user->isValidToken())
  206. {
  207. $user->setActivated(true);
  208. $em = $this->getDoctrine()->getManager();
  209. $em->flush();
  210. $this->addFlash('success', "Votre compte est activé");
  211. return $this->redirectToRoute('login');
  212. }
  213. }
  214. $this->addFlash('warning', "Ce token n'est plus valide");
  215. return $this->redirectToRoute('videotheque_liste');
  216. }
  217. }