Completed
Push — master ( 8343ec...f446cd )
by Valentyn
12:07
created

PasswordRecoveryController::passwordLost()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.7998
c 0
b 0
f 0
cc 3
nc 3
nop 3
1
<?php
2
3
namespace App\Users\Controller;
4
5
use App\Controller\BaseController;
6
use App\Users\Repository\ApiTokenRepository;
7
use App\Users\Repository\ConfirmationTokenRepository;
8
use App\Users\Repository\UserRepository;
9
use App\Users\Request\PasswordLostRequest;
10
use App\Users\Request\PasswordRecoveryRequest;
11
use App\Users\Service\SendEmailService;
12
use Symfony\Component\HttpFoundation\JsonResponse;
13
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
14
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
15
use Symfony\Component\Routing\Annotation\Route;
16
17
class PasswordRecoveryController extends BaseController
18
{
19
    /**
20
     * @Route("/api/passwordLostRequest", methods={"POST"});
21
     *
22
     * @param PasswordLostRequest $request
23
     * @param UserRepository $repository
24
     * @param SendEmailService $sendEmailService
25
     *
26
     * @return JsonResponse
27
     */
28
    public function passwordLost(PasswordLostRequest $request, UserRepository $repository, SendEmailService $sendEmailService)
29
    {
30
        if ($this->getUser() !== null) {
31
            throw new AccessDeniedHttpException();
32
        }
33
34
        if (null === $user = $repository->findOneBy(['email' => $request->get('email')])) {
35
            throw new NotFoundHttpException();
36
        }
37
38
        $sendEmailService->sendPasswordRecoveryConfirmation($user);
39
40
        return new JsonResponse();
41
    }
42
    /**
43
     * @Route("/api/passwordRecovery", methods={"POST"});
44
     *
45
     * @param PasswordRecoveryRequest $request
46
     * @param ConfirmationTokenRepository $tokenRepository
47
     * @param ApiTokenRepository $apiTokenRepository
48
     *
49
     * @return JsonResponse
50
     */
51
    public function passwordRecovery(PasswordRecoveryRequest $request, ConfirmationTokenRepository $tokenRepository, ApiTokenRepository $apiTokenRepository)
52
    {
53
        if ($this->getUser() !== null) {
54
            throw new AccessDeniedHttpException();
55
        }
56
57
        if (null === $token = $tokenRepository->findByToken($request->get('token'))) {
58
            throw new NotFoundHttpException();
59
        }
60
61
        $user = $token->getUser();
62
        $user->setPlainPassword($request->get('password'));
63
64
        $oldApiTokens = $apiTokenRepository->findAllByUser($user->getId());
65
66
        $em = $this->getDoctrine()->getManager();
67
        $em->remove($token);
68
69
        foreach ($oldApiTokens as $oldApiToken) {
70
            $em->remove($oldApiToken);
71
        }
72
73
        $em->flush();
74
75
        return new JsonResponse();
76
    }
77
}
78