<?php
namespace App\Security\Listener;
use App\Entity\Company;
use App\Entity\User;
use App\Security\UserChecker;
use Psr\Log\LoggerInterface;
use Symfony\Component\Security\Core\Event\AuthenticationSuccessEvent;
use Symfony\Component\Security\Core\Exception\CustomUserMessageAccountStatusException;
use Symfony\Component\Security\Core\Security;
/**
* This class is here to check the quotas on a user when the login_success is triggered
* each request or when the token is created and sent
* Class LoginSuccessListener
* @package App\Security\Listener
*/
class LoginSuccessListener
{
/**
* @var LoggerInterface
*/
private $logger;
/**
* @var Security
*/
private $security;
public function __construct(LoggerInterface $logger, Security $security)
{
$this->logger = $logger;
$this->security = $security;
}
public function onSecurityAuthenticationSuccess(AuthenticationSuccessEvent $event)
{
$this->logger->info('Check the quotas for the user: ' . $event->getAuthenticationToken()->getUsername());
$user = $event->getAuthenticationToken()->getUser();
if ($user instanceof User && !$user->checkQuotas()){
$msg = UserChecker::QUOTAS_MESSAGE;
if ($company = $user->getCompany()){
$msg = ($company->getMessage(Company::MESSAGE_QUOTAS))??$msg;
}
throw new CustomUserMessageAccountStatusException($msg);
}
}
}