|
- <?php
-
- declare(strict_types = 1);
-
- namespace App\Security;
-
- use Doctrine\ORM\EntityManagerInterface;
- use Symfony\Bridge\Twig\Mime\TemplatedEmail;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\Mailer\MailerInterface;
- use Symfony\Component\Security\Core\User\UserInterface;
- use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
- use SymfonyCasts\Bundle\VerifyEmail\VerifyEmailHelperInterface;
-
- class EmailVerifier
- {
- private $verifyEmailHelper;
- private $mailer;
- private $entityManager;
-
- public function __construct(VerifyEmailHelperInterface $helper, MailerInterface $mailer, EntityManagerInterface $manager)
- {
- $this->verifyEmailHelper = $helper;
- $this->mailer = $mailer;
- $this->entityManager = $manager;
- }
-
- public function sendEmailConfirmation(string $verifyEmailRouteName, UserInterface $user, TemplatedEmail $email): void
- {
- $signatureComponents = $this->verifyEmailHelper->generateSignature(
- $verifyEmailRouteName,
- $user->getId(),
- $user->getOutgoingEmail(),
- ['id' => $user->getId()],
- );
-
- $context = $email->getContext();
- $context['signedUrl'] = $signatureComponents->getSignedUrl();
- $context['expiresAtMessageKey'] = $signatureComponents->getExpirationMessageKey();
- $context['expiresAtMessageData'] = $signatureComponents->getExpirationMessageData();
-
- $email->context($context);
-
- $this->mailer->send($email);
- }
-
- /**
- * @throws VerifyEmailExceptionInterface
- */
- public function handleEmailConfirmation(Request $request, UserInterface $user): void
- {
- $this->verifyEmailHelper->validateEmailConfirmation($request->getUri(), $user->getId(), $user->getOutgoingEmail());
-
- $user->setIsVerified(true);
-
- $this->entityManager->persist($user);
- $this->entityManager->flush();
- }
- }
|