Completed
Push — master ( febf2b...b3372e )
by Valery
13:12 queued 13:12
created

ResettingService::generateToken()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Service\Auth;
6
7
use App\Entity\User;
8
use App\Message\SendResetPasswordLink;
9
use App\Repository\ResettingRepository;
10
use App\Service\AbstractService;
11
use App\Utils\TokenGenerator;
12
use Symfony\Component\HttpFoundation\Request;
13
use Symfony\Component\HttpFoundation\RequestStack;
14
use Symfony\Component\Messenger\MessageBusInterface;
15
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
16
17
final class ResettingService extends AbstractService
18
{
19
    private ResettingRepository $repository;
20
    private MessageBusInterface $messageBus;
21
    private TokenGenerator $generator;
22
23
    public function __construct(
24
        CsrfTokenManagerInterface $tokenManager,
25
        RequestStack $requestStack,
26
        ResettingRepository $repository,
27
        MessageBusInterface $messageBus,
28
        TokenGenerator $generator
29
    ) {
30
        parent::__construct($tokenManager, $requestStack);
31
        $this->repository = $repository;
32
        $this->messageBus = $messageBus;
33
        $this->generator = $generator;
34
    }
35
36
    public function sendResetPasswordLink(Request $request): void
37
    {
38
        /** @var User $user */
39
        $user = $this->repository->findOneBy(['email' => $request->get('user_email')['email']]);
40
41
        if (!$user->isPasswordRequestNonExpired($user::RETRY_TTL)) {
42
            $this->updateToken($user);
43
            $this->messageBus->dispatch(new SendResetPasswordLink($user));
44
            $this->addFlash('success', 'message.emailed_reset_link');
45
        }
46
    }
47
48
    /**
49
     * Generating a Confirmation Token.
50
     */
51
    private function generateToken(): string
52
    {
53
        return $this->generator->generateToken();
54
    }
55
56
    /**
57
     * Refreshing a Confirmation Token.
58
     */
59
    private function updateToken(User $user): void
60
    {
61
        $this->repository->setToken($user, $this->generateToken());
62
    }
63
}
64