Advertisement
Guest User

Untitled

a guest
Jan 30th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.08 KB | None | 0 0
  1. <?php
  2. namespace App\Controller;
  3.  
  4. use App\Form\UserType;
  5. use App\Entity\User;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  12. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  13. use App\Coins\CoinActions;
  14. use App\Entity\WalletAddress;
  15. use App\Coins\MainAddress;
  16.  
  17. class RegistrationController extends AbstractController
  18. {
  19.     /**
  20.      * @Route("/register", name="user_registration")
  21.      */
  22.     public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder, \Swift_Mailer $mailer)
  23.     {
  24.         $user = new User();
  25.         $form = $this->createForm(UserType::class, $user);
  26.  
  27.         $form->handleRequest($request);
  28.         if ($form->isSubmitted() && $form->isValid()) {
  29.             $password = $passwordEncoder->encodePassword($user, $user->getPlainPassword());
  30.             $user->setPassword($password);
  31.  
  32.             $entityManager = $this->getDoctrine()->getManager();
  33.             $entityManager->persist($user);
  34.             $entityManager->flush();
  35.  
  36.             $user->generateRestoreToken();
  37.             $entityManager->persist($user);
  38.             $entityManager->flush();
  39.  
  40.             $link = $this->getParameter('host').'/email/confirmed/'.$user->getRestoreToken();
  41.  
  42.             $message = (new \Swift_Message('Registration on the portal evos.one'))
  43.                 ->setFrom($this->getParameter('email'), 'EvosCoin')
  44.                 ->setTo($user->getEmail())
  45.                 ->setBody(
  46.                     $this->renderView(
  47.                         'emails/registration.html.twig',
  48.                         ['login' => $user->getEmail(), 'passwd' => $user->getPlainPassword(), 'link' => $link]
  49.                     ),
  50.                     'text/html'
  51.                 );
  52.  
  53.             $mailer->send($message);
  54.  
  55.             return $this->redirectToRoute('email_confirm');
  56.         }
  57.  
  58.         return $this->render(
  59.             'registration/register.html.twig',
  60.             [
  61.                 'form' => $form->createView(),
  62.                 'dialog_title' => 'Registration'
  63.             ]
  64.         );
  65.     }
  66.  
  67.     /**
  68.      * @Route("/email/confirm", name="email_confirm", methods={"GET"})
  69.      */
  70.     public function emailConfirm(Request $request, \Swift_Mailer $mailer)
  71.     {
  72.         return $this->render(
  73.             'registration/email_confirm.html.twig' ,[
  74.                 'type' => 'confirm'
  75.         ]);
  76.     }
  77.  
  78.     /**
  79.      * @Route("/user/restore/access", name="user_restore_access", methods={"GET", "POST"})
  80.      */
  81.     public function restoreAccess(Request $request, \Swift_Mailer $mailer)
  82.     {
  83.         $email = $request->get('email', false);
  84.  
  85.         $error = false;
  86.         $dialog_title = 'Restore access';
  87.  
  88.         if (!$email) {
  89.             return $this->render(
  90.                 'registration/restore_access.html.twig' ,[
  91.                     'error' => $error,
  92.                     'dialog_title' => $dialog_title
  93.             ]);
  94.         } else {
  95.             $em = $this->getDoctrine()->getManager();
  96.             /** @var User $user */
  97.             $user = $em->getRepository('App\Entity\User')->findOneBy(['email' => $email]);
  98.  
  99.             if ($user) {
  100.                 $user->generateRestoreToken();
  101.                 $em->persist($user);
  102.                 $em->flush();
  103.  
  104.                 $link = $this->getParameter('host') . '/email/restore/confirmed/' . $user->getRestoreToken();
  105.  
  106.                 $message = (new \Swift_Message('Restore access on the portal evos.one'))
  107.                     ->setFrom($this->getParameter('email'), 'EvosCoin')
  108.                     ->setTo($user->getEmail())
  109.                     ->setBody(
  110.                         $this->renderView(
  111.                             'emails/restore.html.twig',
  112.                             ['login' => $user->getEmail(), 'link' => $link]
  113.                         ),
  114.                         'text/html'
  115.                     );
  116.  
  117.                 $mailer->send($message);
  118.             } else {
  119.                 $error = 'Email not found!';
  120.  
  121.                 return $this->render(
  122.                     'registration/restore_access.html.twig' ,[
  123.                     'error' => $error,
  124.                     'dialog_title' => $dialog_title
  125.                 ]);
  126.             }
  127.         }
  128.  
  129.         return $this->render(
  130.             'registration/email_confirm.html.twig' ,[
  131.             'type' => 'restore',
  132.             'error' => $error,
  133.             'dialog_title' => $dialog_title
  134.         ]);
  135.     }
  136.  
  137.     /**
  138.      * @Route("/email/confirmed/{token}", name="email_confirmed", methods={"GET"})
  139.      */
  140.     public function emailConfirmed(Request $request, MainAddress $mainAddress)
  141.     {
  142.         $token = $request->get('token');
  143.  
  144.         $em = $this->getDoctrine()->getManager();
  145.         /** @var User $user */
  146.         $user = $em->getRepository('App\Entity\User')->findOneBy(['restore_token' => $token]);
  147.  
  148.         if (!empty($user) && $user->getRestoreTokenExpiring() >= new \DateTime('now')) {
  149.             $user->setIsActive(1);
  150.             $user->setRestoreTokenExpiring(Null);
  151.             $user->setRestoreToken(Null);
  152.             $em->persist($user);
  153.             $em->flush();
  154.  
  155.             $addressRes = $mainAddress->checkMasterAddresses($user);
  156.  
  157.             /*try {
  158.                 // Generate first address EVOS
  159.                 $coinActions = new CoinActions($this->getParameter('coins'), $user->getAlias(), 'EVOS');
  160.                 $address = $coinActions->createAddress();
  161.  
  162.                 $walletAddress = new WalletAddress();
  163.                 $walletAddress->setCoin('EVOS');
  164.                 $walletAddress->setUid($user->getId());
  165.                 $walletAddress->setAddress($address);
  166.                 $walletAddress->setBalance(0);
  167.  
  168.                 $em = $this->getDoctrine()->getManager();
  169.                 $em->persist($walletAddress);
  170.                 $em->flush();
  171.  
  172.                 $coinActions = new CoinActions($this->getParameter('coins'), $user->getAlias(), 'BTC');
  173.                 $address = $coinActions->createAddress();
  174.  
  175.                 $walletAddress = new WalletAddress();
  176.                 $walletAddress->setCoin('BTC');
  177.                 $walletAddress->setUid($user->getId());
  178.                 $walletAddress->setAddress($address);
  179.                 $walletAddress->setBalance(0);
  180.  
  181.                 $em->persist($walletAddress);
  182.                 $em->flush();
  183.             }
  184.  
  185.             catch (\Exception $e) {
  186.                 // TODO логировать
  187.             }*/
  188.  
  189.             $token = new UsernamePasswordToken(
  190.                 $user,
  191.                 $user->getPassword(),
  192.                 'main',
  193.                 $user->getRoles()
  194.             );
  195.  
  196.             $this->get('security.token_storage')->setToken($token);
  197.             $this->get('session')->set('_security_main', serialize($token));
  198.             $this->get('session')->set('coin', 'evos');
  199.  
  200.             return $this->redirectToRoute('index');
  201.         }
  202.  
  203.         return new RedirectResponse('/login?error=Invalid token!');
  204.  
  205.     }
  206.  
  207.     /**
  208.      * @Route("/email/restore/confirmed/{token}", name="email_restore_confirmed", methods={"GET", "POST"})
  209.      */
  210.     public function emailRestoreConfirmed($token, UserPasswordEncoderInterface $passwordEncoder, Request $request, MainAddress $mainAddress)
  211.     {
  212.         $password = $request->get('password');
  213.  
  214.         $em = $this->getDoctrine()->getManager();
  215.         /** @var User $user */
  216.         $user = $em->getRepository('App\Entity\User')->findOneBy(['restore_token' => $token]);
  217.  
  218.         if (!empty($user) && $user->getRestoreTokenExpiring() >= new \DateTime('now')) {
  219.  
  220.             if (!empty($password)) {
  221.                 $user->setIsActive(1);
  222.                 $user->setRestoreTokenExpiring(Null);
  223.                 $user->setRestoreToken(Null);
  224.                 $user->setPlainPassword($password);
  225.                 $password = $passwordEncoder->encodePassword($user, $user->getPlainPassword());
  226.                 $user->setPassword($password);
  227.  
  228.                 $em->persist($user);
  229.                 $em->flush();
  230.  
  231.                 $addressRes = $mainAddress->checkMasterAddresses($user);
  232.  
  233.                 $token = new UsernamePasswordToken (
  234.                     $user,
  235.                     $user->getPassword(),
  236.                     'main',
  237.                     $user->getRoles()
  238.                 );
  239.  
  240.                 $this->get('security.token_storage')->setToken($token);
  241.                 $this->get('session')->set('_security_main', serialize($token));
  242.  
  243.                 return $this->redirectToRoute('index');
  244.             } else {
  245.                 return $this->render(
  246.                     'registration/email_restore.html.twig',
  247.                     ['token' => $token]
  248.                 );
  249.             }
  250.         } else {
  251.             // TODO редирект куда-то
  252.             return new Response('Invalid token!');
  253.         }
  254.  
  255.     }
  256. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement