Completed
Push — dev ( e84340...ed5eb3 )
by nonanerz
9s
created

UserController   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 7
dl 0
loc 76
ccs 18
cts 18
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A userAction() 0 4 1
B avatarAction() 0 28 3
B resetPasswordAction() 0 25 5
1
<?php
2
3
namespace AppBundle\Controller\Api;
4
5
use AppBundle\Entity\S3\Image;
6
use AppBundle\Entity\User;
7
use AppBundle\Exception\JsonHttpException;
8
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
9
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
10
use Symfony\Component\HttpFoundation\JsonResponse;
11
use Symfony\Component\HttpFoundation\Request;
12
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
13
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
14
use Symfony\Component\Validator\ConstraintViolation;
15
use Symfony\Component\Validator\ConstraintViolationList;
16
17
class UserController extends Controller
18
{
19
    /**
20
     * @Route("/avatar", name="api_avatar")
21
     * @Method({"PUT"})
22
     */
23
    public function avatarAction(Request $request)
24
    {
25
        $headers = $request->headers;
26
        /** @var User $user */
27
        $user = $this->getUser();
28
29
        $image = new Image(sprintf('user/%d/avatar', $user->getId()));
30
        $image
31
            ->setContentType($headers->get('Content-Type'))
32
            ->setContent($request->getContent());
33
        /** @var ConstraintViolationList $errors */
34
        $errors = $this->get('validator')->validate($image, null, ['Api']);
35
36
        if ($errors->count()) {
37
            $outErrors = [];
38
39
            /** @var ConstraintViolation $error */
40
            foreach ($errors as $error) {
41
                $outErrors['headers'][$error->getPropertyPath()] = $error->getMessage();
42
            }
43
44
            throw new JsonHttpException(400, 'Bad Request', $outErrors);
45
        }
46
        $user->setImage($image);
0 ignored issues
show
Documentation introduced by
$image is of type object<AppBundle\Entity\S3\Image>, but the function expects a string.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
47
        $this->getDoctrine()->getManager()->flush();
48
49
        return $this->json(['user' => $user], 201, [], [AbstractNormalizer::GROUPS => ['Short']]);
50
    }
51
52
    /**
53
     * @Route("/user")
54
     * @Method({"GET"})
55
     */
56 1
    public function userAction()
57
    {
58 1
        return $this->json(['user' => $this->getUser()], 200, [], [AbstractNormalizer::GROUPS => ['Detail']]);
59
    }
60
61
    /**
62
     * @Route("/password_reset", name="password_reset")
63
     * @Method({"POST"})
64
     *
65
     * @return JsonResponse
66
     */
67 1
    public function resetPasswordAction(Request $request)
68
    {
69 1
        $data = $request->getContent();
70 1
        $serializer = $this->get('serializer');
71 1
        $data = $serializer->decode($data, 'json');
72 1
        if (!isset($data['email']) || $data['email'] == null) {
73
            throw new JsonHttpException(400, 'Bad Request');
74
        }
75 1
        $user = $this->getDoctrine()->getRepository(User::class)->loadUserByEmail($data['email']);
76 1
        if (!$user) {
77 1
            throw new JsonHttpException(404, 'There is no user with this email');
78
        }
79 1
        $token = $user->getApiToken();
80 1
        if ($token == null) {
81
            $token = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
82
            $user->setApiToken($token);
83
        }
84 1
        $tomorrow = (new \DateTime())->modify('+24 hours');
85 1
        $user->setLinkExpiredAt($tomorrow);
86 1
        $this->getDoctrine()->getManager()->flush();
87 1
        $title = 'Hello '.$user->getFirstName();
88 1
        $this->get('app.email_notification')->sendNotification($user->getEmail(), $title, 'reset', $user);
89
90 1
        return $this->json(['message' => "You've got an update link on you email. Check your email"], 201);
91
    }
92
}
93