Compare commits

..

2 Commits

Author SHA1 Message Date
cmsassot 11d4989316 feat(redis): fix session.handler_id: remove '?'
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable Details
Cadoles/hydra-sql/pipeline/head This commit is unstable Details
2023-12-14 15:22:08 +01:00
cmsassot ea7d353be7 feat(redis): add env var HYDRA_SQL_REDIS_PREFIX/HYDRA_SQL_REDIS_TTL
Cadoles/hydra-sql/pipeline/head This commit is unstable Details
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable Details
2023-12-14 11:14:53 +01:00
38 changed files with 6166 additions and 3981 deletions

5
.env
View File

@ -16,7 +16,7 @@
###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=406ccaa0c76a451fdcc2307ea146cbef
URL_LINK="http://localhost"
###< symfony/framework-bundle ###
# configuration bdd
DSN_REMOTE_DATABASE="pgsql:host='postgres';port=5432;dbname=lasql"
@ -41,3 +41,6 @@ LOCK_DSN=flock
SENTRY_DSN=
###< sentry/sentry-symfony ###
REDIS_DSN=redis://redis:6379
HYDRA_SQL_REDIS_PREFIX=mse
HYDRA_SQL_REDIS_TTL=3600

17
.gitignore vendored
View File

@ -21,20 +21,3 @@ composer.phar
/tools
/.trivy
.mktools/
###> symfony/framework-bundle ###
/.env.local
/.env.local.php
/.env.*.local
/config/secrets/prod/prod.decrypt.private.php
/public/bundles/
/var/
/vendor/
###< symfony/framework-bundle ###
###> symfony/webpack-encore-bundle ###
/node_modules/
/public/build/
npm-debug.log
yarn-error.log
###< symfony/webpack-encore-bundle ###

849
composer.lock generated
View File

