issue-39 : code quality, typage manquant
Cadoles/hydra-sql/pipeline/head This commit is unstable Details

This commit is contained in:
Rudy Masson 2024-09-24 11:34:29 +02:00
parent a1049a55a2
commit f2945e01de
11 changed files with 40 additions and 37 deletions

View File

@ -4,12 +4,13 @@ namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\ErrorHandler\Exception\FlattenException; use Symfony\Component\ErrorHandler\Exception\FlattenException;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
class CustomErrorController extends AbstractController class CustomErrorController extends AbstractController
{ {
#[Route(path: '/error', name: 'custom_error_controller')] #[Route(path: '/error', name: 'custom_error_controller')]
public function show(FlattenException $exception) public function show(FlattenException $exception): Response
{ {
$statusCode = $exception->getStatusCode(); $statusCode = $exception->getStatusCode();
$message = $exception->getMessage(); $message = $exception->getMessage();

View File

@ -4,6 +4,7 @@ namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
@ -17,7 +18,7 @@ class LocaleController extends AbstractController
} }
#[Route(path: 'locale/{locale?}', name: 'locale_change')] #[Route(path: 'locale/{locale?}', name: 'locale_change')]
public function changeLocal(?string $locale, Request $request) public function changeLocal(?string $locale, Request $request): RedirectResponse
{ {
if (empty($locale)) { if (empty($locale)) {
$locale = $this->params->get('default_locale'); $locale = $this->params->get('default_locale');

View File

@ -8,18 +8,18 @@ use App\Hydra\HydraService;
use App\SQLLogin\SQLLoginRequest; use App\SQLLogin\SQLLoginRequest;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Symfony\Component\Finder\Exception\AccessDeniedException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Finder\Exception\AccessDeniedException;
use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
class MainController extends AbstractController class MainController extends AbstractController
{ {
public HydraService $hydra; private HydraService $hydra;
public Client $client; private Client $client;
public SessionInterface $session; private SessionInterface $session;
public function __construct(SessionInterface $session, HydraService $hydra, Client $client) public function __construct(SessionInterface $session, HydraService $hydra, Client $client)
{ {
@ -33,6 +33,7 @@ class MainController extends AbstractController
{ {
return $this->hydra->handleLoginRequest($request); return $this->hydra->handleLoginRequest($request);
} }
/* /*
* Route de Healthcheck (notament pour kubernetes) * Route de Healthcheck (notament pour kubernetes)
*/ */
@ -43,7 +44,7 @@ class MainController extends AbstractController
} }
#[Route('/connect/login-accept', name: 'app_login_accept', methods: ['GET'])] #[Route('/connect/login-accept', name: 'app_login_accept', methods: ['GET'])]
public function loginAccept(Request $request, SQLLoginRequest $sqlLoginRequest): RedirectResponse public function loginAccept(SQLLoginRequest $sqlLoginRequest): RedirectResponse
{ {
$user = $this->getUser(); $user = $this->getUser();

View File

@ -56,7 +56,7 @@ class SecurityController extends AbstractController
} }
#[Route('/logout', name: 'logout')] #[Route('/logout', name: 'logout')]
public function logout(Request $request) public function logout(Request $request): void
{ {
} }
} }

View File

@ -6,7 +6,7 @@ use Symfony\Component\Security\Core\User\UserInterface;
class User implements UserInterface class User implements UserInterface
{ {
protected array $attributes = []; private array $attributes = [];
private string $login; private string $login;
private string $password; private string $password;
private bool $rememberMe; private bool $rememberMe;

View File

@ -16,7 +16,7 @@ class LocaleSubscriber implements EventSubscriberInterface
$this->defaultLocale = $defaultLocale; $this->defaultLocale = $defaultLocale;
} }
public function onKernelRequest(RequestEvent $event) public function onKernelRequest(RequestEvent $event): void
{ {
$request = $event->getRequest(); $request = $event->getRequest();
if (!$request->hasPreviousSession()) { if (!$request->hasPreviousSession()) {
@ -32,7 +32,7 @@ class LocaleSubscriber implements EventSubscriberInterface
} }
} }
public static function getSubscribedEvents() public static function getSubscribedEvents(): array
{ {
return [ return [
KernelEvents::REQUEST => [['onKernelRequest', 20]], KernelEvents::REQUEST => [['onKernelRequest', 20]],

View File

@ -14,10 +14,10 @@ class SQLLoginRequest
public const TABLE_NAME = 'table_name'; public const TABLE_NAME = 'table_name';
public const SUBJECT_REWRITE_EXPRESSION = 'subject_rewrite_expression'; public const SUBJECT_REWRITE_EXPRESSION = 'subject_rewrite_expression';
protected array $config; private array $config;
protected string $dsn; private string $dsn;
protected string $user; private string $user;
protected string $password; private string $password;
public function __construct(string $dsn, string $user, string $password, array $config = []) public function __construct(string $dsn, string $user, string $password, array $config = [])
{ {
@ -72,7 +72,7 @@ class SQLLoginRequest
return $this->config[self::SUBJECT_REWRITE_EXPRESSION]; return $this->config[self::SUBJECT_REWRITE_EXPRESSION];
} }
public function getRequestScope() public function getRequestScope(): string
{ {
$scope = ''; $scope = '';
if (!$this->config[self::DATA_TO_FETCH]) { if (!$this->config[self::DATA_TO_FETCH]) {
@ -80,12 +80,12 @@ class SQLLoginRequest
} }
foreach ($this->config[self::DATA_TO_FETCH] as $data) { foreach ($this->config[self::DATA_TO_FETCH] as $data) {
$scope .= $data . ','; $scope .= $data.',';
} }
// On enlève la dernière virgule // On enlève la dernière virgule
$scope = substr($scope, 0, -1); $scope = substr($scope, 0, -1);
return 'SELECT ' . $scope . ' FROM ' . $this->getTableName() . ' WHERE ' . $this->getLoginColumnName() . ' = :' . $this->getLoginColumnName() . ';'; return 'SELECT '.$scope.' FROM '.$this->getTableName().' WHERE '.$this->getLoginColumnName().' = :'.$this->getLoginColumnName().';';
} }
/** /**
@ -96,9 +96,9 @@ class SQLLoginRequest
{ {
$fields = $this->getPasswordColumnName(); $fields = $this->getPasswordColumnName();
if (!empty($this->getSaltColumnName())) { if (!empty($this->getSaltColumnName())) {
$fields .= ', ' . $this->getSaltColumnName(); $fields .= ', '.$this->getSaltColumnName();
} }
return 'SELECT ' . $fields . ' FROM ' . $this->getTableName() . ' WHERE ' . $this->getLoginColumnName() . ' = :' . $this->getLoginColumnName() . ';'; return 'SELECT '.$fields.' FROM '.$this->getTableName().' WHERE '.$this->getLoginColumnName().' = :'.$this->getLoginColumnName().';';
} }
} }

View File

@ -30,7 +30,7 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
/** /**
* Pas utilisé, mais on doit le garder pour le implements * Pas utilisé, mais on doit le garder pour le implements
*/ */
public function hash(string $plainPassword, string $salt = null): string public function hash(string $plainPassword, ?string $salt = null): string
{ {
if ($this->isPasswordTooLong($plainPassword)) { if ($this->isPasswordTooLong($plainPassword)) {
throw new InvalidPasswordException(); throw new InvalidPasswordException();
@ -39,7 +39,7 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
return hash($plainPassword.$salt, $this->hashAlgoLegacy[0]); return hash($plainPassword.$salt, $this->hashAlgoLegacy[0]);
} }
public function verify(string $hashedPassword, string $plainPassword, string $salt = null): bool public function verify(string $hashedPassword, string $plainPassword, ?string $salt = null): bool
{ {
if ('' === $plainPassword || $this->isPasswordTooLong($plainPassword)) { if ('' === $plainPassword || $this->isPasswordTooLong($plainPassword)) {
return false; return false;
@ -76,10 +76,8 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
/** /**
* Retourne la string à hasher en fonction du pattern indiqué * Retourne la string à hasher en fonction du pattern indiqué
*
* @return string
*/ */
protected function getPasswordToHash($plainTextPassword, $salt) protected function getPasswordToHash(string $plainTextPassword, ?string $salt = null): string
{ {
$arrayRef = [ $arrayRef = [
self::PASSWORD_PATTERN => $plainTextPassword, self::PASSWORD_PATTERN => $plainTextPassword,
@ -101,7 +99,7 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
return $completedPlainPassword; return $completedPlainPassword;
} }
protected function compareSsha($hashPassword, $plainPassword) protected function compareSsha(string $hashPassword, string $plainPassword): bool
{ {
$base_64_hash_with_salt = substr($hashPassword, 6); $base_64_hash_with_salt = substr($hashPassword, 6);
$hash_with_salt = base64_decode($base_64_hash_with_salt); $hash_with_salt = base64_decode($base_64_hash_with_salt);

View File

@ -31,7 +31,7 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
public const ERROR_DATA_TO_FETCH_CONFIGURATION = 'error_data_to_fetch_configuration'; public const ERROR_DATA_TO_FETCH_CONFIGURATION = 'error_data_to_fetch_configuration';
public const ERROR_SECURITY_PATTERN_CONFIGURATION = 'error_security_pattern_configuration'; public const ERROR_SECURITY_PATTERN_CONFIGURATION = 'error_security_pattern_configuration';
protected string $baseUrl; private string $baseUrl;
private SQLLoginService $sqlLoginService; private SQLLoginService $sqlLoginService;
private PasswordEncoder $passwordHasher; private PasswordEncoder $passwordHasher;
@ -54,14 +54,14 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey): RedirectResponse public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey): RedirectResponse
{ {
return new RedirectResponse($this->baseUrl . '/connect/login-accept'); return new RedirectResponse($this->baseUrl.'/connect/login-accept');
} }
public function onAuthenticationFailure(Request $request, AuthenticationException $exception): RedirectResponse public function onAuthenticationFailure(Request $request, AuthenticationException $exception): RedirectResponse
{ {
$request->getSession()->set(Security::AUTHENTICATION_ERROR, $exception); $request->getSession()->set(Security::AUTHENTICATION_ERROR, $exception);
return new RedirectResponse($this->baseUrl . '/login'); return new RedirectResponse($this->baseUrl.'/login');
} }
public function authenticate(Request $request): SelfValidatingPassport public function authenticate(Request $request): SelfValidatingPassport
@ -86,7 +86,7 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
} }
if (null === $remoteHashedPassword) { if (null === $remoteHashedPassword) {
$remoteHashedPassword = ""; $remoteHashedPassword = '';
} }
try { try {
@ -122,6 +122,6 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
protected function getLoginUrl(Request $request): string protected function getLoginUrl(Request $request): string
{ {
return $this->baseUrl . '/login'; return $this->baseUrl.'/login';
} }
} }

View File

@ -31,7 +31,7 @@ class SQLLoginUserProvider implements UserProviderInterface
return $this->loadUserByIdentifier($username, null); return $this->loadUserByIdentifier($username, null);
} }
public function refreshUser(UserInterface $user) public function refreshUser(UserInterface $user): UserInterface|null
{ {
if (!$user instanceof User) { if (!$user instanceof User) {
throw new UnsupportedUserException(sprintf('Invalid user class "%s".', get_class($user))); throw new UnsupportedUserException(sprintf('Invalid user class "%s".', get_class($user)));
@ -40,7 +40,7 @@ class SQLLoginUserProvider implements UserProviderInterface
return $this->loadUserByIdentifier($user->getUserIdentifier(), $user); return $this->loadUserByIdentifier($user->getUserIdentifier(), $user);
} }
public function supportsClass(string $class) public function supportsClass(string $class): bool
{ {
return User::class === $class || is_subclass_of($class, User::class); return User::class === $class || is_subclass_of($class, User::class);
} }

View File

@ -16,7 +16,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class SQLLoginService extends AbstractController class SQLLoginService extends AbstractController
{ {
public SQLLoginRequest $sqlLoginRequest; private SQLLoginRequest $sqlLoginRequest;
public function __construct(SQLLoginRequest $sqlLoginRequest, private LoggerInterface $loggerInterface) public function __construct(SQLLoginRequest $sqlLoginRequest, private LoggerInterface $loggerInterface)
{ {
@ -56,6 +56,7 @@ class SQLLoginService extends AbstractController
if (false === $datas) { if (false === $datas) {
throw new Exception(sprintf('La requête sql "%s" a renvoyé un résultat incorrect.', $request)); throw new Exception(sprintf('La requête sql "%s" a renvoyé un résultat incorrect.', $request));
} }
return $datas; return $datas;
} }
@ -83,13 +84,14 @@ class SQLLoginService extends AbstractController
if (!$password) { if (!$password) {
throw new Exception('Une erreur est survenue lors de la récupération des données'); throw new Exception('Une erreur est survenue lors de la récupération des données');
} }
return [ return [
$password[$this->sqlLoginRequest->getPasswordColumnName()], $password[$this->sqlLoginRequest->getPasswordColumnName()],
isset($password[$this->sqlLoginRequest->getSaltColumnName()]) ? $password[$this->sqlLoginRequest->getSaltColumnName()] : null, isset($password[$this->sqlLoginRequest->getSaltColumnName()]) ? $password[$this->sqlLoginRequest->getSaltColumnName()] : null,
]; ];
} }
public function getConnection(): PDO private function getConnection(): PDO
{ {
// Appel du singleton // Appel du singleton
$sqlLogin = SQLLoginConnect::getInstance(); $sqlLogin = SQLLoginConnect::getInstance();