ResetPasswordController   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 18
c 1
b 0
f 1
dl 0
loc 35
rs 10
wmc 4

1 Method

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 25 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Gbere\SimpleAuth\Controller;
6
7
use Doctrine\ORM\OptimisticLockException;
8
use Doctrine\ORM\ORMException;
9
use Exception;
10
use Gbere\SimpleAuth\Repository\UserRepository;
11
use Gbere\SimpleAuth\Service\Mailer;
12
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
13
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
14
use Symfony\Component\HttpFoundation\Request;
15
use Symfony\Component\HttpFoundation\Response;
16
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
17
use Symfony\Component\Routing\Annotation\Route;
18
use Symfony\Contracts\Translation\TranslatorInterface;
19
20
final class ResetPasswordController extends AbstractController
21
{
22
    /**
23
     * @Route("/password/reset/{token}", name="simple_auth_password_reset")
24
     *
25
     * @throws Exception
26
     * @throws ORMException
27
     * @throws OptimisticLockException
28
     * @throws TransportExceptionInterface
29
     */
30
    public function __invoke(string $token, Request $request, UserRepository $userRepository, Mailer $mailer, TranslatorInterface $translator): Response
31
    {
32
        $user = $userRepository->findOneBy(['confirmationToken' => $token]);
33
        if (null === $user) {
34
            $this->addFlash('warning', $translator->trans('flash.invalid_token', [], 'SimpleAuthBundle'));
35
36
            return $this->redirectToRoute('simple_auth_login');
37
        }
38
39
        $form = $this->createFormBuilder()->add('plainPassword', PasswordType::class, [
40
            'label' => 'New password',
41
        ])->getForm();
42
        $form->handleRequest($request);
43
        if ($form->isSubmitted() && $form->isValid()) {
44
            $user->setPassword($userRepository->encodePassword($form->get('plainPassword')->getData()));
45
            $user->hasEnabled(true);
46
            $user->setConfirmationToken(null);
47
            $userRepository->persistAndFlush($user);
48
            $this->addFlash('info', $translator->trans('flash.updated_password', [], 'SimpleAuthBundle'));
49
            $mailer->sendPasswordResetNotificationMessage($user);
50
51
            return $this->redirectToRoute('simple_auth_login');
52
        }
53
54
        return $this->render('@GbereSimpleAuth/frontend/reset-password.html.twig', ['form' => $form->createView()]);
55
    }
56
}
57