@ -8,23 +8,23 @@
"packages": [
{
"name": "clue/stream-filter",
"version": "v1.7.0",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/clue/stream-filter.git",
"reference": "049509fef80032cb3f051595029ab75b49a3c2f7"
"reference": "d6169430c7731d8509da7aecd0af756a5747b78e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7",
"reference": "049509fef80032cb3f051595029ab75b49a3c2f7",
"url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e",
"reference": "d6169430c7731d8509da7aecd0af756a5747b78e",
"shasum": ""
},
"require": {
"php": ">=5.3"
},
"require-dev": {
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
@ -46,7 +46,7 @@
}
],
"description": "A simple and modern approach to stream filtering in PHP",
"homepage": "https://github.com/clue/stream-filter",
"homepage": "https://github.com/clue/php-stream-filter",
"keywords": [
"bucket brigade",
"callback",
@ -58,7 +58,7 @@
],
"support": {
"issues": "https://github.com/clue/stream-filter/issues",
"source": "https://github.com/clue/stream-filter/tree/v1.7.0"
"source": "https://github.com/clue/stream-filter/tree/v1.6.0"
},
"funding": [
{
@ -70,7 +70,7 @@
"type": "github"
}
],
"time": "2023-12-20T15:40:13+00:00"
"time": "2022-02-21T13:15:14+00:00"
},
{
"name": "doctrine/annotations",
@ -150,16 +150,16 @@
},
{
"name": "doctrine/deprecations",
"version": "1.1.3",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
"reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
"reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
"reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931",
"reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931",
"shasum": ""
},
"require": {
@ -191,22 +191,22 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
"source": "https://github.com/doctrine/deprecations/tree/1.1.3"
"source": "https://github.com/doctrine/deprecations/tree/1.1.2"
},
"time": "2024-01-30T19:34:25+00:00"
"time": "2023-09-27T20:04:15+00:00"
},
{
"name": "doctrine/lexer",
"version": "2.1.1",
"version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6"
"reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6",
"reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
"reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
"shasum": ""
},
"require": {
@ -214,11 +214,11 @@
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9 || ^12",
"doctrine/coding-standard": "^9 || ^10",
"phpstan/phpstan": "^1.3",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.6",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psalm/plugin-phpunit": "^0.18.3",
"vimeo/psalm": "^4.11 || ^5.21"
"vimeo/psalm": "^4.11 || ^5.0"
},
"type": "library",
"autoload": {
@ -255,7 +255,7 @@
],
"support": {
"issues": "https://github.com/doctrine/lexer/issues",
"source": "https://github.com/doctrine/lexer/tree/2.1.1"
"source": "https://github.com/doctrine/lexer/tree/2.1.0"
},
"funding": [
{
@ -271,7 +271,7 @@
"type": "tidelift"
}
],
"time": "2024-02-05T11:35:39+00:00"
"time": "2022-12-14T08:49:07+00:00"
},
{
"name": "guzzlehttp/promises",
@ -532,16 +532,16 @@
},
{
"name": "jean85/pretty-package-versions",
"version": "2.0.6",
"version": "2.0.5",
"source": {
"type": "git",
"url": "https://github.com/Jean85/pretty-package-versions.git",
"reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4"
"reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4",
"reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4",
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af",
"reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af",
"shasum": ""
},
"require": {
@ -549,9 +549,9 @@
"php": "^7.1|^8.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.2",
"friendsofphp/php-cs-fixer": "^2.17",
"jean85/composer-provided-replaced-stub-package": "^1.0",
"phpstan/phpstan": "^1.4",
"phpstan/phpstan": "^0.12.66",
"phpunit/phpunit": "^7.5|^8.5|^9.4",
"vimeo/psalm": "^4.3"
},
@ -585,9 +585,9 @@
],
"support": {
"issues": "https://github.com/Jean85/pretty-package-versions/issues",
"source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6"
"source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.5"
},
"time": "2024-03-08T09:58:59+00:00"
"time": "2021-10-08T21:21:46+00:00"
},
{
"name": "php-http/client-common",
@ -660,16 +660,16 @@
},
{
"name": "php-http/discovery",
"version": "1.19.4",
"version": "1.19.2",
"source": {
"type": "git",
"url": "https://github.com/php-http/discovery.git",
"reference": "0700efda8d7526335132360167315fdab3aeb599"
"reference": "61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/discovery/zipball/0700efda8d7526335132360167315fdab3aeb599",
"reference": "0700efda8d7526335132360167315fdab3aeb599",
"url": "https://api.github.com/repos/php-http/discovery/zipball/61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb",
"reference": "61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb",
"shasum": ""
},
"require": {
@ -693,8 +693,7 @@
"php-http/httplug": "^1.0 || ^2.0",
"php-http/message-factory": "^1.0",
"phpspec/phpspec": "^5.1 || ^6.1 || ^7.3",
"sebastian/comparator": "^3.0.5 || ^4.0.8",
"symfony/phpunit-bridge": "^6.4.4 || ^7.0.1"
"symfony/phpunit-bridge": "^6.2"
},
"type": "composer-plugin",
"extra": {
@ -733,9 +732,9 @@
],
"support": {
"issues": "https://github.com/php-http/discovery/issues",
"source": "https://github.com/php-http/discovery/tree/1.19.4"
"source": "https://github.com/php-http/discovery/tree/1.19.2"
},
"time": "2024-03-29T13:00:05+00:00"
"time": "2023-11-30T16:49:05+00:00"
},
{
"name": "php-http/httplug",
@ -796,16 +795,16 @@
},
{
"name": "php-http/message",
"version": "1.16.1",
"version": "1.16.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/message.git",
"reference": "5997f3289332c699fa2545c427826272498a2088"
"reference": "47a14338bf4ebd67d317bf1144253d7db4ab55fd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/message/zipball/5997f3289332c699fa2545c427826272498a2088",
"reference": "5997f3289332c699fa2545c427826272498a2088",
"url": "https://api.github.com/repos/php-http/message/zipball/47a14338bf4ebd67d317bf1144253d7db4ab55fd",
"reference": "47a14338bf4ebd67d317bf1144253d7db4ab55fd",
"shasum": ""
},
"require": {
@ -859,9 +858,9 @@
],
"support": {
"issues": "https://github.com/php-http/message/issues",
"source": "https://github.com/php-http/message/tree/1.16.1"
"source": "https://github.com/php-http/message/tree/1.16.0"
},
"time": "2024-03-07T13:22:09+00:00"
"time": "2023-05-17T06:43:38+00:00"
},
{
"name": "php-http/message-factory",
@ -920,16 +919,16 @@
},
{
"name": "php-http/promise",
"version": "1.3.1",
"version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/promise.git",
"reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83"
"reference": "44a67cb59f708f826f3bec35f22030b3edb90119"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83",
"reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83",
"url": "https://api.github.com/repos/php-http/promise/zipball/44a67cb59f708f826f3bec35f22030b3edb90119",
"reference": "44a67cb59f708f826f3bec35f22030b3edb90119",
"shasum": ""
},
"require": {
@ -966,9 +965,9 @@
],
"support": {
"issues": "https://github.com/php-http/promise/issues",
"source": "https://github.com/php-http/promise/tree/1.3.1"
"source": "https://github.com/php-http/promise/tree/1.2.1"
},
"time": "2024-03-15T13:55:21+00:00"
"time": "2023-11-08T12:57:08+00:00"
},
{
"name": "predis/predis",
@ -1033,20 +1032,20 @@
},
{
"name": "psr/cache",
"version": "1.0.1",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/cache.git",
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
"reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
"url": "https://api.github.com/repos/php-fig/cache/zipball/213f9dbc5b9bfbc4f8db86d2838dc968752ce13b",
"reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
"php": ">=8.0.0"
},
"type": "library",
"extra": {
@ -1066,7 +1065,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for caching libraries",
@ -1076,9 +1075,9 @@
"psr-6"
],
"support": {
"source": "https://github.com/php-fig/cache/tree/master"
"source": "https://github.com/php-fig/cache/tree/2.0.0"
},
"time": "2016-08-06T20:24:11+00:00"
"time": "2021-02-03T23:23:37+00:00"
},
{
"name": "psr/container",
@ -1340,30 +1339,30 @@
},
{
"name": "psr/log",
"version": "1.1.4",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11"
"reference": "ef29f6d262798707a9edd554e2b82517ef3a9376"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11",
"url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376",
"reference": "ef29f6d262798707a9edd554e2b82517ef3a9376",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
"php": ">=8.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1.x-dev"
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Log\\": "Psr/Log/"
"Psr\\Log\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -1384,9 +1383,9 @@
"psr-3"
],
"support": {
"source": "https://github.com/php-fig/log/tree/1.1.4"
"source": "https://github.com/php-fig/log/tree/2.0.0"
},
"time": "2021-05-03T11:20:27+00:00"
"time": "2021-07-14T16:41:46+00:00"
},
{
"name": "ralouphie/getallheaders",
@ -1591,16 +1590,16 @@
},
{
"name": "sentry/sentry-symfony",
"version": "4.14.0",
"version": "4.13.1",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-symfony.git",
"reference": "001c4cfd8fe93cbb00edaca903ffbfac28259170"
"reference": "e8102da84841b33c0237b81479377d1cbaea9aa4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-symfony/zipball/001c4cfd8fe93cbb00edaca903ffbfac28259170",
"reference": "001c4cfd8fe93cbb00edaca903ffbfac28259170",
"url": "https://api.github.com/repos/getsentry/sentry-symfony/zipball/e8102da84841b33c0237b81479377d1cbaea9aa4",
"reference": "e8102da84841b33c0237b81479377d1cbaea9aa4",
"shasum": ""
},
"require": {
@ -1621,8 +1620,8 @@
"symfony/security-http": "^4.4.20||^5.0.11||^6.0||^7.0"
},
"require-dev": {
"doctrine/dbal": "^2.13||^3.3||^4.0",
"doctrine/doctrine-bundle": "^2.6",
"doctrine/dbal": "^2.13||^3.0",
"doctrine/doctrine-bundle": "^1.12||^2.5",
"friendsofphp/php-cs-fixer": "^2.19||^3.40",
"masterminds/html5": "^2.8",
"phpstan/extension-installer": "^1.0",
@ -1689,7 +1688,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-symfony/issues",
"source": "https://github.com/getsentry/sentry-symfony/tree/4.14.0"
"source": "https://github.com/getsentry/sentry-symfony/tree/4.13.1"
},
"funding": [
{
@ -1701,7 +1700,7 @@
"type": "custom"
}
],
"time": "2024-02-26T09:27:19+00:00"
"time": "2023-12-06T16:02:30+00:00"
},
{
"name": "symfony/apache-pack",
@ -1731,16 +1730,16 @@
},
{
"name": "symfony/asset",
"version": "v5.4.35",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/asset.git",
"reference": "0e98032106d18e57f57176d616e3fae80db7a845"
"reference": "edb2457a0ef615d420d2319851f679a4cc3b3635"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/asset/zipball/0e98032106d18e57f57176d616e3fae80db7a845",
"reference": "0e98032106d18e57f57176d616e3fae80db7a845",
"url": "https://api.github.com/repos/symfony/asset/zipball/edb2457a0ef615d420d2319851f679a4cc3b3635",
"reference": "edb2457a0ef615d420d2319851f679a4cc3b3635",
"shasum": ""
},
"require": {
@ -1785,7 +1784,7 @@
"description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/asset/tree/v5.4.35"
"source": "https://github.com/symfony/asset/tree/v5.4.31"
},
"funding": [
{
@ -1801,20 +1800,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2023-10-31T07:58:33+00:00"
},
{
"name": "symfony/cache",
"version": "v5.4.38",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
"reference": "223c3afac82e003a76931b71d77db408636a0de8"
"reference": "2553faca77502a4f68dc93cd2f3b9ec650751e40"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/223c3afac82e003a76931b71d77db408636a0de8",
"reference": "223c3afac82e003a76931b71d77db408636a0de8",
"url": "https://api.github.com/repos/symfony/cache/zipball/2553faca77502a4f68dc93cd2f3b9ec650751e40",
"reference": "2553faca77502a4f68dc93cd2f3b9ec650751e40",
"shasum": ""
},
"require": {
@ -1882,7 +1881,7 @@
"psr6"
],
"support": {
"source": "https://github.com/symfony/cache/tree/v5.4.38"
"source": "https://github.com/symfony/cache/tree/v5.4.32"
},
"funding": [
{
@ -1898,20 +1897,20 @@
"type": "tidelift"
}
],
"time": "2024-03-19T09:55:32+00:00"
"time": "2023-11-24T13:04:07+00:00"
},
{
"name": "symfony/cache-contracts",
"version": "v2.5.3",
"version": "v2.5.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache-contracts.git",
"reference": "fee6db04d913094e2fb55ff8e7db5685a8134463"
"reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/fee6db04d913094e2fb55ff8e7db5685a8134463",
"reference": "fee6db04d913094e2fb55ff8e7db5685a8134463",
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc",
"reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc",
"shasum": ""
},
"require": {
@ -1961,7 +1960,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/cache-contracts/tree/v2.5.3"
"source": "https://github.com/symfony/cache-contracts/tree/v2.5.2"
},
"funding": [
{
@ -1977,20 +1976,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2022-01-02T09:53:40+00:00"
},
{
"name": "symfony/config",
"version": "v5.4.38",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
"reference": "3dcd47d4bbd9fea4d1210e7a7a0a5ca02d99df14"
"reference": "dd5ea39de228813aba0c23c3a4153da2a4cf3cd9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/3dcd47d4bbd9fea4d1210e7a7a0a5ca02d99df14",
"reference": "3dcd47d4bbd9fea4d1210e7a7a0a5ca02d99df14",
"url": "https://api.github.com/repos/symfony/config/zipball/dd5ea39de228813aba0c23c3a4153da2a4cf3cd9",
"reference": "dd5ea39de228813aba0c23c3a4153da2a4cf3cd9",
"shasum": ""
},
"require": {
@ -2040,7 +2039,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/config/tree/v5.4.38"
"source": "https://github.com/symfony/config/tree/v5.4.31"
},
"funding": [
{
@ -2056,20 +2055,20 @@
"type": "tidelift"
}
],
"time": "2024-03-22T10:04:40+00:00"
"time": "2023-11-09T08:22:43+00:00"
},
{
"name": "symfony/console",
"version": "v5.4.36",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e"
"reference": "c70df1ffaf23a8d340bded3cfab1b86752ad6ed7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e",
"reference": "39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e",
"url": "https://api.github.com/repos/symfony/console/zipball/c70df1ffaf23a8d340bded3cfab1b86752ad6ed7",
"reference": "c70df1ffaf23a8d340bded3cfab1b86752ad6ed7",
"shasum": ""
},
"require": {
@ -2139,7 +2138,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v5.4.36"
"source": "https://github.com/symfony/console/tree/v5.4.32"
},
"funding": [
{
@ -2155,20 +2154,20 @@
"type": "tidelift"
}
],
"time": "2024-02-20T16:33:57+00:00"
"time": "2023-11-18T18:23:04+00:00"
},
{
"name": "symfony/dependency-injection",
"version": "v5.4.38",
"version": "v5.4.33",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "0ba1fa459d284a9398c71afa1cb5d13de025de17"
"reference": "14969a558cd6382b2a12b14b20ef9a851a02da79"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0ba1fa459d284a9398c71afa1cb5d13de025de17",
"reference": "0ba1fa459d284a9398c71afa1cb5d13de025de17",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/14969a558cd6382b2a12b14b20ef9a851a02da79",
"reference": "14969a558cd6382b2a12b14b20ef9a851a02da79",
"shasum": ""
},
"require": {
@ -2228,7 +2227,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.38"
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.33"
},
"funding": [
{
@ -2244,29 +2243,29 @@
"type": "tidelift"
}
],
"time": "2024-03-18T16:56:51+00:00"
"time": "2023-11-30T08:15:37+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v2.5.3",
"version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "80d075412b557d41002320b96a096ca65aa2c98d"
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/80d075412b557d41002320b96a096ca65aa2c98d",
"reference": "80d075412b557d41002320b96a096ca65aa2c98d",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=8.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.5-dev"
"dev-main": "3.4-dev"
},
"thanks": {
"name": "symfony/contracts",
@ -2295,7 +2294,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.3"
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
},
"funding": [
{
@ -2311,20 +2310,20 @@
"type": "tidelift"
}
],
"time": "2023-01-24T14:02:46+00:00"
"time": "2023-05-23T14:45:45+00:00"
},
{
"name": "symfony/dotenv",
"version": "v5.4.35",
"version": "v5.4.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
"reference": "4de488440104b99d2e7c0717ee432e760b061e32"
"reference": "ceed2cd28442adcf3679a9a82dacd45baeefc458"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/4de488440104b99d2e7c0717ee432e760b061e32",
"reference": "4de488440104b99d2e7c0717ee432e760b061e32",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/ceed2cd28442adcf3679a9a82dacd45baeefc458",
"reference": "ceed2cd28442adcf3679a9a82dacd45baeefc458",
"shasum": ""
},
"require": {
@ -2366,7 +2365,7 @@
"environment"
],
"support": {
"source": "https://github.com/symfony/dotenv/tree/v5.4.35"
"source": "https://github.com/symfony/dotenv/tree/v5.4.30"
},
"funding": [
{
@ -2382,20 +2381,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2023-10-26T16:37:39+00:00"
},
{
"name": "symfony/error-handler",
"version": "v5.4.38",
"version": "v5.4.29",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "3c1fed45a12718e7e2758eef072677d01a0c91a4"
"reference": "328c6fcfd2f90b64c16efaf0ea67a311d672f078"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/3c1fed45a12718e7e2758eef072677d01a0c91a4",
"reference": "3c1fed45a12718e7e2758eef072677d01a0c91a4",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/328c6fcfd2f90b64c16efaf0ea67a311d672f078",
"reference": "328c6fcfd2f90b64c16efaf0ea67a311d672f078",
"shasum": ""
},
"require": {
@ -2437,7 +2436,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/error-handler/tree/v5.4.38"
"source": "https://github.com/symfony/error-handler/tree/v5.4.29"
},
"funding": [
{
@ -2453,20 +2452,20 @@
"type": "tidelift"
}
],
"time": "2024-03-19T10:19:25+00:00"
"time": "2023-09-06T21:54:06+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v5.4.35",
"version": "v5.4.26",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "7a69a85c7ea5bdd1e875806a99c51a87d3a74b38"
"reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7a69a85c7ea5bdd1e875806a99c51a87d3a74b38",
"reference": "7a69a85c7ea5bdd1e875806a99c51a87d3a74b38",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5dcc00e03413f05c1e7900090927bb7247cb0aac",
"reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac",
"shasum": ""
},
"require": {
@ -2522,7 +2521,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.35"
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.26"
},
"funding": [
{
@ -2538,33 +2537,30 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2023-07-06T06:34:20+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
"version": "v2.5.3",
"version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "540f4c73e87fd0c71ca44a6aa305d024ac68cb73"
"reference": "a76aed96a42d2b521153fb382d418e30d18b59df"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/540f4c73e87fd0c71ca44a6aa305d024ac68cb73",
"reference": "540f4c73e87fd0c71ca44a6aa305d024ac68cb73",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df",
"reference": "a76aed96a42d2b521153fb382d418e30d18b59df",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"php": ">=8.1",
"psr/event-dispatcher": "^1"
},
"suggest": {
"symfony/event-dispatcher-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.5-dev"
"dev-main": "3.4-dev"
},
"thanks": {
"name": "symfony/contracts",
@ -2601,7 +2597,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.3"
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0"
},
"funding": [
{
@ -2617,20 +2613,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2023-05-23T14:45:45+00:00"
},
{
"name": "symfony/filesystem",
"version": "v5.4.38",
"version": "v5.4.25",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "899330a01056077271e2f614c7b28b0379a671eb"
"reference": "0ce3a62c9579a53358d3a7eb6b3dfb79789a6364"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/899330a01056077271e2f614c7b28b0379a671eb",
"reference": "899330a01056077271e2f614c7b28b0379a671eb",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/0ce3a62c9579a53358d3a7eb6b3dfb79789a6364",
"reference": "0ce3a62c9579a53358d3a7eb6b3dfb79789a6364",
"shasum": ""
},
"require": {
@ -2665,7 +2661,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v5.4.38"
"source": "https://github.com/symfony/filesystem/tree/v5.4.25"
},
"funding": [
{
@ -2681,20 +2677,20 @@
"type": "tidelift"
}
],
"time": "2024-03-21T08:05:07+00:00"
"time": "2023-05-31T13:04:02+00:00"
},
{
"name": "symfony/finder",
"version": "v5.4.35",
"version": "v5.4.27",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "abe6d6f77d9465fed3cd2d029b29d03b56b56435"
"reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/abe6d6f77d9465fed3cd2d029b29d03b56b56435",
"reference": "abe6d6f77d9465fed3cd2d029b29d03b56b56435",
"url": "https://api.github.com/repos/symfony/finder/zipball/ff4bce3c33451e7ec778070e45bd23f74214cd5d",
"reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d",
"shasum": ""
},
"require": {
@ -2728,7 +2724,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v5.4.35"
"source": "https://github.com/symfony/finder/tree/v5.4.27"
},
"funding": [
{
@ -2744,32 +2740,32 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2023-07-31T08:02:31+00:00"
},
{
"name": "symfony/flex",
"version": "v1.21.6",
"version": "v2.4.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
"reference": "06b58a5e5b4c6528fb12e0fac5fea0db3f1e7ae8"
"reference": "67ee785f1aedada76461de7a7ec10cd7f8ff8d36"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/flex/zipball/06b58a5e5b4c6528fb12e0fac5fea0db3f1e7ae8",
"reference": "06b58a5e5b4c6528fb12e0fac5fea0db3f1e7ae8",
"url": "https://api.github.com/repos/symfony/flex/zipball/67ee785f1aedada76461de7a7ec10cd7f8ff8d36",
"reference": "67ee785f1aedada76461de7a7ec10cd7f8ff8d36",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0|^2.0",
"php": ">=7.1"
"composer-plugin-api": "^2.1",
"php": ">=8.0"
},
"require-dev": {
"composer/composer": "^1.0.2|^2.0",
"symfony/dotenv": "^4.4|^5.0|^6.0",
"symfony/filesystem": "^4.4|^5.0|^6.0",
"symfony/phpunit-bridge": "^4.4.12|^5.0|^6.0",
"symfony/process": "^4.4|^5.0|^6.0"
"composer/composer": "^2.1",
"symfony/dotenv": "^5.4|^6.0",
"symfony/filesystem": "^5.4|^6.0",
"symfony/phpunit-bridge": "^5.4|^6.0",
"symfony/process": "^5.4|^6.0"
},
"type": "composer-plugin",
"extra": {
@ -2793,7 +2789,7 @@
"description": "Composer plugin for Symfony",
"support": {
"issues": "https://github.com/symfony/flex/issues",
"source": "https://github.com/symfony/flex/tree/v1.21.6"
"source": "https://github.com/symfony/flex/tree/v2.4.2"
},
"funding": [
{
@ -2809,20 +2805,20 @@
"type": "tidelift"
}
],
"time": "2024-03-02T08:16:37+00:00"
"time": "2023-12-05T14:09:35+00:00"
},
{
"name": "symfony/form",
"version": "v5.4.38",
"version": "v5.4.33",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
"reference": "a4841abdc1ad64a17df79b68482cbbafd23e01f1"
"reference": "9c13bf53e728d3f75ce7a36046ffc2cd0e7d25ec"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/form/zipball/a4841abdc1ad64a17df79b68482cbbafd23e01f1",
"reference": "a4841abdc1ad64a17df79b68482cbbafd23e01f1",
"url": "https://api.github.com/repos/symfony/form/zipball/9c13bf53e728d3f75ce7a36046ffc2cd0e7d25ec",
"reference": "9c13bf53e728d3f75ce7a36046ffc2cd0e7d25ec",
"shasum": ""
},
"require": {
@ -2845,7 +2841,7 @@
"symfony/error-handler": "<4.4.5",
"symfony/framework-bundle": "<4.4",
"symfony/http-kernel": "<4.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3",
"symfony/translation": "<4.4",
"symfony/translation-contracts": "<1.1.7",
"symfony/twig-bridge": "<5.4.21|>=6,<6.2.7"
},
@ -2859,7 +2855,7 @@
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/intl": "^4.4|^5.0|^6.0",
"symfony/security-csrf": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3",
"symfony/translation": "^4.4|^5.0|^6.0",
"symfony/uid": "^5.1|^6.0",
"symfony/validator": "^4.4.17|^5.1.9|^6.0",
"symfony/var-dumper": "^4.4|^5.0|^6.0"
@ -2895,7 +2891,7 @@
"description": "Allows to easily create, process and reuse HTML forms",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/form/tree/v5.4.38"
"source": "https://github.com/symfony/form/tree/v5.4.33"
},
"funding": [
{
@ -2911,20 +2907,20 @@
"type": "tidelift"
}
],
"time": "2024-03-19T09:55:32+00:00"
"time": "2023-11-30T10:45:54+00:00"
},
{
"name": "symfony/framework-bundle",
"version": "v5.4.38",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
"reference": "322b40a1235d85e93b3440cad59c67d73cdb5d9f"
"reference": "14597eccde5051368918bce92393be9ba941db14"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/322b40a1235d85e93b3440cad59c67d73cdb5d9f",
"reference": "322b40a1235d85e93b3440cad59c67d73cdb5d9f",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/14597eccde5051368918bce92393be9ba941db14",
"reference": "14597eccde5051368918bce92393be9ba941db14",
"shasum": ""
},
"require": {
@ -2952,7 +2948,7 @@
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"symfony/asset": "<5.3",
"symfony/console": "<5.2.5|>=7.0",
"symfony/console": "<5.2.5",
"symfony/dom-crawler": "<4.4",
"symfony/dotenv": "<5.1",
"symfony/form": "<5.2",
@ -3007,7 +3003,7 @@
"symfony/web-link": "^4.4|^5.0|^6.0",
"symfony/workflow": "^5.2|^6.0",
"symfony/yaml": "^4.4|^5.0|^6.0",
"twig/twig": "^2.10|^3.0.4"
"twig/twig": "^2.10|^3.0"
},
"suggest": {
"ext-apcu": "For best performance of the system caches",
@ -3045,7 +3041,7 @@
"description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/framework-bundle/tree/v5.4.38"
"source": "https://github.com/symfony/framework-bundle/tree/v5.4.32"
},
"funding": [
{
@ -3061,27 +3057,27 @@
"type": "tidelift"
}
],
"time": "2024-03-15T07:39:49+00:00"
"time": "2023-11-23T15:18:29+00:00"
},
{
"name": "symfony/http-client",
"version": "v5.4.38",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "2a292194f6d4cf22d2348248d1c637750f72309d"
"reference": "6cdf6cdf48101454f014a9ab4e0905f0b902389d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/2a292194f6d4cf22d2348248d1c637750f72309d",
"reference": "2a292194f6d4cf22d2348248d1c637750f72309d",
"url": "https://api.github.com/repos/symfony/http-client/zipball/6cdf6cdf48101454f014a9ab4e0905f0b902389d",
"reference": "6cdf6cdf48101454f014a9ab4e0905f0b902389d",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/http-client-contracts": "^2.5.3",
"symfony/http-client-contracts": "^2.4",
"symfony/polyfill-php73": "^1.11",
"symfony/polyfill-php80": "^1.16",
"symfony/service-contracts": "^1.0|^2|^3"
@ -3097,7 +3093,7 @@
"amphp/http-client": "^4.2.1",
"amphp/http-tunnel": "^1.0",
"amphp/socket": "^1.1",
"guzzlehttp/promises": "^1.4|^2.0",
"guzzlehttp/promises": "^1.4",
"nyholm/psr7": "^1.0",
"php-http/httplug": "^1.0|^2.0",
"php-http/message-factory": "^1.0",
@ -3136,7 +3132,7 @@
"http"
],
"support": {
"source": "https://github.com/symfony/http-client/tree/v5.4.38"
"source": "https://github.com/symfony/http-client/tree/v5.4.31"
},
"funding": [
{
@ -3152,20 +3148,20 @@
"type": "tidelift"
}
],
"time": "2024-04-01T18:54:44+00:00"
"time": "2023-10-29T12:33:05+00:00"
},
{
"name": "symfony/http-client-contracts",
"version": "v2.5.3",
"version": "v2.5.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client-contracts.git",
"reference": "e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1"
"reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1",
"reference": "e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70",
"reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70",
"shasum": ""
},
"require": {
@ -3214,7 +3210,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/http-client-contracts/tree/v2.5.3"
"source": "https://github.com/symfony/http-client-contracts/tree/v2.5.2"
},
"funding": [
{
@ -3230,20 +3226,20 @@
"type": "tidelift"
}
],
"time": "2024-03-26T19:42:53+00:00"
"time": "2022-04-12T15:48:08+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v5.4.38",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "d8c13d35f68c69e15595fe37fa2c225d11c10f7e"
"reference": "cbcd80a4c36f59772d62860fdb0cb6a38da63fd2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/d8c13d35f68c69e15595fe37fa2c225d11c10f7e",
"reference": "d8c13d35f68c69e15595fe37fa2c225d11c10f7e",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/cbcd80a4c36f59772d62860fdb0cb6a38da63fd2",
"reference": "cbcd80a4c36f59772d62860fdb0cb6a38da63fd2",
"shasum": ""
},
"require": {
@ -3290,7 +3286,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v5.4.38"
"source": "https://github.com/symfony/http-foundation/tree/v5.4.32"
},
"funding": [
{
@ -3306,20 +3302,20 @@
"type": "tidelift"
}
],
"time": "2024-03-19T10:19:25+00:00"
"time": "2023-11-20T15:40:25+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v5.4.38",
"version": "v5.4.33",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "21c32c7c6c32ea8d0f4b8e88a2607a2dc72799e5"
"reference": "892636f9279f953dc266dc088f900b03eecb4ffa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/21c32c7c6c32ea8d0f4b8e88a2607a2dc72799e5",
"reference": "21c32c7c6c32ea8d0f4b8e88a2607a2dc72799e5",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/892636f9279f953dc266dc088f900b03eecb4ffa",
"reference": "892636f9279f953dc266dc088f900b03eecb4ffa",
"shasum": ""
},
"require": {
@ -3402,7 +3398,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-kernel/tree/v5.4.38"
"source": "https://github.com/symfony/http-kernel/tree/v5.4.33"
},
"funding": [
{
@ -3418,20 +3414,20 @@
"type": "tidelift"
}
],
"time": "2024-04-02T19:56:39+00:00"
"time": "2023-12-01T16:51:11+00:00"
},
{
"name": "symfony/lock",
"version": "v5.4.38",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/lock.git",
"reference": "d1a912eaac5a39e2fac19e00055d07890a1b9187"
"reference": "a6d7d829f4907134775a0e1b162780e61f80ed87"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/lock/zipball/d1a912eaac5a39e2fac19e00055d07890a1b9187",
"reference": "d1a912eaac5a39e2fac19e00055d07890a1b9187",
"url": "https://api.github.com/repos/symfony/lock/zipball/a6d7d829f4907134775a0e1b162780e61f80ed87",
"reference": "a6d7d829f4907134775a0e1b162780e61f80ed87",
"shasum": ""
},
"require": {
@ -3481,7 +3477,7 @@
"semaphore"
],
"support": {
"source": "https://github.com/symfony/lock/tree/v5.4.38"
"source": "https://github.com/symfony/lock/tree/v5.4.32"
},
"funding": [
{
@ -3497,7 +3493,7 @@
"type": "tidelift"
}
],
"time": "2024-03-16T08:39:04+00:00"
"time": "2023-11-20T15:40:25+00:00"
},
{
"name": "symfony/options-resolver",
@ -3570,16 +3566,16 @@
},
{
"name": "symfony/password-hasher",
"version": "v5.4.36",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/password-hasher.git",
"reference": "a0c08f9045230ef73d25617b2c0e0b56d8feb0a2"
"reference": "f1a07181f3442836b0aadfd4c65841804d4173c4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/a0c08f9045230ef73d25617b2c0e0b56d8feb0a2",
"reference": "a0c08f9045230ef73d25617b2c0e0b56d8feb0a2",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/f1a07181f3442836b0aadfd4c65841804d4173c4",
"reference": "f1a07181f3442836b0aadfd4c65841804d4173c4",
"shasum": ""
},
"require": {
@ -3624,7 +3620,7 @@
"password"
],
"support": {
"source": "https://github.com/symfony/password-hasher/tree/v5.4.36"
"source": "https://github.com/symfony/password-hasher/tree/v5.4.31"
},
"funding": [
{
@ -3640,20 +3636,20 @@
"type": "tidelift"
}
],
"time": "2024-02-10T16:59:05+00:00"
"time": "2023-11-02T10:18:11+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.29.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
"reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f"
"reference": "875e90aeea2777b6f135677f618529449334a612"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f",
"reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612",
"reference": "875e90aeea2777b6f135677f618529449334a612",
"shasum": ""
},
"require": {
@ -3664,6 +3660,9 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -3702,7 +3701,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0"
},
"funding": [
{
@ -3718,20 +3717,20 @@
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
"time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-intl-icu",
"version": "v1.29.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "07094a28851a49107f3ab4f9120ca2975a64b6e1"
"reference": "e46b4da57951a16053cd751f63f4a24292788157"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/07094a28851a49107f3ab4f9120ca2975a64b6e1",
"reference": "07094a28851a49107f3ab4f9120ca2975a64b6e1",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e46b4da57951a16053cd751f63f4a24292788157",
"reference": "e46b4da57951a16053cd751f63f4a24292788157",
"shasum": ""
},
"require": {
@ -3742,6 +3741,9 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -3786,7 +3788,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.28.0"
},
"funding": [
{
@ -3802,20 +3804,20 @@
"type": "tidelift"
}
],
"time": "2024-01-29T20:12:16+00:00"
"time": "2023-03-21T17:27:24+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.29.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "bc45c394692b948b4d383a08d7753968bed9a83d"
"reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d",
"reference": "bc45c394692b948b4d383a08d7753968bed9a83d",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
"reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
"shasum": ""
},
"require": {
@ -3826,6 +3828,9 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -3867,7 +3872,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0"
},
"funding": [
{
@ -3883,20 +3888,20 @@
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
"time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.29.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
"reference": "42292d99c55abe617799667f454222c54c60e229"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
"reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
"reference": "42292d99c55abe617799667f454222c54c60e229",
"shasum": ""
},
"require": {
@ -3910,6 +3915,9 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -3947,7 +3955,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
},
"funding": [
{
@ -3963,20 +3971,20 @@
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
"time": "2023-07-28T09:04:16+00:00"
},
{
"name": "symfony/polyfill-php73",
"version": "v1.29.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
"reference": "21bd091060673a1177ae842c0ef8fe30893114d2"
"reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2",
"reference": "21bd091060673a1177ae842c0ef8fe30893114d2",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5",
"reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5",
"shasum": ""
},
"require": {
@ -3984,6 +3992,9 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -4023,7 +4034,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php73/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0"
},
"funding": [
{
@ -4039,20 +4050,20 @@
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
"time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.29.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
"reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
"reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
"reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
"shasum": ""
},
"require": {
@ -4060,6 +4071,9 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -4103,7 +4117,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0"
},
"funding": [
{
@ -4119,20 +4133,20 @@
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
"time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-php81",
"version": "v1.29.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
"reference": "c565ad1e63f30e7477fc40738343c62b40bc672d"
"reference": "7581cd600fa9fd681b797d00b02f068e2f13263b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d",
"reference": "c565ad1e63f30e7477fc40738343c62b40bc672d",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b",
"reference": "7581cd600fa9fd681b797d00b02f068e2f13263b",
"shasum": ""
},
"require": {
@ -4140,6 +4154,9 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -4179,7 +4196,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0"
"source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0"
},
"funding": [
{
@ -4195,20 +4212,20 @@
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
"time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/property-access",
"version": "v5.4.38",
"version": "v5.4.26",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
"reference": "b58ea319e56b440b4daaa38201ee63ba9efa44d5"
"reference": "0249e46f69e92049a488f39fcf531cb42c50caaa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/b58ea319e56b440b4daaa38201ee63ba9efa44d5",
"reference": "b58ea319e56b440b4daaa38201ee63ba9efa44d5",
"url": "https://api.github.com/repos/symfony/property-access/zipball/0249e46f69e92049a488f39fcf531cb42c50caaa",
"reference": "0249e46f69e92049a488f39fcf531cb42c50caaa",
"shasum": ""
},
"require": {
@ -4260,7 +4277,7 @@
"reflection"
],
"support": {
"source": "https://github.com/symfony/property-access/tree/v5.4.38"
"source": "https://github.com/symfony/property-access/tree/v5.4.26"
},
"funding": [
{
@ -4276,20 +4293,20 @@
"type": "tidelift"
}
],
"time": "2024-03-18T16:56:51+00:00"
"time": "2023-07-13T15:20:41+00:00"
},
{
"name": "symfony/property-info",
"version": "v5.4.38",
"version": "v5.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
"reference": "f3e4b84e5a33e655222167894398b671e93322d0"
"reference": "d43b85b00699b4484964c297575b5c6f9dc5f6e1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-info/zipball/f3e4b84e5a33e655222167894398b671e93322d0",
"reference": "f3e4b84e5a33e655222167894398b671e93322d0",
"url": "https://api.github.com/repos/symfony/property-info/zipball/d43b85b00699b4484964c297575b5c6f9dc5f6e1",
"reference": "d43b85b00699b4484964c297575b5c6f9dc5f6e1",
"shasum": ""
},
"require": {
@ -4351,7 +4368,7 @@
"validator"
],
"support": {
"source": "https://github.com/symfony/property-info/tree/v5.4.38"
"source": "https://github.com/symfony/property-info/tree/v5.4.24"
},
"funding": [
{
@ -4367,7 +4384,7 @@
"type": "tidelift"
}
],
"time": "2024-03-21T07:26:31+00:00"
"time": "2023-05-15T20:11:03+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
@ -4460,16 +4477,16 @@
},
{
"name": "symfony/rate-limiter",
"version": "v5.4.35",
"version": "v5.4.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/rate-limiter.git",
"reference": "9bd24ef2e0948fff4d6741798ba4c7468b75bc8d"
"reference": "10c8064e57ae1bb6dee152d44d737a1a799f8386"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/rate-limiter/zipball/9bd24ef2e0948fff4d6741798ba4c7468b75bc8d",
"reference": "9bd24ef2e0948fff4d6741798ba4c7468b75bc8d",
"url": "https://api.github.com/repos/symfony/rate-limiter/zipball/10c8064e57ae1bb6dee152d44d737a1a799f8386",
"reference": "10c8064e57ae1bb6dee152d44d737a1a799f8386",
"shasum": ""
},
"require": {
@ -4510,7 +4527,7 @@
"rate-limiter"
],
"support": {
"source": "https://github.com/symfony/rate-limiter/tree/v5.4.35"
"source": "https://github.com/symfony/rate-limiter/tree/v5.4.30"
},
"funding": [
{
@ -4526,20 +4543,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2023-10-10T05:34:18+00:00"
},
{
"name": "symfony/routing",
"version": "v5.4.38",
"version": "v5.4.33",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "f455f06d4ee7d354d9dcaf7d436532c1f388ee01"
"reference": "5b5b86670f947db92ab54cdcff585e76064d0b04"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/f455f06d4ee7d354d9dcaf7d436532c1f388ee01",
"reference": "f455f06d4ee7d354d9dcaf7d436532c1f388ee01",
"url": "https://api.github.com/repos/symfony/routing/zipball/5b5b86670f947db92ab54cdcff585e76064d0b04",
"reference": "5b5b86670f947db92ab54cdcff585e76064d0b04",
"shasum": ""
},
"require": {
@ -4600,7 +4617,7 @@
"url"
],
"support": {
"source": "https://github.com/symfony/routing/tree/v5.4.38"
"source": "https://github.com/symfony/routing/tree/v5.4.33"
},
"funding": [
{
@ -4616,20 +4633,20 @@
"type": "tidelift"
}
],
"time": "2024-03-18T16:56:51+00:00"
"time": "2023-12-01T09:28:00+00:00"
},
{
"name": "symfony/runtime",
"version": "v5.4.35",
"version": "v5.4.26",
"source": {
"type": "git",
"url": "https://github.com/symfony/runtime.git",
"reference": "a32a623d71fc0f699a2a196377b3b85c840bd39a"
"reference": "4659b552bc9f2380986e3f4b7e2bd4e512470e0d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/runtime/zipball/a32a623d71fc0f699a2a196377b3b85c840bd39a",
"reference": "a32a623d71fc0f699a2a196377b3b85c840bd39a",
"url": "https://api.github.com/repos/symfony/runtime/zipball/4659b552bc9f2380986e3f4b7e2bd4e512470e0d",
"reference": "4659b552bc9f2380986e3f4b7e2bd4e512470e0d",
"shasum": ""
},
"require": {
@ -4680,7 +4697,7 @@
"runtime"
],
"support": {
"source": "https://github.com/symfony/runtime/tree/v5.4.35"
"source": "https://github.com/symfony/runtime/tree/v5.4.26"
},
"funding": [
{
@ -4696,20 +4713,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2023-07-16T16:48:57+00:00"
},
{
"name": "symfony/security-bundle",
"version": "v5.4.38",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
"reference": "411190ceea7a5711fa0e0cda81a4914d2c4899b0"
"reference": "92e24de1759b6a502896d87c5e0997973ef47ac4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/411190ceea7a5711fa0e0cda81a4914d2c4899b0",
"reference": "411190ceea7a5711fa0e0cda81a4914d2c4899b0",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/92e24de1759b6a502896d87c5e0997973ef47ac4",
"reference": "92e24de1759b6a502896d87c5e0997973ef47ac4",
"shasum": ""
},
"require": {
@ -4783,7 +4800,7 @@
"description": "Provides a tight integration of the Security component into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-bundle/tree/v5.4.38"
"source": "https://github.com/symfony/security-bundle/tree/v5.4.31"
},
"funding": [
{
@ -4799,20 +4816,20 @@
"type": "tidelift"
}
],
"time": "2024-03-14T13:06:06+00:00"
"time": "2023-11-09T09:26:13+00:00"
},
{
"name": "symfony/security-core",
"version": "v5.4.38",
"version": "v5.4.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
"reference": "8024815e3ee09dc2235d91006ac969b060efccbb"
"reference": "3908c54da30dd68c2fe31915d82a1c81809d1928"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-core/zipball/8024815e3ee09dc2235d91006ac969b060efccbb",
"reference": "8024815e3ee09dc2235d91006ac969b060efccbb",
"url": "https://api.github.com/repos/symfony/security-core/zipball/3908c54da30dd68c2fe31915d82a1c81809d1928",
"reference": "3908c54da30dd68c2fe31915d82a1c81809d1928",
"shasum": ""
},
"require": {
@ -4828,7 +4845,6 @@
"symfony/http-foundation": "<5.3",
"symfony/ldap": "<4.4",
"symfony/security-guard": "<4.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3",
"symfony/validator": "<5.2"
},
"require-dev": {
@ -4840,7 +4856,7 @@
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/http-foundation": "^5.3|^6.0",
"symfony/ldap": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3",
"symfony/translation": "^4.4|^5.0|^6.0",
"symfony/validator": "^5.2|^6.0"
},
"suggest": {
@ -4877,7 +4893,7 @@
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-core/tree/v5.4.38"
"source": "https://github.com/symfony/security-core/tree/v5.4.30"
},
"funding": [
{
@ -4893,20 +4909,20 @@
"type": "tidelift"
}
],
"time": "2024-03-19T10:19:25+00:00"
"time": "2023-10-27T07:38:28+00:00"
},
{
"name": "symfony/security-csrf",
"version": "v5.4.35",
"version": "v5.4.27",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
"reference": "6728ed79d7f9aae3b86fca7ea554f1c46bae1e0b"
"reference": "995fcfcc5a3be09df157b4960668f61cceb86611"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/6728ed79d7f9aae3b86fca7ea554f1c46bae1e0b",
"reference": "6728ed79d7f9aae3b86fca7ea554f1c46bae1e0b",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/995fcfcc5a3be09df157b4960668f61cceb86611",
"reference": "995fcfcc5a3be09df157b4960668f61cceb86611",
"shasum": ""
},
"require": {
@ -4950,7 +4966,7 @@
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-csrf/tree/v5.4.35"
"source": "https://github.com/symfony/security-csrf/tree/v5.4.27"
},
"funding": [
{
@ -4966,20 +4982,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2023-07-28T14:44:35+00:00"
},
{
"name": "symfony/security-guard",
"version": "v5.4.35",
"version": "v5.4.27",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-guard.git",
"reference": "b6fb8c88f7cd544db761de2d1c3618cbc5c1b9e7"
"reference": "72c53142533462fc6fda4a429c2a21c2b944a8cc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-guard/zipball/b6fb8c88f7cd544db761de2d1c3618cbc5c1b9e7",
"reference": "b6fb8c88f7cd544db761de2d1c3618cbc5c1b9e7",
"url": "https://api.github.com/repos/symfony/security-guard/zipball/72c53142533462fc6fda4a429c2a21c2b944a8cc",
"reference": "72c53142533462fc6fda4a429c2a21c2b944a8cc",
"shasum": ""
},
"require": {
@ -5018,7 +5034,7 @@
"description": "Symfony Security Component - Guard",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-guard/tree/v5.4.35"
"source": "https://github.com/symfony/security-guard/tree/v5.4.27"
},
"funding": [
{
@ -5034,20 +5050,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2023-07-28T14:44:35+00:00"
},
{
"name": "symfony/security-http",
"version": "v5.4.38",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
"reference": "a6856888064791eef77de26dee86fc33e74dfbba"
"reference": "6d3cd5a4deee9697738db8d24258890ca4140ae9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-http/zipball/a6856888064791eef77de26dee86fc33e74dfbba",
"reference": "a6856888064791eef77de26dee86fc33e74dfbba",
"url": "https://api.github.com/repos/symfony/security-http/zipball/6d3cd5a4deee9697738db8d24258890ca4140ae9",
"reference": "6d3cd5a4deee9697738db8d24258890ca4140ae9",
"shasum": ""
},
"require": {
@ -5104,7 +5120,7 @@
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-http/tree/v5.4.38"
"source": "https://github.com/symfony/security-http/tree/v5.4.31"
},
"funding": [
{
@ -5120,20 +5136,20 @@
"type": "tidelift"
}
],
"time": "2024-03-19T10:19:25+00:00"
"time": "2023-11-03T16:13:08+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v2.5.3",
"version": "v2.5.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3"
"reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/a2329596ddc8fd568900e3fc76cba42489ecc7f3",
"reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
"reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
"shasum": ""
},
"require": {
@ -5187,7 +5203,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v2.5.3"
"source": "https://github.com/symfony/service-contracts/tree/v2.5.2"
},
"funding": [
{
@ -5203,20 +5219,20 @@
"type": "tidelift"
}
],
"time": "2023-04-21T15:04:16+00:00"
"time": "2022-05-30T19:17:29+00:00"
},
{
"name": "symfony/string",
"version": "v5.4.36",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "4e232c83622bd8cd32b794216aa29d0d266d353b"
"reference": "91bf4453d65d8231688a04376c3a40efe0770f04"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/4e232c83622bd8cd32b794216aa29d0d266d353b",
"reference": "4e232c83622bd8cd32b794216aa29d0d266d353b",
"url": "https://api.github.com/repos/symfony/string/zipball/91bf4453d65d8231688a04376c3a40efe0770f04",
"reference": "91bf4453d65d8231688a04376c3a40efe0770f04",
"shasum": ""
},
"require": {
@ -5273,7 +5289,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v5.4.36"
"source": "https://github.com/symfony/string/tree/v5.4.32"
},
"funding": [
{
@ -5289,20 +5305,20 @@
"type": "tidelift"
}
],
"time": "2024-02-01T08:49:30+00:00"
"time": "2023-11-26T13:43:46+00:00"
},
{
"name": "symfony/translation",
"version": "v5.4.35",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "77d7d1e46f52827585e65e6cd6f52a2542e59c72"
"reference": "ba72f72fceddf36f00bd495966b5873f2d17ad8f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/77d7d1e46f52827585e65e6cd6f52a2542e59c72",
"reference": "77d7d1e46f52827585e65e6cd6f52a2542e59c72",
"url": "https://api.github.com/repos/symfony/translation/zipball/ba72f72fceddf36f00bd495966b5873f2d17ad8f",
"reference": "ba72f72fceddf36f00bd495966b5873f2d17ad8f",
"shasum": ""
},
"require": {
@ -5370,7 +5386,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/translation/tree/v5.4.35"
"source": "https://github.com/symfony/translation/tree/v5.4.31"
},
"funding": [
{
@ -5386,20 +5402,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2023-11-03T16:16:43+00:00"
},
{
"name": "symfony/translation-contracts",
"version": "v2.5.3",
"version": "v2.5.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
"reference": "b0073a77ac0b7ea55131020e87b1e3af540f4664"
"reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b0073a77ac0b7ea55131020e87b1e3af540f4664",
"reference": "b0073a77ac0b7ea55131020e87b1e3af540f4664",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
"reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
"shasum": ""
},
"require": {
@ -5448,7 +5464,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.3"
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.2"
},
"funding": [
{
@ -5464,20 +5480,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2022-06-27T16:58:25+00:00"
},
{
"name": "symfony/twig-bridge",
"version": "v5.4.38",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
"reference": "5984ba96a504524ebc51bd2309a66124599be6ba"
"reference": "fc6ee0a3b672ea12ca1f26592d257bfc7f4ee942"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/5984ba96a504524ebc51bd2309a66124599be6ba",
"reference": "5984ba96a504524ebc51bd2309a66124599be6ba",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/fc6ee0a3b672ea12ca1f26592d257bfc7f4ee942",
"reference": "fc6ee0a3b672ea12ca1f26592d257bfc7f4ee942",
"shasum": ""
},
"require": {
@ -5517,7 +5533,7 @@
"symfony/security-core": "^4.4|^5.0|^6.0",
"symfony/security-csrf": "^4.4|^5.0|^6.0",
"symfony/security-http": "^4.4|^5.0|^6.0",
"symfony/serializer": "^5.4.35|~6.3.12|^6.4.3",
"symfony/serializer": "^5.2|^6.0",
"symfony/stopwatch": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.2|^6.0",
"symfony/web-link": "^4.4|^5.0|^6.0",
@ -5569,7 +5585,7 @@
"description": "Provides integration for Twig with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bridge/tree/v5.4.38"
"source": "https://github.com/symfony/twig-bridge/tree/v5.4.31"
},
"funding": [
{
@ -5585,20 +5601,20 @@
"type": "tidelift"
}
],
"time": "2024-03-27T20:05:04+00:00"
"time": "2023-11-09T21:19:08+00:00"
},
{
"name": "symfony/twig-bundle",
"version": "v5.4.36",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
"reference": "37a338733c456fc8cd056c2e0f20bae020cbec70"
"reference": "62e3505a62f482a577f55ba08747dc6a3b7463b3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/37a338733c456fc8cd056c2e0f20bae020cbec70",
"reference": "37a338733c456fc8cd056c2e0f20bae020cbec70",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/62e3505a62f482a577f55ba08747dc6a3b7463b3",
"reference": "62e3505a62f482a577f55ba08747dc6a3b7463b3",
"shasum": ""
},
"require": {
@ -5659,7 +5675,7 @@
"description": "Provides a tight integration of Twig into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bundle/tree/v5.4.36"
"source": "https://github.com/symfony/twig-bundle/tree/v5.4.31"
},
"funding": [
{
@ -5675,20 +5691,20 @@
"type": "tidelift"
}
],
"time": "2024-02-15T11:19:14+00:00"
"time": "2023-10-31T07:58:33+00:00"
},
{
"name": "symfony/validator",
"version": "v5.4.38",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
"reference": "4d107c2d548111156cdc4a12d12d8561d619c3c3"
"reference": "d205d071c4a7ef5b6b43349c7e41d47d1b227636"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/4d107c2d548111156cdc4a12d12d8561d619c3c3",
"reference": "4d107c2d548111156cdc4a12d12d8561d619c3c3",
"url": "https://api.github.com/repos/symfony/validator/zipball/d205d071c4a7ef5b6b43349c7e41d47d1b227636",
"reference": "d205d071c4a7ef5b6b43349c7e41d47d1b227636",
"shasum": ""
},
"require": {
@ -5710,7 +5726,7 @@
"symfony/http-kernel": "<4.4",
"symfony/intl": "<4.4",
"symfony/property-info": "<5.3",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3",
"symfony/translation": "<4.4",
"symfony/yaml": "<4.4"
},
"require-dev": {
@ -5730,7 +5746,7 @@
"symfony/mime": "^4.4|^5.0|^6.0",
"symfony/property-access": "^4.4|^5.0|^6.0",
"symfony/property-info": "^5.3|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3",
"symfony/translation": "^4.4|^5.0|^6.0",
"symfony/yaml": "^4.4|^5.0|^6.0"
},
"suggest": {
@ -5771,7 +5787,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/validator/tree/v5.4.38"
"source": "https://github.com/symfony/validator/tree/v5.4.32"
},
"funding": [
{
@ -5787,20 +5803,20 @@
"type": "tidelift"
}
],
"time": "2024-03-18T16:56:51+00:00"
"time": "2023-11-29T07:42:18+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v5.4.38",
"version": "v5.4.29",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "ae1d949ccc57d3f6662e4256b47ac9fbfa9651ae"
"reference": "6172e4ae3534d25ee9e07eb487c20be7760fcc65"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/ae1d949ccc57d3f6662e4256b47ac9fbfa9651ae",
"reference": "ae1d949ccc57d3f6662e4256b47ac9fbfa9651ae",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/6172e4ae3534d25ee9e07eb487c20be7760fcc65",
"reference": "6172e4ae3534d25ee9e07eb487c20be7760fcc65",
"shasum": ""
},
"require": {
@ -5860,7 +5876,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v5.4.38"
"source": "https://github.com/symfony/var-dumper/tree/v5.4.29"
},
"funding": [
{
@ -5876,28 +5892,28 @@
"type": "tidelift"
}
],
"time": "2024-03-19T10:19:25+00:00"
"time": "2023-09-12T10:09:58+00:00"
},
{
"name": "symfony/var-exporter",
"version": "v5.4.35",
"version": "v6.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
"reference": "abb0a151b62d6b07e816487e20040464af96cae7"
"reference": "2d08ca6b9cc704dce525615d1e6d1788734f36d9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/abb0a151b62d6b07e816487e20040464af96cae7",
"reference": "abb0a151b62d6b07e816487e20040464af96cae7",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/2d08ca6b9cc704dce525615d1e6d1788734f36d9",
"reference": "2d08ca6b9cc704dce525615d1e6d1788734f36d9",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/polyfill-php80": "^1.16"
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3"
},
"require-dev": {
"symfony/var-dumper": "^4.4.9|^5.0.9|^6.0"
"symfony/var-dumper": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@ -5930,10 +5946,12 @@
"export",
"hydrate",
"instantiate",
"lazy-loading",
"proxy",
"serialize"
],
"support": {
"source": "https://github.com/symfony/var-exporter/tree/v5.4.35"
"source": "https://github.com/symfony/var-exporter/tree/v6.4.1"
},
"funding": [
{
@ -5949,20 +5967,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2023-11-30T10:32:10+00:00"
},
{
"name": "symfony/web-profiler-bundle",
"version": "v5.4.36",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
"reference": "93df9846358093676fe0b029d0c4725f7935742f"
"reference": "c3e04e0ad13df22acad1157a5b66404a85c3c538"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/93df9846358093676fe0b029d0c4725f7935742f",
"reference": "93df9846358093676fe0b029d0c4725f7935742f",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/c3e04e0ad13df22acad1157a5b66404a85c3c538",
"reference": "c3e04e0ad13df22acad1157a5b66404a85c3c538",
"shasum": ""
},
"require": {
@ -6013,7 +6031,7 @@
"description": "Provides a development tool that gives detailed information about the execution of any request",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.36"
"source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.31"
},
"funding": [
{
@ -6029,7 +6047,7 @@
"type": "tidelift"
}
],
"time": "2024-02-20T07:10:08+00:00"
"time": "2023-10-31T14:39:57+00:00"
},
{
"name": "symfony/webpack-encore-bundle",
@ -6106,16 +6124,16 @@
},
{
"name": "symfony/yaml",
"version": "v5.4.35",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "e78db7f5c70a21f0417a31f414c4a95fe76c07e4"
"reference": "f387675d7f5fc4231f7554baa70681f222f73563"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/e78db7f5c70a21f0417a31f414c4a95fe76c07e4",
"reference": "e78db7f5c70a21f0417a31f414c4a95fe76c07e4",
"url": "https://api.github.com/repos/symfony/yaml/zipball/f387675d7f5fc4231f7554baa70681f222f73563",
"reference": "f387675d7f5fc4231f7554baa70681f222f73563",
"shasum": ""
},
"require": {
@ -6161,7 +6179,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v5.4.35"
"source": "https://github.com/symfony/yaml/tree/v5.4.31"
},
"funding": [
{
@ -6177,41 +6195,34 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2023-11-03T14:41:28+00:00"
},
{
"name": "twig/twig",
"version": "v3.9.2",
"version": "v3.8.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "856cb5a6cfd6f3e4dc1f6c9a8f54e259503f7cf3"
"reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/856cb5a6cfd6f3e4dc1f6c9a8f54e259503f7cf3",
"reference": "856cb5a6cfd6f3e4dc1f6c9a8f54e259503f7cf3",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
"reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3",
"symfony/polyfill-php80": "^1.22"
},
"require-dev": {
"psr/container": "^1.0|^2.0",
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
"symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0"
},
"type": "library",
"autoload": {
"files": [
"src/Resources/core.php",
"src/Resources/debug.php",
"src/Resources/escaper.php",
"src/Resources/string_loader.php"
],
"psr-4": {
"Twig\\": "src/"
}
@ -6244,7 +6255,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.9.2"
"source": "https://github.com/twigphp/Twig/tree/v3.8.0"
},
"funding": [
{
@ -6256,7 +6267,7 @@
"type": "tidelift"
}
],
"time": "2024-04-17T14:16:25+00:00"
"time": "2023-11-21T18:54:41+00:00"
}
],
"packages-dev": [],
@ -6271,5 +6282,5 @@
"ext-iconv": "*"
},
"platform-dev": [],
"plugin-api-version": "2.6.0"
"plugin-api-version": "2.3.0"
}

