<?php
namespace App\EventSubscriber;
use App\Entity\User;
use App\Service\ReCaptchaService;
use Doctrine\ORM\EntityManagerInterface;
use Karser\Recaptcha3Bundle\Validator\Constraints\Recaptcha3;
use ReCaptcha\ReCaptcha;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
class UserSubscriber implements EventSubscriberInterface
{
/**
* @var EntityManagerInterface
*/
private $em;
/**
* @var Security
*/
private $security;
/**
* @var ReCaptchaService
*/
private $reCaptcha;
public function __construct(EntityManagerInterface $em,
Security $security,
ReCaptchaService $reCaptcha)
{
$this->em = $em;
$this->security = $security;
$this->reCaptcha = $reCaptcha;
}
public static function getSubscribedEvents(): array
{
return [
InteractiveLoginEvent::class => 'onLogin',
];
}
public function onLogin(InteractiveLoginEvent $event)
{
/** @var User $user */
$user = $this->security->getUser();
if ($user) {
$user->setLastLogin(new \DateTime('now'));
$this->em->flush();
}
/*
$reCaptchaResponse = $event->getRequest()->get('g-recaptcha-response');
$captchaRequest = $this->reCaptcha->getReCaptcha()->verify($reCaptchaResponse);
if ($captchaRequest->isSuccess()) {
if ($user) {
$user->setLastLogin(new \DateTime('now'));
$this->em->flush();
}
} else {
$event->getRequest()->getSession()->getFlashBag()->add('warning', 'Your login session has expired. Please enter your credentials and submit again.');
$event->getAuthenticationToken()->setUser(new User());
}
*/
}
}