AzuraCast/src/Entity/Repository/UserLoginTokenRepository.php

44 lines
1.0 KiB
PHP

<?php
namespace App\Entity\Repository;
use App\Entity;
use App\Security\SplitToken;
class UserLoginTokenRepository extends AbstractSplitTokenRepository
{
public function createToken(Entity\User $user): SplitToken
{
$token = SplitToken::generate();
$loginToken = new Entity\UserLoginToken($user, $token);
$this->em->persist($loginToken);
$this->em->flush();
return $token;
}
public function revokeForUser(Entity\User $user): void
{
$this->em->createQuery(
<<<'DQL'
DELETE FROM App\Entity\UserLoginToken ult
WHERE ult.user = :user
DQL
)->setParameter('user', $user)
->execute();
}
public function cleanup(): void
{
$threshold = time() - 86400; // One day
$this->em->createQuery(
<<<'DQL'
DELETE FROM App\Entity\UserLoginToken ut WHERE ut.created_at <= :threshold
DQL
)->setParameter('threshold', $threshold)
->execute();
}
}