View File

@ -12,7 +12,7 @@ framework:
# Enables session support. Note that the session will ONLY be started if you read or write from it.
# Remove or comment this section to explicitly disable session support.
session:
handler_id: '%env(REDIS_DSN)%'
handler_id: '%env(REDIS_DSN)%&prefix=%env(string:HYDRA_SQL_REDIS_PREFIX)%&ttl=%env(HYDRA_SQL_REDIS_TTL)%'
cookie_secure: auto
cookie_samesite: lax
storage_factory_id: session.storage.factory.native

View File

@ -1,10 +0,0 @@
services:
Psr\Http\Message\RequestFactoryInterface: '@http_discovery.psr17_factory'
Psr\Http\Message\ResponseFactoryInterface: '@http_discovery.psr17_factory'
Psr\Http\Message\ServerRequestFactoryInterface: '@http_discovery.psr17_factory'
Psr\Http\Message\StreamFactoryInterface: '@http_discovery.psr17_factory'
Psr\Http\Message\UploadedFileFactoryInterface: '@http_discovery.psr17_factory'
Psr\Http\Message\UriFactoryInterface: '@http_discovery.psr17_factory'
http_discovery.psr17_factory:
class: Http\Discovery\Psr17Factory

View File

@ -1,10 +1,9 @@
twig:
globals:
locales: "%app.supported_locales%"
url_link: "%env(URL_LINK)%"
default_path: "%kernel.project_dir%/templates"
form_themes:
- "bootstrap_5_layout.html.twig"
globals:
locales: "%locales%"
default_path: '%kernel.project_dir%/templates'
form_themes:
- 'bootstrap_5_layout.html.twig'
when@test:
twig:
strict_variables: true
twig:
strict_variables: true

