Completed
Push — develop ( e72854...0832ef )
by Daniel
06:46
created

UserRepository   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 33
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 20
dl 0
loc 33
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A findOneByPasswordResetToken() 0 13 1
A findOneByEmail() 0 7 1
1
<?php
2
3
namespace Silverback\ApiComponentBundle\Repository\User;
4
5
use Silverback\ApiComponentBundle\Entity\User\User;
6
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
7
use Symfony\Bridge\Doctrine\RegistryInterface;
8
9
/**
10
 * @method User|null find($id, $lockMode = null, $lockVersion = null)
11
 * @method User|null findOneBy(array $criteria, array $orderBy = null)
12
 * @method User[]    findAll()
13
 * @method User[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
14
 */
15
class UserRepository extends ServiceEntityRepository
16
{
17
    private $passwordRequestTimeout;
18
19
    public function __construct(RegistryInterface $registry, int $passwordRequestTimeout)
20
    {
21
        parent::__construct($registry, User::class);
22
        $this->passwordRequestTimeout = $passwordRequestTimeout;
23
    }
24
25
    public function findOneByEmail($value): ?User
26
    {
27
        return $this->createQueryBuilder('u')
28
            ->andWhere('u.email = :val')
29
            ->setParameter('val', $value)
30
            ->getQuery()
31
            ->getOneOrNullResult()
32
        ;
33
    }
34
35
    public function findOneByPasswordResetToken(string $username, string $token)
36
    {
37
        $minimumRequestDateTime = new \DateTime();
38
        $minimumRequestDateTime->modify(sprintf('-%d seconds', $this->passwordRequestTimeout));
39
        return $this->createQueryBuilder('u')
40
            ->andWhere('u.username = :username')
41
            ->andWhere('u.passwordResetConfirmationToken = :token')
42
            ->andWhere('u.passwordRequestedAt > :passwordRequestedAt')
43
            ->setParameter('username', $username)
44
            ->setParameter('token', $token)
45
            ->setParameter('passwordRequestedAt', $minimumRequestDateTime)
46
            ->getQuery()
47
            ->getOneOrNullResult()
48
            ;
49
    }
50
}
51