Completed
Push — master ( 2afc29...29656f )
by Philip
06:07
created

AccessTokenRepository::persist()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 7
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 1
crap 1
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
/**
10
 * @author Philip Washington Sorst <[email protected]>
11
 */
12
class AccessTokenRepository extends EntityRepository implements AccessTokenRepositoryInterface
13
{
14
    /**
15
     * {@inheritdoc}
16
     */
17 48
    public function findUserByToken($token)
18
    {
19 48
        return $this->getEntityManager()->transactional(
20 48
            function () use ($token) {
21
                /** @var AccessToken $accessToken */
22 48
                $accessToken = $this->createFindUserByTokenQuery($token)->getOneOrNullResult();
23 48
                if (null === $accessToken) {
24 2
                    return null;
25
                }
26
27 48
                if ($this->isExpired($accessToken)) {
28
                    $this->getEntityManager()->remove($accessToken);
29
30
                    return null;
31
                }
32
33 48
                return $accessToken->getUser();
34 48
            }
35
        );
36
    }
37
38
    /**
39
     * @param string $token
40
     *
41
     * @return Query
42
     */
43 48
    protected function createFindUserByTokenQuery($token)
44
    {
45 48
        $queryBuilder = $this->createQueryBuilder('accessToken');
46 48
        $queryBuilder->where('accessToken.token = :token');
47 48
        $queryBuilder->setParameter('token', $token);
48
49 48
        return $queryBuilder->getQuery();
50
    }
51
52
    /**
53
     * {@inheritdoc}
54
     */
55
    public function findExpiredTokens()
56
    {
57
        $queryBuilder = $this->createQueryBuilder('token');
58
        $queryBuilder->where('token.expiry < :now');
59
        $queryBuilder->setParameter('now', new \DateTime());
60
61
        return $queryBuilder->getQuery()->getResult();
62
    }
63
64
    /**
65
     * @param AccessToken $accessToken
66
     *
67
     * @return bool
68
     */
69 48
    private function isExpired(AccessToken $accessToken)
70
    {
71 48
        if (null !== $accessToken->getExpiry()) {
72
            return $accessToken->getExpiry() < new \DateTime();
73
        }
74
75 48
        return false;
76
    }
77
78
    /**
79
     * {@inheritdoc}
80
     */
81 2
    public function persist(AccessToken $accessToken): AccessToken
82
    {
83 2
        $this->getEntityManager()->persist($accessToken);
84 2
        $this->getEntityManager()->flush($accessToken);
85
86 2
        return $accessToken;
87
    }
88
89
    /**
90
     * {@inheritdoc}
91
     */
92 2
    public function remove(AccessToken $accessToken)
93
    {
94 2
        $this->getEntityManager()->remove($accessToken);
95 2
        $this->getEntityManager()->flush($accessToken);
96 2
    }
97
}
98