View File

@ -11,12 +11,10 @@ services:
- http_proxy=${http_proxy}
- https_proxy=${https_proxy}
ports:
- 8082:8071
- 8082:8080
volumes:
- ./src:/app/src
- ./config:/app/config
- ./translations:/app/translations
- ./templates:/app/templates
- /etc/localtime:/etc/localtime:ro
- $HOME/.ssh:/root/.host-ssh:ro
tmpfs:
@ -31,8 +29,8 @@ services:
- "localhost:host-gateway"
- "host.docker.internal:host-gateway"
environment:
- APP_ENV=prod
- PHP_FPM_MEMORY_LIMIT=128m
- APP_ENV=dev
- APP_LOCALES=fr,en
- HYDRA_ADMIN_BASE_URL=http://hydra:4445
- TRUSTED_PROXIES=127.0.0.1,REMOTE_ADDR,localhost
@ -44,7 +42,7 @@ services:
- DSN_REMOTE_DATABASE=pgsql:host='postgres';port=5432;dbname=lasql;
- HASH_ALGO_LEGACY="sha256"
- SECURITY_PATTERN=password,salt,pepper
- CADDY_HTTP_PORT=8071
oidc-test:
image: bornholm/oidc-test:v0.0.0-1-g936a77e
@ -84,14 +82,7 @@ services:
links:
- postgres
healthcheck:
test:
[
"CMD",
"wget",
"--spider",
"-q",
"http://127.0.0.1:4444/.well-known/openid-configuration",
]
test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:4444/.well-known/openid-configuration"]
interval: 10s
timeout: 10s
retries: 10
@ -116,9 +107,9 @@ services:
- 8085:80
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: admin@admin.com
PGADMIN_DEFAULT_PASSWORD: admin
PGADMIN_SERVER_JSON_FILE: /pgadminfile/server.json
PGADMIN_DEFAULT_EMAIL: admin@admin.com
PGADMIN_DEFAULT_PASSWORD: admin
PGADMIN_SERVER_JSON_FILE: /pgadminfile/server.json
volumes:
- ./misc/compose/pgadmin:/pgadminfile/:ro
mariadb:

