|
|
|
@ -19,6 +19,7 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface; |
|
|
|
|
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; |
|
|
|
|
use vierbergenlars\AuthserverTosBundle\Entity\UserTos; |
|
|
|
|
use vierbergenlars\AuthserverTosBundle\Form\AcceptTosType; |
|
|
|
|
use Psr\Cache\CacheItemPoolInterface; |
|
|
|
|
|
|
|
|
|
class TosListener implements EventSubscriberInterface |
|
|
|
|
{ |
|
|
|
@ -33,6 +34,11 @@ class TosListener implements EventSubscriberInterface |
|
|
|
|
*/ |
|
|
|
|
private $em; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @var CacheItemPoolInterface |
|
|
|
|
*/ |
|
|
|
|
private $cache; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* |
|
|
|
|
* @var TokenStorageInterface |
|
|
|
@ -76,10 +82,11 @@ class TosListener implements EventSubscriberInterface |
|
|
|
|
return $handlers; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function __construct($terms, $tosVersion, EntityManagerInterface $em, TokenStorageInterface $tokenStorage, UrlGeneratorInterface $urlGenerator) |
|
|
|
|
public function __construct($terms, $tosVersion, CacheItemPoolInterface $cache, EntityManagerInterface $em, TokenStorageInterface $tokenStorage, UrlGeneratorInterface $urlGenerator) |
|
|
|
|
{ |
|
|
|
|
$this->terms = $terms; |
|
|
|
|
$this->tosVersion = $tosVersion; |
|
|
|
|
$this->cache = $cache; |
|
|
|
|
$this->em = $em; |
|
|
|
|
$this->tokenStorage = $tokenStorage; |
|
|
|
|
$this->urlGenerator = $urlGenerator; |
|
|
|
@ -103,9 +110,28 @@ class TosListener implements EventSubscriberInterface |
|
|
|
|
$tosUser = new UserTos($user); |
|
|
|
|
$tosUser->setAcceptedVersion($this->tosVersion); |
|
|
|
|
$this->em->persist($tosUser); |
|
|
|
|
$this->cache->deleteItem('version_u_'.$user->getId()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private function getAcceptedTosVersion(User $user, $force = false) { |
|
|
|
|
$cacheItem = $this->cache->getItem('version_u_'.$user->getId()); |
|
|
|
|
if(!$cacheItem->isHit() || $force) { |
|
|
|
|
$userTos = $this->em->find(UserTos::class, $user); |
|
|
|
|
|
|
|
|
|
if($userTos) { |
|
|
|
|
$cacheItem->set($userTos->getAcceptedVersion()); |
|
|
|
|
} else { |
|
|
|
|
$cacheItem->set(null); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$cacheItem->expiresAfter(24*60*60); // One day |
|
|
|
|
$this->cache->saveDeferred($cacheItem); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $cacheItem->get(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function onKernelRequest(GetResponseEvent $event) |
|
|
|
|
{ |
|
|
|
|
if (!$event->isMasterRequest()) |
|
|
|
@ -118,9 +144,8 @@ class TosListener implements EventSubscriberInterface |
|
|
|
|
return; |
|
|
|
|
if ($token->hasAttribute('vl_tos_accept_ok')) |
|
|
|
|
return; |
|
|
|
|
$userTos = $this->em->find(UserTos::class, $user); |
|
|
|
|
|
|
|
|
|
if ($userTos && $userTos->getAcceptedVersion() >= $this->tosVersion) { |
|
|
|
|
if ($this->getAcceptedTosVersion($user) >= $this->tosVersion) { |
|
|
|
|
$token->setAttribute('vl_tos_accept_ok', true); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|