6 Commits

Author SHA1 Message Date
11de906f63 chore(login) #14318 : rework redirects during authentication flow
Some checks failed
Cadoles/hydra-sql/pipeline/head There was a failure building this commit
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
2025-08-26 16:39:27 +02:00
3933f8bfba Merge pull request 'fix(login) #59 : handle case earlier during login' (#60) from issue-59 into develop
Some checks failed
Cadoles/hydra-sql/pipeline/head There was a failure building this commit
Reviewed-on: #60
Reviewed-by: Valentin Carroy <vcarroy@cadoles.com>
2025-08-18 11:09:18 +02:00
6faf465733 fix(login) #59 : handle case earlier during login
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
Cadoles/hydra-sql/pipeline/head There was a failure building this commit
2025-08-18 10:53:35 +02:00
5f2654c3c4 Merge pull request 'symfony 6.4 and PHP 8.4 upgrade' (#58) from issue-57 into develop
Some checks failed
Cadoles/hydra-sql/pipeline/head There was a failure building this commit
Reviewed-on: #58
2025-07-30 11:46:02 +02:00
2e5e1e72ae chore(symfony) #57 : bump symfony to version 6.4 and fix deprecations
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
2025-07-30 11:37:06 +02:00
746ca35b69 chore(php) #57 : bump PHP version to 8.4 2025-07-10 11:40:56 +02:00
12 changed files with 31 additions and 24 deletions

2
Jenkinsfile vendored
View File

@ -4,7 +4,7 @@
// Utilisation du pipeline partagé pour les applications Symfony de Cadoles // Utilisation du pipeline partagé pour les applications Symfony de Cadoles
// Le nom de l'image Docker passée en paramètre vous permet de préciser l'environnement de test // Le nom de l'image Docker passée en paramètre vous permet de préciser l'environnement de test
// de votre application Symfony // de votre application Symfony
symfonyAppPipeline('ubuntu:22.04', [ symfonyAppPipeline('ubuntu:25.04', [
'hooks': [ 'hooks': [
// Run docker image build, verification and publication stages // Run docker image build, verification and publication stages
'postSymfonyAppPipeline': { 'postSymfonyAppPipeline': {

View File

@ -26,7 +26,6 @@
"symfony/translation": "6.4.*", "symfony/translation": "6.4.*",
"symfony/twig-bundle": "6.4.*", "symfony/twig-bundle": "6.4.*",
"symfony/validator": "6.4.*", "symfony/validator": "6.4.*",
"symfony/web-profiler-bundle": "6.4.*",
"symfony/webpack-encore-bundle": "^1.16", "symfony/webpack-encore-bundle": "^1.16",
"symfony/yaml": "6.4.*" "symfony/yaml": "6.4.*"
}, },
@ -81,6 +80,7 @@
}, },
"require-dev": { "require-dev": {
"rector/rector": "^2.1", "rector/rector": "^2.1",
"symfony/debug-bundle": "6.4.*" "symfony/debug-bundle": "6.4.*",
"symfony/web-profiler-bundle": "6.4.*"
} }
} }

12
composer.lock generated
View File

@ -6206,16 +6206,16 @@
}, },
{ {
"name": "rector/rector", "name": "rector/rector",
"version": "2.1.0", "version": "2.1.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/rectorphp/rector.git", "url": "https://github.com/rectorphp/rector.git",
"reference": "d513dea45a94394b660e15c155d1fa27826f8e30" "reference": "d0917c069bb0d9bb06ed111cf052510f609015a4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/d513dea45a94394b660e15c155d1fa27826f8e30", "url": "https://api.github.com/repos/rectorphp/rector/zipball/d0917c069bb0d9bb06ed111cf052510f609015a4",
"reference": "d513dea45a94394b660e15c155d1fa27826f8e30", "reference": "d0917c069bb0d9bb06ed111cf052510f609015a4",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -6254,7 +6254,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/rectorphp/rector/issues", "issues": "https://github.com/rectorphp/rector/issues",
"source": "https://github.com/rectorphp/rector/tree/2.1.0" "source": "https://github.com/rectorphp/rector/tree/2.1.1"
}, },
"funding": [ "funding": [
{ {
@ -6262,7 +6262,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-06-24T20:26:57+00:00" "time": "2025-07-10T11:31:31+00:00"
}, },
{ {
"name": "symfony/debug-bundle", "name": "symfony/debug-bundle",

View File

@ -8,7 +8,7 @@
# Using SetHandler avoids issues with using ProxyPassMatch in combination # Using SetHandler avoids issues with using ProxyPassMatch in combination
# with mod_rewrite or mod_autoindex # with mod_rewrite or mod_autoindex
<FilesMatch \.php$> <FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://127.0.0.1:9000" SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://127.0.0.1:9000"
# for Unix sockets, Apache 2.4.10 or higher # for Unix sockets, Apache 2.4.10 or higher
# SetHandler proxy:unix:/path/to/fpm.sock|fcgi://dummy # SetHandler proxy:unix:/path/to/fpm.sock|fcgi://dummy
</FilesMatch> </FilesMatch>

View File

@ -7,7 +7,7 @@ ARG https_proxy=
ENV WAITFORIT_VERSION="v2.4.1" ENV WAITFORIT_VERSION="v2.4.1"
ARG PHP_VERSION="8.1" ARG PHP_VERSION="8.4"
ENV PHP_VERSION $PHP_VERSION ENV PHP_VERSION $PHP_VERSION
RUN export DEBIAN_FRONTEND=noninteractive && \ RUN export DEBIAN_FRONTEND=noninteractive && \
@ -68,14 +68,14 @@ RUN chmod +x /var/www/install-composer.sh &&\
# On active les mods d'apache nécessaires # On active les mods d'apache nécessaires
RUN a2enmod rewrite RUN a2enmod rewrite
RUN a2enmod proxy_fcgi setenvif RUN a2enmod proxy_fcgi setenvif
RUN a2enconf php8.1-fpm RUN a2enconf php8.4-fpm
RUN a2enmod proxy RUN a2enmod proxy
RUN a2enmod expires RUN a2enmod expires
RUN a2enmod headers RUN a2enmod headers
# On injecte les bonnes configs apache et php-fpm # On injecte les bonnes configs apache et php-fpm
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
COPY www.conf /etc/php/8.1/fpm/pool.d/www.conf COPY www.conf /etc/php/8.4/fpm/pool.d/www.conf
EXPOSE 5000 EXPOSE 5000
EXPOSE 80 EXPOSE 80
@ -83,8 +83,8 @@ EXPOSE 80
WORKDIR /var/www WORKDIR /var/www
# On démarre php-fpm une fois pour créer les sockets # On démarre php-fpm une fois pour créer les sockets
RUN service php8.1-fpm start RUN service php8.4-fpm start
RUN service php8.1-fpm stop RUN service php8.4-fpm stop
COPY docker-entrypoint.sh /docker-entrypoint.sh COPY docker-entrypoint.sh /docker-entrypoint.sh
@ -99,7 +99,7 @@ RUN sed -i '/imklog/s/^/#/' /etc/rsyslog.conf
COPY rsyslog.conf /etc/rsyslog.d/var/www.conf COPY rsyslog.conf /etc/rsyslog.d/var/www.conf
COPY supervisor.ini /etc/supervisor/supervisor.ini COPY supervisor.ini /etc/supervisor/supervisor.ini
COPY php.ini /etc/php/8.1/fpm/php.ini COPY php.ini /etc/php/8.4/fpm/php.ini
VOLUME /container-lifecycle VOLUME /container-lifecycle

View File

@ -26,7 +26,7 @@ stderr_logfile_maxbytes=0
[program:php-fpm] [program:php-fpm]
environment=HOSTNAME="%(ENV_HOSTNAME)s" environment=HOSTNAME="%(ENV_HOSTNAME)s"
command = /usr/sbin/php-fpm8.1 -F command = /usr/sbin/php-fpm8.4 -F
autostart = true autostart = true
autorestart = true autorestart = true
directory = /var/www directory = /var/www

View File

@ -6,7 +6,7 @@ error_log=/dev/stderr
user = www-data user = www-data
group = www-data group = www-data
listen = /run/php/php8.1-fpm.sock listen = /run/php/php8.4-fpm.sock
listen.owner = www-data listen.owner = www-data
listen.group = www-data listen.group = www-data

View File

@ -3,6 +3,7 @@
declare(strict_types=1); declare(strict_types=1);
use Rector\Config\RectorConfig; use Rector\Config\RectorConfig;
use Rector\Renaming\Rector\Class_\RenameAttributeRector;
use Rector\Symfony\Set\SymfonySetList; use Rector\Symfony\Set\SymfonySetList;
return static function (RectorConfig $rectorConfig): void { return static function (RectorConfig $rectorConfig): void {
@ -15,7 +16,13 @@ return static function (RectorConfig $rectorConfig): void {
SymfonySetList::SYMFONY_61, SymfonySetList::SYMFONY_61,
SymfonySetList::SYMFONY_62, SymfonySetList::SYMFONY_62,
SymfonySetList::SYMFONY_63, SymfonySetList::SYMFONY_63,
SymfonySetList::SYMFONY_64,
SymfonySetList::SYMFONY_CODE_QUALITY, SymfonySetList::SYMFONY_CODE_QUALITY,
SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION, SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION,
]); ]);
$rectorConfig->importShortClasses(false);
$rectorConfig->skip([
RenameAttributeRector::class
]);
}; };

View File

@ -20,7 +20,8 @@ class MainController extends AbstractController
public function __construct( public function __construct(
private readonly RequestStack $requestStack, private readonly RequestStack $requestStack,
private readonly HydraService $hydra, private readonly HydraService $hydra,
private readonly Client $client private readonly Client $client,
private readonly SQLLoginRequest $sqlLoginRequest
){ ){
} }
@ -40,7 +41,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(SQLLoginRequest $sqlLoginRequest): RedirectResponse public function loginAccept(): RedirectResponse
{ {
$user = $this->getUser(); $user = $this->getUser();
@ -54,7 +55,7 @@ class MainController extends AbstractController
$subject = $user->getLogin(); $subject = $user->getLogin();
$subjectRewriteExpression = $sqlLoginRequest->getSubjectRewriteExpression(); $subjectRewriteExpression = $this->sqlLoginRequest->getSubjectRewriteExpression();
if (null != $subjectRewriteExpression) { if (null != $subjectRewriteExpression) {
$expressionLanguage = new ExpressionLanguage(); $expressionLanguage = new ExpressionLanguage();

View File

@ -39,7 +39,7 @@ class HydraService extends AbstractController
// si le challenge est validé par hydra, on le stocke en session pour l'utiliser par la suite et on redirige vers une route interne protégée qui va déclencher l'identification FranceConnect // si le challenge est validé par hydra, on le stocke en session pour l'utiliser par la suite et on redirige vers une route interne protégée qui va déclencher l'identification FranceConnect
$this->requestStack->getSession()->set('challenge', $loginRequestInfo['challenge']); $this->requestStack->getSession()->set('challenge', $loginRequestInfo['challenge']);
return new RedirectResponse($this->baseUrl.'/connect/login-accept'); return new RedirectResponse($this->baseUrl.'/login');
} }
public function handleConsentRequest(Request $request): RedirectResponse public function handleConsentRequest(Request $request): RedirectResponse

View File

@ -60,7 +60,7 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
public function authenticate(Request $request): SelfValidatingPassport public function authenticate(Request $request): SelfValidatingPassport
{ {
$form = $request->request->all(key: 'login'); $form = $request->request->all(key: 'login');
$login = $form['login']; $login = \strtolower($form['login']);
$plaintextPassword = $form['password']; $plaintextPassword = $form['password'];
$session = $request->getSession(); $session = $request->getSession();
try { try {

View File

@ -28,7 +28,6 @@ class SQLLoginService extends AbstractController
public function fetchPasswordAndDatas(string $login): array public function fetchPasswordAndDatas(string $login): array
{ {
$dataRequest = $this->sqlLoginRequest->getDatasRequest(); $dataRequest = $this->sqlLoginRequest->getDatasRequest();
$login = \strtolower($login);
$datas = $this->executeRequestWithLogin($dataRequest, $login); $datas = $this->executeRequestWithLogin($dataRequest, $login);
return $datas; return $datas;