View File

@ -12,5 +12,5 @@ ARG ADDITIONAL_PACKAGES="bash=5.2.15-r0 \
php81-pdo_mysql=${PHP_PKG_VERSION} \
php81-bcmath=${PHP_PKG_VERSION}"
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-base-2024.4.29-stable.1038.6395e3c
RUN chown 1000:www-data -R /app
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-standalone-2023.11.16-stable.1541.eec311d

View File

@ -12,6 +12,5 @@ ARG ADDITIONAL_PACKAGES="bash=5.2.15-r0 \
php81-pdo_mysql=${PHP_PKG_VERSION} \
php81-bcmath=${PHP_PKG_VERSION}"
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-standalone-2024.4.29-stable.1038.6395e3c
RUN chown 1000:www-data -R /app
USER www-data
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-standalone-2023.11.16-stable.1541.eec311d

8497
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@
"@symfony/webpack-encore": "^4.1.2",
"core-js": "^3.23.0",
"regenerator-runtime": "^0.13.9",
"webpack": "^5.91.0",
"webpack": "^5.74.0",
"webpack-cli": "^4.10.0",
"webpack-notifier": "^1.15.0"
},

View File

@ -3,61 +3,35 @@
Une [LoginApp](https://www.ory.sh/docs/hydra/concepts/login) pour le serveur OpenID Connect [Ory/Hydra](https://github.com/ory/hydra).
Elle permet de se connecter à une base de donnée et de vérifier un mot de passe donné sur une mire locale puis d'aller chercher des données demandées
## Image
- L'image standalone est construite en utilisant l'utilisateur `www-data` pour lancer supervisor (qui va lancer le process php-fpm et caddy, avec ce même user)
- C'est pour cela qu'on fini par "USER www-data" à la fin de `misc/images/hydra-oidc-standalone/Dockerfile`, sinon le conteneur `hydra-sql` ne tournera pas
## Configuration
### Variables d'environnement
| Variable | Description | Valeur par défaut | Utilisation |
| ----------------------------------- | ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------- |
| `APP_ENV` | Environnement symfony | prod | dev:prod |
| `APP_DEBUG` | Console de debug symofny | false | true:false |
| `HYDRA_ADMIN_BASE_URL` | Url d'admin Hydra ou dispatcher | http://hydra:4445 | obligatoire |
| `BASE_URL` | Url d'accès | http://localhost:8080 | obligatoire |
| `DSN_REMOTE_DATABASE` | DSN de la BDD | postgresql://lasql:lasql@postgres:5432/lasql?serverVersion=15&chartset=utf8 | |
| `DB_USER` | User de connection à la BDD | lasql | obligatoire |
| `DB_PASSWORD` | PAssword de l'utilisateur de la BDD | lasql | obligatoire |
| `APP_LOCALES` | Langues disponibles dans l'application | fr,en | obligatoire |
| `HASH_ALGO_LEGACY` | ALgorythme de Hashage par défaut | sha256 | |
| `SECURITY_PATTERN` | Séquence à employer pour le hashage du mot de passe | password,salt,pepper | obligatoire |
| `PEPPER` | Pepper utilisé pour le Hashage | | |
| `REDIS_DSN` | DSN du serveur Redis | redis://redis:6379 | obligatoire |
| `URL_LINK` | Url pouvant être utilisée dans les liens des templates | | |
| `CADDY_HTTP_PORT` | Port d'écoute de l'application | 8080 | |
| `CADDY_HTTPS_PORT` | Port d'écoute de l'application | 8443 | |
| `CADDY_DATA_FS` | Chemin vers le répertoire utilisé pour le stockage de caddy | /tmp/caddy | |
| `CADDY_APP_ROOT_PUBLIC` | Chemin vers le répertoire utilisé pour servire les fichiers | /app/public | |
| `CADDY_PHP_INDEX` | Nom du fichier a utiliser pour servir l'application | index.php | |
| `CADDY_APP_UPSTREAM_BACKEND_SERVER` | Adresse du serveur backend FastCGI PHP vers lequel doit être diriger les requêtes PHP. | unix//tmp/php-fpm.sock | |
| `CADDY_TRUSTED_PROXIES` | Spécification des adresses IP /plage IP étant sur pour transmettre les requetes HTTP | private_ranges | |
| `CADDY_LOG_FORMAT` | Spécification du format des logs | console | |
| `CADDY_LOG_LEVEL` | Spécification du niveau de verbosité des logs | INFO | |
| `PHP_FPM_MEMORY_LIMIT` | Spécification de la mémoire limite maximale alloué au processus PHP-FPM | 128M | |
| `PHP_FPM_DISPLAY_ERRORS` | Afficahge des erreurs dans la sortie du serveur web. | off | |
| `PHP_FPM_LISTEN` | Spécification du serveur sur lequel PHP FPM écoute les connexion. | /tmp/php-fpm.sock | |
| `PHP_FPM_LOG_LEVEL` | Spécification du niveau de verbosité des logs PHP-FPM | notice | |
| `PHP_FPM_PM` | Définition du mode de gestion des processus PHP-FPM | dynamic | |
| `PHP_FPM_PM_MAX_CHILDREN` | Définition du nombre maximum de processus enfants que PHP-FPM peut générer | 5 | |
| `PHP_FPM_PM_START_SERVERS` | Définition du nombre de processus enfants que PHP-FPM va démarrer au lancement de PHP-FPM | 2 | |
| `PHP_FPM_PM_MIN_SPARE_SERVERS` | Définition du nombre minimum de processus enfants inactifs que PHP-FPM doit conserver en réserve. | 1 | |
| `PHP_FPM_PM_MAX_SPARE_SERVERS` | Définition du nombre maximum de processus enfants inactifs que PHP-FPM peut conserver en réserve. | 3 | |
| `XDG_DATA_HOME` | Définition du répertoire de base pour le stockage des données spécifiques à l'utilisateur. | /tmp/data | |
|Variable|Description|Valeur par défaut|Utilisation|
|--------|-----------|-----------------|-----------|
|`APP_ENV`|Environnement symfony|prod|dev:prod|
|`APP_DEBUG`|Console de debug symofny|false|true:false|
|`PHP_FPM_MEMORY_LIMIT`|php-fpm memory limit|128mo||
|`NGINX_APP_SERVER_LISTEN`|Port d'écoute de l'application|8080||
|`HYDRA_ADMIN_BASE_URL`|Url d'admin Hydra ou dispatcher|http://hydra:4445|obligatoire|
|`BASE_URL`|Url d'accès|http://localhost:8080|obligatoire|
|`DSN_REMOTE_DATABASE`|DSN de la BDD|postgresql://lasql:lasql@postgres:5432/lasql?serverVersion=15&chartset=utf8||
|`DB_USER`|User de connection à la BDD|lasql|obligatoire|
|`DB_PASSWORD`|PAssword de l'utilisateur de la BDD|lasql|obligatoire|
|`APP_LOCALES`|Langues disponibles dans l'application|fr,en|obligatoire|
|`HASH_ALGO_LEGACY`|ALgorythme de Hashage par défaut|sha256||
|`SECURITY_PATTERN`|Séquence à employer pour le hashage du mot de passe|password,salt,pepper|obligatoire|
|`PEPPER`|Pepper utilisé pour le Hashage|||
|`REDIS_DSN`|DSN du serveur Redis|redis://redis:6379?&redis_sentinel=mymaster|obligatoire|
### Algorithmes de hashage compatibles
La login app est compatible par défaut avec toutes les méthodes de hashage de PHP et avec SSHA. Aucune configuration supplémentaire n'est nécessaire.
### Pattern de hashage
Définir dans la variable `SECURITY_PATTERN` le pattern utilisé avec les mots clés: password | salt | pepper séparé par des virgules pour représenter la séquence à employer pour le hashage du mot de passe.
Exemple : `SECURITY_PATTERN="salt,password,pepper"`
### Schéma de base de donnée
Permet d'adapter les requetes SQL à la base de donnée utilisée en indiquant les noms de colonnes de celle-ci.
```yaml
@ -76,7 +50,6 @@ sql_login:
## Environnement de développement
### Tester
Se rendre sur [http://localhost:8000/](http://localhost:8000/) et cliquer `Login` pour commencer une nouvelle connexion.
3 utilisateurs d'exemple sont disponible pour les tests:
| Login | Mot de passe | Algorithme |
@ -86,10 +59,8 @@ Se rendre sur [http://localhost:8000/](http://localhost:8000/) et cliquer `Login
| test3@test.com | 123456 | SSHA |
### Base de donnée
2 bases de données différentes sont disponible pour les tests.
Pour choisir la base de donnée à utiliser, modifier les d'environnement relatives à la base de donnée.
- **URL Postgres**: `postgresql://lasql:lasql@mariadb:3306/lasql?serverVersion=15&chartset=utf8`
- **URL Mariadb**: `mysql://lasql:lasql@postgres:5432/lasql`
@ -100,11 +71,11 @@ ex : `'redis:?host[redis1:26379]&host[redis2:26379]&host[redis3:26379]&redis_sen
### Liste des ports
| Nom | Description | Port(s) hôte utilisé(s) |
| ----------- | -------------------------------------------------------------------------- | ----------------------- |
| `oidc-test` | Application factice permettant de tester l'authentification OpenID Connect | `8080` |
| `hydra` | Serveur Ory/Hydra | `8081` |
| `hydra-sql` | Login/Consent/Logout App (ce projet) | `8082` |
| `postgres` | Base de donnée postgres support du test et pour hydra | `5432` |
| `mariadb` | Base de donnée mariadb support du test | `3306` |
| `pgadmin` | pour administrer la base de donnée | `8085` |
|Nom|Description|Port(s) hôte utilisé(s)|
|---|-----------|------------------|
|`oidc-test`|Application factice permettant de tester l'authentification OpenID Connect|`8080`|
|`hydra`|Serveur Ory/Hydra|`8081`|
|`hydra-sql`|Login/Consent/Logout App (ce projet)|`8082`|
|`postgres`| Base de donnée postgres support du test et pour hydra|`5432`
|`mariadb`| Base de donnée mariadb support du test|`3306`
|`pgadmin`| pour administrer la base de donnée |`8085`

View File

@ -6,12 +6,11 @@ use App\Entity\User;
use App\Hydra\Client;
use App\Hydra\HydraService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
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\Routing\Annotation\Route;
class MainController extends AbstractController
{
@ -27,7 +26,7 @@ class MainController extends AbstractController
}
#[Route('/', name: 'app_home')]
public function home(Request $request): RedirectResponse
public function home(Request $request)
{
return $this->hydra->handleLoginRequest($request);
}
@ -35,33 +34,26 @@ class MainController extends AbstractController
* Route de Healthcheck (notament pour kubernetes)
*/
#[Route('/health', name: 'health')]
public function health(Request $request): Response
public function health(Request $request)
{
return new Response('healthy', 200);
}
#[Route('/connect/login-accept', name: 'app_login_accept', methods: ['GET'])]
public function loginAccept(Request $request): RedirectResponse
#[Route('/connect/login-accept', name: 'app_login_accept')]
public function loginAccept(Request $request)
{
/** @var User */
$user = $this->getUser();
if (!$user instanceof User) {
throw new AccessDeniedException();
}
$challenge = $this->session->get('challenge');
if (!$challenge) {
return new RedirectResponse($this->getParameter('issuer_url'));
}
$loginAcceptRes = $this->client->acceptLoginRequest($challenge, [
'subject' => $user->getLogin(),
'remember' => true,
])->toArray();
$loginAcceptRes = $this->client->acceptLoginRequest($this->session->get('challenge'), [
'subject' => $user->getLogin(),
'remember' => true,
])->toArray();
return new RedirectResponse($loginAcceptRes['redirect_to']);
}
#[Route('/connect/consent', name: 'app_consent')]
public function consent(Request $request): RedirectResponse
public function consent(Request $request)
{
return $this->hydra->handleConsentRequest($request);
}

View File

@ -17,7 +17,7 @@ use Symfony\Contracts\Translation\TranslatorInterface;
class SecurityController extends AbstractController
{
#[Route('/login', name: 'app_login')]
public function login(ParameterBagInterface $params, AuthenticationUtils $authenticationUtils, Request $request, TranslatorInterface $trans): Response|RedirectResponse
public function login(ParameterBagInterface $params, AuthenticationUtils $authenticationUtils, Request $request, TranslatorInterface $trans): Response
{
// Si l'utilisateur est déjà connecté on le renvoie sur la page du site demandeur
if ($this->getUser()) {
@ -29,24 +29,16 @@ class SecurityController extends AbstractController
$error = $authenticationUtils->getLastAuthenticationError();
if ($error) {
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_LOGIN)) {
$loginForm->addError(new FormError($trans->trans('error.login', [], 'messages')));
$loginForm->get('login')->addError(new FormError($trans->trans('error.login', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_LOGIN);
}
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_PDO)) {
$loginForm->addError(new FormError($trans->trans('error.pdo', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_PDO);
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_PASSWORD)) {
$loginForm->get('password')->addError(new FormError($trans->trans('error.password', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_PASSWORD);
}
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_CONFIGURATION)) {
$loginForm->addError(new FormError($trans->trans('error.configuration', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_CONFIGURATION);
}
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_DATA_TO_FETCH_CONFIGURATION)) {
$loginForm->addError(new FormError($trans->trans('error.data_to_fetch_configuration', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_DATA_TO_FETCH_CONFIGURATION);
}
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_SECURITY_PATTERN_CONFIGURATION)) {
$loginForm->addError(new FormError($trans->trans('error.security_pattern_configuration', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_SECURITY_PATTERN_CONFIGURATION);
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_SQL_LOGIN)) {
$loginForm->addError(new FormError($trans->trans('error.sql_login', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_SQL_LOGIN);
}
}

View File

@ -2,7 +2,6 @@
namespace App\Hydra;
use App\Entity\User;
use App\Hydra\Exception\InvalidChallengeException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Exception\BadRequestException;
@ -10,14 +9,13 @@ use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class HydraService extends AbstractController
{
private SessionInterface $session;
private Client $client;
private TokenStorageInterface $tokenStorage;
private string $baseUrl;
public SessionInterface $session;
public Client $client;
public TokenStorageInterface $tokenStorage;
public string $baseUrl;
public function __construct(Client $client, SessionInterface $session, TokenStorageInterface $tokenStorage, string $baseUrl)
{
@ -27,7 +25,7 @@ class HydraService extends AbstractController
$this->baseUrl = $baseUrl;
}
public function handleLoginRequest(Request $request): RedirectResponse
public function handleLoginRequest(Request $request)
{
$challenge = $request->query->get('login_challenge');
// S'il n'y a pas de challenge, on déclenche une bad request
@ -39,15 +37,15 @@ class HydraService extends AbstractController
$loginRequestInfo = $res->toArray();
if (200 !== $res->getStatusCode()) {
$this->session->clear();
throw new BadRequestException();
throw new BadRequestException('pas de code 200');
}
// 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->session->set('challenge', $loginRequestInfo['challenge']);
return new RedirectResponse($this->baseUrl . '/connect/login-accept');
return new RedirectResponse($this->baseUrl.'/connect/login-accept');
}
public function handleConsentRequest(Request $request): RedirectResponse
public function handleConsentRequest(Request $request)
{
$challenge = $request->query->get('consent_challenge');
if (!$challenge) {
@ -55,10 +53,8 @@ class HydraService extends AbstractController
}
$consentRequestInfo = $this->client->fetchConsentRequestInfo($challenge)->toArray();
/** @var User */
$user = $this->getUser();
if (!$user instanceof User) {
throw new AccessDeniedException('Utilisateur non autorisé.');
}
$consentAcceptResponse = $this->client->acceptConsentRequest($consentRequestInfo['challenge'], [
'grant_scope' => $consentRequestInfo['requested_scope'],
'session' => [
@ -69,7 +65,7 @@ class HydraService extends AbstractController
return new RedirectResponse($consentAcceptResponse['redirect_to']);
}
public function handleLogoutRequest(Request $request): RedirectResponse
public function handleLogoutRequest(Request $request)
{
$logoutChallenge = $request->get('logout_challenge');
if (empty($logoutChallenge)) {

View File

@ -1,9 +0,0 @@
<?php
namespace App\SQLLogin\Exception;
use Exception;
class DatabaseConnectionException extends Exception
{
}

View File

@ -4,6 +4,6 @@ namespace App\SQLLogin\Exception;
use Exception;
class DataToFetchConfigurationException extends Exception
class InvalidSQLLoginConfigurationException extends Exception
{
}

View File

@ -4,6 +4,6 @@ namespace App\SQLLogin\Exception;
use Exception;
class NullDataToFetchException extends Exception
class InvalidSQLLoginException extends Exception
{
}

View File

@ -1,9 +0,0 @@
<?php
namespace App\SQLLogin\Exception;
use Exception;
class LoginElementsConfigurationException extends Exception
{
}

View File

@ -1,9 +0,0 @@
<?php
namespace App\SQLLogin\Exception;
use Exception;
class NullPasswordColumnNameException extends Exception
{
}

View File

@ -1,9 +0,0 @@
<?php
namespace App\SQLLogin\Exception;
use Exception;
class SecurityPatternConfigurationException extends Exception
{
}

View File

@ -2,8 +2,6 @@
namespace App\SQLLogin;
use App\SQLLogin\Exception\NullDataToFetchException;
class SQLLoginRequest
{
public const DATA_TO_FETCH = 'data_to_fetch';
@ -69,30 +67,25 @@ class SQLLoginRequest
public function getRequestScope()
{
$scope = '';
if (!$this->config[self::DATA_TO_FETCH]) {
throw new NullDataToFetchException();
}
foreach ($this->config[self::DATA_TO_FETCH] as $data) {
$scope .= $data . ',';
$scope .= $data.',';
}
// On enlève la dernière virgule
$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().';';
}
/**
* Construction de la string pour la requête préparée selon la configuration yaml
* intègre la récupération du mot de passe hashé, du salt et de besoin d'upgrade de la méthode de hashage
*/
public function getRequestPassword(): string
public function getRequestPassword()
{
$fields = $this->getPasswordColumnName();
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

@ -2,9 +2,8 @@
namespace App\Security\Hasher;
use App\SQLLogin\Exception\InvalidSQLLoginConfigurationException;
use App\SQLLogin\Exception\InvalidSQLPasswordException;
use App\SQLLogin\Exception\SecurityPatternConfigurationException;
use Psr\Log\LoggerInterface;
use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException;
use Symfony\Component\PasswordHasher\Hasher\CheckPasswordLengthTrait;
use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface;
@ -20,7 +19,7 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
protected array $hashAlgoLegacy;
protected array $securityPattern;
public function __construct(?string $pepper, string $hashAlgoLegacy, string $securityPattern, private LoggerInterface $loggerInterface)
public function __construct(?string $pepper, string $hashAlgoLegacy, string $securityPattern)
{
$this->pepper = $pepper;
$this->hashAlgoLegacy = explode(',', $hashAlgoLegacy);
@ -89,8 +88,7 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
foreach ($this->securityPattern as $term) {
if (self::PEPPER_PATTERN !== $term && self::PASSWORD_PATTERN !== $term && self::SALT_PATTERN !== $term) {
$this->loggerInterface->critical('La configuration du security pattern est invalide, les termes autorisés sont : '.self::PASSWORD_PATTERN.', '.self::SALT_PATTERN.' et '.self::PEPPER_PATTERN);
throw new SecurityPatternConfigurationException();
throw new InvalidSQLLoginConfigurationException();
}
}
$completedPlainPassword = '';

View File

@ -5,31 +5,26 @@ namespace App\Security;
use App\Entity\User;
use App\Security\Hasher\PasswordEncoder;
use App\Service\SQLLoginService;
use App\SQLLogin\Exception\DatabaseConnectionException;
use App\SQLLogin\Exception\DataToFetchConfigurationException;
use App\SQLLogin\Exception\InvalidSQLPasswordException;
use App\SQLLogin\Exception\LoginElementsConfigurationException;
use App\SQLLogin\Exception\SecurityPatternConfigurationException;
use Exception;
use PDOException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport;
class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
{
public const LOGIN_ROUTE = 'app_login';
public const ERROR_LOGIN = 'error_login';
public const ERROR_PDO = 'error_pdo';
public const ERROR_PASSWORD = 'error_password';
public const ERROR_SQL_LOGIN = 'error_sql_login';
public const ERROR_CONFIGURATION = 'error_configuration';
public const ERROR_DATA_TO_FETCH_CONFIGURATION = 'error_data_to_fetch_configuration';
public const ERROR_SECURITY_PATTERN_CONFIGURATION = 'error_security_pattern_configuration';
protected string $baseUrl;
private SQLLoginService $sqlLoginService;
@ -52,76 +47,62 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
return self::LOGIN_ROUTE === $request->attributes->get('_route') && $request->isMethod('POST');
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey): RedirectResponse
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey): ?Response
{
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): Response
{
$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): Passport
{
$form = $request->request->get('login');
$login = $form['login'];
$plaintextPassword = $form['password'];
$rememberMe = isset($form['_remember_me']) ? true : false;
$session = $request->getSession();
try {
// requête préparée
list($remoteHashedPassword, $remoteSalt) = $this->sqlLoginService->fetchPassword($login);
} catch (DatabaseConnectionException $e) {
$session->set(self::ERROR_PDO, true);
throw new AuthenticationException();
} catch (LoginElementsConfigurationException $e) {
$session->set(self::ERROR_CONFIGURATION, true);
throw new AuthenticationException();
} catch (Exception $exception) {
$request->getSession()->set(self::ERROR_LOGIN, true);
} catch (PDOException $e) {
$request->getSession()->set(self::ERROR_SQL_LOGIN, true);
throw new AuthenticationException();
}
if ($remoteHashedPassword) {
try {
// Comparaison remote hash et hash du input password + salt
$this->passwordHasher->verify($remoteHashedPassword, $plaintextPassword, $remoteSalt);
$attributes = $this->sqlLoginService->fetchDatas($login);
$user = new User($login, $remoteHashedPassword, $attributes, $rememberMe);
if (null === $remoteHashedPassword) {
$remoteHashedPassword = "";
}
$loader = function (string $userIdentifier) use ($user) {
return $user->getLogin() == $userIdentifier ? $user : null;
};
$passport = new SelfValidatingPassport(new UserBadge($login, $loader));
if ($rememberMe) {
$passport->addBadge(new RememberMeBadge());
}
$passport->setAttribute('attributes', $user->getAttributes());
try {
// Comparaison remote hash et hash du input password + salt
$this->passwordHasher->verify($remoteHashedPassword, $plaintextPassword, $remoteSalt);
$attributes = $this->sqlLoginService->fetchDatas($login);
$user = new User($login, $remoteHashedPassword, $attributes, $rememberMe);
$loader = function (string $userIdentifier) use ($user) {
return $user->getLogin() == $userIdentifier ? $user : null;
};
$passport = new SelfValidatingPassport(new UserBadge($login, $loader));
if ($rememberMe) {
$passport->addBadge(new RememberMeBadge());
return $passport;
} catch (InvalidSQLPasswordException $e) {
$request->getSession()->set(self::ERROR_PASSWORD, true);
throw new AuthenticationException();
} catch (PDOException $e) {
$request->getSession()->set(self::ERROR_SQL_LOGIN, 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
{
return $this->baseUrl . '/login';
return $this->baseUrl.'/login';
}
}

View File

@ -2,87 +2,68 @@
namespace App\Service;
use App\SQLLogin\Exception\DatabaseConnectionException;
use App\SQLLogin\Exception\DataToFetchConfigurationException;
use App\SQLLogin\Exception\LoginElementsConfigurationException;
use App\SQLLogin\Exception\NullDataToFetchException;
use App\SQLLogin\SQLLoginConnect;
use App\SQLLogin\SQLLoginRequest;
use Exception;
use PDO;
use PDOException;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class SQLLoginService extends AbstractController
{
public SQLLoginRequest $sqlLoginRequest;
public function __construct(SQLLoginRequest $sqlLoginRequest, private LoggerInterface $loggerInterface)
public function __construct(SQLLoginRequest $sqlLoginRequest)
{
$this->sqlLoginRequest = $sqlLoginRequest;
$this->loggerInterface = $loggerInterface;
}
public function fetchDatas(string $login): array
public function fetchDatas($login)
{
try {
$dbh = $this->getConnection();
} catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage());
throw new DatabaseConnectionException($e->getMessage());
}
try {
// forge de la requête
$request = $this->sqlLoginRequest->getRequestScope();
} catch (NullDataToFetchException $e) {
throw new DataToFetchConfigurationException($e->getMessage());
}
try {
// Préparation de la requête
$query = $dbh->prepare($request);
$query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]);
$datas = $query->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage());
throw new DataToFetchConfigurationException($e->getMessage());
\Sentry\captureException($e);
throw new PDOException();
}
return $datas;
}
public function fetchPassword(string $login): array
/**
* @param mixed $login
*
* @return bool
*/
public function fetchPassword($login)
{
try {
$dbh = $this->getConnection();
} catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage());
throw new DatabaseConnectionException($e->getMessage());
}
// forge de la requête
$request = $this->sqlLoginRequest->getRequestPassword();
try {
$request = $this->sqlLoginRequest->getRequestPassword();
$query = $dbh->prepare($request);
$query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]);
$password = $query->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage());
throw new LoginElementsConfigurationException($e->getMessage());
\Sentry\captureException($e);
throw new PDOException();
}
if (!$password) {
throw new Exception('Une erreur est survenue lors de la récupération des données');
if ($password) {
return [
$password[$this->sqlLoginRequest->getPasswordColumnName()],
isset($password[$this->sqlLoginRequest->getSaltColumnName()]) ? $password[$this->sqlLoginRequest->getSaltColumnName()] : null,
];
}
return [
$password[$this->sqlLoginRequest->getPasswordColumnName()],
isset($password[$this->sqlLoginRequest->getSaltColumnName()]) ? $password[$this->sqlLoginRequest->getSaltColumnName()] : null,
];
return false;
}
public function getConnection(): PDO
public function getConnection()
{
// Appel du singleton
$sqlLogin = SQLLoginConnect::getInstance();

View File

@ -1,200 +0,0 @@
{
"doctrine/annotations": {
"version": "1.14",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "1.0",
"ref": "a2759dd6123694c8d901d0ec80006e044c2e6457"
},
"files": [
"config/routes/annotations.yaml"
]
},
"php-http/discovery": {
"version": "1.19",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "1.18",
"ref": "f45b5dd173a27873ab19f5e3180b2f661c21de02"
},
"files": [
"config/packages/http_discovery.yaml"
]
},
"sentry/sentry-symfony": {
"version": "4.14",
"recipe": {
"repo": "github.com/symfony/recipes-contrib",
"branch": "main",
"version": "4.6",
"ref": "153de5f041f7e8a9c19f3674b800b76be0e6fd90"
},
"files": [
"config/packages/sentry.yaml"
]
},
"symfony/apache-pack": {
"version": "1.0",
"recipe": {
"repo": "github.com/symfony/recipes-contrib",
"branch": "main",
"version": "1.0",
"ref": "0f18b4decdf5695d692c1d0dfd65516a07a6adf1"
},
"files": [
"public/.htaccess"
]
},
"symfony/console": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.3",
"ref": "1781ff40d8a17d87cf53f8d4cf0c8346ed2bb461"
},
"files": [
"bin/console"
]
},
"symfony/flex": {
"version": "1.21",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "1.0",
"ref": "146251ae39e06a95be0fe3d13c807bcf3938b172"
},
"files": [
".env"
]
},
"symfony/framework-bundle": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.4",
"ref": "3cd216a4d007b78d8554d44a5b1c0a446dab24fb"
},
"files": [
"config/packages/cache.yaml",
"config/packages/framework.yaml",
"config/preload.php",
"config/routes/framework.yaml",
"config/services.yaml",
"public/index.php",
"src/Controller/.gitignore",
"src/Kernel.php"
]
},
"symfony/lock": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.2",
"ref": "8e937ff2b4735d110af1770f242c1107fdab4c8e"
},
"files": [
"config/packages/lock.yaml"
]
},
"symfony/routing": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.3",
"ref": "85de1d8ae45b284c3c84b668171d2615049e698f"
},
"files": [
"config/packages/routing.yaml",
"config/routes.yaml"
]
},
"symfony/security-bundle": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.3",
"ref": "98f1f2b0d635908c2b40f3675da2d23b1a069d30"
},
"files": [
"config/packages/security.yaml"
]
},
"symfony/translation": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.3",
"ref": "e28e27f53663cc34f0be2837aba18e3a1bef8e7b"
},
"files": [
"config/packages/translation.yaml",
"translations/.gitignore"
]
},
"symfony/twig-bundle": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.4",
"ref": "bb2178c57eee79e6be0b297aa96fc0c0def81387"
},
"files": [
"config/packages/twig.yaml",
"templates/base.html.twig"
]
},
"symfony/validator": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.3",
"ref": "c32cfd98f714894c4f128bb99aa2530c1227603c"
},
"files": [
"config/packages/validator.yaml"
]
},
"symfony/web-profiler-bundle": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.3",
"ref": "24bbc3d84ef2f427f82104f766014e799eefcc3e"
},
"files": [
"config/packages/web_profiler.yaml",
"config/routes/web_profiler.yaml"
]
},
"symfony/webpack-encore-bundle": {
"version": "1.17",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "1.10",
"ref": "eff2e505d4557c967b6710fe06bd947ba555cae5"
},
"files": [
"assets/app.js",
"assets/bootstrap.js",
"assets/controllers.json",
"assets/controllers/hello_controller.js",
"assets/styles/app.css",
"config/packages/webpack_encore.yaml",
"package.json",
"webpack.config.js"
]
}
}

View File

@ -0,0 +1,5 @@
form:
label:
login: login
password: Password
remember_me: Remember me

View File

@ -0,0 +1,5 @@
form:
label:
login: Login
password: Mot de passe
remember_me: Se souvenir de moi

View File

@ -7,28 +7,16 @@
<body>
<trans-unit id="fXVg5Zq" resname="error.login">
<source>error.login</source>
<target>Incorrect login or password</target>
<target>Incorrect login</target>
</trans-unit>
<trans-unit id="36t19qm" resname="error.sql_login">
<source>error.sql_login</source>
<target>Connection to database encountered a problem</target>
<trans-unit id="8VJKwdK" resname="error.password">
<source>error.password</source>
<target>Incorrect password</target>
</trans-unit>
<trans-unit id="lBole_G" resname="error.pdo">
<source>error.pdo</source>
<target>Connection to database encountered a problem</target>
</trans-unit>
<trans-unit id="1QRR4uA" resname="error.configuration">
<source>error.configuration</source>
<target>Identification data references do not exist in the database</target>
</trans-unit>
<trans-unit id="4EPIhsV" resname="error.data_to_fetch_configuration">
<source>error.data_to_fetch_configuration</source>
<target>Data references to be transmitted do not exist</target>
</trans-unit>
<trans-unit id="6iuTNs3" resname="error.security_pattern_configuration">
<source>error.security_pattern_configuration</source>
<target>The security pattern is not allowed</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -0,0 +1,4 @@
error:
login: 'Incorrect login'
password: 'Incorrect password'
sql_login: 'Connection to database encountered a problem'

View File

@ -7,27 +7,15 @@
<body>
<trans-unit id="fXVg5Zq" resname="error.login">
<source>error.login</source>
<target>Login ou mot de passe inconnu</target>
<target>Login incorrect ou inconnu</target>
</trans-unit>
<trans-unit id="36t19qm" resname="error.sql_login">
<source>error.sql_login</source>
<target>La connexion à la base de données a rencontré un problème</target>
<trans-unit id="8VJKwdK" resname="error.password">
<source>error.password</source>
<target>Mot de passe incorrect</target>
</trans-unit>
<trans-unit id="lBole_G" resname="error.pdo">
<source>error.pdo</source>
<target>La connexion à la base de données a rencontré un problème</target>
</trans-unit>
<trans-unit id="1QRR4uA" resname="error.configuration">
<source>error.configuration</source>
<target>Les références de données d'identification n'existent pas dans la base de données</target>
</trans-unit>
<trans-unit id="4EPIhsV" resname="error.data_to_fetch_configuration">
<source>error.data_to_fetch_configuration</source>
<target>Les références de données à transmettre n'existent pas</target>
</trans-unit>
<trans-unit id="6iuTNs3" resname="error.security_pattern_configuration">
<source>error.security_pattern_configuration</source>
<target>Le patron de sécurité n'est pas autorisé</target>
<target>La connexion à la base de déonnées à rencontré un problème</target>
</trans-unit>
</body>
</file>

View File

@ -0,0 +1,4 @@
error:
login: 'Login incorrect ou inconnu'
password: 'Mot de passe incorrect'
sql_login: 'La connexion à la base de données a rencontré un problème'

View File

@ -405,30 +405,6 @@
<source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
<target>The value of the netmask should be between {{ min }} and {{ max }}.</target>
</trans-unit>
<trans-unit id="O5pay9e" resname="The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.">
<source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
<target>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</target>
</trans-unit>
<trans-unit id="f_lviDt" resname="The password strength is too low. Please use a stronger password.">
<source>The password strength is too low. Please use a stronger password.</source>
<target>The password strength is too low. Please use a stronger password.</target>
</trans-unit>
<trans-unit id="xfCh6.k" resname="This value contains characters that are not allowed by the current restriction-level.">
<source>This value contains characters that are not allowed by the current restriction-level.</source>
<target>This value contains characters that are not allowed by the current restriction-level.</target>
</trans-unit>
<trans-unit id="x15dlan" resname="Using invisible characters is not allowed.">
<source>Using invisible characters is not allowed.</source>
<target>Using invisible characters is not allowed.</target>
</trans-unit>
<trans-unit id="2NiS4YC" resname="Mixing numbers from different scripts is not allowed.">
<source>Mixing numbers from different scripts is not allowed.</source>
<target>Mixing numbers from different scripts is not allowed.</target>
</trans-unit>
<trans-unit id="W8N1HuG" resname="Using hidden overlay characters is not allowed.">
<source>Using hidden overlay characters is not allowed.</source>
<target>Using hidden overlay characters is not allowed.</target>
</trans-unit>
<trans-unit id=".SEaaBa" resname="This form should not contain extra fields.">
<source>This form should not contain extra fields.</source>
<target>This form should not contain extra fields.</target>

View File

@ -405,30 +405,6 @@
<source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
<target>La valeur du masque de réseau doit être comprise entre {{ min }} et {{ max }}.</target>
</trans-unit>
<trans-unit id="O5pay9e" resname="The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.">
<source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
<target>Le nom du fichier est trop long. Il doit contenir au maximum {{ filename_max_length }} caractère.|Le nom de fichier est trop long. Il doit contenir au maximum {{ filename_max_length }} caractères.</target>
</trans-unit>
<trans-unit id="f_lviDt" resname="The password strength is too low. Please use a stronger password.">
<source>The password strength is too low. Please use a stronger password.</source>
<target>La force du mot de passe est trop faible. Veuillez utiliser un mot de passe plus fort.</target>
</trans-unit>
<trans-unit id="xfCh6.k" resname="This value contains characters that are not allowed by the current restriction-level.">
<source>This value contains characters that are not allowed by the current restriction-level.</source>
<target>Cette valeur contient des caractères qui ne sont pas autorisés par le niveau de restriction actuel.</target>
</trans-unit>
<trans-unit id="x15dlan" resname="Using invisible characters is not allowed.">
<source>Using invisible characters is not allowed.</source>
<target>Utiliser des caractères invisibles n'est pas autorisé.</target>
</trans-unit>
<trans-unit id="2NiS4YC" resname="Mixing numbers from different scripts is not allowed.">
<source>Mixing numbers from different scripts is not allowed.</source>
<target>Mélanger des chiffres provenant de différents scripts n'est pas autorisé.</target>
</trans-unit>
<trans-unit id="W8N1HuG" resname="Using hidden overlay characters is not allowed.">
<source>Using hidden overlay characters is not allowed.</source>
<target>Utiliser des caractères de superposition cachés n'est pas autorisé.</target>
</trans-unit>
<trans-unit id=".SEaaBa" resname="This form should not contain extra fields.">
<source>This form should not contain extra fields.</source>
<target>Ce formulaire ne doit pas contenir de champs supplémentaires.</target>

View File

@ -13,22 +13,6 @@
<source>submit</source>
<target>Submit</target>
</trans-unit>
<trans-unit id="LpHwdkN" resname="view.base.title">
<source>view.base.title</source>
<target>Hydra SQL</target>
</trans-unit>
<trans-unit id="DjhkdFJ" resname="view.login.title">
<source>view.login.title</source>
<target>Sign in</target>
</trans-unit>
<trans-unit id="UkVIwCA" resname="view.error.title">
<source>view.error.title</source>
<target>Error</target>
</trans-unit>
<trans-unit id="bmlMAb9" resname="view.error.text">
<source>view.error.text</source>
<target>Error</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -0,0 +1,2 @@
sign_in: Please, sign in
submit: Submit

View File

@ -13,22 +13,6 @@
<source>submit</source>
<target>Valider</target>
</trans-unit>
<trans-unit id="LpHwdkN" resname="view.base.title">
<source>view.base.title</source>
<target>Hydra SQL</target>
</trans-unit>
<trans-unit id="DjhkdFJ" resname="view.login.title">
<source>view.login.title</source>
<target>Identifiez-vous</target>
</trans-unit>
<trans-unit id="UkVIwCA" resname="view.error.title">
<source>view.error.title</source>
<target>Erreur</target>
</trans-unit>
<trans-unit id="bmlMAb9" resname="view.error.text">
<source>view.error.text</source>
<target>Erreur</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -0,0 +1,2 @@
sign_in: Connectez-vous
submit: Valider