Completed
Push — standalone ( 57a4d8...49bbc6 )
by Philip
10:02
created

AccessTokenRepository   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 43.24%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 7
lcom 1
cbo 5
dl 0
loc 66
ccs 16
cts 37
cp 0.4324
rs 10
c 1
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A findExpiredTokens() 0 8 1
A findUserByToken() 0 20 3
A createFindUserByTokenQuery() 0 8 1
A isExpired() 0 8 2
1
<?php
2
3
namespace Dontdrinkandroot\RestBundle\Repository;
4
5
use Doctrine\ORM\EntityRepository;
6
use Doctrine\ORM\Query;
7
use Dontdrinkandroot\RestBundle\Entity\AccessToken;
8
9
class AccessTokenRepository extends EntityRepository implements AccessTokenRepositoryInterface
10
{
11
    /**
12
     * {@inheritdoc}
13
     */
14 8
    public function findUserByToken($token)
15
    {
16 8
        return $this->getEntityManager()->transactional(
17 8
            function () use ($token) {
18
                /** @var AccessToken $accessToken */
19 8
                $accessToken = $this->createFindUserByTokenQuery($token)->getOneOrNullResult();
20 8
                if (null === $accessToken) {
21
                    return null;
22
                }
23
24 8
                if ($this->isExpired($accessToken)) {
25
                    $this->getEntityManager()->remove($accessToken);
26
27
                    return null;
28
                }
29
30 8
                return $accessToken->getUser();
31 8
            }
32
        );
33
    }
34
35
    /**
36
     * @param string $token
37
     *
38
     * @return Query
39
     */
40 8
    protected function createFindUserByTokenQuery($token)
41
    {
42 8
        $queryBuilder = $this->createQueryBuilder('accessToken');
43 8
        $queryBuilder->where('accessToken.token = :token');
44 8
        $queryBuilder->setParameter('token', $token);
45
46 8
        return $queryBuilder->getQuery();
47
    }
48
49
    /**
50
     * {@inheritdoc}
51
     */
52
    public function findExpiredTokens()
53
    {
54
        $queryBuilder = $this->createQueryBuilder('token');
55
        $queryBuilder->where('token.expiry < :now');
56
        $queryBuilder->setParameter('now', new \DateTime());
57
58
        return $queryBuilder->getQuery()->getResult();
59
    }
60
61
    /**
62
     * @param AccessToken $accessToken
63
     *
64
     * @return bool
65
     */
66 8
    private function isExpired(AccessToken $accessToken)
67
    {
68 8
        if (null !== $accessToken->getExpiry()) {
69
            return $accessToken->getExpiry() < new \DateTime();
70
        }
71
72 8
        return false;
73
    }
74
}
75