ConfirmPassword::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 2
1
<?php
2
3
namespace ProjetNormandie\UserBundle\Controller\ResetPassword;
4
5
use Doctrine\ORM\EntityManagerInterface;
6
use Exception;
7
use ProjetNormandie\UserBundle\Entity\User;
8
use ProjetNormandie\UserBundle\Security\Event\SecurityEventTypeEnum;
9
use ProjetNormandie\UserBundle\Security\SecurityHistoryManager;
10
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
11
use Symfony\Component\HttpFoundation\Exception\BadRequestException;
12
use Symfony\Component\HttpFoundation\JsonResponse;
13
use Symfony\Component\HttpFoundation\Request;
14
use Symfony\Component\HttpKernel\Attribute\AsController;
15
16
#[AsController]
17
class ConfirmPassword extends AbstractController
18
{
19
    public function __construct(
20
        private readonly EntityManagerInterface $em,
21
        private readonly SecurityHistoryManager $securityHistoryManager
22
    ) {
23
    }
24
25
26
    /**
27
     * @throws Exception
28
     */
29
    public function __invoke(Request $request): JsonResponse
30
    {
31
        $data = json_decode($request->getContent(), true);
32
        $token = $data['token'];
33
        $plainPassword = $data['plainPassword'];
34
35
        $user = $this->em->getRepository(User::class)->findOneBy(['confirmationToken' => $token]);
36
37
        if (null === $user) {
38
            throw new BadRequestException();
39
        }
40
41
        $user->setPlainPassword($plainPassword);
42
        $user->setConfirmationToken(null);
43
44
        $this->em->flush();
45
46
        // Log security event
47
        $this->securityHistoryManager->recordEvent($user, SecurityEventTypeEnum::PASSWORD_RESET_COMPLETE, [
48
            'email' => $user->getEmail()
49
        ]);
50
51
        return new JsonResponse(['success' => true]);
52
    }
53
}
54