Completed
Push — standalone ( 8da518...787e4c )
by Philip
09:19
created

AccessTokenRepository::findExpiredTokens()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 8
ccs 0
cts 5
cp 0
rs 9.4285
cc 1
eloc 5
nc 1
nop 0
crap 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 16
    public function findUserByToken($token)
15
    {
16 16
        return $this->getEntityManager()->transactional(
17 16
            function () use ($token) {
18
                /** @var AccessToken $accessToken */
19 16
                $accessToken = $this->createFindUserByTokenQuery($token)->getOneOrNullResult();
20 16
                if (null === $accessToken) {
21
                    return null;
22
                }
23
24 16
                if ($this->isExpired($accessToken)) {
25
                    $this->getEntityManager()->remove($accessToken);
26
27
                    return null;
28
                }
29
30 16
                return $accessToken->getUser();
31 16
            }
32
        );
33
    }
34
35
    /**
36
     * @param string $token
37
     *
38
     * @return Query
39
     */
40 16
    protected function createFindUserByTokenQuery($token)
41
    {
42 16
        $queryBuilder = $this->createQueryBuilder('accessToken');
43 16
        $queryBuilder->where('accessToken.token = :token');
44 16
        $queryBuilder->setParameter('token', $token);
45
46 16
        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 16
    private function isExpired(AccessToken $accessToken)
67
    {
68 16
        if (null !== $accessToken->getExpiry()) {
69
            return $accessToken->getExpiry() < new \DateTime();
70
        }
71
72 16
        return false;
73
    }
74
}
75