complément logs et exceptions #20
|
@ -17,7 +17,7 @@ use Symfony\Contracts\Translation\TranslatorInterface;
|
||||||
class SecurityController extends AbstractController
|
class SecurityController extends AbstractController
|
||||||
{
|
{
|
||||||
#[Route('/login', name: 'app_login')]
|
#[Route('/login', name: 'app_login')]
|
||||||
public function login(ParameterBagInterface $params, AuthenticationUtils $authenticationUtils, Request $request, TranslatorInterface $trans): Response
|
public function login(ParameterBagInterface $params, AuthenticationUtils $authenticationUtils, Request $request, TranslatorInterface $trans): Response|RedirectResponse
|
||||||
{
|
{
|
||||||
// Si l'utilisateur est déjà connecté on le renvoie sur la page du site demandeur
|
// Si l'utilisateur est déjà connecté on le renvoie sur la page du site demandeur
|
||||||
if ($this->getUser()) {
|
if ($this->getUser()) {
|
||||||
|
@ -32,10 +32,6 @@ class SecurityController extends AbstractController
|
||||||
$loginForm->addError(new FormError($trans->trans('error.login', [], 'messages')));
|
$loginForm->addError(new FormError($trans->trans('error.login', [], 'messages')));
|
||||||
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_LOGIN);
|
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_LOGIN);
|
||||||
}
|
}
|
||||||
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_PASSWORD)) {
|
|
||||||
$loginForm->addError(new FormError($trans->trans('error.login', [], 'messages')));
|
|
||||||
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_PASSWORD);
|
|
||||||
}
|
|
||||||
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_PDO)) {
|
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_PDO)) {
|
||||||
$loginForm->addError(new FormError($trans->trans('error.pdo', [], 'messages')));
|
$loginForm->addError(new FormError($trans->trans('error.pdo', [], 'messages')));
|
||||||
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_PDO);
|
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_PDO);
|
||||||
|
|
|
@ -10,6 +10,7 @@ use App\SQLLogin\Exception\DataToFetchConfigurationException;
|
||||||
use App\SQLLogin\Exception\InvalidSQLPasswordException;
|
use App\SQLLogin\Exception\InvalidSQLPasswordException;
|
||||||
use App\SQLLogin\Exception\LoginElementsConfigurationException;
|
use App\SQLLogin\Exception\LoginElementsConfigurationException;
|
||||||
use App\SQLLogin\Exception\SecurityPatternConfigurationException;
|
use App\SQLLogin\Exception\SecurityPatternConfigurationException;
|
||||||
|
use Exception;
|
||||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||||
|
@ -24,7 +25,6 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
|
||||||
{
|
{
|
||||||
public const LOGIN_ROUTE = 'app_login';
|
public const LOGIN_ROUTE = 'app_login';
|
||||||
public const ERROR_LOGIN = 'error_login';
|
public const ERROR_LOGIN = 'error_login';
|
||||||
public const ERROR_PASSWORD = 'error_password';
|
|
||||||
public const ERROR_PDO = 'error_pdo';
|
public const ERROR_PDO = 'error_pdo';
|
||||||
public const ERROR_SQL_LOGIN = 'error_sql_login';
|
public const ERROR_SQL_LOGIN = 'error_sql_login';
|
||||||
public const ERROR_CONFIGURATION = 'error_configuration';
|
public const ERROR_CONFIGURATION = 'error_configuration';
|
||||||
|
@ -80,40 +80,42 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
|
||||||
} catch (LoginElementsConfigurationException $e) {
|
} catch (LoginElementsConfigurationException $e) {
|
||||||
$session->set(self::ERROR_CONFIGURATION, true);
|
$session->set(self::ERROR_CONFIGURATION, true);
|
||||||
throw new AuthenticationException();
|
throw new AuthenticationException();
|
||||||
|
} catch (Exception $exception) {
|
||||||
|
$request->getSession()->set(self::ERROR_LOGIN, true);
|
||||||
|
throw new AuthenticationException();
|
||||||
}
|
}
|
||||||
if ($remoteHashedPassword) {
|
if (!$remoteHashedPassword) {
|
||||||
try {
|
throw new Exception('Erreur inconnue');
|
||||||
// Comparaison remote hash et hash du input password + salt
|
}
|
||||||
$this->passwordHasher->verify($remoteHashedPassword, $plaintextPassword, $remoteSalt);
|
try {
|
||||||
$attributes = $this->sqlLoginService->fetchDatas($login);
|
// Comparaison remote hash et hash du input password + salt
|
||||||
$user = new User($login, $remoteHashedPassword, $attributes, $rememberMe);
|
$this->passwordHasher->verify($remoteHashedPassword, $plaintextPassword, $remoteSalt);
|
||||||
|
$attributes = $this->sqlLoginService->fetchDatas($login);
|
||||||
|
$user = new User($login, $remoteHashedPassword, $attributes, $rememberMe);
|
||||||
|
|
||||||
$loader = function (string $userIdentifier) use ($user) {
|
$loader = function (string $userIdentifier) use ($user) {
|
||||||
return $user->getLogin() == $userIdentifier ? $user : null;
|
return $user->getLogin() == $userIdentifier ? $user : null;
|
||||||
};
|
};
|
||||||
$passport = new SelfValidatingPassport(new UserBadge($login, $loader));
|
$passport = new SelfValidatingPassport(new UserBadge($login, $loader));
|
||||||
if ($rememberMe) {
|
if ($rememberMe) {
|
||||||
$passport->addBadge(new RememberMeBadge());
|
$passport->addBadge(new RememberMeBadge());
|
||||||
}
|
|
||||||
$passport->setAttribute('attributes', $user->getAttributes());
|
|
||||||
|
|
||||||
return $passport;
|
|
||||||
} catch (InvalidSQLPasswordException $e) {
|
|
||||||
$session->set(self::ERROR_PASSWORD, true);
|
|
||||||
throw new AuthenticationException();
|
|
||||||
} catch (DataToFetchConfigurationException $e) {
|
|
||||||
$session->set(self::ERROR_DATA_TO_FETCH_CONFIGURATION, true);
|
|
||||||
throw new AuthenticationException();
|
|
||||||
} catch (DatabaseConnectionException $e) {
|
|
||||||
$session->set(self::ERROR_PDO, true);
|
|
||||||
throw new AuthenticationException();
|
|
||||||
} catch (SecurityPatternConfigurationException $e) {
|
|
||||||
$session->set(self::ERROR_SECURITY_PATTERN_CONFIGURATION, true);
|
|
||||||
throw new AuthenticationException();
|
|
||||||
}
|
}
|
||||||
|
|||||||
|
$passport->setAttribute('attributes', $user->getAttributes());
|
||||||
|
|
||||||
|
return $passport;
|
||||||
|
} catch (InvalidSQLPasswordException $e) {
|
||||||
|
$session->set(self::ERROR_LOGIN, true);
|
||||||
|
throw new AuthenticationException();
|
||||||
|
} catch (DataToFetchConfigurationException $e) {
|
||||||
|
$session->set(self::ERROR_DATA_TO_FETCH_CONFIGURATION, true);
|
||||||
|
throw new AuthenticationException();
|
||||||
|
} catch (DatabaseConnectionException $e) {
|
||||||
|
$session->set(self::ERROR_PDO, true);
|
||||||
|
throw new AuthenticationException();
|
||||||
|
} catch (SecurityPatternConfigurationException $e) {
|
||||||
|
$session->set(self::ERROR_SECURITY_PATTERN_CONFIGURATION, true);
|
||||||
|
throw new AuthenticationException();
|
||||||
}
|
}
|
||||||
$request->getSession()->set(self::ERROR_LOGIN, true);
|
|
||||||
throw new AuthenticationException();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getLoginUrl(Request $request): string
|
protected function getLoginUrl(Request $request): string
|
||||||
|
|
|
@ -8,6 +8,7 @@ use App\SQLLogin\Exception\LoginElementsConfigurationException;
|
||||||
use App\SQLLogin\Exception\NullDataToFetchException;
|
use App\SQLLogin\Exception\NullDataToFetchException;
|
||||||
use App\SQLLogin\SQLLoginConnect;
|
use App\SQLLogin\SQLLoginConnect;
|
||||||
use App\SQLLogin\SQLLoginRequest;
|
use App\SQLLogin\SQLLoginRequest;
|
||||||
|
use Exception;
|
||||||
use PDO;
|
use PDO;
|
||||||
use PDOException;
|
use PDOException;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
@ -51,7 +52,7 @@ class SQLLoginService extends AbstractController
|
||||||
return $datas;
|
return $datas;
|
||||||
}
|
}
|
||||||
|
|
||||||
vcarroy
commented
typer $login (mixed possible) typer $login (mixed possible)
rmasson
commented
ok ok
|
|||||||
public function fetchPassword($login): array|bool
|
public function fetchPassword(string $login): array
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$dbh = $this->getConnection();
|
$dbh = $this->getConnection();
|
||||||
|
@ -71,14 +72,14 @@ class SQLLoginService extends AbstractController
|
||||||
$this->loggerInterface->critical($e->getMessage());
|
$this->loggerInterface->critical($e->getMessage());
|
||||||
throw new LoginElementsConfigurationException($e->getMessage());
|
throw new LoginElementsConfigurationException($e->getMessage());
|
||||||
}
|
}
|
||||||
if ($password) {
|
if (!$password) {
|
||||||
return [
|
throw new Exception('Une erreur est survenue lors de la récupération des données');
|
||||||
$password[$this->sqlLoginRequest->getPasswordColumnName()],
|
|
||||||
isset($password[$this->sqlLoginRequest->getSaltColumnName()]) ? $password[$this->sqlLoginRequest->getSaltColumnName()] : null,
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return [
|
||||||
|
$password[$this->sqlLoginRequest->getPasswordColumnName()],
|
||||||
|
isset($password[$this->sqlLoginRequest->getSaltColumnName()]) ? $password[$this->sqlLoginRequest->getSaltColumnName()] : null,
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getConnection(): PDO
|
public function getConnection(): PDO
|
||||||
|
|
Loading…
Reference in New Issue
Le type de $passport ne correspond pas au return type de la méthode.
ok