src/Controller/SecurityController.php line 215

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\ProfileClass;
  4. use App\Entity\User;
  5. use App\Repository\UserRepository;
  6. use Symfony\Component\Uid\Uuid;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  9. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  10. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  11. use Symfony\Component\Form\Extension\Core\Type\TextType;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\Mailer\MailerInterface;
  15. use Symfony\Component\Mime\Email;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  18. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  19. use Doctrine\ORM\EntityManagerInterface;
  20. class SecurityController extends AbstractController
  21. {
  22. /**
  23. * @Route("/login", name="app_login", schemes={"https"})
  24. */
  25. public function login(Request $request, AuthenticationUtils $authenticationUtils, UserPasswordHasherInterface $passwordHasher): Response
  26. {
  27. // if ($this->getUser()) {
  28. // return $this->redirectToRoute('target_path');
  29. // }
  30. // get the login error if there is one
  31. $error = $authenticationUtils->getLastAuthenticationError();
  32. // last username entered by the user
  33. $lastUsername = $authenticationUtils->getLastUsername();
  34. $regform = $this->createFormBuilder(null, array('attr' => array('class' => 'php-email-form', 'method' => 'post', 'action' => $this->generateUrl('app_reg'))))
  35. ->setAttribute('class', 'php-email-form')
  36. ->add('username', TextType::class,[
  37. 'required' => true,
  38. 'label' => 'Benutzer',
  39. 'attr' => array(
  40. 'class' => 'form-control'),
  41. 'label_attr' => array(
  42. 'class' => 'form-label'),
  43. ])
  44. ->add('password', RepeatedType::class,[
  45. 'required' => true,
  46. 'type' => PasswordType::class,
  47. 'first_options' => [
  48. 'label' => 'Passwort',
  49. 'attr' => array(
  50. 'class' => 'form-control',
  51. ),
  52. 'label_attr' => array(
  53. 'class' => 'form-label'),
  54. ],
  55. 'second_options' => [
  56. 'label' => 'Passwort wiederholen',
  57. 'attr' => array(
  58. 'class' => 'form-control',
  59. ),
  60. 'label_attr' => array(
  61. 'class' => 'form-label'),
  62. ],
  63. ])
  64. ->add('email', TextType::class,[
  65. 'required' => true,
  66. 'label' => 'E-Mail',
  67. 'attr' => array(
  68. 'class' => 'form-control'),
  69. 'label_attr' => array(
  70. 'class' => 'form-label'),
  71. ])
  72. ->add('btnSave', SubmitType::class,[
  73. 'label' => 'Registrieren',
  74. ])
  75. ->getForm();
  76. return $this->render('security/login.html.twig', [
  77. 'regform' => $regform->createView(),
  78. 'last_username' => $lastUsername,
  79. 'error' => $error
  80. ]);
  81. }
  82. /**
  83. * @Route("/logout", name="app_logout", schemes={"https"})
  84. */
  85. public function logout(): void
  86. {
  87. throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  88. }
  89. /**
  90. * @Route("/reg", name="app_reg", schemes={"https"})
  91. */
  92. public function reg(Request $request, UserPasswordHasherInterface $passwordHasher, UserRepository $repUser, MailerInterface $mailer):Response
  93. {
  94. $regform = $this->createFormBuilder(null, array('attr' => array('method' => 'post')))
  95. ->setAttribute('class', 'php-email-form')
  96. ->add('username', TextType::class,[
  97. 'required' => true,
  98. 'label' => 'Benutzer',
  99. 'attr' => array(
  100. 'class' => 'form-control'),
  101. 'label_attr' => array(
  102. 'class' => 'form-label'),
  103. ])
  104. ->add('password', RepeatedType::class,[
  105. 'required' => true,
  106. 'type' => PasswordType::class,
  107. 'first_options' => [
  108. 'label' => 'Passwort',
  109. 'attr' => array(
  110. 'class' => 'form-control',
  111. ),
  112. 'label_attr' => array(
  113. 'class' => 'form-label'),
  114. ],
  115. 'second_options' => [
  116. 'label' => 'Passwort wiederholen',
  117. 'attr' => array(
  118. 'class' => 'form-control',
  119. ),
  120. 'label_attr' => array(
  121. 'class' => 'form-label'),
  122. ],
  123. ])
  124. ->add('email', TextType::class,[
  125. 'required' => true,
  126. 'label' => 'E-Mail',
  127. 'attr' => array(
  128. 'class' => 'form-control'),
  129. 'label_attr' => array(
  130. 'class' => 'form-label'),
  131. ])
  132. ->add('btnSave', SubmitType::class,[
  133. 'label' => 'Registrieren',
  134. ])
  135. ->getForm();
  136. $regform->handleRequest($request);
  137. if ($regform->isSubmitted() && $regform->isValid()) {
  138. $user = new User;
  139. $uuid = Uuid::v6();
  140. $user->setUid($uuid);
  141. $user->setUsername($regform['username']->getData());
  142. $user->setPassword($passwordHasher->hashPassword($user, $regform['password']->getData()));
  143. $user->setEmail($regform['email']->getData());
  144. $user->setActivated(0);
  145. $em = $this->getDoctrine()->getManager();
  146. $em->persist($user);
  147. $em->flush();
  148. // Zusatzdaten erstellen
  149. $service = new ProfileClass;
  150. $userId = $repUser->getUserId($regform['username']->getData());
  151. $service->registerUser($userId, $em);
  152. $uid = $repUser->getUid($userId);
  153. $email = (new Email())
  154. ->from('noreply@heylotte.de')
  155. ->to($regform['email']->getData())
  156. ->subject('Willkommen bei HEY:LOTTE !')
  157. ->text('
  158. Hey '.$regform['username']->getData().'
  159. wir heißen dich auf der Lernplattform HEY:LOTTE herzlich willkommen! Schön, dass du zusammen mit uns deinen Lernstoff erfassen und dann abfragen möchtest.
  160. Dein Account ist erstellt und dir ist der Plan "For Free" zugewiesen worden. Du kannst also sofort völlig kostenlos loslegen und HEY:LOTTE kennenlernen.
  161. Aktiviere nun noch deinen Account, indem du auf den folgenden Link klickst oder ihn in einen Browser kopierst.
  162. https://heylotte.de/reg/'.$uid.'
  163. Viel Spaß wünscht das Team von
  164. HEY:LOTTE
  165. ');
  166. $mailer->send($email);
  167. return $this->redirect($this->generateUrl('app_registersuccess'));
  168. }
  169. //return $this->redirect($this->generateUrl('app_registersuccess'));
  170. }
  171. /**
  172. * @Route("/reg/{uid}", name="app_reg2", schemes={"https"})
  173. */
  174. public function reg2($uid, UserRepository $repUser)
  175. {
  176. $em = $this->getDoctrine()->getManager();
  177. $service = new ProfileClass;
  178. $optin = $service->checkOptIn($uid, $repUser, $em);
  179. return $this->render('home/registersuccess.html.twig', [
  180. 'optin' => $optin,
  181. ]);
  182. }
  183. /**
  184. * @Route("/password", name="app_password", schemes={"https"})
  185. */
  186. public function password(Request $request, UserRepository $repUser, MailerInterface $mailer, UserPasswordHasherInterface $passwordHasher): Response
  187. {
  188. $pwform = $this->createFormBuilder(null, array('attr' => array('method' => 'post')))
  189. ->setAttribute('class', 'php-email-form')
  190. ->add('searchvalue', TextType::class,[
  191. 'required' => true,
  192. 'label' => false,
  193. ])
  194. ->getForm();
  195. $pwform->handleRequest($request);
  196. if ($pwform->isSubmitted() && $pwform->isValid()) {
  197. $searchvalue = $pwform['searchvalue']->getData();
  198. $service = new ProfileClass;
  199. $em = $this->getDoctrine()->getManager();
  200. $service->forgotPasswort($searchvalue, $repUser, $em, $mailer, $passwordHasher);
  201. return $this->redirect($this->generateUrl('app_login'));
  202. }
  203. return $this->render('security/password.html.twig', [
  204. 'pwform' => $pwform->createView()
  205. ]);
  206. }
  207. /**
  208. * @Route("/newpassword/{uid}", name="app_newpassword", schemes={"https"})
  209. */
  210. public function newPassword($uid, Request $request, UserRepository $repUser, EntityManagerInterface $em, UserPasswordHasherInterface $passwordHasher): Response
  211. {
  212. $newpwform = $this->createFormBuilder(null, array('attr' => array('method' => 'post', 'class' => 'php-email-form',)))
  213. ->add('password', RepeatedType::class,[
  214. 'required' => true,
  215. 'type' => PasswordType::class,
  216. 'first_options' => [
  217. 'label' => 'Passwort',
  218. 'attr' => array(
  219. 'class' => 'form-control',
  220. ),
  221. 'label_attr' => array(
  222. 'class' => 'form-label'),
  223. ],
  224. 'second_options' => [
  225. 'label' => 'Passwort wiederholen',
  226. 'attr' => array(
  227. 'class' => 'form-control',
  228. ),
  229. 'label_attr' => array(
  230. 'class' => 'form-label'),
  231. ],
  232. ])
  233. ->add('btnSave', SubmitType::class,[
  234. 'label' => 'Passwort ändern',
  235. ])
  236. ->getForm();
  237. $newpwform->handleRequest($request);
  238. if ($newpwform->isSubmitted() && $newpwform->isValid()) {
  239. $searchvalue = $newpwform['password']->getData();
  240. // User ermitteln
  241. $userId = $repUser->getUserId5ForgotPassword($uid);
  242. $UserClass = 'App\Entity\User';
  243. $user = $em->getReference($UserClass, $userId);
  244. // PW verschlüsseln
  245. $searchvalue = $passwordHasher->hashPassword($user, $searchvalue);
  246. // neues PW speichern
  247. $service = new ProfileClass;
  248. $em = $this->getDoctrine()->getManager();
  249. $service->setNewPasswort($uid, $searchvalue, $em);
  250. return $this->redirect($this->generateUrl('app_login'));
  251. }
  252. return $this->render('security/newpassword.html.twig', [
  253. 'newpwform' => $newpwform->createView()
  254. ]);
  255. }
  256. }