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

View File

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

View File

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

View File

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

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", "@symfony/webpack-encore": "^4.1.2",
"core-js": "^3.23.0", "core-js": "^3.23.0",
"regenerator-runtime": "^0.13.9", "regenerator-runtime": "^0.13.9",
"webpack": "^5.91.0", "webpack": "^5.74.0",
"webpack-cli": "^4.10.0", "webpack-cli": "^4.10.0",
"webpack-notifier": "^1.15.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). 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 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 ## Configuration
### Variables d'environnement ### Variables d'environnement
| Variable | Description | Valeur par défaut | Utilisation | |Variable|Description|Valeur par défaut|Utilisation|
| ----------------------------------- | ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------- | |--------|-----------|-----------------|-----------|
| `APP_ENV` | Environnement symfony | prod | dev:prod | |`APP_ENV`|Environnement symfony|prod|dev:prod|
| `APP_DEBUG` | Console de debug symofny | false | true:false | |`APP_DEBUG`|Console de debug symofny|false|true:false|
| `HYDRA_ADMIN_BASE_URL` | Url d'admin Hydra ou dispatcher | http://hydra:4445 | obligatoire | |`PHP_FPM_MEMORY_LIMIT`|php-fpm memory limit|128mo||
| `BASE_URL` | Url d'accès | http://localhost:8080 | obligatoire | |`NGINX_APP_SERVER_LISTEN`|Port d'écoute de l'application|8080||
| `DSN_REMOTE_DATABASE` | DSN de la BDD | postgresql://lasql:lasql@postgres:5432/lasql?serverVersion=15&chartset=utf8 | | |`HYDRA_ADMIN_BASE_URL`|Url d'admin Hydra ou dispatcher|http://hydra:4445|obligatoire|
| `DB_USER` | User de connection à la BDD | lasql | obligatoire | |`BASE_URL`|Url d'accès|http://localhost:8080|obligatoire|
| `DB_PASSWORD` | PAssword de l'utilisateur de la BDD | lasql | obligatoire | |`DSN_REMOTE_DATABASE`|DSN de la BDD|postgresql://lasql:lasql@postgres:5432/lasql?serverVersion=15&chartset=utf8||
| `APP_LOCALES` | Langues disponibles dans l'application | fr,en | obligatoire | |`DB_USER`|User de connection à la BDD|lasql|obligatoire|
| `HASH_ALGO_LEGACY` | ALgorythme de Hashage par défaut | sha256 | | |`DB_PASSWORD`|PAssword de l'utilisateur de la BDD|lasql|obligatoire|
| `SECURITY_PATTERN` | Séquence à employer pour le hashage du mot de passe | password,salt,pepper | obligatoire | |`APP_LOCALES`|Langues disponibles dans l'application|fr,en|obligatoire|
| `PEPPER` | Pepper utilisé pour le Hashage | | | |`HASH_ALGO_LEGACY`|ALgorythme de Hashage par défaut|sha256||
| `REDIS_DSN` | DSN du serveur Redis | redis://redis:6379 | obligatoire | |`SECURITY_PATTERN`|Séquence à employer pour le hashage du mot de passe|password,salt,pepper|obligatoire|
| `URL_LINK` | Url pouvant être utilisée dans les liens des templates | | | |`PEPPER`|Pepper utilisé pour le Hashage|||
| `CADDY_HTTP_PORT` | Port d'écoute de l'application | 8080 | | |`REDIS_DSN`|DSN du serveur Redis|redis://redis:6379?&redis_sentinel=mymaster|obligatoire|
| `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 | |
### Algorithmes de hashage compatibles ### 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. 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 ### 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. 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"` Exemple : `SECURITY_PATTERN="salt,password,pepper"`
### Schéma de base de donnée ### 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. Permet d'adapter les requetes SQL à la base de donnée utilisée en indiquant les noms de colonnes de celle-ci.
```yaml ```yaml
@ -76,7 +50,6 @@ sql_login:
## Environnement de développement ## Environnement de développement
### Tester ### Tester
Se rendre sur [http://localhost:8000/](http://localhost:8000/) et cliquer `Login` pour commencer une nouvelle connexion. 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: 3 utilisateurs d'exemple sont disponible pour les tests:
| Login | Mot de passe | Algorithme | | 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 | | test3@test.com | 123456 | SSHA |
### Base de donnée ### Base de donnée
2 bases de données différentes sont disponible pour les tests. 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. 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 Postgres**: `postgresql://lasql:lasql@mariadb:3306/lasql?serverVersion=15&chartset=utf8`
- **URL Mariadb**: `mysql://lasql:lasql@postgres:5432/lasql` - **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 ### Liste des ports
| Nom | Description | Port(s) hôte utilisé(s) | |Nom|Description|Port(s) hôte utilisé(s)|
| ----------- | -------------------------------------------------------------------------- | ----------------------- | |---|-----------|------------------|
| `oidc-test` | Application factice permettant de tester l'authentification OpenID Connect | `8080` | |`oidc-test`|Application factice permettant de tester l'authentification OpenID Connect|`8080`|
| `hydra` | Serveur Ory/Hydra | `8081` | |`hydra`|Serveur Ory/Hydra|`8081`|
| `hydra-sql` | Login/Consent/Logout App (ce projet) | `8082` | |`hydra-sql`|Login/Consent/Logout App (ce projet)|`8082`|
| `postgres` | Base de donnée postgres support du test et pour hydra | `5432` | |`postgres`| Base de donnée postgres support du test et pour hydra|`5432`
| `mariadb` | Base de donnée mariadb support du test | `3306` | |`mariadb`| Base de donnée mariadb support du test|`3306`
| `pgadmin` | pour administrer la base de donnée | `8085` | |`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\Client;
use App\Hydra\HydraService; use App\Hydra\HydraService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Finder\Exception\AccessDeniedException;
use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
class MainController extends AbstractController class MainController extends AbstractController
{ {
@ -27,7 +26,7 @@ class MainController extends AbstractController
} }
#[Route('/', name: 'app_home')] #[Route('/', name: 'app_home')]
public function home(Request $request): RedirectResponse public function home(Request $request)
{ {
return $this->hydra->handleLoginRequest($request); return $this->hydra->handleLoginRequest($request);
} }
@ -35,33 +34,26 @@ class MainController extends AbstractController
* Route de Healthcheck (notament pour kubernetes) * Route de Healthcheck (notament pour kubernetes)
*/ */
#[Route('/health', name: 'health')] #[Route('/health', name: 'health')]
public function health(Request $request): Response public function health(Request $request)
{ {
return new Response('healthy', 200); return new Response('healthy', 200);
} }
#[Route('/connect/login-accept', name: 'app_login_accept', methods: ['GET'])] #[Route('/connect/login-accept', name: 'app_login_accept')]
public function loginAccept(Request $request): RedirectResponse public function loginAccept(Request $request)
{ {
/** @var User */
$user = $this->getUser(); $user = $this->getUser();
$loginAcceptRes = $this->client->acceptLoginRequest($this->session->get('challenge'), [
if (!$user instanceof User) { 'subject' => $user->getLogin(),
throw new AccessDeniedException(); 'remember' => true,
} ])->toArray();
$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();
return new RedirectResponse($loginAcceptRes['redirect_to']); return new RedirectResponse($loginAcceptRes['redirect_to']);
} }
#[Route('/connect/consent', name: 'app_consent')] #[Route('/connect/consent', name: 'app_consent')]
public function consent(Request $request): RedirectResponse public function consent(Request $request)
{ {
return $this->hydra->handleConsentRequest($request); return $this->hydra->handleConsentRequest($request);
} }

View File

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

View File

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

View File

@ -4,6 +4,6 @@ namespace App\SQLLogin\Exception;
use 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; namespace App\SQLLogin;
use App\SQLLogin\Exception\NullDataToFetchException;
class SQLLoginRequest class SQLLoginRequest
{ {
public const DATA_TO_FETCH = 'data_to_fetch'; public const DATA_TO_FETCH = 'data_to_fetch';
@ -69,30 +67,25 @@ class SQLLoginRequest
public function getRequestScope() public function getRequestScope()
{ {
$scope = ''; $scope = '';
if (!$this->config[self::DATA_TO_FETCH]) {
throw new NullDataToFetchException();
}
foreach ($this->config[self::DATA_TO_FETCH] as $data) { foreach ($this->config[self::DATA_TO_FETCH] as $data) {
$scope .= $data . ','; $scope .= $data.',';
} }
// On enlève la dernière virgule
$scope = substr($scope, 0, -1); $scope = substr($scope, 0, -1);
return 'SELECT ' . $scope . ' FROM ' . $this->getTableName() . ' WHERE ' . $this->getLoginColumnName() . ' = :' . $this->getLoginColumnName() . ';'; return 'SELECT '.$scope.' FROM '.$this->getTableName().' WHERE '.$this->getLoginColumnName().' = :'.$this->getLoginColumnName().';';
} }
/** /**
* Construction de la string pour la requête préparée selon la configuration yaml * 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 * 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(); $fields = $this->getPasswordColumnName();
if (!empty($this->getSaltColumnName())) { if (!empty($this->getSaltColumnName())) {
$fields .= ', ' . $this->getSaltColumnName(); $fields .= ', '.$this->getSaltColumnName();
} }
return 'SELECT ' . $fields . ' FROM ' . $this->getTableName() . ' WHERE ' . $this->getLoginColumnName() . ' = :' . $this->getLoginColumnName() . ';'; return 'SELECT '.$fields.' FROM '.$this->getTableName().' WHERE '.$this->getLoginColumnName().' = :'.$this->getLoginColumnName().';';
} }
} }

View File

@ -2,9 +2,8 @@
namespace App\Security\Hasher; namespace App\Security\Hasher;
use App\SQLLogin\Exception\InvalidSQLLoginConfigurationException;
use App\SQLLogin\Exception\InvalidSQLPasswordException; use App\SQLLogin\Exception\InvalidSQLPasswordException;
use App\SQLLogin\Exception\SecurityPatternConfigurationException;
use Psr\Log\LoggerInterface;
use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException; use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException;
use Symfony\Component\PasswordHasher\Hasher\CheckPasswordLengthTrait; use Symfony\Component\PasswordHasher\Hasher\CheckPasswordLengthTrait;
use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface; use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface;
@ -20,7 +19,7 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
protected array $hashAlgoLegacy; protected array $hashAlgoLegacy;
protected array $securityPattern; 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->pepper = $pepper;
$this->hashAlgoLegacy = explode(',', $hashAlgoLegacy); $this->hashAlgoLegacy = explode(',', $hashAlgoLegacy);
@ -89,8 +88,7 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
foreach ($this->securityPattern as $term) { foreach ($this->securityPattern as $term) {
if (self::PEPPER_PATTERN !== $term && self::PASSWORD_PATTERN !== $term && self::SALT_PATTERN !== $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 InvalidSQLLoginConfigurationException();
throw new SecurityPatternConfigurationException();
} }
} }
$completedPlainPassword = ''; $completedPlainPassword = '';

View File

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

View File

@ -2,87 +2,68 @@
namespace App\Service; 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\SQLLoginConnect;
use App\SQLLogin\SQLLoginRequest; use App\SQLLogin\SQLLoginRequest;
use Exception;
use PDO; use PDO;
use PDOException; use PDOException;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class SQLLoginService extends AbstractController class SQLLoginService extends AbstractController
{ {
public SQLLoginRequest $sqlLoginRequest; public SQLLoginRequest $sqlLoginRequest;
public function __construct(SQLLoginRequest $sqlLoginRequest, private LoggerInterface $loggerInterface) public function __construct(SQLLoginRequest $sqlLoginRequest)
{ {
$this->sqlLoginRequest = $sqlLoginRequest; $this->sqlLoginRequest = $sqlLoginRequest;
$this->loggerInterface = $loggerInterface;
} }
public function fetchDatas(string $login): array public function fetchDatas($login)
{ {
try { try {
$dbh = $this->getConnection(); $dbh = $this->getConnection();
} catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage());
throw new DatabaseConnectionException($e->getMessage());
}
try {
// forge de la requête // forge de la requête
$request = $this->sqlLoginRequest->getRequestScope(); $request = $this->sqlLoginRequest->getRequestScope();
} catch (NullDataToFetchException $e) {
throw new DataToFetchConfigurationException($e->getMessage());
}
try {
// Préparation de la requête // Préparation de la requête
$query = $dbh->prepare($request); $query = $dbh->prepare($request);
$query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]); $query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]);
$datas = $query->fetch(PDO::FETCH_ASSOC); $datas = $query->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) { } catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage()); \Sentry\captureException($e);
throw new DataToFetchConfigurationException($e->getMessage());
throw new PDOException();
} }
return $datas; return $datas;
} }
public function fetchPassword(string $login): array /**
* @param mixed $login
*
* @return bool
*/
public function fetchPassword($login)
{ {
try { try {
$dbh = $this->getConnection(); $dbh = $this->getConnection();
} catch (PDOException $e) { $request = $this->sqlLoginRequest->getRequestPassword();
$this->loggerInterface->critical($e->getMessage());
throw new DatabaseConnectionException($e->getMessage());
}
// forge de la requête
$request = $this->sqlLoginRequest->getRequestPassword();
try {
$query = $dbh->prepare($request); $query = $dbh->prepare($request);
$query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]); $query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]);
$password = $query->fetch(PDO::FETCH_ASSOC); $password = $query->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) { } catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage()); \Sentry\captureException($e);
throw new LoginElementsConfigurationException($e->getMessage()); throw new PDOException();
} }
if (!$password) { if ($password) {
throw new Exception('Une erreur est survenue lors de la récupération des données'); return [
$password[$this->sqlLoginRequest->getPasswordColumnName()],
isset($password[$this->sqlLoginRequest->getSaltColumnName()]) ? $password[$this->sqlLoginRequest->getSaltColumnName()] : null,
];
} }
return [ return false;
$password[$this->sqlLoginRequest->getPasswordColumnName()],
isset($password[$this->sqlLoginRequest->getSaltColumnName()]) ? $password[$this->sqlLoginRequest->getSaltColumnName()] : null,
];
} }
public function getConnection(): PDO public function getConnection()
{ {
// Appel du singleton // Appel du singleton
$sqlLogin = SQLLoginConnect::getInstance(); $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> <body>
<trans-unit id="fXVg5Zq" resname="error.login"> <trans-unit id="fXVg5Zq" resname="error.login">
<source>error.login</source> <source>error.login</source>
<target>Incorrect login or password</target> <target>Incorrect login</target>
</trans-unit> </trans-unit>
<trans-unit id="36t19qm" resname="error.sql_login"> <trans-unit id="8VJKwdK" resname="error.password">
<source>error.sql_login</source> <source>error.password</source>
<target>Connection to database encountered a problem</target> <target>Incorrect password</target>
</trans-unit> </trans-unit>
<trans-unit id="lBole_G" resname="error.pdo"> <trans-unit id="lBole_G" resname="error.pdo">
<source>error.pdo</source> <source>error.pdo</source>
<target>Connection to database encountered a problem</target> <target>Connection to database encountered a problem</target>
</trans-unit> </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> </body>
</file> </file>
</xliff> </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> <body>
<trans-unit id="fXVg5Zq" resname="error.login"> <trans-unit id="fXVg5Zq" resname="error.login">
<source>error.login</source> <source>error.login</source>
<target>Login ou mot de passe inconnu</target> <target>Login incorrect ou inconnu</target>
</trans-unit> </trans-unit>
<trans-unit id="36t19qm" resname="error.sql_login"> <trans-unit id="8VJKwdK" resname="error.password">
<source>error.sql_login</source> <source>error.password</source>
<target>La connexion à la base de données a rencontré un problème</target> <target>Mot de passe incorrect</target>
</trans-unit> </trans-unit>
<trans-unit id="lBole_G" resname="error.pdo"> <trans-unit id="lBole_G" resname="error.pdo">
<source>error.pdo</source> <source>error.pdo</source>
<target>La connexion à la base de données a rencontré un problème</target> <target>La connexion à la base de déonnées à 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>
</trans-unit> </trans-unit>
</body> </body>
</file> </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> <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> <target>The value of the netmask should be between {{ min }} and {{ max }}.</target>
</trans-unit> </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."> <trans-unit id=".SEaaBa" resname="This form should not contain extra fields.">
<source>This form should not contain extra fields.</source> <source>This form should not contain extra fields.</source>
<target>This form should not contain extra fields.</target> <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> <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> <target>La valeur du masque de réseau doit être comprise entre {{ min }} et {{ max }}.</target>
</trans-unit> </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."> <trans-unit id=".SEaaBa" resname="This form should not contain extra fields.">
<source>This form should not contain extra fields.</source> <source>This form should not contain extra fields.</source>
<target>Ce formulaire ne doit pas contenir de champs supplémentaires.</target> <target>Ce formulaire ne doit pas contenir de champs supplémentaires.</target>

View File

@ -13,22 +13,6 @@
<source>submit</source> <source>submit</source>
<target>Submit</target> <target>Submit</target>
</trans-unit> </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> </body>
</file> </file>
</xliff> </xliff>

View File

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

View File

@ -13,22 +13,6 @@
<source>submit</source> <source>submit</source>
<target>Valider</target> <target>Valider</target>
</trans-unit> </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> </body>
</file> </file>
</xliff> </xliff>

View File

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