FileOwnerValidator   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 9
c 1
b 0
f 0
lcom 1
cbo 7
dl 0
loc 80
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
C validate() 0 34 7
A createViolation() 0 8 1
1
<?php
2
3
/**
4
 * Copyright 2014 Jonathan Bouzekri. All rights reserved.
5
 *
6
 * @copyright Copyright 2014 Jonathan Bouzekri <[email protected]>
7
 * @license https://github.com/jbouzekri/FileUploaderBundle/blob/master/LICENSE
8
 * @link https://github.com/jbouzekri/FileUploaderBundle
9
 */
10
11
namespace Jb\Bundle\FileUploaderBundle\Service\Validator\Constraints;
12
13
use Symfony\Component\Validator\Constraint;
14
use Symfony\Component\Validator\ConstraintValidator;
15
use Doctrine\Common\Persistence\ObjectManager;
16
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
17
18
/**
19
 * FileOwnerValidator
20
 *
21
 * @author jobou
22
 */
23
class FileOwnerValidator extends ConstraintValidator
24
{
25
    /**
26
     * @var \Doctrine\Common\Persistence\ObjectManager
27
     */
28
    protected $em;
29
30
    /**
31
     * @var \Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface
32
     */
33
    protected $tokenStorage;
34
35
    /**
36
     * Constructor
37
     *
38
     * @param \Doctrine\Common\Persistence\ObjectManager $em
39
     * @param \Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface $tokenStorage
40
     */
41
    public function __construct(ObjectManager $em, TokenStorageInterface $tokenStorage)
42
    {
43
        $this->em = $em;
44
        $this->tokenStorage = $tokenStorage;
45
    }
46
47
    /**
48
     * Validate that the submitted file is owned by the authenticated user
49
     *
50
     * @param string $value
51
     * @param Constraint $constraint
52
     */
53
    public function validate($value, Constraint $constraint)
54
    {
55
        if (!$value) {
56
            return;
57
        }
58
59
        $fileHistory = $this->em->getRepository('JbFileUploaderBundle:FileHistory')->find($value);
60
        if (!$fileHistory) {
61
            return;
62
        }
63
64
        // No userid associated with file. Every one can use it.
65
        if (!$fileHistory->getUserId()) {
66
            return;
67
        }
68
69
        // No token. Violation as there is a user id associate with file.
70
        $token = $this->tokenStorage->getToken();
71
        if (!$token) {
72
            return $this->createViolation($value, $constraint);
73
        }
74
75
        // No user. Violation as there is a user id associate with file.
76
        $user = $token->getUser();
77
        if (!$user) {
78
            return $this->createViolation($value, $constraint);
79
        }
80
81
        if ($user->getId() !== $fileHistory->getUserId()) {
82
            return $this->createViolation($value, $constraint);
83
        }
84
85
        return;
86
    }
87
88
    /**
89
     * Create violation for validator
90
     *
91
     * @param string $value
92
     * @param Constraint $constraint
93
     */
94
    protected function createViolation($value, Constraint $constraint)
95
    {
96
        $this
97
            ->context
98
            ->buildViolation($constraint->message)
99
            ->setParameter('%filename%', $value)
100
            ->addViolation();
101
    }
102
}
103