src/Subscriber/User/PasswordSubscriber.php line 73

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\User;
  3. use App\Dictionary\MailPriority;
  4. use App\Event\User\PasswordRequestConfirmedEvent;
  5. use App\Event\User\PasswordRequestedEvent;
  6. use App\Service\Mail\MailService;
  7. use App\Service\User\AccountService;
  8. use App\Service\User\PasswordService;
  9. use App\Subscriber\AbstractMailSubscriber;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\Routing\RouterInterface;
  12. use Twig\Environment;
  13. class PasswordSubscriber extends AbstractMailSubscriber implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * @var PasswordService
  17.      */
  18.     protected $passwordService;
  19.     /**
  20.      * @var RouterInterface
  21.      */
  22.     protected $router;
  23.     /**
  24.      * PasswordSubscriber constructor.
  25.      */
  26.     public function __construct(PasswordService $passwordServiceRouterInterface $router,
  27.         AccountService $accountServiceMailService $mailServiceEnvironment $twig)
  28.     {
  29.         parent::__construct($accountService$mailService$twig);
  30.         $this->passwordService $passwordService;
  31.         $this->router $router;
  32.     }
  33.     public static function getSubscribedEvents(): array
  34.     {
  35.         return [
  36.             PasswordRequestedEvent::class => [
  37.                 ['sendEmailOnPasswordRequest'1],
  38.             ],
  39.             PasswordRequestConfirmedEvent::class => [
  40.                 ['sendEmailOnConfirmedPasswordRequest'1],
  41.             ],
  42.         ];
  43.     }
  44.     public function sendEmailOnPasswordRequest(PasswordRequestedEvent $event)
  45.     {
  46.         $account $event->getAccount();
  47.         $account->generateEmailToken();
  48.         $this->accountService->storeEntity($account);
  49.         $confirmationUrl $this->router->generate('frivol_account_security_confirmpasswordrequest', [
  50.             'confirmationToken' => $account->getConfirmationToken(),
  51.         ], RouterInterface::ABSOLUTE_URL);
  52.         $mail = new \Swift_Message('Neues Passwort angefordert');
  53.         $mail->addTo($account->getEmail());
  54.         $mail->setFrom('support@frivol.com''Frivol.com Support');
  55.         $mail->setBody($this->getTwigEnvironment()->render('emails/password-request.html.twig', [
  56.             'email' => $account->getEmail(),
  57.             'confirmationUrl' => $confirmationUrl,
  58.             'locale' => $account->getLocale(),
  59.         ]), 'text/html');
  60.         return $this->getMailService()->queueMessage($mailMailPriority::HIGHEST);
  61.     }
  62.     public function sendEmailOnConfirmedPasswordRequest(PasswordRequestConfirmedEvent $event)
  63.     {
  64.         $account $event->getAccount();
  65.         $newPlainPassword $this->passwordService->generatePassword();
  66.         $hashedPassword $this->passwordService->getEncodedPassword($newPlainPassword$account->getSalt());
  67.         $account->setPassword($hashedPassword);
  68.         $account->removeEmailToken();
  69.         $this->accountService->storeEntity($account);
  70.         $mail = new \Swift_Message('Dein neues Passwort ist da');
  71.         $mail->addTo($account->getEmail());
  72.         $mail->setFrom('support@frivol.com''Frivol.com Support');
  73.         $mail->setBody($this->getTwigEnvironment()->render('emails/password-request-confirmed.html.twig', [
  74.             'username' => $account->getMember()->getUsername(),
  75.             'newPassword' => $newPlainPassword,
  76.             'locale' => $account->getLocale(),
  77.         ]), 'text/html');
  78.         return $this->getMailService()->queueMessage($mailMailPriority::HIGHEST);
  79.     }
  80. }