Test Failed
Push — develop ( 28e0cd...307ddb )
by Daniel
05:05
created

PasswordResetController::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 6
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 2
1
<?php
2
3
namespace Silverback\ApiComponentBundle\Controller;
4
5
use Silverback\ApiComponentBundle\Repository\User\UserRepository;
6
use Silverback\ApiComponentBundle\Security\PasswordManager;
7
use Silverback\ApiComponentBundle\Exception\InvalidEntityException;
8
use Symfony\Component\HttpFoundation\JsonResponse;
9
use Symfony\Component\HttpFoundation\Request;
10
use Symfony\Component\HttpFoundation\Response;
11
use Symfony\Component\Routing\Annotation\Route;
12
use Symfony\Component\Validator\ConstraintViolationInterface;
13
14
class PasswordResetController
15
{
16
    private $userRepository;
17
    private $passwordManager;
18
19
    public function __construct(
20
        UserRepository $userRepository,
21
        PasswordManager $passwordManager
22
    ) {
23
        $this->userRepository = $userRepository;
24
        $this->passwordManager = $passwordManager;
25
    }
26
27
    /**
28
     * @Route("/password/reset/request/{username}", name="password_reset_request", methods={"get"})
29
     * @param Request $request
30
     * @param string $username
31
     * @return JsonResponse
32
     */
33
    public function requestAction(Request $request, string $username): JsonResponse
34
    {
35
        $user = $this->userRepository->findOneBy(['username' => $username]);
36
        if (!$user) {
37
            return new JsonResponse([], Response::HTTP_NOT_FOUND);
38
        }
39
        $this->passwordManager->requestResetEmail($user, $request->query->get('resetPath', ''));
40
        return new JsonResponse([], Response::HTTP_OK);
41
    }
42
43
    /**
44
     * @Route("/password/reset", name="password_reset", methods={"post"})
45
     * @param Request $request
46
     * @return JsonResponse
47
     */
48
    public function resetAction(Request $request): JsonResponse
49
    {
50
        $data = \json_decode($request->getContent(), true);
51
        $username = $data['username'];
52
        $token = $data['token'];
53
        $user = $this->userRepository->findOneBy([
54
            'username' => $username,
55
            'confirmationToken' => $token
56
        ]);
57
        if (!$user) {
58
            return new JsonResponse([], Response::HTTP_NOT_FOUND);
59
        }
60
        try {
61
            $this->passwordManager->passwordReset($user, $data['password']);
62
            return new JsonResponse([], Response::HTTP_OK);
63
        } catch (InvalidEntityException $exception) {
64
            $errors = [];
65
            /** @var ConstraintViolationInterface $error */
66
            foreach ($exception->getErrors() as $error) {
67
                $errors[] = $error->getMessage();
68
            }
69
            return new JsonResponse($errors, Response::HTTP_BAD_REQUEST);
70
        }
71
    }
72
}
73