1 Commits

Author SHA1 Message Date
f007dcf6d8 feat: add authentication success/failure log outputs
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
see CNOUS/mse#4707
2025-03-07 09:11:25 +01:00
76 changed files with 6358 additions and 7669 deletions

View File

@ -1,17 +1,14 @@
*
!/assets
!/bin
!/config
!/public
!/src
!/templates
!/translations
!/.env
!/composer.json
!/composer.lock
!/package-lock.json
!/package.json
!/symfony.lock
!/webpack.config.js
/public/build
.env.local
.env.local.php
.env.*.local
config/secrets/prod/prod.decrypt.private.php
public/bundles/
var/
vendor/
supervisord.log
supervisord.pid
.composer/
.vscode
composer.phar
/tools
/.trivy

17
.env
View File

@ -14,7 +14,7 @@
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
###> symfony/framework-bundle ###
APP_ENV=prod
APP_ENV=dev
APP_SECRET=406ccaa0c76a451fdcc2307ea146cbef
URL_LINK="http://localhost"
@ -31,16 +31,13 @@ HYDRA_ADMIN_BASE_URL='http://hydra:4445'
APP_LOCALES="fr,en"
SECURITY_PATTERN=
HASH_ALGO_LEGACY="sha256,ssha"
###> symfony/lock ###
# Choose one of the stores below
# postgresql+advisory://db_user:db_password@localhost/db_name
LOCK_DSN=flock
###< symfony/lock ###
###> sentry/sentry-symfony ###
SENTRY_DSN=
###< sentry/sentry-symfony ###
REDIS_DSN=redis://redis:6379
### Altcha
ALTCHA_HOST='http://altcha:3333'
ALTCHA_BASE_URL=''
ALTCHA_DEBUG=false
ALTCHA_WORKERS=8
ALTCHA_DELAY=100
ALTCHA_MOCK_ERROR=false
ALTCHA_ENABLED=true

5
.gitignore vendored
View File

@ -21,7 +21,6 @@ composer.phar
/tools
/.trivy
.mktools/
.php-cs-fixer.cache
###> symfony/framework-bundle ###
/.env.local
@ -39,7 +38,3 @@ composer.phar
npm-debug.log
yarn-error.log
###< symfony/webpack-encore-bundle ###
###> phpstan/phpstan ###
phpstan.neon
###< phpstan/phpstan ###

2
Jenkinsfile vendored
View File

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

View File

@ -5,9 +5,6 @@ IMAGES := $(foreach file, $(wildcard $(IMAGES_DIR)/*), $(basename $(notdir $(fil
TRIVY_ARGS ?=
php-cs-fixer:
PHP_CS_FIXER_IGNORE_ENV=1 tools/php-cs-fixer/vendor/bin/php-cs-fixer -v fix --config=./tools/php-cs-fixer/.php-cs-fixer.dist.php
build-image: $(foreach image, $(IMAGES), build-image-$(image))
build-image-%:

View File

@ -8,4 +8,5 @@
// any CSS you import will output into a single css file (app.css in this case)
import './styles/app.scss';
import 'altcha';
// start the Stimulus application
import './bootstrap';

11
assets/bootstrap.js vendored Normal file
View File

@ -0,0 +1,11 @@
import { startStimulusApp } from '@symfony/stimulus-bridge';
// Registers Stimulus controllers from controllers.json and in the controllers/ directory
export const app = startStimulusApp(require.context(
'@symfony/stimulus-bridge/lazy-controller-loader!./controllers',
true,
/\.[jt]sx?$/
));
// register any custom, 3rd party controllers here
// app.register('some_controller_name', SomeImportedController);

4
assets/controllers.json Normal file
View File

@ -0,0 +1,4 @@
{
"controllers": [],
"entrypoints": []
}

View File

@ -0,0 +1,16 @@
import { Controller } from '@hotwired/stimulus';
/*
* This is an example Stimulus controller!
*
* Any element with a data-controller="hello" attribute will cause
* this controller to be executed. The name "hello" comes from the filename:
* hello_controller.js -> "hello"
*
* Delete this file or adapt it for your use!
*/
export default class extends Controller {
connect() {
this.element.textContent = 'Hello Stimulus! Edit me in assets/controllers/hello_controller.js';
}
}

View File

@ -1,5 +0,0 @@
import './styles/theme.css'
import 'altcha';
import 'altcha/i18n/all';
import theme from './theme';

View File

@ -1,3 +0,0 @@
export default function theme() {
}

View File

@ -4,31 +4,32 @@
"minimum-stability": "stable",
"prefer-stable": true,
"require": {
"php": "^8.4",
"php": ">=7.2.5",
"ext-ctype": "*",
"ext-iconv": "*",
"doctrine/annotations": "^1.13",
"predis/predis": "^2.1",
"sentry/sentry-symfony": "^4.5",
"symfony/apache-pack": "^1.0",
"symfony/asset": "6.4.*",
"symfony/console": "6.4.*",
"symfony/dependency-injection": "6.4.*",
"symfony/dotenv": "6.4.*",
"symfony/expression-language": "6.4.*",
"symfony/asset": "5.4.*",
"symfony/console": "5.4.*",
"symfony/dependency-injection": "5.4.*",
"symfony/dotenv": "5.4.*",
"symfony/expression-language": "5.4.*",
"symfony/flex": "^1.17|^2",
"symfony/form": "6.4.*",
"symfony/framework-bundle": "6.4.*",
"symfony/http-client": "6.4.*",
"symfony/rate-limiter": "6.4.*",
"symfony/runtime": "6.4.*",
"symfony/security-bundle": "6.4.*",
"symfony/translation": "6.4.*",
"symfony/twig-bundle": "6.4.*",
"symfony/validator": "6.4.*",
"symfony/web-profiler-bundle": "6.4.*",
"symfony/form": "5.4.*",
"symfony/framework-bundle": "5.4.*",
"symfony/http-client": "5.4.*",
"symfony/monolog-bundle": "^3.10",
"symfony/rate-limiter": "5.4.*",
"symfony/runtime": "5.4.*",
"symfony/security-bundle": "5.4.*",
"symfony/translation": "5.4.*",
"symfony/twig-bundle": "5.4.*",
"symfony/validator": "5.4.*",
"symfony/web-profiler-bundle": "5.4.*",
"symfony/webpack-encore-bundle": "^1.16",
"symfony/yaml": "6.4.*"
"symfony/yaml": "5.4.*"
},
"config": {
"allow-plugins": {
@ -76,11 +77,10 @@
"extra": {
"symfony": {
"allow-contrib": true,
"require": "6.4.*"
"require": "5.4.*"
}
},
"require-dev": {
"rector/rector": "^2.1",
"symfony/debug-bundle": "6.4.*"
"symfony/debug-bundle": "5.4.*"
}
}

2914
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "8b996df8de88651b1cb94dde643d615c",
"content-hash": "9daf21762ed80ef11e74a53f5d27119f",
"packages": [
{
"name": "clue/stream-filter",
@ -150,30 +150,29 @@
},
{
"name": "doctrine/deprecations",
"version": "1.1.5",
"version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
"reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
"reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
"reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
"reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"conflict": {
"phpunit/phpunit": "<=7.5 || >=13"
},
"require-dev": {
"doctrine/coding-standard": "^9 || ^12 || ^13",
"phpstan/phpstan": "1.4.10 || 2.1.11",
"phpstan/phpstan-phpunit": "^1.0 || ^2",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
"psr/log": "^1 || ^2 || ^3"
"doctrine/coding-standard": "^9",
"phpstan/phpstan": "1.4.10 || 1.10.15",
"phpstan/phpstan-phpunit": "^1.0",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psalm/plugin-phpunit": "0.18.4",
"psr/log": "^1 || ^2 || ^3",
"vimeo/psalm": "4.30.0 || 5.12.0"
},
"suggest": {
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
@ -181,7 +180,7 @@
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Deprecations\\": "src"
"Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -192,9 +191,9 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
"source": "https://github.com/doctrine/deprecations/tree/1.1.5"
"source": "https://github.com/doctrine/deprecations/tree/1.1.3"
},
"time": "2025-04-07T20:06:18+00:00"
"time": "2024-01-30T19:34:25+00:00"
},
{
"name": "doctrine/lexer",
@ -276,16 +275,16 @@
},
{
"name": "guzzlehttp/promises",
"version": "2.2.0",
"version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c"
"reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c",
"reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c",
"url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8",
"reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8",
"shasum": ""
},
"require": {
@ -339,7 +338,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/2.2.0"
"source": "https://github.com/guzzle/promises/tree/2.0.3"
},
"funding": [
{
@ -355,20 +354,20 @@
"type": "tidelift"
}
],
"time": "2025-03-27T13:27:01+00:00"
"time": "2024-07-18T10:29:17+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "2.7.1",
"version": "2.7.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16"
"reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16",
"reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
"reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
"shasum": ""
},
"require": {
@ -455,7 +454,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.7.1"
"source": "https://github.com/guzzle/psr7/tree/2.7.0"
},
"funding": [
{
@ -471,7 +470,7 @@
"type": "tidelift"
}
],
"time": "2025-03-27T12:30:47+00:00"
"time": "2024-07-18T11:15:46+00:00"
},
{
"name": "http-interop/http-factory-guzzle",
@ -533,29 +532,28 @@
},
{
"name": "jean85/pretty-package-versions",
"version": "2.1.1",
"version": "2.0.6",
"source": {
"type": "git",
"url": "https://github.com/Jean85/pretty-package-versions.git",
"reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a"
"reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a",
"reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a",
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4",
"reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2.1.0",
"php": "^7.4|^8.0"
"composer-runtime-api": "^2.0.0",
"php": "^7.1|^8.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.2",
"jean85/composer-provided-replaced-stub-package": "^1.0",
"phpstan/phpstan": "^2.0",
"phpunit/phpunit": "^7.5|^8.5|^9.6",
"rector/rector": "^2.0",
"vimeo/psalm": "^4.3 || ^5.0"
"phpstan/phpstan": "^1.4",
"phpunit/phpunit": "^7.5|^8.5|^9.4",
"vimeo/psalm": "^4.3"
},
"type": "library",
"extra": {
@ -587,9 +585,111 @@
],
"support": {
"issues": "https://github.com/Jean85/pretty-package-versions/issues",
"source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1"
"source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6"
},
"time": "2025-03-19T14:43:43+00:00"
"time": "2024-03-08T09:58:59+00:00"
},
{
"name": "monolog/monolog",
"version": "2.10.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "5cf826f2991858b54d5c3809bee745560a1042a7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/5cf826f2991858b54d5c3809bee745560a1042a7",
"reference": "5cf826f2991858b54d5c3809bee745560a1042a7",
"shasum": ""
},
"require": {
"php": ">=7.2",
"psr/log": "^1.0.1 || ^2.0 || ^3.0"
},
"provide": {
"psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
},
"require-dev": {
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"elasticsearch/elasticsearch": "^7 || ^8",
"ext-json": "*",
"graylog2/gelf-php": "^1.4.2 || ^2@dev",
"guzzlehttp/guzzle": "^7.4",
"guzzlehttp/psr7": "^2.2",
"mongodb/mongodb": "^1.8",
"php-amqplib/php-amqplib": "~2.4 || ^3",
"phpspec/prophecy": "^1.15",
"phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^8.5.38 || ^9.6.19",
"predis/predis": "^1.1 || ^2.0",
"rollbar/rollbar": "^1.3 || ^2 || ^3",
"ruflin/elastica": "^7",
"swiftmailer/swiftmailer": "^5.3|^6.0",
"symfony/mailer": "^5.4 || ^6",
"symfony/mime": "^5.4 || ^6"
},
"suggest": {
"aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
"doctrine/couchdb": "Allow sending log messages to a CouchDB server",
"elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
"ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
"ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
"ext-mbstring": "Allow to work properly with unicode symbols",
"ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
"ext-openssl": "Required to send log messages using SSL",
"ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
"mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
"rollbar/rollbar": "Allow sending log messages to Rollbar",
"ruflin/elastica": "Allow sending log messages to an Elastic Search server"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.x-dev"
}
},
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "https://seld.be"
}
],
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
"homepage": "https://github.com/Seldaek/monolog",
"keywords": [
"log",
"logging",
"psr-3"
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
"source": "https://github.com/Seldaek/monolog/tree/2.10.0"
},
"funding": [
{
"url": "https://github.com/Seldaek",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
"type": "tidelift"
}
],
"time": "2024-11-12T12:43:37+00:00"
},
{
"name": "php-http/client-common",
@ -974,16 +1074,16 @@
},
{
"name": "predis/predis",
"version": "v2.4.0",
"version": "v2.2.2",
"source": {
"type": "git",
"url": "https://github.com/predis/predis.git",
"reference": "f49e13ee3a2a825631562aa0223ac922ec5d058b"
"reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/predis/predis/zipball/f49e13ee3a2a825631562aa0223ac922ec5d058b",
"reference": "f49e13ee3a2a825631562aa0223ac922ec5d058b",
"url": "https://api.github.com/repos/predis/predis/zipball/b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1",
"reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1",
"shasum": ""
},
"require": {
@ -992,8 +1092,7 @@
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.3",
"phpstan/phpstan": "^1.9",
"phpunit/phpcov": "^6.0 || ^8.0",
"phpunit/phpunit": "^8.0 || ^9.4"
"phpunit/phpunit": "^8.0 || ~9.4.4"
},
"suggest": {
"ext-relay": "Faster connection with in-memory caching (>=0.6.2)"
@ -1015,7 +1114,7 @@
"role": "Maintainer"
}
],
"description": "A flexible and feature-complete Redis/Valkey client for PHP.",
"description": "A flexible and feature-complete Redis client for PHP.",
"homepage": "http://github.com/predis/predis",
"keywords": [
"nosql",
@ -1024,7 +1123,7 @@
],
"support": {
"issues": "https://github.com/predis/predis/issues",
"source": "https://github.com/predis/predis/tree/v2.4.0"
"source": "https://github.com/predis/predis/tree/v2.2.2"
},
"funding": [
{
@ -1032,20 +1131,20 @@
"type": "github"
}
],
"time": "2025-04-30T15:16:02+00:00"
"time": "2023-09-13T16:42:03+00:00"
},
{
"name": "psr/cache",
"version": "3.0.0",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/cache.git",
"reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
"reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
"reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
"url": "https://api.github.com/repos/php-fig/cache/zipball/213f9dbc5b9bfbc4f8db86d2838dc968752ce13b",
"reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b",
"shasum": ""
},
"require": {
@ -1079,81 +1178,28 @@
"psr-6"
],
"support": {
"source": "https://github.com/php-fig/cache/tree/3.0.0"
"source": "https://github.com/php-fig/cache/tree/2.0.0"
},
"time": "2021-02-03T23:26:27+00:00"
},
{
"name": "psr/clock",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/clock.git",
"reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
"reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d",
"shasum": ""
},
"require": {
"php": "^7.0 || ^8.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Psr\\Clock\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for reading the clock.",
"homepage": "https://github.com/php-fig/clock",
"keywords": [
"clock",
"now",
"psr",
"psr-20",
"time"
],
"support": {
"issues": "https://github.com/php-fig/clock/issues",
"source": "https://github.com/php-fig/clock/tree/1.0.0"
},
"time": "2022-11-25T14:36:26+00:00"
"time": "2021-02-03T23:23:37+00:00"
},
{
"name": "psr/container",
"version": "2.0.2",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
"reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
"reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
"reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
"url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
"reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
"shasum": ""
},
"require": {
"php": ">=7.4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
@ -1180,9 +1226,9 @@
],
"support": {
"issues": "https://github.com/php-fig/container/issues",
"source": "https://github.com/php-fig/container/tree/2.0.2"
"source": "https://github.com/php-fig/container/tree/1.1.2"
},
"time": "2021-11-05T16:47:00+00:00"
"time": "2021-11-05T16:50:12+00:00"
},
{
"name": "psr/event-dispatcher",
@ -1396,16 +1442,16 @@
},
{
"name": "psr/log",
"version": "3.0.2",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
"reference": "ef29f6d262798707a9edd554e2b82517ef3a9376"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376",
"reference": "ef29f6d262798707a9edd554e2b82517ef3a9376",
"shasum": ""
},
"require": {
@ -1414,7 +1460,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
"dev-master": "2.0.x-dev"
}
},
"autoload": {
@ -1440,9 +1486,9 @@
"psr-3"
],
"support": {
"source": "https://github.com/php-fig/log/tree/3.0.2"
"source": "https://github.com/php-fig/log/tree/2.0.0"
},
"time": "2024-09-11T13:17:53+00:00"
"time": "2021-07-14T16:41:46+00:00"
},
{
"name": "ralouphie/getallheaders",
@ -1708,9 +1754,9 @@
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"releases/1.x": "1.x-dev",
"releases/3.2.x": "3.2.x-dev",
"releases/2.x": "2.x-dev",
"releases/3.2.x": "3.2.x-dev"
"releases/1.x": "1.x-dev"
}
},
"autoload": {
@ -1787,28 +1833,33 @@
},
{
"name": "symfony/asset",
"version": "v6.4.13",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/asset.git",
"reference": "2466c17d61d14539cddf77e57ebb9cc971185302"
"reference": "e5aa241b4914257164b39c3c2678b2c41b7671e3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/asset/zipball/2466c17d61d14539cddf77e57ebb9cc971185302",
"reference": "2466c17d61d14539cddf77e57ebb9cc971185302",
"url": "https://api.github.com/repos/symfony/asset/zipball/e5aa241b4914257164b39c3c2678b2c41b7671e3",
"reference": "e5aa241b4914257164b39c3c2678b2c41b7671e3",
"shasum": ""
},
"require": {
"php": ">=8.1"
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"symfony/http-foundation": "<5.4"
"symfony/http-foundation": "<5.3"
},
"require-dev": {
"symfony/http-client": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0"
"symfony/http-client": "^4.4|^5.0|^6.0",
"symfony/http-foundation": "^5.3|^6.0",
"symfony/http-kernel": "^4.4|^5.0|^6.0"
},
"suggest": {
"symfony/http-foundation": ""
},
"type": "library",
"autoload": {
@ -1836,7 +1887,7 @@
"description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/asset/tree/v6.4.13"
"source": "https://github.com/symfony/asset/tree/v5.4.40"
},
"funding": [
{
@ -1852,61 +1903,62 @@
"type": "tidelift"
}
],
"time": "2024-10-25T15:07:50+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/cache",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
"reference": "c88690befb8d4a85dc321fb78d677507f5eb141b"
"reference": "4b3e7bf157b8b5a010865701d9106b5f0a9c99a8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/c88690befb8d4a85dc321fb78d677507f5eb141b",
"reference": "c88690befb8d4a85dc321fb78d677507f5eb141b",
"url": "https://api.github.com/repos/symfony/cache/zipball/4b3e7bf157b8b5a010865701d9106b5f0a9c99a8",
"reference": "4b3e7bf157b8b5a010865701d9106b5f0a9c99a8",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/cache": "^2.0|^3.0",
"php": ">=7.2.5",
"psr/cache": "^1.0|^2.0",
"psr/log": "^1.1|^2|^3",
"symfony/cache-contracts": "^2.5|^3",
"symfony/service-contracts": "^2.5|^3",
"symfony/var-exporter": "^6.3.6|^7.0"
"symfony/cache-contracts": "^1.1.7|^2",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php73": "^1.9",
"symfony/polyfill-php80": "^1.16",
"symfony/service-contracts": "^1.1|^2|^3",
"symfony/var-exporter": "^4.4|^5.0|^6.0"
},
"conflict": {
"doctrine/dbal": "<2.13.1",
"symfony/dependency-injection": "<5.4",
"symfony/http-kernel": "<5.4",
"symfony/var-dumper": "<5.4"
"symfony/dependency-injection": "<4.4",
"symfony/http-kernel": "<4.4",
"symfony/var-dumper": "<4.4"
},
"provide": {
"psr/cache-implementation": "2.0|3.0",
"psr/simple-cache-implementation": "1.0|2.0|3.0",
"symfony/cache-implementation": "1.1|2.0|3.0"
"psr/cache-implementation": "1.0|2.0",
"psr/simple-cache-implementation": "1.0|2.0",
"symfony/cache-implementation": "1.0|2.0"
},
"require-dev": {
"cache/integration-tests": "dev-master",
"doctrine/cache": "^1.6|^2.0",
"doctrine/dbal": "^2.13.1|^3|^4",
"predis/predis": "^1.1|^2.0",
"psr/simple-cache": "^1.0|^2.0|^3.0",
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/filesystem": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0",
"symfony/messenger": "^5.4|^6.0|^7.0",
"symfony/var-dumper": "^5.4|^6.0|^7.0"
"psr/simple-cache": "^1.0|^2.0",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/filesystem": "^4.4|^5.0|^6.0",
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/messenger": "^4.4|^5.0|^6.0",
"symfony/var-dumper": "^4.4|^5.0|^6.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Cache\\": ""
},
"classmap": [
"Traits/ValueWrapper.php"
],
"exclude-from-classmap": [
"/Tests/"
]
@ -1932,7 +1984,7 @@
"psr6"
],
"support": {
"source": "https://github.com/symfony/cache/tree/v6.4.23"
"source": "https://github.com/symfony/cache/tree/v5.4.44"
},
"funding": [
{
@ -1948,34 +2000,37 @@
"type": "tidelift"
}
],
"time": "2025-06-27T18:31:36+00:00"
"time": "2024-09-13T16:57:39+00:00"
},
{
"name": "symfony/cache-contracts",
"version": "v3.6.0",
"version": "v2.5.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache-contracts.git",
"reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868"
"reference": "fee6db04d913094e2fb55ff8e7db5685a8134463"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868",
"reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868",
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/fee6db04d913094e2fb55ff8e7db5685a8134463",
"reference": "fee6db04d913094e2fb55ff8e7db5685a8134463",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/cache": "^3.0"
"php": ">=7.2.5",
"psr/cache": "^1.0|^2.0|^3.0"
},
"suggest": {
"symfony/cache-implementation": ""
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "3.6-dev"
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@ -2008,7 +2063,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/cache-contracts/tree/v3.6.0"
"source": "https://github.com/symfony/cache-contracts/tree/v2.5.3"
},
"funding": [
{
@ -2024,112 +2079,42 @@
"type": "tidelift"
}
],
"time": "2025-03-13T15:25:07+00:00"
},
{
"name": "symfony/clock",
"version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/clock.git",
"reference": "b2bf55c4dd115003309eafa87ee7df9ed3dde81b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/clock/zipball/b2bf55c4dd115003309eafa87ee7df9ed3dde81b",
"reference": "b2bf55c4dd115003309eafa87ee7df9ed3dde81b",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/clock": "^1.0",
"symfony/polyfill-php83": "^1.28"
},
"provide": {
"psr/clock-implementation": "1.0"
},
"type": "library",
"autoload": {
"files": [
"Resources/now.php"
],
"psr-4": {
"Symfony\\Component\\Clock\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Decouples applications from the system clock",
"homepage": "https://symfony.com",
"keywords": [
"clock",
"psr20",
"time"
],
"support": {
"source": "https://github.com/symfony/clock/tree/v6.4.13"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-09-25T14:18:03+00:00"
"time": "2024-01-23T13:51:25+00:00"
},
{
"name": "symfony/config",
"version": "v6.4.22",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
"reference": "af5917a3b1571f54689e56677a3f06440d2fe4c7"
"reference": "d4e1db78421163b98dd9971d247fd0df4a57ee5e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/af5917a3b1571f54689e56677a3f06440d2fe4c7",
"reference": "af5917a3b1571f54689e56677a3f06440d2fe4c7",
"url": "https://api.github.com/repos/symfony/config/zipball/d4e1db78421163b98dd9971d247fd0df4a57ee5e",
"reference": "d4e1db78421163b98dd9971d247fd0df4a57ee5e",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/filesystem": "^5.4|^6.0|^7.0",
"symfony/polyfill-ctype": "~1.8"
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/filesystem": "^4.4|^5.0|^6.0",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-php80": "^1.16",
"symfony/polyfill-php81": "^1.22"
},
"conflict": {
"symfony/finder": "<5.4",
"symfony/service-contracts": "<2.5"
"symfony/finder": "<4.4"
},
"require-dev": {
"symfony/event-dispatcher": "^5.4|^6.0|^7.0",
"symfony/finder": "^5.4|^6.0|^7.0",
"symfony/messenger": "^5.4|^6.0|^7.0",
"symfony/service-contracts": "^2.5|^3",
"symfony/yaml": "^5.4|^6.0|^7.0"
"symfony/event-dispatcher": "^4.4|^5.0|^6.0",
"symfony/finder": "^4.4|^5.0|^6.0",
"symfony/messenger": "^4.4|^5.0|^6.0",
"symfony/service-contracts": "^1.1|^2|^3",
"symfony/yaml": "^4.4|^5.0|^6.0"
},
"suggest": {
"symfony/yaml": "To use the yaml reference dumper"
},
"type": "library",
"autoload": {
@ -2157,7 +2142,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/config/tree/v6.4.22"
"source": "https://github.com/symfony/config/tree/v5.4.40"
},
"funding": [
{
@ -2173,51 +2158,56 @@
"type": "tidelift"
}
],
"time": "2025-05-14T06:00:01+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/console",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "9056771b8eca08d026cd3280deeec3cfd99c4d93"
"reference": "5b5a0aa66e3296e303e22490f90f521551835a83"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/9056771b8eca08d026cd3280deeec3cfd99c4d93",
"reference": "9056771b8eca08d026cd3280deeec3cfd99c4d93",
"url": "https://api.github.com/repos/symfony/console/zipball/5b5a0aa66e3296e303e22490f90f521551835a83",
"reference": "5b5a0aa66e3296e303e22490f90f521551835a83",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3",
"symfony/string": "^5.4|^6.0|^7.0"
"symfony/polyfill-php73": "^1.9",
"symfony/polyfill-php80": "^1.16",
"symfony/service-contracts": "^1.1|^2|^3",
"symfony/string": "^5.1|^6.0"
},
"conflict": {
"symfony/dependency-injection": "<5.4",
"symfony/dotenv": "<5.4",
"symfony/event-dispatcher": "<5.4",
"symfony/lock": "<5.4",
"symfony/process": "<5.4"
"psr/log": ">=3",
"symfony/dependency-injection": "<4.4",
"symfony/dotenv": "<5.1",
"symfony/event-dispatcher": "<4.4",
"symfony/lock": "<4.4",
"symfony/process": "<4.4"
},
"provide": {
"psr/log-implementation": "1.0|2.0|3.0"
"psr/log-implementation": "1.0|2.0"
},
"require-dev": {
"psr/log": "^1|^2|^3",
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/event-dispatcher": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/lock": "^5.4|^6.0|^7.0",
"symfony/messenger": "^5.4|^6.0|^7.0",
"symfony/process": "^5.4|^6.0|^7.0",
"symfony/stopwatch": "^5.4|^6.0|^7.0",
"symfony/var-dumper": "^5.4|^6.0|^7.0"
"psr/log": "^1|^2",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/event-dispatcher": "^4.4|^5.0|^6.0",
"symfony/lock": "^4.4|^5.0|^6.0",
"symfony/process": "^4.4|^5.0|^6.0",
"symfony/var-dumper": "^4.4|^5.0|^6.0"
},
"suggest": {
"psr/log": "For using the console logger",
"symfony/event-dispatcher": "",
"symfony/lock": "",
"symfony/process": ""
},
"type": "library",
"autoload": {
@ -2251,7 +2241,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v6.4.23"
"source": "https://github.com/symfony/console/tree/v5.4.44"
},
"funding": [
{
@ -2267,44 +2257,52 @@
"type": "tidelift"
}
],
"time": "2025-06-27T19:37:22+00:00"
"time": "2024-09-20T07:56:40+00:00"
},
{
"name": "symfony/dependency-injection",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "0d9f24f3de0a83573fce5c9ed025d6306c6e166b"
"reference": "23eb9f3803a931aef16a65f362a9aeb0640a1374"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0d9f24f3de0a83573fce5c9ed025d6306c6e166b",
"reference": "0d9f24f3de0a83573fce5c9ed025d6306c6e166b",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/23eb9f3803a931aef16a65f362a9aeb0640a1374",
"reference": "23eb9f3803a931aef16a65f362a9aeb0640a1374",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/container": "^1.1|^2.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/service-contracts": "^2.5|^3.0",
"symfony/var-exporter": "^6.4.20|^7.2.5"
"php": ">=7.2.5",
"psr/container": "^1.1.1",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.16",
"symfony/polyfill-php81": "^1.22",
"symfony/service-contracts": "^1.1.6|^2"
},
"conflict": {
"ext-psr": "<1.1|>=2",
"symfony/config": "<6.1",
"symfony/finder": "<5.4",
"symfony/proxy-manager-bridge": "<6.3",
"symfony/yaml": "<5.4"
"symfony/config": "<5.3",
"symfony/finder": "<4.4",
"symfony/proxy-manager-bridge": "<4.4",
"symfony/yaml": "<4.4.26"
},
"provide": {
"psr/container-implementation": "1.1|2.0",
"symfony/service-implementation": "1.1|2.0|3.0"
"psr/container-implementation": "1.0",
"symfony/service-implementation": "1.0|2.0"
},
"require-dev": {
"symfony/config": "^6.1|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/yaml": "^5.4|^6.0|^7.0"
"symfony/config": "^5.3|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/yaml": "^4.4.26|^5.0|^6.0"
},
"suggest": {
"symfony/config": "",
"symfony/expression-language": "For using expressions in service container configuration",
"symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
"symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
"symfony/yaml": ""
},
"type": "library",
"autoload": {
@ -2332,7 +2330,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dependency-injection/tree/v6.4.23"
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.44"
},
"funding": [
{
@ -2348,20 +2346,20 @@
"type": "tidelift"
}
],
"time": "2025-06-23T06:49:06+00:00"
"time": "2024-09-12T20:01:35+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v3.6.0",
"version": "v3.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
"reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
"shasum": ""
},
"require": {
@ -2369,12 +2367,12 @@
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "3.6-dev"
"dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@ -2399,7 +2397,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
},
"funding": [
{
@ -2415,32 +2413,29 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:21:43+00:00"
"time": "2024-04-18T09:32:20+00:00"
},
{
"name": "symfony/dotenv",
"version": "v6.4.16",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
"reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5"
"reference": "bb4fef2bf035a50170fd95e5b146152834126008"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/1ac5e7e7e862d4d574258daf08bd569ba926e4a5",
"reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/bb4fef2bf035a50170fd95e5b146152834126008",
"reference": "bb4fef2bf035a50170fd95e5b146152834126008",
"shasum": ""
},
"require": {
"php": ">=8.1"
},
"conflict": {
"symfony/console": "<5.4",
"symfony/process": "<5.4"
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3"
},
"require-dev": {
"symfony/console": "^5.4|^6.0|^7.0",
"symfony/process": "^5.4|^6.0|^7.0"
"symfony/console": "^4.4|^5.0|^6.0",
"symfony/process": "^4.4|^5.0|^6.0"
},
"type": "library",
"autoload": {
@ -2473,7 +2468,7 @@
"environment"
],
"support": {
"source": "https://github.com/symfony/dotenv/tree/v6.4.16"
"source": "https://github.com/symfony/dotenv/tree/v5.4.44"
},
"funding": [
{
@ -2489,35 +2484,31 @@
"type": "tidelift"
}
],
"time": "2024-11-27T11:08:19+00:00"
"time": "2024-09-16T09:39:25+00:00"
},
{
"name": "symfony/error-handler",
"version": "v6.4.23",
"version": "v5.4.42",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "b088e0b175c30b4e06d8085200fa465b586f44fa"
"reference": "db15ba0fd50890156ed40087ccedc7851a1f5b76"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/b088e0b175c30b4e06d8085200fa465b586f44fa",
"reference": "b088e0b175c30b4e06d8085200fa465b586f44fa",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/db15ba0fd50890156ed40087ccedc7851a1f5b76",
"reference": "db15ba0fd50890156ed40087ccedc7851a1f5b76",
"shasum": ""
},
"require": {
"php": ">=8.1",
"php": ">=7.2.5",
"psr/log": "^1|^2|^3",
"symfony/var-dumper": "^5.4|^6.0|^7.0"
},
"conflict": {
"symfony/deprecation-contracts": "<2.5",
"symfony/http-kernel": "<6.4"
"symfony/var-dumper": "^4.4|^5.0|^6.0"
},
"require-dev": {
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/serializer": "^5.4|^6.0|^7.0"
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/serializer": "^4.4|^5.0|^6.0"
},
"bin": [
"Resources/bin/patch-type-declarations"
@ -2548,7 +2539,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/error-handler/tree/v6.4.23"
"source": "https://github.com/symfony/error-handler/tree/v5.4.42"
},
"funding": [
{
@ -2564,43 +2555,48 @@
"type": "tidelift"
}
],
"time": "2025-06-13T07:39:48+00:00"
"time": "2024-07-23T12:34:05+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v6.4.13",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e"
"reference": "a54e2a8a114065f31020d6a89ede83e34c3b27a4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e",
"reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a54e2a8a114065f31020d6a89ede83e34c3b27a4",
"reference": "a54e2a8a114065f31020d6a89ede83e34c3b27a4",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/event-dispatcher-contracts": "^2.5|^3"
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/event-dispatcher-contracts": "^2|^3",
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"symfony/dependency-injection": "<5.4",
"symfony/service-contracts": "<2.5"
"symfony/dependency-injection": "<4.4"
},
"provide": {
"psr/event-dispatcher-implementation": "1.0",
"symfony/event-dispatcher-implementation": "2.0|3.0"
"symfony/event-dispatcher-implementation": "2.0"
},
"require-dev": {
"psr/log": "^1|^2|^3",
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/error-handler": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/service-contracts": "^2.5|^3",
"symfony/stopwatch": "^5.4|^6.0|^7.0"
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/error-handler": "^4.4|^5.0|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/http-foundation": "^4.4|^5.0|^6.0",
"symfony/service-contracts": "^1.1|^2|^3",
"symfony/stopwatch": "^4.4|^5.0|^6.0"
},
"suggest": {
"symfony/dependency-injection": "",
"symfony/http-kernel": ""
},
"type": "library",
"autoload": {
@ -2628,7 +2624,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v6.4.13"
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.40"
},
"funding": [
{
@ -2644,20 +2640,20 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:18:03+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
"version": "v3.6.0",
"version": "v3.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "59eb412e93815df44f05f342958efa9f46b1e586"
"reference": "8f93aec25d41b72493c6ddff14e916177c9efc50"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
"reference": "59eb412e93815df44f05f342958efa9f46b1e586",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50",
"reference": "8f93aec25d41b72493c6ddff14e916177c9efc50",
"shasum": ""
},
"require": {
@ -2666,12 +2662,12 @@
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "3.6-dev"
"dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@ -2704,7 +2700,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0"
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0"
},
"funding": [
{
@ -2720,27 +2716,26 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:21:43+00:00"
"time": "2024-04-18T09:32:20+00:00"
},
{
"name": "symfony/expression-language",
"version": "v6.4.13",
"version": "v5.4.43",
"source": {
"type": "git",
"url": "https://github.com/symfony/expression-language.git",
"reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df"
"reference": "9d23f7bfd1d602fddc6d6520decedc99739497dd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/expression-language/zipball/3524904fb026356a5230cd197f9a4e6a61e0e7df",
"reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df",
"url": "https://api.github.com/repos/symfony/expression-language/zipball/9d23f7bfd1d602fddc6d6520decedc99739497dd",
"reference": "9d23f7bfd1d602fddc6d6520decedc99739497dd",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/cache": "^5.4|^6.0|^7.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/service-contracts": "^2.5|^3"
"php": ">=7.2.5",
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/service-contracts": "^1.1|^2|^3"
},
"type": "library",
"autoload": {
@ -2768,7 +2763,7 @@
"description": "Provides an engine that can compile and evaluate expressions",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/expression-language/tree/v6.4.13"
"source": "https://github.com/symfony/expression-language/tree/v5.4.43"
},
"funding": [
{
@ -2784,29 +2779,30 @@
"type": "tidelift"
}
],
"time": "2024-10-09T08:40:40+00:00"
"time": "2024-08-09T07:10:35+00:00"
},
{
"name": "symfony/filesystem",
"version": "v6.4.13",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3"
"reference": "76c3818964e9d32be3862c9318ae3ba9aa280ddc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3",
"reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/76c3818964e9d32be3862c9318ae3ba9aa280ddc",
"reference": "76c3818964e9d32be3862c9318ae3ba9aa280ddc",
"shasum": ""
},
"require": {
"php": ">=8.1",
"php": ">=7.2.5",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.8"
"symfony/polyfill-mbstring": "~1.8",
"symfony/polyfill-php80": "^1.16"
},
"require-dev": {
"symfony/process": "^5.4|^6.4|^7.0"
"symfony/process": "^5.4|^6.4"
},
"type": "library",
"autoload": {
@ -2834,7 +2830,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v6.4.13"
"source": "https://github.com/symfony/filesystem/tree/v5.4.44"
},
"funding": [
{
@ -2850,27 +2846,26 @@
"type": "tidelift"
}
],
"time": "2024-10-25T15:07:50+00:00"
"time": "2024-09-16T14:52:48+00:00"
},
{
"name": "symfony/finder",
"version": "v6.4.17",
"version": "v5.4.43",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7"
"reference": "ae25a9145a900764158d439653d5630191155ca0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7",
"reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7",
"url": "https://api.github.com/repos/symfony/finder/zipball/ae25a9145a900764158d439653d5630191155ca0",
"reference": "ae25a9145a900764158d439653d5630191155ca0",
"shasum": ""
},
"require": {
"php": ">=8.1"
},
"require-dev": {
"symfony/filesystem": "^6.0|^7.0"
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.16"
},
"type": "library",
"autoload": {
@ -2898,7 +2893,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v6.4.17"
"source": "https://github.com/symfony/finder/tree/v5.4.43"
},
"funding": [
{
@ -2914,20 +2909,20 @@
"type": "tidelift"
}
],
"time": "2024-12-29T13:51:37+00:00"
"time": "2024-08-13T14:03:51+00:00"
},
{
"name": "symfony/flex",
"version": "v2.8.1",
"version": "v2.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
"reference": "423c36e369361003dc31ef11c5f15fb589e52c01"
"reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/flex/zipball/423c36e369361003dc31ef11c5f15fb589e52c01",
"reference": "423c36e369361003dc31ef11c5f15fb589e52c01",
"url": "https://api.github.com/repos/symfony/flex/zipball/92f4fba342161ff36072bd3b8e0b3c6c23160402",
"reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402",
"shasum": ""
},
"require": {
@ -2966,7 +2961,7 @@
"description": "Composer plugin for Symfony",
"support": {
"issues": "https://github.com/symfony/flex/issues",
"source": "https://github.com/symfony/flex/tree/v2.8.1"
"source": "https://github.com/symfony/flex/tree/v2.4.7"
},
"funding": [
{
@ -2982,60 +2977,65 @@
"type": "tidelift"
}
],
"time": "2025-07-05T07:45:19+00:00"
"time": "2024-10-07T08:51:54+00:00"
},
{
"name": "symfony/form",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
"reference": "6f60a2a9031c49fe92b8703764defa46481db155"
"reference": "4f3d91f8a7626e3cab9e3d2952321df10013a6eb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/form/zipball/6f60a2a9031c49fe92b8703764defa46481db155",
"reference": "6f60a2a9031c49fe92b8703764defa46481db155",
"url": "https://api.github.com/repos/symfony/form/zipball/4f3d91f8a7626e3cab9e3d2952321df10013a6eb",
"reference": "4f3d91f8a7626e3cab9e3d2952321df10013a6eb",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/event-dispatcher": "^5.4|^6.0|^7.0",
"symfony/options-resolver": "^5.4|^6.0|^7.0",
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/event-dispatcher": "^4.4|^5.0|^6.0",
"symfony/options-resolver": "^5.1|^6.0",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-icu": "^1.21",
"symfony/polyfill-mbstring": "~1.0",
"symfony/property-access": "^5.4|^6.0|^7.0",
"symfony/service-contracts": "^2.5|^3"
"symfony/polyfill-php80": "^1.16",
"symfony/polyfill-php81": "^1.23",
"symfony/property-access": "^5.0.8|^6.0",
"symfony/service-contracts": "^1.1|^2|^3"
},
"conflict": {
"symfony/console": "<5.4",
"symfony/dependency-injection": "<5.4",
"symfony/console": "<4.4",
"symfony/dependency-injection": "<4.4",
"symfony/doctrine-bridge": "<5.4.21|>=6,<6.2.7",
"symfony/error-handler": "<5.4",
"symfony/framework-bundle": "<5.4",
"symfony/http-kernel": "<5.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3",
"symfony/translation-contracts": "<2.5",
"symfony/twig-bridge": "<6.3"
"symfony/error-handler": "<4.4.5",
"symfony/framework-bundle": "<4.4",
"symfony/http-kernel": "<4.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3",
"symfony/translation-contracts": "<1.1.7",
"symfony/twig-bridge": "<5.4.21|>=6,<6.2.7"
},
"require-dev": {
"doctrine/collections": "^1.0|^2.0",
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/console": "^5.4|^6.0|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/html-sanitizer": "^6.1|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0",
"symfony/intl": "^5.4|^6.0|^7.0",
"symfony/security-core": "^6.2|^7.0",
"symfony/security-csrf": "^5.4|^6.0|^7.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3",
"symfony/uid": "^5.4|^6.0|^7.0",
"symfony/validator": "^5.4|^6.0|^7.0",
"symfony/var-dumper": "^5.4|^6.0|^7.0"
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/console": "^5.4|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/http-foundation": "^4.4|^5.0|^6.0",
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/intl": "^4.4|^5.0|^6.0",
"symfony/security-csrf": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3",
"symfony/uid": "^5.1|^6.0",
"symfony/validator": "^4.4.17|^5.1.9|^6.0",
"symfony/var-dumper": "^4.4|^5.0|^6.0"
},
"suggest": {
"symfony/security-csrf": "For protecting forms against CSRF attacks.",
"symfony/twig-bridge": "For templating with Twig.",
"symfony/validator": "For form validation."
},
"type": "library",
"autoload": {
@ -3063,7 +3063,7 @@
"description": "Allows to easily create, process and reuse HTML forms",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/form/tree/v6.4.23"
"source": "https://github.com/symfony/form/tree/v5.4.44"
},
"funding": [
{
@ -3079,113 +3079,114 @@
"type": "tidelift"
}
],
"time": "2025-06-05T16:22:31+00:00"
"time": "2024-09-20T07:56:40+00:00"
},
{
"name": "symfony/framework-bundle",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
"reference": "ff892d3ab4b8aa35921bc2120a4b31d57948fe22"
"reference": "9ae1957fb817c0fec6d171931f675895a434d988"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/ff892d3ab4b8aa35921bc2120a4b31d57948fe22",
"reference": "ff892d3ab4b8aa35921bc2120a4b31d57948fe22",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/9ae1957fb817c0fec6d171931f675895a434d988",
"reference": "9ae1957fb817c0fec6d171931f675895a434d988",
"shasum": ""
},
"require": {
"composer-runtime-api": ">=2.1",
"ext-xml": "*",
"php": ">=8.1",
"symfony/cache": "^5.4|^6.0|^7.0",
"symfony/config": "^6.1|^7.0",
"symfony/dependency-injection": "^6.4.12|^7.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/error-handler": "^6.1|^7.0",
"symfony/event-dispatcher": "^5.4|^6.0|^7.0",
"symfony/filesystem": "^5.4|^6.0|^7.0",
"symfony/finder": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-kernel": "^6.4",
"php": ">=7.2.5",
"symfony/cache": "^5.2|^6.0",
"symfony/config": "^5.3|^6.0",
"symfony/dependency-injection": "^5.4.44|^6.0.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/error-handler": "^4.4.1|^5.0.1|^6.0",
"symfony/event-dispatcher": "^5.1|^6.0",
"symfony/filesystem": "^4.4|^5.0|^6.0",
"symfony/finder": "^4.4|^5.0|^6.0",
"symfony/http-foundation": "^5.4.24|^6.2.11",
"symfony/http-kernel": "^5.4|^6.0",
"symfony/polyfill-mbstring": "~1.0",
"symfony/routing": "^6.4|^7.0"
"symfony/polyfill-php80": "^1.16",
"symfony/polyfill-php81": "^1.22",
"symfony/routing": "^5.3|^6.0"
},
"conflict": {
"doctrine/annotations": "<1.13.1",
"doctrine/cache": "<1.11",
"doctrine/persistence": "<1.3",
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"symfony/asset": "<5.4",
"symfony/asset-mapper": "<6.4",
"symfony/clock": "<6.3",
"symfony/console": "<5.4|>=7.0",
"symfony/dom-crawler": "<6.4",
"symfony/dotenv": "<5.4",
"symfony/form": "<5.4",
"symfony/http-client": "<6.3",
"symfony/lock": "<5.4",
"symfony/mailer": "<5.4",
"symfony/messenger": "<6.3",
"symfony/mime": "<6.4",
"symfony/property-access": "<5.4",
"symfony/property-info": "<5.4",
"symfony/runtime": "<5.4.45|>=6.0,<6.4.13|>=7.0,<7.1.6",
"symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4",
"symfony/security-core": "<5.4",
"symfony/security-csrf": "<5.4",
"symfony/serializer": "<6.4",
"symfony/stopwatch": "<5.4",
"symfony/translation": "<6.4",
"symfony/twig-bridge": "<5.4",
"symfony/twig-bundle": "<5.4",
"symfony/validator": "<6.4",
"symfony/web-profiler-bundle": "<6.4",
"symfony/workflow": "<6.4"
"symfony/asset": "<5.3",
"symfony/console": "<5.2.5|>=7.0",
"symfony/dom-crawler": "<4.4",
"symfony/dotenv": "<5.1",
"symfony/form": "<5.2",
"symfony/http-client": "<4.4",
"symfony/lock": "<4.4",
"symfony/mailer": "<5.2",
"symfony/messenger": "<5.4",
"symfony/mime": "<4.4",
"symfony/property-access": "<5.3",
"symfony/property-info": "<4.4",
"symfony/security-csrf": "<5.3",
"symfony/serializer": "<5.2",
"symfony/service-contracts": ">=3.0",
"symfony/stopwatch": "<4.4",
"symfony/translation": "<5.3",
"symfony/twig-bridge": "<4.4",
"symfony/twig-bundle": "<4.4",
"symfony/validator": "<5.3.11",
"symfony/web-profiler-bundle": "<4.4",
"symfony/workflow": "<5.2"
},
"require-dev": {
"doctrine/annotations": "^1.13.1|^2",
"doctrine/cache": "^1.11|^2.0",
"doctrine/persistence": "^1.3|^2|^3",
"dragonmantank/cron-expression": "^3.1",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"seld/jsonlint": "^1.10",
"symfony/asset": "^5.4|^6.0|^7.0",
"symfony/asset-mapper": "^6.4|^7.0",
"symfony/browser-kit": "^5.4|^6.0|^7.0",
"symfony/clock": "^6.2|^7.0",
"symfony/console": "^5.4.9|^6.0.9|^7.0",
"symfony/css-selector": "^5.4|^6.0|^7.0",
"symfony/dom-crawler": "^6.4|^7.0",
"symfony/dotenv": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/form": "^5.4|^6.0|^7.0",
"symfony/html-sanitizer": "^6.1|^7.0",
"symfony/http-client": "^6.3|^7.0",
"symfony/lock": "^5.4|^6.0|^7.0",
"symfony/mailer": "^5.4|^6.0|^7.0",
"symfony/messenger": "^6.3|^7.0",
"symfony/mime": "^6.4|^7.0",
"symfony/notifier": "^5.4|^6.0|^7.0",
"symfony/asset": "^5.3|^6.0",
"symfony/browser-kit": "^5.4|^6.0",
"symfony/console": "^5.4.9|^6.0.9",
"symfony/css-selector": "^4.4|^5.0|^6.0",
"symfony/dom-crawler": "^4.4.30|^5.3.7|^6.0",
"symfony/dotenv": "^5.1|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/form": "^5.2|^6.0",
"symfony/http-client": "^4.4|^5.0|^6.0",
"symfony/lock": "^4.4|^5.0|^6.0",
"symfony/mailer": "^5.2|^6.0",
"symfony/messenger": "^5.4|^6.0",
"symfony/mime": "^4.4|^5.0|^6.0",
"symfony/notifier": "^5.4|^6.0",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/process": "^5.4|^6.0|^7.0",
"symfony/property-info": "^5.4|^6.0|^7.0",
"symfony/rate-limiter": "^5.4|^6.0|^7.0",
"symfony/scheduler": "^6.4.4|^7.0.4",
"symfony/security-bundle": "^5.4|^6.0|^7.0",
"symfony/semaphore": "^5.4|^6.0|^7.0",
"symfony/serializer": "^6.4|^7.0",
"symfony/stopwatch": "^5.4|^6.0|^7.0",
"symfony/string": "^5.4|^6.0|^7.0",
"symfony/translation": "^6.4|^7.0",
"symfony/twig-bundle": "^5.4|^6.0|^7.0",
"symfony/uid": "^5.4|^6.0|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/web-link": "^5.4|^6.0|^7.0",
"symfony/workflow": "^6.4|^7.0",
"symfony/yaml": "^5.4|^6.0|^7.0",
"symfony/process": "^4.4|^5.0|^6.0",
"symfony/property-info": "^4.4|^5.0|^6.0",
"symfony/rate-limiter": "^5.2|^6.0",
"symfony/security-bundle": "^5.4|^6.0",
"symfony/serializer": "^5.4|^6.0",
"symfony/stopwatch": "^4.4|^5.0|^6.0",
"symfony/string": "^5.0|^6.0",
"symfony/translation": "^5.3|^6.0",
"symfony/twig-bundle": "^4.4|^5.0|^6.0",
"symfony/validator": "^5.3.11|^6.0",
"symfony/web-link": "^4.4|^5.0|^6.0",
"symfony/workflow": "^5.2|^6.0",
"symfony/yaml": "^4.4|^5.0|^6.0",
"twig/twig": "^2.10|^3.0.4"
},
"suggest": {
"ext-apcu": "For best performance of the system caches",
"symfony/console": "For using the console commands",
"symfony/form": "For using forms",
"symfony/property-info": "For using the property_info service",
"symfony/serializer": "For using the serializer service",
"symfony/validator": "For using validation",
"symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering",
"symfony/yaml": "For using the debug:config and lint:yaml commands"
},
"type": "symfony-bundle",
"autoload": {
"psr-4": {
@ -3212,7 +3213,7 @@
"description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/framework-bundle/tree/v6.4.23"
"source": "https://github.com/symfony/framework-bundle/tree/v5.4.44"
},
"funding": [
{
@ -3228,38 +3229,36 @@
"type": "tidelift"
}
],
"time": "2025-06-26T21:24:02+00:00"
"time": "2024-09-20T08:11:35+00:00"
},
{
"name": "symfony/http-client",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "19f11e742b94dcfd968a54f5381bb9082a88cb57"
"reference": "58d3dc6bfa5fb37137e32d52ddc202ba4d1cea04"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/19f11e742b94dcfd968a54f5381bb9082a88cb57",
"reference": "19f11e742b94dcfd968a54f5381bb9082a88cb57",
"url": "https://api.github.com/repos/symfony/http-client/zipball/58d3dc6bfa5fb37137e32d52ddc202ba4d1cea04",
"reference": "58d3dc6bfa5fb37137e32d52ddc202ba4d1cea04",
"shasum": ""
},
"require": {
"php": ">=8.1",
"php": ">=7.2.5",
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/http-client-contracts": "~3.4.4|^3.5.2",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
"php-http/discovery": "<1.15",
"symfony/http-foundation": "<6.3"
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/http-client-contracts": "^2.5.3",
"symfony/polyfill-php73": "^1.11",
"symfony/polyfill-php80": "^1.16",
"symfony/service-contracts": "^1.0|^2|^3"
},
"provide": {
"php-http/async-client-implementation": "*",
"php-http/client-implementation": "*",
"psr/http-client-implementation": "1.0",
"symfony/http-client-implementation": "3.0"
"symfony/http-client-implementation": "2.4"
},
"require-dev": {
"amphp/amp": "^2.5",
@ -3269,12 +3268,12 @@
"guzzlehttp/promises": "^1.4|^2.0",
"nyholm/psr7": "^1.0",
"php-http/httplug": "^1.0|^2.0",
"php-http/message-factory": "^1.0",
"psr/http-client": "^1.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0",
"symfony/messenger": "^5.4|^6.0|^7.0",
"symfony/process": "^5.4|^6.0|^7.0",
"symfony/stopwatch": "^5.4|^6.0|^7.0"
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/http-kernel": "^4.4.13|^5.1.5|^6.0",
"symfony/process": "^4.4|^5.0|^6.0",
"symfony/stopwatch": "^4.4|^5.0|^6.0"
},
"type": "library",
"autoload": {
@ -3305,7 +3304,7 @@
"http"
],
"support": {
"source": "https://github.com/symfony/http-client/tree/v6.4.23"
"source": "https://github.com/symfony/http-client/tree/v5.4.44"
},
"funding": [
{
@ -3321,42 +3320,42 @@
"type": "tidelift"
}
],
"time": "2025-06-27T20:02:31+00:00"
"time": "2024-09-16T14:04:28+00:00"
},
{
"name": "symfony/http-client-contracts",
"version": "v3.6.0",
"version": "v2.5.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client-contracts.git",
"reference": "75d7043853a42837e68111812f4d964b01e5101c"
"reference": "e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/75d7043853a42837e68111812f4d964b01e5101c",
"reference": "75d7043853a42837e68111812f4d964b01e5101c",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1",
"reference": "e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1",
"shasum": ""
},
"require": {
"php": ">=8.1"
"php": ">=7.2.5"
},
"suggest": {
"symfony/http-client-implementation": ""
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "3.6-dev"
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\HttpClient\\": ""
},
"exclude-from-classmap": [
"/Test/"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -3383,7 +3382,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/http-client-contracts/tree/v3.6.0"
"source": "https://github.com/symfony/http-client-contracts/tree/v2.5.3"
},
"funding": [
{
@ -3399,40 +3398,39 @@
"type": "tidelift"
}
],
"time": "2025-04-29T11:18:49+00:00"
"time": "2024-03-26T19:42:53+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "452d19f945ee41345fd8a50c18b60783546b7bd3"
"reference": "ae0d217e5932aa0b70ddb4cf7822cc76d48aee53"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/452d19f945ee41345fd8a50c18b60783546b7bd3",
"reference": "452d19f945ee41345fd8a50c18b60783546b7bd3",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/ae0d217e5932aa0b70ddb4cf7822cc76d48aee53",
"reference": "ae0d217e5932aa0b70ddb4cf7822cc76d48aee53",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-mbstring": "~1.1",
"symfony/polyfill-php83": "^1.27"
},
"conflict": {
"symfony/cache": "<6.4.12|>=7.0,<7.1.5"
"symfony/polyfill-php80": "^1.16"
},
"require-dev": {
"doctrine/dbal": "^2.13.1|^3|^4",
"predis/predis": "^1.1|^2.0",
"symfony/cache": "^6.4.12|^7.1.5",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0",
"symfony/mime": "^5.4|^6.0|^7.0",
"symfony/rate-limiter": "^5.4|^6.0|^7.0"
"predis/predis": "^1.0|^2.0",
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^5.4|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4",
"symfony/mime": "^4.4|^5.0|^6.0",
"symfony/rate-limiter": "^5.2|^6.0"
},
"suggest": {
"symfony/mime": "To use the file extension guesser"
},
"type": "library",
"autoload": {
@ -3460,7 +3458,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v6.4.23"
"source": "https://github.com/symfony/http-foundation/tree/v5.4.44"
},
"funding": [
{
@ -3476,78 +3474,77 @@
"type": "tidelift"
}
],
"time": "2025-05-26T09:17:58+00:00"
"time": "2024-09-15T07:55:06+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "2bb2cba685aabd859f22cf6946554e8e7f3c329a"
"reference": "788dcf72d9af7432a886aa3b0c5904d68087ba13"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/2bb2cba685aabd859f22cf6946554e8e7f3c329a",
"reference": "2bb2cba685aabd859f22cf6946554e8e7f3c329a",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/788dcf72d9af7432a886aa3b0c5904d68087ba13",
"reference": "788dcf72d9af7432a886aa3b0c5904d68087ba13",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/error-handler": "^6.4|^7.0",
"symfony/event-dispatcher": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/polyfill-ctype": "^1.8"
"php": ">=7.2.5",
"psr/log": "^1|^2",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/error-handler": "^4.4|^5.0|^6.0",
"symfony/event-dispatcher": "^5.0|^6.0",
"symfony/http-foundation": "^5.4.21|^6.2.7",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-php73": "^1.9",
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"symfony/browser-kit": "<5.4",
"symfony/cache": "<5.4",
"symfony/config": "<6.1",
"symfony/console": "<5.4",
"symfony/dependency-injection": "<6.4",
"symfony/doctrine-bridge": "<5.4",
"symfony/form": "<5.4",
"symfony/http-client": "<5.4",
"symfony/http-client-contracts": "<2.5",
"symfony/mailer": "<5.4",
"symfony/messenger": "<5.4",
"symfony/translation": "<5.4",
"symfony/translation-contracts": "<2.5",
"symfony/twig-bridge": "<5.4",
"symfony/validator": "<6.4",
"symfony/var-dumper": "<6.3",
"symfony/cache": "<5.0",
"symfony/config": "<5.0",
"symfony/console": "<4.4",
"symfony/dependency-injection": "<5.3",
"symfony/doctrine-bridge": "<5.0",
"symfony/form": "<5.0",
"symfony/http-client": "<5.0",
"symfony/mailer": "<5.0",
"symfony/messenger": "<5.0",
"symfony/translation": "<5.0",
"symfony/twig-bridge": "<5.0",
"symfony/validator": "<5.0",
"twig/twig": "<2.13"
},
"provide": {
"psr/log-implementation": "1.0|2.0|3.0"
"psr/log-implementation": "1.0|2.0"
},
"require-dev": {
"psr/cache": "^1.0|^2.0|^3.0",
"symfony/browser-kit": "^5.4|^6.0|^7.0",
"symfony/clock": "^6.2|^7.0",
"symfony/config": "^6.1|^7.0",
"symfony/console": "^5.4|^6.0|^7.0",
"symfony/css-selector": "^5.4|^6.0|^7.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/dom-crawler": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/finder": "^5.4|^6.0|^7.0",
"symfony/http-client-contracts": "^2.5|^3",
"symfony/process": "^5.4|^6.0|^7.0",
"symfony/property-access": "^5.4.5|^6.0.5|^7.0",
"symfony/routing": "^5.4|^6.0|^7.0",
"symfony/serializer": "^6.4.4|^7.0.4",
"symfony/stopwatch": "^5.4|^6.0|^7.0",
"symfony/translation": "^5.4|^6.0|^7.0",
"symfony/translation-contracts": "^2.5|^3",
"symfony/uid": "^5.4|^6.0|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/var-dumper": "^5.4|^6.4|^7.0",
"symfony/var-exporter": "^6.2|^7.0",
"symfony/browser-kit": "^5.4|^6.0",
"symfony/config": "^5.0|^6.0",
"symfony/console": "^4.4|^5.0|^6.0",
"symfony/css-selector": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^5.3|^6.0",
"symfony/dom-crawler": "^4.4|^5.0|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/finder": "^4.4|^5.0|^6.0",
"symfony/http-client-contracts": "^1.1|^2|^3",
"symfony/process": "^4.4|^5.0|^6.0",
"symfony/routing": "^4.4|^5.0|^6.0",
"symfony/stopwatch": "^4.4|^5.0|^6.0",
"symfony/translation": "^4.4|^5.0|^6.0",
"symfony/translation-contracts": "^1.1|^2|^3",
"symfony/var-dumper": "^4.4.31|^5.4",
"twig/twig": "^2.13|^3.0.4"
},
"suggest": {
"symfony/browser-kit": "",
"symfony/config": "",
"symfony/console": "",
"symfony/dependency-injection": ""
},
"type": "library",
"autoload": {
"psr-4": {
@ -3574,7 +3571,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-kernel/tree/v6.4.23"
"source": "https://github.com/symfony/http-kernel/tree/v5.4.44"
},
"funding": [
{
@ -3590,25 +3587,271 @@
"type": "tidelift"
}
],
"time": "2025-06-28T08:14:51+00:00"
"time": "2024-09-21T05:47:58+00:00"
},
{
"name": "symfony/options-resolver",
"version": "v6.4.16",
"name": "symfony/lock",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
"reference": "368128ad168f20e22c32159b9f761e456cec0c78"
"url": "https://github.com/symfony/lock.git",
"reference": "d96955c9919fa8609b193ba76e9f527776b70176"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/368128ad168f20e22c32159b9f761e456cec0c78",
"reference": "368128ad168f20e22c32159b9f761e456cec0c78",
"url": "https://api.github.com/repos/symfony/lock/zipball/d96955c9919fa8609b193ba76e9f527776b70176",
"reference": "d96955c9919fa8609b193ba76e9f527776b70176",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3"
"php": ">=7.2.5",
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"doctrine/dbal": "<2.13"
},
"require-dev": {
"doctrine/dbal": "^2.13|^3|^4",
"predis/predis": "^1.0|^2.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Lock\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jérémy Derussé",
"email": "jeremy@derusse.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Creates and manages locks, a mechanism to provide exclusive access to a shared resource",
"homepage": "https://symfony.com",
"keywords": [
"cas",
"flock",
"locking",
"mutex",
"redlock",
"semaphore"
],
"support": {
"source": "https://github.com/symfony/lock/tree/v5.4.40"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/monolog-bridge",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bridge.git",
"reference": "cf7d75d4d64a41fbb1c0e92301bec404134fa84b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/cf7d75d4d64a41fbb1c0e92301bec404134fa84b",
"reference": "cf7d75d4d64a41fbb1c0e92301bec404134fa84b",
"shasum": ""
},
"require": {
"monolog/monolog": "^1.25.1|^2",
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/http-kernel": "^5.3|^6.0",
"symfony/polyfill-php80": "^1.16",
"symfony/service-contracts": "^1.1|^2|^3"
},
"conflict": {
"symfony/console": "<4.4",
"symfony/http-foundation": "<5.3"
},
"require-dev": {
"symfony/console": "^4.4|^5.0|^6.0",
"symfony/http-client": "^4.4|^5.0|^6.0",
"symfony/mailer": "^4.4|^5.0|^6.0",
"symfony/messenger": "^4.4|^5.0|^6.0",
"symfony/mime": "^4.4|^5.0|^6.0",
"symfony/security-core": "^4.4|^5.0|^6.0",
"symfony/var-dumper": "^4.4|^5.0|^6.0"
},
"suggest": {
"symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.",
"symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.",
"symfony/var-dumper": "For using the debugging handlers like the console handler or the log server handler."
},
"type": "symfony-bridge",
"autoload": {
"psr-4": {
"Symfony\\Bridge\\Monolog\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides integration for Monolog with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/monolog-bridge/tree/v5.4.45"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-10-10T06:37:45+00:00"
},
{
"name": "symfony/monolog-bundle",
"version": "v3.10.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bundle.git",
"reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181",
"reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181",
"shasum": ""
},
"require": {
"monolog/monolog": "^1.25.1 || ^2.0 || ^3.0",
"php": ">=7.2.5",
"symfony/config": "^5.4 || ^6.0 || ^7.0",
"symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0",
"symfony/http-kernel": "^5.4 || ^6.0 || ^7.0",
"symfony/monolog-bridge": "^5.4 || ^6.0 || ^7.0"
},
"require-dev": {
"symfony/console": "^5.4 || ^6.0 || ^7.0",
"symfony/phpunit-bridge": "^6.3 || ^7.0",
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\MonologBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony MonologBundle",
"homepage": "https://symfony.com",
"keywords": [
"log",
"logging"
],
"support": {
"issues": "https://github.com/symfony/monolog-bundle/issues",
"source": "https://github.com/symfony/monolog-bundle/tree/v3.10.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2023-11-06T17:08:13+00:00"
},
{
"name": "symfony/options-resolver",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
"reference": "bd1afbde6613a8d6b956115e0e14b196191fd0c4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/bd1afbde6613a8d6b956115e0e14b196191fd0c4",
"reference": "bd1afbde6613a8d6b956115e0e14b196191fd0c4",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php73": "~1.0",
"symfony/polyfill-php80": "^1.16"
},
"type": "library",
"autoload": {
@ -3641,7 +3884,7 @@
"options"
],
"support": {
"source": "https://github.com/symfony/options-resolver/tree/v6.4.16"
"source": "https://github.com/symfony/options-resolver/tree/v5.4.40"
},
"funding": [
{
@ -3657,31 +3900,33 @@
"type": "tidelift"
}
],
"time": "2024-11-20T10:57:02+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/password-hasher",
"version": "v6.4.13",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/password-hasher.git",
"reference": "e97a1b31f60b8bdfc1fdedab4398538da9441d47"
"reference": "21b98178ab2024e6c7d8ab72cca9ba16015c6093"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/e97a1b31f60b8bdfc1fdedab4398538da9441d47",
"reference": "e97a1b31f60b8bdfc1fdedab4398538da9441d47",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/21b98178ab2024e6c7d8ab72cca9ba16015c6093",
"reference": "21b98178ab2024e6c7d8ab72cca9ba16015c6093",
"shasum": ""
},
"require": {
"php": ">=8.1"
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.15"
},
"conflict": {
"symfony/security-core": "<5.4"
"symfony/security-core": "<5.3"
},
"require-dev": {
"symfony/console": "^5.4|^6.0|^7.0",
"symfony/security-core": "^5.4|^6.0|^7.0"
"symfony/console": "^5.3|^6.0",
"symfony/security-core": "^5.3|^6.0"
},
"type": "library",
"autoload": {
@ -3713,7 +3958,7 @@
"password"
],
"support": {
"source": "https://github.com/symfony/password-hasher/tree/v6.4.13"
"source": "https://github.com/symfony/password-hasher/tree/v5.4.40"
},
"funding": [
{
@ -3729,11 +3974,11 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:18:03+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.32.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
@ -3754,8 +3999,8 @@
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -3791,7 +4036,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0"
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
},
"funding": [
{
@ -3811,16 +4056,16 @@
},
{
"name": "symfony/polyfill-intl-icu",
"version": "v1.32.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "763d2a91fea5681509ca01acbc1c5e450d127811"
"reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/763d2a91fea5681509ca01acbc1c5e450d127811",
"reference": "763d2a91fea5681509ca01acbc1c5e450d127811",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78",
"reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78",
"shasum": ""
},
"require": {
@ -3832,8 +4077,8 @@
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -3875,7 +4120,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.32.0"
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.31.0"
},
"funding": [
{
@ -3891,11 +4136,11 @@
"type": "tidelift"
}
],
"time": "2024-12-21T18:38:29+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.32.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@ -3916,8 +4161,8 @@
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -3956,7 +4201,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
},
"funding": [
{
@ -3976,20 +4221,19 @@
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.32.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
"reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
"shasum": ""
},
"require": {
"ext-iconv": "*",
"php": ">=7.2"
},
"provide": {
@ -4001,8 +4245,8 @@
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4037,7 +4281,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
},
"funding": [
{
@ -4053,20 +4297,20 @@
"type": "tidelift"
}
],
"time": "2024-12-23T08:48:59+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.32.0",
"name": "symfony/polyfill-php73",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
"url": "https://github.com/symfony/polyfill-php73.git",
"reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
"reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
"shasum": ""
},
"require": {
@ -4075,8 +4319,84 @@
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php73\\": ""
},
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4117,7 +4437,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
},
"funding": [
{
@ -4133,20 +4453,20 @@
"type": "tidelift"
}
],
"time": "2025-01-02T08:10:11+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php83",
"version": "v1.32.0",
"name": "symfony/polyfill-php81",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
"reference": "2fb86d65e2d424369ad2905e83b236a8805ba491"
"url": "https://github.com/symfony/polyfill-php81.git",
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491",
"reference": "2fb86d65e2d424369ad2905e83b236a8805ba491",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
"shasum": ""
},
"require": {
@ -4155,8 +4475,8 @@
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4164,7 +4484,7 @@
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php83\\": ""
"Symfony\\Polyfill\\Php81\\": ""
},
"classmap": [
"Resources/stubs"
@ -4184,7 +4504,7 @@
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
"description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
@ -4193,7 +4513,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0"
"source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
},
"funding": [
{
@ -4213,25 +4533,29 @@
},
{
"name": "symfony/property-access",
"version": "v6.4.18",
"version": "v5.4.43",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
"reference": "80e0378f2f058b60d87dedc3c760caec882e992c"
"reference": "2d751866b976a02e22743359733edc55cd20e9fd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/80e0378f2f058b60d87dedc3c760caec882e992c",
"reference": "80e0378f2f058b60d87dedc3c760caec882e992c",
"url": "https://api.github.com/repos/symfony/property-access/zipball/2d751866b976a02e22743359733edc55cd20e9fd",
"reference": "2d751866b976a02e22743359733edc55cd20e9fd",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/property-info": "^5.4|^6.0|^7.0"
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.16",
"symfony/property-info": "^5.2|^6.0"
},
"require-dev": {
"symfony/cache": "^5.4|^6.0|^7.0"
"symfony/cache": "^4.4|^5.0|^6.0"
},
"suggest": {
"psr/cache-implementation": "To cache access methods."
},
"type": "library",
"autoload": {
@ -4270,7 +4594,7 @@
"reflection"
],
"support": {
"source": "https://github.com/symfony/property-access/tree/v6.4.18"
"source": "https://github.com/symfony/property-access/tree/v5.4.43"
},
"funding": [
{
@ -4286,41 +4610,46 @@
"type": "tidelift"
}
],
"time": "2024-12-16T14:42:05+00:00"
"time": "2024-08-29T08:50:14+00:00"
},
{
"name": "symfony/property-info",
"version": "v6.4.18",
"version": "v5.4.42",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
"reference": "94d18e5cc11a37fd92856d38b61d9cdf72536a1e"
"reference": "825aa937f6e8cd63dcc118d0af84d7d4979cddf4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-info/zipball/94d18e5cc11a37fd92856d38b61d9cdf72536a1e",
"reference": "94d18e5cc11a37fd92856d38b61d9cdf72536a1e",
"url": "https://api.github.com/repos/symfony/property-info/zipball/825aa937f6e8cd63dcc118d0af84d7d4979cddf4",
"reference": "825aa937f6e8cd63dcc118d0af84d7d4979cddf4",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/string": "^5.4|^6.0|^7.0"
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.16",
"symfony/string": "^5.1|^6.0"
},
"conflict": {
"doctrine/annotations": "<1.12",
"phpdocumentor/reflection-docblock": "<5.2",
"phpdocumentor/type-resolver": "<1.5.1",
"symfony/cache": "<5.4",
"symfony/dependency-injection": "<5.4|>=6.0,<6.4",
"symfony/serializer": "<5.4"
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"symfony/dependency-injection": "<4.4"
},
"require-dev": {
"doctrine/annotations": "^1.12|^2",
"phpdocumentor/reflection-docblock": "^5.2",
"phpstan/phpdoc-parser": "^1.0|^2.0",
"symfony/cache": "^5.4|^6.0|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/serializer": "^5.4|^6.4|^7.0"
"doctrine/annotations": "^1.10.4|^2",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"phpstan/phpdoc-parser": "^1.0",
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/serializer": "^4.4|^5.0|^6.0"
},
"suggest": {
"phpdocumentor/reflection-docblock": "To use the PHPDoc",
"psr/cache-implementation": "To cache results",
"symfony/doctrine-bridge": "To use Doctrine metadata",
"symfony/serializer": "To use Serializer metadata"
},
"type": "library",
"autoload": {
@ -4356,7 +4685,7 @@
"validator"
],
"support": {
"source": "https://github.com/symfony/property-info/tree/v6.4.18"
"source": "https://github.com/symfony/property-info/tree/v5.4.42"
},
"funding": [
{
@ -4372,42 +4701,47 @@
"type": "tidelift"
}
],
"time": "2025-01-21T10:52:27+00:00"
"time": "2024-07-22T18:03:36+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
"version": "v6.4.13",
"version": "v2.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/psr-http-message-bridge.git",
"reference": "c9cf83326a1074f83a738fc5320945abf7fb7fec"
"reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c9cf83326a1074f83a738fc5320945abf7fb7fec",
"reference": "c9cf83326a1074f83a738fc5320945abf7fb7fec",
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/581ca6067eb62640de5ff08ee1ba6850a0ee472e",
"reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/http-message": "^1.0|^2.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0"
},
"conflict": {
"php-http/discovery": "<1.15",
"symfony/http-kernel": "<6.2"
"php": ">=7.2.5",
"psr/http-message": "^1.0 || ^2.0",
"symfony/deprecation-contracts": "^2.5 || ^3.0",
"symfony/http-foundation": "^5.4 || ^6.0"
},
"require-dev": {
"nyholm/psr7": "^1.1",
"php-http/discovery": "^1.15",
"psr/log": "^1.1.4|^2|^3",
"symfony/browser-kit": "^5.4|^6.0|^7.0",
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/event-dispatcher": "^5.4|^6.0|^7.0",
"symfony/framework-bundle": "^6.2|^7.0",
"symfony/http-kernel": "^6.2|^7.0"
"psr/log": "^1.1 || ^2 || ^3",
"symfony/browser-kit": "^5.4 || ^6.0",
"symfony/config": "^5.4 || ^6.0",
"symfony/event-dispatcher": "^5.4 || ^6.0",
"symfony/framework-bundle": "^5.4 || ^6.0",
"symfony/http-kernel": "^5.4 || ^6.0",
"symfony/phpunit-bridge": "^6.2"
},
"suggest": {
"nyholm/psr7": "For a super lightweight PSR-7/17 implementation"
},
"type": "symfony-bridge",
"extra": {
"branch-alias": {
"dev-main": "2.3-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bridge\\PsrHttpMessage\\": ""
@ -4427,11 +4761,11 @@
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
"homepage": "http://symfony.com/contributors"
}
],
"description": "PSR HTTP message bridge",
"homepage": "https://symfony.com",
"homepage": "http://symfony.com",
"keywords": [
"http",
"http-message",
@ -4439,7 +4773,8 @@
"psr-7"
],
"support": {
"source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.13"
"issues": "https://github.com/symfony/psr-http-message-bridge/issues",
"source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.3.1"
},
"funding": [
{
@ -4455,30 +4790,29 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:18:03+00:00"
"time": "2023-07-26T11:53:26+00:00"
},
{
"name": "symfony/rate-limiter",
"version": "v6.4.15",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/rate-limiter.git",
"reference": "e250d82fc17b277b97cbce94efef5414aff29bf9"
"reference": "b3de902fc83923b9121169ade2453c41d0819110"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/rate-limiter/zipball/e250d82fc17b277b97cbce94efef5414aff29bf9",
"reference": "e250d82fc17b277b97cbce94efef5414aff29bf9",
"url": "https://api.github.com/repos/symfony/rate-limiter/zipball/b3de902fc83923b9121169ade2453c41d0819110",
"reference": "b3de902fc83923b9121169ade2453c41d0819110",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/options-resolver": "^5.4|^6.0|^7.0"
"php": ">=7.2.5",
"symfony/lock": "^5.2|^6.0",
"symfony/options-resolver": "^5.1|^6.0"
},
"require-dev": {
"psr/cache": "^1.0|^2.0|^3.0",
"symfony/lock": "^5.4|^6.0|^7.0"
"psr/cache": "^1.0|^2.0|^3.0"
},
"type": "library",
"autoload": {
@ -4510,7 +4844,7 @@
"rate-limiter"
],
"support": {
"source": "https://github.com/symfony/rate-limiter/tree/v6.4.15"
"source": "https://github.com/symfony/rate-limiter/tree/v5.4.40"
},
"funding": [
{
@ -4526,40 +4860,47 @@
"type": "tidelift"
}
],
"time": "2024-11-09T07:19:24+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/routing",
"version": "v6.4.22",
"version": "v5.4.43",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "1f5234e8457164a3a0038a4c0a4ba27876a9c670"
"reference": "b6f71780bbdd5e93e1c5638671cf0ba42aa8c6d8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/1f5234e8457164a3a0038a4c0a4ba27876a9c670",
"reference": "1f5234e8457164a3a0038a4c0a4ba27876a9c670",
"url": "https://api.github.com/repos/symfony/routing/zipball/b6f71780bbdd5e93e1c5638671cf0ba42aa8c6d8",
"reference": "b6f71780bbdd5e93e1c5638671cf0ba42aa8c6d8",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3"
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"doctrine/annotations": "<1.12",
"symfony/config": "<6.2",
"symfony/dependency-injection": "<5.4",
"symfony/yaml": "<5.4"
"symfony/config": "<5.3",
"symfony/dependency-injection": "<4.4",
"symfony/yaml": "<4.4"
},
"require-dev": {
"doctrine/annotations": "^1.12|^2",
"psr/log": "^1|^2|^3",
"symfony/config": "^6.2|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/yaml": "^5.4|^6.0|^7.0"
"symfony/config": "^5.3|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/http-foundation": "^4.4|^5.0|^6.0",
"symfony/yaml": "^4.4|^5.0|^6.0"
},
"suggest": {
"symfony/config": "For using the all-in-one router or any loader",
"symfony/expression-language": "For using expression matching",
"symfony/http-foundation": "For using a Symfony Request object",
"symfony/yaml": "For using the YAML loader"
},
"type": "library",
"autoload": {
@ -4593,7 +4934,7 @@
"url"
],
"support": {
"source": "https://github.com/symfony/routing/tree/v6.4.22"
"source": "https://github.com/symfony/routing/tree/v5.4.43"
},
"funding": [
{
@ -4609,35 +4950,36 @@
"type": "tidelift"
}
],
"time": "2025-04-27T16:08:38+00:00"
"time": "2024-08-27T06:36:52+00:00"
},
{
"name": "symfony/runtime",
"version": "v6.4.23",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/runtime.git",
"reference": "ef1f03c2ab1144ac4ef7744b9e026bdb06f2f88f"
"reference": "50096d4ebebb4f9c41b87695868a6e34bdbf7cde"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/runtime/zipball/ef1f03c2ab1144ac4ef7744b9e026bdb06f2f88f",
"reference": "ef1f03c2ab1144ac4ef7744b9e026bdb06f2f88f",
"url": "https://api.github.com/repos/symfony/runtime/zipball/50096d4ebebb4f9c41b87695868a6e34bdbf7cde",
"reference": "50096d4ebebb4f9c41b87695868a6e34bdbf7cde",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0|^2.0",
"php": ">=8.1"
"php": ">=7.2.5",
"symfony/polyfill-php80": "^1.15"
},
"conflict": {
"symfony/dotenv": "<5.4"
"symfony/dotenv": "<5.1"
},
"require-dev": {
"composer/composer": "^1.0.2|^2.0",
"symfony/console": "^5.4.9|^6.0.9|^7.0",
"symfony/dotenv": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0"
"symfony/console": "^4.4.30|^5.4.9|^6.0.9",
"symfony/dotenv": "^5.1|^6.0",
"symfony/http-foundation": "^4.4.30|^5.3.7|^6.0",
"symfony/http-kernel": "^4.4.30|^5.3.7|^6.0"
},
"type": "composer-plugin",
"extra": {
@ -4672,7 +5014,7 @@
"runtime"
],
"support": {
"source": "https://github.com/symfony/runtime/tree/v6.4.23"
"source": "https://github.com/symfony/runtime/tree/v5.4.40"
},
"funding": [
{
@ -4688,75 +5030,66 @@
"type": "tidelift"
}
],
"time": "2025-06-13T07:44:14+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/security-bundle",
"version": "v6.4.23",
"version": "v5.4.43",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
"reference": "3db1460f539b23e74a119981ea6b3002302250bc"
"reference": "f14a15c6c7bb37879d59c129d96c4c07c7d5db32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/3db1460f539b23e74a119981ea6b3002302250bc",
"reference": "3db1460f539b23e74a119981ea6b3002302250bc",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/f14a15c6c7bb37879d59c129d96c4c07c7d5db32",
"reference": "f14a15c6c7bb37879d59c129d96c4c07c7d5db32",
"shasum": ""
},
"require": {
"composer-runtime-api": ">=2.1",
"ext-xml": "*",
"php": ">=8.1",
"symfony/clock": "^6.3|^7.0",
"symfony/config": "^6.1|^7.0",
"symfony/dependency-injection": "^6.4.11|^7.1.4",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/event-dispatcher": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^6.2|^7.0",
"symfony/http-kernel": "^6.2",
"symfony/password-hasher": "^5.4|^6.0|^7.0",
"symfony/security-core": "^6.2|^7.0",
"symfony/security-csrf": "^5.4|^6.0|^7.0",
"symfony/security-http": "^6.3.6|^7.0",
"symfony/service-contracts": "^2.5|^3"
"php": ">=7.2.5",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^5.4.43|^6.4.11",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/event-dispatcher": "^5.1|^6.0",
"symfony/http-foundation": "^5.3|^6.0",
"symfony/http-kernel": "^5.3|^6.0",
"symfony/password-hasher": "^5.3|^6.0",
"symfony/polyfill-php80": "^1.16",
"symfony/security-core": "^5.4|^6.0",
"symfony/security-csrf": "^4.4|^5.0|^6.0",
"symfony/security-guard": "^5.3",
"symfony/security-http": "^5.4.30|^6.3.6",
"symfony/service-contracts": "^1.10|^2|^3"
},
"conflict": {
"symfony/browser-kit": "<5.4",
"symfony/console": "<5.4",
"symfony/framework-bundle": "<6.4",
"symfony/http-client": "<5.4",
"symfony/ldap": "<5.4",
"symfony/serializer": "<6.4",
"symfony/twig-bundle": "<5.4",
"symfony/validator": "<6.4"
"symfony/browser-kit": "<4.4",
"symfony/console": "<4.4",
"symfony/framework-bundle": "<4.4",
"symfony/ldap": "<5.1",
"symfony/twig-bundle": "<4.4"
},
"require-dev": {
"symfony/asset": "^5.4|^6.0|^7.0",
"symfony/browser-kit": "^5.4|^6.0|^7.0",
"symfony/console": "^5.4|^6.0|^7.0",
"symfony/css-selector": "^5.4|^6.0|^7.0",
"symfony/dom-crawler": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/form": "^5.4|^6.0|^7.0",
"symfony/framework-bundle": "^6.4|^7.0",
"symfony/http-client": "^5.4|^6.0|^7.0",
"symfony/ldap": "^5.4|^6.0|^7.0",
"symfony/process": "^5.4|^6.0|^7.0",
"symfony/rate-limiter": "^5.4|^6.0|^7.0",
"symfony/serializer": "^6.4|^7.0",
"symfony/translation": "^5.4|^6.0|^7.0",
"symfony/twig-bridge": "^5.4|^6.0|^7.0",
"symfony/twig-bundle": "^5.4|^6.0|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/yaml": "^5.4|^6.0|^7.0",
"twig/twig": "^2.13|^3.0.4",
"web-token/jwt-checker": "^3.1",
"web-token/jwt-signature-algorithm-ecdsa": "^3.1",
"web-token/jwt-signature-algorithm-eddsa": "^3.1",
"web-token/jwt-signature-algorithm-hmac": "^3.1",
"web-token/jwt-signature-algorithm-none": "^3.1",
"web-token/jwt-signature-algorithm-rsa": "^3.1"
"doctrine/annotations": "^1.10.4|^2",
"symfony/asset": "^4.4|^5.0|^6.0",
"symfony/browser-kit": "^4.4|^5.0|^6.0",
"symfony/console": "^4.4|^5.0|^6.0",
"symfony/css-selector": "^4.4|^5.0|^6.0",
"symfony/dom-crawler": "^4.4|^5.0|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/form": "^4.4|^5.0|^6.0",
"symfony/framework-bundle": "^5.3|^6.0",
"symfony/ldap": "^5.3|^6.0",
"symfony/process": "^4.4|^5.0|^6.0",
"symfony/rate-limiter": "^5.2|^6.0",
"symfony/serializer": "^4.4|^5.0|^6.0",
"symfony/translation": "^4.4|^5.0|^6.0",
"symfony/twig-bridge": "^4.4|^5.0|^6.0",
"symfony/twig-bundle": "^4.4|^5.0|^6.0",
"symfony/validator": "^4.4|^5.0|^6.0",
"symfony/yaml": "^4.4|^5.0|^6.0",
"twig/twig": "^2.13|^3.0.4"
},
"type": "symfony-bundle",
"autoload": {
@ -4784,7 +5117,7 @@
"description": "Provides a tight integration of the Security component into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-bundle/tree/v6.4.23"
"source": "https://github.com/symfony/security-bundle/tree/v5.4.43"
},
"funding": [
{
@ -4800,49 +5133,57 @@
"type": "tidelift"
}
],
"time": "2025-06-23T20:18:57+00:00"
"time": "2024-08-19T09:13:19+00:00"
},
{
"name": "symfony/security-core",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
"reference": "527780a0482e592530174ca90e6189f64cdf6569"
"reference": "8089509e8c92e884fa27af56596576320c3b310d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-core/zipball/527780a0482e592530174ca90e6189f64cdf6569",
"reference": "527780a0482e592530174ca90e6189f64cdf6569",
"url": "https://api.github.com/repos/symfony/security-core/zipball/8089509e8c92e884fa27af56596576320c3b310d",
"reference": "8089509e8c92e884fa27af56596576320c3b310d",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/event-dispatcher-contracts": "^2.5|^3",
"symfony/password-hasher": "^5.4|^6.0|^7.0",
"symfony/service-contracts": "^2.5|^3"
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/event-dispatcher-contracts": "^1.1|^2|^3",
"symfony/password-hasher": "^5.3|^6.0",
"symfony/polyfill-php80": "^1.16",
"symfony/service-contracts": "^1.1.6|^2|^3"
},
"conflict": {
"symfony/event-dispatcher": "<5.4",
"symfony/http-foundation": "<5.4",
"symfony/ldap": "<5.4",
"symfony/security-guard": "<5.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3",
"symfony/validator": "<5.4"
"symfony/event-dispatcher": "<4.4",
"symfony/http-foundation": "<5.3",
"symfony/ldap": "<4.4",
"symfony/security-guard": "<4.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3",
"symfony/validator": "<5.2"
},
"require-dev": {
"psr/cache": "^1.0|^2.0|^3.0",
"psr/container": "^1.1|^2.0",
"psr/container": "^1.0|^2.0",
"psr/log": "^1|^2|^3",
"symfony/cache": "^5.4|^6.0|^7.0",
"symfony/event-dispatcher": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/ldap": "^5.4|^6.0|^7.0",
"symfony/string": "^5.4|^6.0|^7.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3",
"symfony/validator": "^6.4|^7.0"
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/event-dispatcher": "^4.4|^5.0|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/http-foundation": "^5.3|^6.0",
"symfony/ldap": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3",
"symfony/validator": "^5.2|^6.0"
},
"suggest": {
"psr/container-implementation": "To instantiate the Security class",
"symfony/event-dispatcher": "",
"symfony/expression-language": "For using the expression voter",
"symfony/http-foundation": "",
"symfony/ldap": "For using LDAP integration",
"symfony/validator": "For using the user password constraint"
},
"type": "library",
"autoload": {
@ -4870,7 +5211,7 @@
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-core/tree/v6.4.23"
"source": "https://github.com/symfony/security-core/tree/v5.4.44"
},
"funding": [
{
@ -4886,31 +5227,36 @@
"type": "tidelift"
}
],
"time": "2025-05-30T08:33:44+00:00"
"time": "2024-09-01T10:41:54+00:00"
},
{
"name": "symfony/security-csrf",
"version": "v6.4.13",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
"reference": "c34421b7d34efbaef5d611ab2e646a0ec464ffe3"
"reference": "9058d522c1c33d7ba13f4b3c79555cc2c4c16028"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/c34421b7d34efbaef5d611ab2e646a0ec464ffe3",
"reference": "c34421b7d34efbaef5d611ab2e646a0ec464ffe3",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/9058d522c1c33d7ba13f4b3c79555cc2c4c16028",
"reference": "9058d522c1c33d7ba13f4b3c79555cc2c4c16028",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/security-core": "^5.4|^6.0|^7.0"
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.16",
"symfony/security-core": "^4.4|^5.0|^6.0"
},
"conflict": {
"symfony/http-foundation": "<5.4"
"symfony/http-foundation": "<5.3"
},
"require-dev": {
"symfony/http-foundation": "^5.4|^6.0|^7.0"
"symfony/http-foundation": "^5.3|^6.0"
},
"suggest": {
"symfony/http-foundation": "For using the class SessionTokenStorage."
},
"type": "library",
"autoload": {
@ -4938,7 +5284,7 @@
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-csrf/tree/v6.4.13"
"source": "https://github.com/symfony/security-csrf/tree/v5.4.40"
},
"funding": [
{
@ -4954,51 +5300,117 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:18:03+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/security-http",
"version": "v6.4.23",
"name": "symfony/security-guard",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
"reference": "815fcda8122a7850bf6d5d842ce03c20445295bb"
"url": "https://github.com/symfony/security-guard.git",
"reference": "d930fd327c290f451c9d8dd7889169195d4484e9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-http/zipball/815fcda8122a7850bf6d5d842ce03c20445295bb",
"reference": "815fcda8122a7850bf6d5d842ce03c20445295bb",
"url": "https://api.github.com/repos/symfony/security-guard/zipball/d930fd327c290f451c9d8dd7889169195d4484e9",
"reference": "d930fd327c290f451c9d8dd7889169195d4484e9",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/http-foundation": "^6.2|^7.0",
"symfony/http-kernel": "^6.3|^7.0",
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.15",
"symfony/security-core": "^5.0",
"symfony/security-http": "^5.3"
},
"require-dev": {
"psr/log": "^1|^2|^3"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Security\\Guard\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Security Component - Guard",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-guard/tree/v5.4.40"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/security-http",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
"reference": "c0f81598425c170807f19b9a5413ad05323f317b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-http/zipball/c0f81598425c170807f19b9a5413ad05323f317b",
"reference": "c0f81598425c170807f19b9a5413ad05323f317b",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/http-foundation": "^5.3|^6.0",
"symfony/http-kernel": "^5.3|^6.0",
"symfony/polyfill-mbstring": "~1.0",
"symfony/property-access": "^5.4|^6.0|^7.0",
"symfony/security-core": "^6.4|^7.0",
"symfony/service-contracts": "^2.5|^3"
"symfony/polyfill-php80": "^1.16",
"symfony/property-access": "^4.4|^5.0|^6.0",
"symfony/security-core": "^5.4.19|~6.0.19|~6.1.11|^6.2.5",
"symfony/service-contracts": "^1.10|^2|^3"
},
"conflict": {
"symfony/clock": "<6.3",
"symfony/event-dispatcher": "<5.4.9|>=6,<6.0.9",
"symfony/http-client-contracts": "<3.0",
"symfony/security-bundle": "<5.4",
"symfony/security-csrf": "<5.4"
"symfony/event-dispatcher": "<4.3",
"symfony/security-bundle": "<5.3",
"symfony/security-csrf": "<4.4"
},
"require-dev": {
"psr/log": "^1|^2|^3",
"symfony/cache": "^5.4|^6.0|^7.0",
"symfony/clock": "^6.3|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/http-client-contracts": "^3.0",
"symfony/rate-limiter": "^5.4|^6.0|^7.0",
"symfony/routing": "^5.4|^6.0|^7.0",
"symfony/security-csrf": "^5.4|^6.0|^7.0",
"symfony/translation": "^5.4|^6.0|^7.0",
"web-token/jwt-checker": "^3.1",
"web-token/jwt-signature-algorithm-ecdsa": "^3.1"
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/rate-limiter": "^5.2|^6.0",
"symfony/routing": "^4.4|^5.0|^6.0",
"symfony/security-csrf": "^4.4|^5.0|^6.0",
"symfony/translation": "^4.4|^5.0|^6.0"
},
"suggest": {
"symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs",
"symfony/security-csrf": "For using tokens to protect authentication/logout attempts"
},
"type": "library",
"autoload": {
@ -5026,7 +5438,7 @@
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-http/tree/v6.4.23"
"source": "https://github.com/symfony/security-http/tree/v5.4.44"
},
"funding": [
{
@ -5042,47 +5454,47 @@
"type": "tidelift"
}
],
"time": "2025-06-23T20:18:57+00:00"
"time": "2024-09-11T06:50:28+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v3.6.0",
"version": "v2.5.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4"
"reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
"reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/a2329596ddc8fd568900e3fc76cba42489ecc7f3",
"reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/container": "^1.1|^2.0",
"symfony/deprecation-contracts": "^2.5|^3"
"php": ">=7.2.5",
"psr/container": "^1.1",
"symfony/deprecation-contracts": "^2.1|^3"
},
"conflict": {
"ext-psr": "<1.1|>=2"
},
"suggest": {
"symfony/service-implementation": ""
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "3.6-dev"
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\Service\\": ""
},
"exclude-from-classmap": [
"/Test/"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -5109,7 +5521,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v3.6.0"
"source": "https://github.com/symfony/service-contracts/tree/v2.5.3"
},
"funding": [
{
@ -5125,38 +5537,38 @@
"type": "tidelift"
}
],
"time": "2025-04-25T09:37:31+00:00"
"time": "2023-04-21T15:04:16+00:00"
},
{
"name": "symfony/string",
"version": "v6.4.21",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "73e2c6966a5aef1d4892873ed5322245295370c6"
"reference": "832caa16b6d9aac6bf11747315225f5aba384c24"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/73e2c6966a5aef1d4892873ed5322245295370c6",
"reference": "73e2c6966a5aef1d4892873ed5322245295370c6",
"url": "https://api.github.com/repos/symfony/string/zipball/832caa16b6d9aac6bf11747315225f5aba384c24",
"reference": "832caa16b6d9aac6bf11747315225f5aba384c24",
"shasum": ""
},
"require": {
"php": ">=8.1",
"php": ">=7.2.5",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-grapheme": "~1.0",
"symfony/polyfill-intl-normalizer": "~1.0",
"symfony/polyfill-mbstring": "~1.0"
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php80": "~1.15"
},
"conflict": {
"symfony/translation-contracts": "<2.5"
"symfony/translation-contracts": ">=3.0"
},
"require-dev": {
"symfony/error-handler": "^5.4|^6.0|^7.0",
"symfony/http-client": "^5.4|^6.0|^7.0",
"symfony/intl": "^6.2|^7.0",
"symfony/translation-contracts": "^2.5|^3.0",
"symfony/var-exporter": "^5.4|^6.0|^7.0"
"symfony/error-handler": "^4.4|^5.0|^6.0",
"symfony/http-client": "^4.4|^5.0|^6.0",
"symfony/translation-contracts": "^1.1|^2",
"symfony/var-exporter": "^4.4|^5.0|^6.0"
},
"type": "library",
"autoload": {
@ -5195,7 +5607,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v6.4.21"
"source": "https://github.com/symfony/string/tree/v5.4.44"
},
"funding": [
{
@ -5211,55 +5623,57 @@
"type": "tidelift"
}
],
"time": "2025-04-18T15:23:29+00:00"
"time": "2024-09-20T07:56:40+00:00"
},
{
"name": "symfony/translation",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "de8afa521e04a5220e9e58a1dc99971ab7cac643"
"reference": "6fed3a20b5b87ee9cdd9dacf545922b8fd475921"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/de8afa521e04a5220e9e58a1dc99971ab7cac643",
"reference": "de8afa521e04a5220e9e58a1dc99971ab7cac643",
"url": "https://api.github.com/repos/symfony/translation/zipball/6fed3a20b5b87ee9cdd9dacf545922b8fd475921",
"reference": "6fed3a20b5b87ee9cdd9dacf545922b8fd475921",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/translation-contracts": "^2.5|^3.0"
"symfony/polyfill-php80": "^1.16",
"symfony/translation-contracts": "^2.3"
},
"conflict": {
"symfony/config": "<5.4",
"symfony/console": "<5.4",
"symfony/dependency-injection": "<5.4",
"symfony/http-client-contracts": "<2.5",
"symfony/http-kernel": "<5.4",
"symfony/service-contracts": "<2.5",
"symfony/twig-bundle": "<5.4",
"symfony/yaml": "<5.4"
"symfony/config": "<4.4",
"symfony/console": "<5.3",
"symfony/dependency-injection": "<5.0",
"symfony/http-kernel": "<5.0",
"symfony/twig-bundle": "<5.0",
"symfony/yaml": "<4.4"
},
"provide": {
"symfony/translation-implementation": "2.3|3.0"
"symfony/translation-implementation": "2.3"
},
"require-dev": {
"nikic/php-parser": "^4.18|^5.0",
"psr/log": "^1|^2|^3",
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/console": "^5.4|^6.0|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/finder": "^5.4|^6.0|^7.0",
"symfony/http-client-contracts": "^2.5|^3.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0",
"symfony/intl": "^5.4|^6.0|^7.0",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/console": "^5.4|^6.0",
"symfony/dependency-injection": "^5.0|^6.0",
"symfony/finder": "^4.4|^5.0|^6.0",
"symfony/http-client-contracts": "^1.1|^2.0|^3.0",
"symfony/http-kernel": "^5.0|^6.0",
"symfony/intl": "^4.4|^5.0|^6.0",
"symfony/polyfill-intl-icu": "^1.21",
"symfony/routing": "^5.4|^6.0|^7.0",
"symfony/service-contracts": "^2.5|^3",
"symfony/yaml": "^5.4|^6.0|^7.0"
"symfony/service-contracts": "^1.1.2|^2|^3",
"symfony/yaml": "^4.4|^5.0|^6.0"
},
"suggest": {
"psr/log-implementation": "To use logging capability in translator",
"symfony/config": "",
"symfony/yaml": ""
},
"type": "library",
"autoload": {
@ -5290,7 +5704,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/translation/tree/v6.4.23"
"source": "https://github.com/symfony/translation/tree/v5.4.44"
},
"funding": [
{
@ -5306,42 +5720,42 @@
"type": "tidelift"
}
],
"time": "2025-06-26T21:24:02+00:00"
"time": "2024-09-15T08:12:35+00:00"
},
{
"name": "symfony/translation-contracts",
"version": "v3.6.0",
"version": "v2.5.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
"reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d"
"reference": "b0073a77ac0b7ea55131020e87b1e3af540f4664"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d",
"reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b0073a77ac0b7ea55131020e87b1e3af540f4664",
"reference": "b0073a77ac0b7ea55131020e87b1e3af540f4664",
"shasum": ""
},
"require": {
"php": ">=8.1"
"php": ">=7.2.5"
},
"suggest": {
"symfony/translation-implementation": ""
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "3.6-dev"
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\Translation\\": ""
},
"exclude-from-classmap": [
"/Test/"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -5368,7 +5782,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/translation-contracts/tree/v3.6.0"
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.3"
},
"funding": [
{
@ -5384,73 +5798,85 @@
"type": "tidelift"
}
],
"time": "2024-09-27T08:32:26+00:00"
"time": "2024-01-23T13:51:25+00:00"
},
{
"name": "symfony/twig-bridge",
"version": "v6.4.22",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
"reference": "04ab306a2f2c9dbd46f4363383812954f704af9d"
"reference": "d049fbe0e5ba0ad758f647fa8f99e840bca43f6f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/04ab306a2f2c9dbd46f4363383812954f704af9d",
"reference": "04ab306a2f2c9dbd46f4363383812954f704af9d",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/d049fbe0e5ba0ad758f647fa8f99e840bca43f6f",
"reference": "d049fbe0e5ba0ad758f647fa8f99e840bca43f6f",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/translation-contracts": "^2.5|^3",
"php": ">=7.2.5",
"symfony/polyfill-php80": "^1.16",
"symfony/translation-contracts": "^1.1|^2|^3",
"twig/twig": "^2.13|^3.0.4"
},
"conflict": {
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"symfony/console": "<5.4",
"symfony/form": "<6.3",
"symfony/http-foundation": "<5.4",
"symfony/http-kernel": "<6.4",
"symfony/mime": "<6.2",
"symfony/serializer": "<6.4",
"symfony/translation": "<5.4",
"symfony/workflow": "<5.4"
"symfony/console": "<5.3",
"symfony/form": "<5.4.21|>=6,<6.2.7",
"symfony/http-foundation": "<5.3",
"symfony/http-kernel": "<4.4",
"symfony/translation": "<5.2",
"symfony/workflow": "<5.2"
},
"require-dev": {
"doctrine/annotations": "^1.12|^2",
"egulias/email-validator": "^2.1.10|^3|^4",
"league/html-to-markdown": "^5.0",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"symfony/asset": "^5.4|^6.0|^7.0",
"symfony/asset-mapper": "^6.3|^7.0",
"symfony/console": "^5.4|^6.0|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/finder": "^5.4|^6.0|^7.0",
"symfony/form": "^6.4.20|^7.2.5",
"symfony/html-sanitizer": "^6.1|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/intl": "^5.4|^6.0|^7.0",
"symfony/mime": "^6.2|^7.0",
"symfony/asset": "^4.4|^5.0|^6.0",
"symfony/console": "^5.3|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/finder": "^4.4|^5.0|^6.0",
"symfony/form": "^5.4.21|^6.2.7",
"symfony/http-foundation": "^5.3|^6.0",
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/intl": "^4.4|^5.0|^6.0",
"symfony/mime": "^5.2|^6.0",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/property-info": "^5.4|^6.0|^7.0",
"symfony/routing": "^5.4|^6.0|^7.0",
"symfony/property-info": "^4.4|^5.1|^6.0",
"symfony/routing": "^4.4|^5.0|^6.0",
"symfony/security-acl": "^2.8|^3.0",
"symfony/security-core": "^5.4|^6.0|^7.0",
"symfony/security-csrf": "^5.4|^6.0|^7.0",
"symfony/security-http": "^5.4|^6.0|^7.0",
"symfony/serializer": "^6.4.3|^7.0.3",
"symfony/stopwatch": "^5.4|^6.0|^7.0",
"symfony/translation": "^6.1|^7.0",
"symfony/web-link": "^5.4|^6.0|^7.0",
"symfony/workflow": "^5.4|^6.0|^7.0",
"symfony/yaml": "^5.4|^6.0|^7.0",
"symfony/security-core": "^4.4|^5.0|^6.0",
"symfony/security-csrf": "^4.4|^5.0|^6.0",
"symfony/security-http": "^4.4|^5.0|^6.0",
"symfony/serializer": "^5.4.35|~6.3.12|^6.4.3",
"symfony/stopwatch": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.2|^6.0",
"symfony/web-link": "^4.4|^5.0|^6.0",
"symfony/workflow": "^5.2|^6.0",
"symfony/yaml": "^4.4|^5.0|^6.0",
"twig/cssinliner-extra": "^2.12|^3",
"twig/inky-extra": "^2.12|^3",
"twig/markdown-extra": "^2.12|^3"
},
"suggest": {
"symfony/asset": "For using the AssetExtension",
"symfony/expression-language": "For using the ExpressionExtension",
"symfony/finder": "",
"symfony/form": "For using the FormExtension",
"symfony/http-kernel": "For using the HttpKernelExtension",
"symfony/routing": "For using the RoutingExtension",
"symfony/security-core": "For using the SecurityExtension",
"symfony/security-csrf": "For using the CsrfExtension",
"symfony/security-http": "For using the LogoutUrlExtension",
"symfony/stopwatch": "For using the StopwatchExtension",
"symfony/translation": "For using the TranslationExtension",
"symfony/var-dumper": "For using the DumpExtension",
"symfony/web-link": "For using the WebLinkExtension",
"symfony/yaml": "For using the YamlExtension"
},
"type": "symfony-bridge",
"autoload": {
"psr-4": {
@ -5477,7 +5903,7 @@
"description": "Provides integration for Twig with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bridge/tree/v6.4.22"
"source": "https://github.com/symfony/twig-bridge/tree/v5.4.44"
},
"funding": [
{
@ -5493,47 +5919,53 @@
"type": "tidelift"
}
],
"time": "2025-05-16T08:23:44+00:00"
"time": "2024-09-11T13:27:43+00:00"
},
{
"name": "symfony/twig-bundle",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
"reference": "ef970ed7eb9e547d21628e4c803de0943759cbcd"
"reference": "b94414b3b9e0c523677c0bf31e8975231b55f18a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/ef970ed7eb9e547d21628e4c803de0943759cbcd",
"reference": "ef970ed7eb9e547d21628e4c803de0943759cbcd",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/b94414b3b9e0c523677c0bf31e8975231b55f18a",
"reference": "b94414b3b9e0c523677c0bf31e8975231b55f18a",
"shasum": ""
},
"require": {
"composer-runtime-api": ">=2.1",
"php": ">=8.1",
"symfony/config": "^6.1|^7.0",
"symfony/dependency-injection": "^6.1|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^6.2",
"symfony/twig-bridge": "^6.4",
"php": ">=7.2.5",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/http-foundation": "^4.4|^5.0|^6.0",
"symfony/http-kernel": "^5.0|^6.0",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-php80": "^1.16",
"symfony/twig-bridge": "^5.3|^6.0",
"twig/twig": "^2.13|^3.0.4"
},
"conflict": {
"symfony/framework-bundle": "<5.4",
"symfony/translation": "<5.4"
"symfony/dependency-injection": "<5.3",
"symfony/framework-bundle": "<5.0",
"symfony/service-contracts": ">=3.0",
"symfony/translation": "<5.0"
},
"require-dev": {
"symfony/asset": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/finder": "^5.4|^6.0|^7.0",
"symfony/form": "^5.4|^6.0|^7.0",
"symfony/framework-bundle": "^5.4|^6.0|^7.0",
"symfony/routing": "^5.4|^6.0|^7.0",
"symfony/stopwatch": "^5.4|^6.0|^7.0",
"symfony/translation": "^5.4|^6.0|^7.0",
"symfony/web-link": "^5.4|^6.0|^7.0",
"symfony/yaml": "^5.4|^6.0|^7.0"
"doctrine/annotations": "^1.10.4|^2",
"doctrine/cache": "^1.0|^2.0",
"symfony/asset": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^5.3|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/finder": "^4.4|^5.0|^6.0",
"symfony/form": "^4.4|^5.0|^6.0",
"symfony/framework-bundle": "^5.0|^6.0",
"symfony/routing": "^4.4|^5.0|^6.0",
"symfony/stopwatch": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.0|^6.0",
"symfony/web-link": "^4.4|^5.0|^6.0",
"symfony/yaml": "^4.4|^5.0|^6.0"
},
"type": "symfony-bundle",
"autoload": {
@ -5561,7 +5993,7 @@
"description": "Provides a tight integration of Twig into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bundle/tree/v6.4.23"
"source": "https://github.com/symfony/twig-bundle/tree/v5.4.44"
},
"funding": [
{
@ -5577,59 +6009,75 @@
"type": "tidelift"
}
],
"time": "2025-06-20T20:02:07+00:00"
"time": "2024-09-07T13:25:07+00:00"
},
{
"name": "symfony/validator",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
"reference": "6506760ab57e7cda5bde9cdaed736526162284bc"
"reference": "5b061420daf15b58e1599cd2191b0780ddcd2157"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/6506760ab57e7cda5bde9cdaed736526162284bc",
"reference": "6506760ab57e7cda5bde9cdaed736526162284bc",
"url": "https://api.github.com/repos/symfony/validator/zipball/5b061420daf15b58e1599cd2191b0780ddcd2157",
"reference": "5b061420daf15b58e1599cd2191b0780ddcd2157",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php83": "^1.27",
"symfony/translation-contracts": "^2.5|^3"
"symfony/polyfill-php73": "~1.0",
"symfony/polyfill-php80": "^1.16",
"symfony/polyfill-php81": "^1.22",
"symfony/translation-contracts": "^1.1|^2|^3"
},
"conflict": {
"doctrine/annotations": "<1.13",
"doctrine/cache": "<1.11",
"doctrine/lexer": "<1.1",
"symfony/dependency-injection": "<5.4",
"symfony/expression-language": "<5.4",
"symfony/http-kernel": "<5.4",
"symfony/intl": "<5.4",
"symfony/property-info": "<5.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3",
"symfony/yaml": "<5.4"
"symfony/dependency-injection": "<4.4",
"symfony/expression-language": "<5.1",
"symfony/http-kernel": "<4.4",
"symfony/intl": "<4.4",
"symfony/property-info": "<5.3",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3",
"symfony/yaml": "<4.4"
},
"require-dev": {
"doctrine/annotations": "^1.13|^2",
"doctrine/cache": "^1.11|^2.0",
"egulias/email-validator": "^2.1.10|^3|^4",
"symfony/cache": "^5.4|^6.0|^7.0",
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/console": "^5.4|^6.0|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/finder": "^5.4|^6.0|^7.0",
"symfony/http-client": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0",
"symfony/intl": "^5.4|^6.0|^7.0",
"symfony/mime": "^5.4|^6.0|^7.0",
"symfony/property-access": "^5.4|^6.0|^7.0",
"symfony/property-info": "^5.4|^6.0|^7.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3",
"symfony/yaml": "^5.4|^6.0|^7.0"
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/console": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/expression-language": "^5.1|^6.0",
"symfony/finder": "^4.4|^5.0|^6.0",
"symfony/http-client": "^4.4|^5.0|^6.0",
"symfony/http-foundation": "^4.4|^5.0|^6.0",
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/intl": "^4.4|^5.0|^6.0",
"symfony/mime": "^4.4|^5.0|^6.0",
"symfony/property-access": "^5.4|^6.0",
"symfony/property-info": "^5.3|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3",
"symfony/yaml": "^4.4|^5.0|^6.0"
},
"suggest": {
"egulias/email-validator": "Strict (RFC compliant) email validation",
"psr/cache-implementation": "For using the mapping cache.",
"symfony/config": "",
"symfony/expression-language": "For using the Expression validator and the ExpressionLanguageSyntax constraints",
"symfony/http-foundation": "",
"symfony/intl": "",
"symfony/property-access": "For accessing properties within comparison constraints",
"symfony/property-info": "To automatically add NotNull and Type constraints",
"symfony/translation": "For translating validation errors.",
"symfony/yaml": ""
},
"type": "library",
"autoload": {
@ -5658,7 +6106,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/validator/tree/v6.4.23"
"source": "https://github.com/symfony/validator/tree/v5.4.44"
},
"funding": [
{
@ -5674,39 +6122,43 @@
"type": "tidelift"
}
],
"time": "2025-06-26T07:25:45+00:00"
"time": "2024-09-19T08:27:53+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v6.4.23",
"version": "v5.4.43",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "d55b1834cdbfcc31bc2cd7e095ba5ed9a88f6600"
"reference": "6be6a6a8af4818564e3726fc65cf936f34743cef"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/d55b1834cdbfcc31bc2cd7e095ba5ed9a88f6600",
"reference": "d55b1834cdbfcc31bc2cd7e095ba5ed9a88f6600",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/6be6a6a8af4818564e3726fc65cf936f34743cef",
"reference": "6be6a6a8af4818564e3726fc65cf936f34743cef",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0"
"php": ">=7.2.5",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"symfony/console": "<5.4"
"symfony/console": "<4.4"
},
"require-dev": {
"ext-iconv": "*",
"symfony/console": "^5.4|^6.0|^7.0",
"symfony/error-handler": "^6.3|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0",
"symfony/process": "^5.4|^6.0|^7.0",
"symfony/uid": "^5.4|^6.0|^7.0",
"symfony/console": "^4.4|^5.0|^6.0",
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/process": "^4.4|^5.0|^6.0",
"symfony/uid": "^5.1|^6.0",
"twig/twig": "^2.13|^3.0.4"
},
"suggest": {
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
"ext-intl": "To show region name in time zone dump",
"symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
},
"bin": [
"Resources/bin/var-dump-server"
],
@ -5743,7 +6195,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v6.4.23"
"source": "https://github.com/symfony/var-dumper/tree/v5.4.43"
},
"funding": [
{
@ -5759,20 +6211,20 @@
"type": "tidelift"
}
],
"time": "2025-06-27T15:05:27+00:00"
"time": "2024-08-30T16:01:46+00:00"
},
{
"name": "symfony/var-exporter",
"version": "v6.4.22",
"version": "v6.4.9",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
"reference": "f28cf841f5654955c9f88ceaf4b9dc29571988a9"
"reference": "f9a060622e0d93777b7f8687ec4860191e16802e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/f28cf841f5654955c9f88ceaf4b9dc29571988a9",
"reference": "f28cf841f5654955c9f88ceaf4b9dc29571988a9",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/f9a060622e0d93777b7f8687ec4860191e16802e",
"reference": "f9a060622e0d93777b7f8687ec4860191e16802e",
"shasum": ""
},
"require": {
@ -5820,7 +6272,7 @@
"serialize"
],
"support": {
"source": "https://github.com/symfony/var-exporter/tree/v6.4.22"
"source": "https://github.com/symfony/var-exporter/tree/v6.4.9"
},
"funding": [
{
@ -5836,42 +6288,43 @@
"type": "tidelift"
}
],
"time": "2025-05-14T13:00:13+00:00"
"time": "2024-06-24T15:53:56+00:00"
},
{
"name": "symfony/web-profiler-bundle",
"version": "v6.4.19",
"version": "v5.4.43",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
"reference": "7d1026a8e950d416cb5148ae88ac23db5d264839"
"reference": "8f1628f1361e4623a6c2b373c3594845d6aacb79"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/7d1026a8e950d416cb5148ae88ac23db5d264839",
"reference": "7d1026a8e950d416cb5148ae88ac23db5d264839",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/8f1628f1361e4623a6c2b373c3594845d6aacb79",
"reference": "8f1628f1361e4623a6c2b373c3594845d6aacb79",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/framework-bundle": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/routing": "^5.4|^6.0|^7.0",
"symfony/twig-bundle": "^5.4|^6.0",
"php": ">=7.2.5",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/framework-bundle": "^5.3|^6.0,<6.4",
"symfony/http-kernel": "^5.3|^6.0",
"symfony/polyfill-php80": "^1.16",
"symfony/routing": "^4.4|^5.0|^6.0",
"symfony/twig-bundle": "^4.4|^5.0|^6.0",
"twig/twig": "^2.13|^3.0.4"
},
"conflict": {
"symfony/form": "<5.4",
"symfony/dependency-injection": "<5.2",
"symfony/form": "<4.4",
"symfony/mailer": "<5.4",
"symfony/messenger": "<5.4",
"symfony/twig-bundle": ">=7.0"
"symfony/messenger": "<4.4"
},
"require-dev": {
"symfony/browser-kit": "^5.4|^6.0|^7.0",
"symfony/console": "^5.4|^6.0|^7.0",
"symfony/css-selector": "^5.4|^6.0|^7.0",
"symfony/stopwatch": "^5.4|^6.0|^7.0"
"symfony/browser-kit": "^4.4|^5.0|^6.0",
"symfony/console": "^4.4|^5.0|^6.0",
"symfony/css-selector": "^4.4|^5.0|^6.0",
"symfony/stopwatch": "^4.4|^5.0|^6.0"
},
"type": "symfony-bundle",
"autoload": {
@ -5898,11 +6351,8 @@
],
"description": "Provides a development tool that gives detailed information about the execution of any request",
"homepage": "https://symfony.com",
"keywords": [
"dev"
],
"support": {
"source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.19"
"source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.43"
},
"funding": [
{
@ -5918,7 +6368,7 @@
"type": "tidelift"
}
],
"time": "2025-02-14T12:21:59+00:00"
"time": "2024-08-08T09:11:47+00:00"
},
{
"name": "symfony/webpack-encore-bundle",
@ -5953,8 +6403,8 @@
"type": "symfony-bundle",
"extra": {
"thanks": {
"url": "https://github.com/symfony/webpack-encore",
"name": "symfony/webpack-encore"
"name": "symfony/webpack-encore",
"url": "https://github.com/symfony/webpack-encore"
}
},
"autoload": {
@ -5995,28 +6445,31 @@
},
{
"name": "symfony/yaml",
"version": "v6.4.23",
"version": "v5.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "93e29e0deb5f1b2e360adfb389a20d25eb81a27b"
"reference": "7025b964f123bbf1896d7563db6ec7f1f63e918a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/93e29e0deb5f1b2e360adfb389a20d25eb81a27b",
"reference": "93e29e0deb5f1b2e360adfb389a20d25eb81a27b",
"url": "https://api.github.com/repos/symfony/yaml/zipball/7025b964f123bbf1896d7563db6ec7f1f63e918a",
"reference": "7025b964f123bbf1896d7563db6ec7f1f63e918a",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
"symfony/console": "<5.4"
"symfony/console": "<5.3"
},
"require-dev": {
"symfony/console": "^5.4|^6.0|^7.0"
"symfony/console": "^5.3|^6.0"
},
"suggest": {
"symfony/console": "For validating YAML files using the lint command"
},
"bin": [
"Resources/bin/yaml-lint"
@ -6047,7 +6500,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v6.4.23"
"source": "https://github.com/symfony/yaml/tree/v5.4.44"
},
"funding": [
{
@ -6063,30 +6516,30 @@
"type": "tidelift"
}
],
"time": "2025-06-03T06:46:12+00:00"
"time": "2024-09-16T14:36:56+00:00"
},
{
"name": "twig/twig",
"version": "v3.21.1",
"version": "v3.14.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d"
"reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d",
"reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/126b2c97818dbff0cdf3fbfc881aedb3d40aae72",
"reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72",
"shasum": ""
},
"require": {
"php": ">=8.1.0",
"php": ">=8.0.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3"
"symfony/polyfill-mbstring": "^1.3",
"symfony/polyfill-php81": "^1.29"
},
"require-dev": {
"phpstan/phpstan": "^2.0",
"psr/container": "^1.0|^2.0",
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
},
@ -6130,7 +6583,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.21.1"
"source": "https://github.com/twigphp/Twig/tree/v3.14.0"
},
"funding": [
{
@ -6142,157 +6595,44 @@
"type": "tidelift"
}
],
"time": "2025-05-03T07:21:55+00:00"
"time": "2024-09-09T17:55:12+00:00"
}
],
"packages-dev": [
{
"name": "phpstan/phpstan",
"version": "2.1.17",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "89b5ef665716fa2a52ecd2633f21007a6a349053"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/89b5ef665716fa2a52ecd2633f21007a6a349053",
"reference": "89b5ef665716fa2a52ecd2633f21007a6a349053",
"shasum": ""
},
"require": {
"php": "^7.4|^8.0"
},
"conflict": {
"phpstan/phpstan-shim": "*"
},
"bin": [
"phpstan",
"phpstan.phar"
],
"type": "library",
"autoload": {
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHPStan - PHP Static Analysis Tool",
"keywords": [
"dev",
"static analysis"
],
"support": {
"docs": "https://phpstan.org/user-guide/getting-started",
"forum": "https://github.com/phpstan/phpstan/discussions",
"issues": "https://github.com/phpstan/phpstan/issues",
"security": "https://github.com/phpstan/phpstan/security/policy",
"source": "https://github.com/phpstan/phpstan-src"
},
"funding": [
{
"url": "https://github.com/ondrejmirtes",
"type": "github"
},
{
"url": "https://github.com/phpstan",
"type": "github"
}
],
"time": "2025-05-21T20:55:28+00:00"
},
{
"name": "rector/rector",
"version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
"reference": "d0917c069bb0d9bb06ed111cf052510f609015a4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/d0917c069bb0d9bb06ed111cf052510f609015a4",
"reference": "d0917c069bb0d9bb06ed111cf052510f609015a4",
"shasum": ""
},
"require": {
"php": "^7.4|^8.0",
"phpstan/phpstan": "^2.1.17"
},
"conflict": {
"rector/rector-doctrine": "*",
"rector/rector-downgrade-php": "*",
"rector/rector-phpunit": "*",
"rector/rector-symfony": "*"
},
"suggest": {
"ext-dom": "To manipulate phpunit.xml via the custom-rule command"
},
"bin": [
"bin/rector"
],
"type": "library",
"autoload": {
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Instant Upgrade and Automated Refactoring of any PHP code",
"homepage": "https://getrector.com/",
"keywords": [
"automation",
"dev",
"migration",
"refactoring"
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
"source": "https://github.com/rectorphp/rector/tree/2.1.1"
},
"funding": [
{
"url": "https://github.com/tomasvotruba",
"type": "github"
}
],
"time": "2025-07-10T11:31:31+00:00"
},
{
"name": "symfony/debug-bundle",
"version": "v6.4.13",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-bundle.git",
"reference": "7bcfaff39e094cc09455201916d016d9b2ae08ff"
"reference": "177f79296705823eee0d7dd79773f3a9df884fe0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug-bundle/zipball/7bcfaff39e094cc09455201916d016d9b2ae08ff",
"reference": "7bcfaff39e094cc09455201916d016d9b2ae08ff",
"url": "https://api.github.com/repos/symfony/debug-bundle/zipball/177f79296705823eee0d7dd79773f3a9df884fe0",
"reference": "177f79296705823eee0d7dd79773f3a9df884fe0",
"shasum": ""
},
"require": {
"ext-xml": "*",
"php": ">=8.1",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0",
"symfony/twig-bridge": "^5.4|^6.0|^7.0",
"symfony/var-dumper": "^5.4|^6.0|^7.0"
"php": ">=7.2.5",
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/polyfill-php80": "^1.16",
"symfony/twig-bridge": "^4.4|^5.0|^6.0",
"symfony/var-dumper": "^4.4|^5.0|^6.0"
},
"conflict": {
"symfony/config": "<5.4",
"symfony/dependency-injection": "<5.4"
"symfony/config": "<4.4",
"symfony/dependency-injection": "<5.2"
},
"require-dev": {
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/web-profiler-bundle": "^5.4|^6.0|^7.0"
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/web-profiler-bundle": "^4.4|^5.0|^6.0"
},
"suggest": {
"symfony/config": "For service container configuration",
"symfony/dependency-injection": "For using as a service from the container"
},
"type": "symfony-bundle",
"autoload": {
@ -6320,7 +6660,7 @@
"description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/debug-bundle/tree/v6.4.13"
"source": "https://github.com/symfony/debug-bundle/tree/v5.4.40"
},
"funding": [
{
@ -6336,19 +6676,19 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:18:03+00:00"
"time": "2024-05-31T14:33:22+00:00"
}
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": {},
"stability-flags": [],
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": "^8.4",
"php": ">=7.2.5",
"ext-ctype": "*",
"ext-iconv": "*"
},
"platform-dev": {},
"plugin-api-version": "2.6.0"
"platform-dev": [],
"plugin-api-version": "2.3.0"
}

View File

@ -8,4 +8,5 @@ return [
Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true],
Sentry\SentryBundle\SentryBundle::class => ['all' => true],
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true],
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
];

View File

@ -2,9 +2,6 @@ parameters:
base_url: '%env(BASE_URL)%'
env(BASE_URL): '//'
base_path: '%env(BASE_PATH)%'
env(BASE_PATH): '/'
cookie_path: '%env(COOKIE_PATH)%'
env(COOKIE_PATH): '/'
framework:
@ -21,7 +18,7 @@ framework:
storage_factory_id: session.storage.factory.native
cookie_path: "%cookie_path%"
assets:
json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
base_urls: '%base_url%'
router:
default_uri: '%base_url%'
#esi: true

View File

@ -0,0 +1,2 @@
framework:
lock: '%env(LOCK_DSN)%'

View File

@ -0,0 +1,6 @@
monolog:
handlers:
stdout:
type: stream
path: "php://stdout"
level: "%env(string:LOGGER_LEVEL)%"

View File

@ -5,7 +5,6 @@ twig:
default_path: "%kernel.project_dir%/templates"
form_themes:
- "bootstrap_5_layout.html.twig"
- "altcha.html.twig"
when@test:
twig:
strict_variables: true

View File

@ -2,10 +2,53 @@ webpack_encore:
# The path where Encore is building the assets - i.e. Encore.setOutputPath()
# If multiple builds are defined (as shown below), you can disable the default build:
# output_path: false
output_path: "%kernel.project_dir%/public/build"
output_path: false
builds:
appConfig: '%kernel.project_dir%/public/build/app'
themeConfig: '%kernel.project_dir%/public/build/theme'
# Set attributes that will be rendered on all script and link tags
script_attributes:
defer: true
# Uncomment (also under link_attributes) if using Turbo Drive
# https://turbo.hotwired.dev/handbook/drive#reloading-when-assets-change
# 'data-turbo-track': reload
# link_attributes:
# Uncomment if using Turbo Drive
# 'data-turbo-track': reload
# If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials')
# crossorigin: 'anonymous'
# Preload all rendered script and link tags automatically via the HTTP/2 Link header
# preload: true
# Throw an exception if the entrypoints.json file is missing or an entry is missing from the data
# strict_mode: false
# If you have multiple builds:
# builds:
# frontend: '%kernel.project_dir%/public/frontend/build'
# pass the build name as the 3rd argument to the Twig functions
# {{ encore_entry_script_tags('entry1', null, 'frontend') }}
# Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes)
# Put in config/packages/prod/webpack_encore.yaml
# cache: true
framework:
assets:
packages:
app:
json_manifest_path: '%kernel.project_dir%/public/build/app/manifest.json'
theme:
json_manifest_path: '%kernel.project_dir%/public/build/theme/manifest.json'
#when@prod:
# webpack_encore:
# # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes)
# # Available in version 1.2
# cache: true
#when@test:
# webpack_encore:
# strict_mode: false

View File

@ -29,6 +29,9 @@ parameters:
env(PEPPER): ~
pepper: '%env(resolve:PEPPER)%'
env(LOGGER_LEVEL): "info"
services:
# default configuration for services in *this* file
_defaults:
@ -75,23 +78,3 @@ services:
$securityPattern: '%security_pattern%'
# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones
App\Altcha\Form\AltchaType:
arguments:
$altchaHost: "%env(ALTCHA_HOST)%"
$altchaBaseUrl: "%env(ALTCHA_BASE_URL)%"
$altchaDebug: "%env(bool:ALTCHA_DEBUG)%"
$altchaWorkers: "%env(ALTCHA_WORKERS)%"
$altchaDelay: "%env(ALTCHA_DELAY)%"
$altchaMockError: "%env(bool:ALTCHA_MOCK_ERROR)%"
tags:
- { name: form.type, alias: altcha}
App\Form\LoginType:
arguments:
$altchaEnabled: "%env(bool:ALTCHA_ENABLED)%"
App\Altcha\AltchaValidator:
arguments:
$altchaHost: "%env(ALTCHA_HOST)%"
$altchaBaseUrl: "%env(ALTCHA_BASE_URL)%"

View File

@ -1,18 +1,19 @@
version: "3.8"
services:
hydra-sql:
container_name: hydra-sql
build:
context: .
dockerfile: ./misc/images/hydra-sql-standalone/Dockerfile
args:
- BASE_PATH=
- APP_ENV=dev
- ENCORE_MODE=dev
- HTTP_PROXY=${HTTP_PROXY}
- HTTPS_PROXY=${HTTPS_PROXY}
- http_proxy=${http_proxy}
- https_proxy=${https_proxy}
ports:
- 8082:8071
volumes:
- .:/app
tmpfs:
- /var/www/var/logs:uid=${FIXUID:-1000},gid=${FIXGID:-1000}
- /var/www/var/cache:uid=${FIXUID:-1000},gid=${FIXGID:-1000}
@ -20,30 +21,10 @@ services:
- /tmp
links:
- hydra
depends_on:
- redis
extra_hosts:
- "localhost:127.0.0.1"
- "localhost:host-gateway"
- "host.docker.internal:host-gateway"
develop:
watch:
- action: rebuild
path: ./misc/images/hydra-sql-standalone
- action: rebuild
path: ./assets
- action: sync
path: ./templates
target: /app/templates
- action: sync
path: ./translations
target: /app/translations
- action: sync
path: ./config
target: /app/config
- action: sync
path: ./src
target: /app/src
environment:
- APP_ENV=dev
- PHP_FPM_MEMORY_LIMIT=128m
@ -59,6 +40,9 @@ services:
- HASH_ALGO_LEGACY="sha256"
- SECURITY_PATTERN=password,salt,pepper
- CADDY_HTTP_PORT=8071
- LOGGER_LEVEL=info
- PHP_FPM_DISPLAY_ERRORS=on
- PHP_FPM_CATCH_WORKERS_OUTPUT=1
oidc-test:
image: bornholm/oidc-test:v0.0.0-1-g936a77e
@ -153,11 +137,6 @@ services:
- TZ=Europe/Paris
volumes:
- /etc/localtime:/etc/localtime:ro
altcha:
image: reg.cadoles.com/cadoles/altcha:2024.10.29-develop.1213.22e038b
environment:
ALTCHA_HMAC_KEY: 'change_me'
volumes:
postgres:
mariadb:

View File

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

View File

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

View File

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

View File

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

View File

@ -1,23 +1,17 @@
ARG NODE_OPTIONS="--openssl-legacy-provider" \
PHP_PKG_VERSION="8.4.5-r0" \
ENCORE_MODE="production" \
APP_ENV="prod" \
BASE_PATH="" \
APP_LOCALES="fr,en" \
ADDITIONAL_PACKAGES=" \
php84-gd=${PHP_PKG_VERSION} \
php84-xsl=${PHP_PKG_VERSION} \
php84-pgsql=${PHP_PKG_VERSION} \
php84-pdo_pgsql=${PHP_PKG_VERSION} \
php84-soap=${PHP_PKG_VERSION} \
php84-ldap=${PHP_PKG_VERSION} \
php84-pdo_mysql=${PHP_PKG_VERSION} \
php84-bcmath=${PHP_PKG_VERSION} \
php84-xdebug" \
ADDITIONAL_ENV=" \
ENCORE_MODE=${ENCORE_MODE} \
APP_ENV=${APP_ENV} \
BASE_PATH=${BASE_PATH} \
APP_LOCALES=${APP_LOCALES}"
ARG NODE_OPTIONS="--openssl-legacy-provider"
ARG PHP_PKG_VERSION="8.1.22-r0"
ARG ADDITIONAL_PACKAGES="bash=5.2.15-r0 \
build-base=0.5-r3 \
php81-gd=${PHP_PKG_VERSION} \
php81-xsl=${PHP_PKG_VERSION} \
php81-pdo=${PHP_PKG_VERSION} \
php81-pgsql=${PHP_PKG_VERSION} \
php81-pdo_pgsql=${PHP_PKG_VERSION} \
php81-soap=${PHP_PKG_VERSION} \
php81-ldap=${PHP_PKG_VERSION} \
php81-pdo_mysql=${PHP_PKG_VERSION} \
php81-bcmath=${PHP_PKG_VERSION} \
php81-pecl-xdebug"
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.4-base-2025.6.12-stable.1038.48ea3b9
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-base-2024.10.4-stable.1529.b630c69
RUN chown 1000:www-data -R /app

View File

@ -1,24 +1,18 @@
ARG NODE_OPTIONS="--openssl-legacy-provider" \
PHP_PKG_VERSION="8.4.5-r0" \
ENCORE_MODE="production" \
APP_ENV="prod" \
BASE_PATH="" \
APP_LOCALES="fr,en" \
ADDITIONAL_PACKAGES=" \
php84-gd=${PHP_PKG_VERSION} \
php84-xsl=${PHP_PKG_VERSION} \
php84-pgsql=${PHP_PKG_VERSION} \
php84-pdo_pgsql=${PHP_PKG_VERSION} \
php84-soap=${PHP_PKG_VERSION} \
php84-ldap=${PHP_PKG_VERSION} \
php84-pdo_mysql=${PHP_PKG_VERSION} \
php84-bcmath=${PHP_PKG_VERSION} \
php84-xdebug" \
ADDITIONAL_ENV=" \
ENCORE_MODE=${ENCORE_MODE} \
APP_ENV=${APP_ENV} \
BASE_PATH=${BASE_PATH} \
APP_LOCALES=${APP_LOCALES}"
ARG NODE_OPTIONS="--openssl-legacy-provider"
ARG PHP_PKG_VERSION="8.1.22-r0"
ARG ADDITIONAL_PACKAGES="bash=5.2.15-r0 \
build-base=0.5-r3 \
php81-gd=${PHP_PKG_VERSION} \
php81-xsl=${PHP_PKG_VERSION} \
php81-pdo=${PHP_PKG_VERSION} \
php81-pgsql=${PHP_PKG_VERSION} \
php81-pdo_pgsql=${PHP_PKG_VERSION} \
php81-soap=${PHP_PKG_VERSION} \
php81-ldap=${PHP_PKG_VERSION} \
php81-pdo_mysql=${PHP_PKG_VERSION} \
php81-bcmath=${PHP_PKG_VERSION} \
php81-pecl-xdebug"
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.4-standalone-2025.6.12-stable.1038.48ea3b9
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-standalone-2024.10.4-stable.1529.b630c69
RUN chown 1000:www-data -R /app
USER www-data

9916
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -2,12 +2,13 @@
"devDependencies": {
"@babel/core": "^7.17.0",
"@babel/preset-env": "^7.16.0",
"@hotwired/stimulus": "^3.0.0",
"@symfony/stimulus-bridge": "^3.2.0",
"@symfony/webpack-encore": "^4.1.2",
"core-js": "^3.23.0",
"regenerator-runtime": "^0.13.9",
"webpack": "^5.94.0",
"webpack": "^5.91.0",
"webpack-cli": "^4.10.0",
"file-loader": "^6.2.0",
"webpack-notifier": "^1.15.0"
},
"license": "UNLICENSED",
@ -25,7 +26,6 @@
"jquery": "^3.6.1",
"postcss-loader": "^7.0.2",
"sass": "^1.56.2",
"sass-loader": "^13.2.0",
"altcha": "^2.0.0"
"sass-loader": "^13.2.0"
}
}

View File

@ -1,8 +0,0 @@
parameters:
level: 6
paths:
- bin/
- config/
- public/
- src/
- tests/

2
public/build/app/138.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,30 @@
/*!
* Bootstrap v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Sizzle CSS Selector Engine v2.3.9
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2022-12-19
*/
/*!
* jQuery JavaScript Library v3.6.3
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
* Copyright OpenJS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2022-12-20T21:28Z
*/

1
public/build/app/3.js Normal file

File diff suppressed because one or more lines are too long

1
public/build/app/app.css Normal file
View File

@ -0,0 +1 @@
body{min-height:50vh}.wrapper,body{align-items:center;display:flex;justify-content:center}.wrapper{height:100%}form{border:1px solid grey;border-radius:5px;display:flex;flex-direction:column;padding:15px}.form-error{color:red}.lang{align-items:center;display:flex;justify-content:center}.lang .flag{height:auto;margin:5px;width:200px}

1
public/build/app/app.js Normal file
View File

@ -0,0 +1 @@
(self.webpackChunk=self.webpackChunk||[]).push([[143],{4180:(t,e,r)=>{var n={"./hello_controller.js":4695};function o(t){var e=i(t);return r(e)}function i(t){if(!r.o(n,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return n[t]}o.keys=function(){return Object.keys(n)},o.resolve=i,t.exports=o,o.id=4180},8205:(t,e,r)=>{"use strict";r.d(e,{Z:()=>n});const n={}},4695:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>s});r(8304),r(4812),r(489),r(1539),r(2419),r(8011),r(9070),r(6649),r(6078),r(2526),r(1817),r(9653),r(2165),r(6992),r(8783),r(3948);function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var r=0;r<e.length;r++){var o=e[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,(i=o.key,u=void 0,u=function(t,e){if("object"!==n(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!==n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(i,"string"),"symbol"===n(u)?u:String(u)),o)}var i,u}function u(t,e){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},u(t,e)}function c(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=l(t);if(e){var o=l(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return f(this,r)}}function f(t,e){if(e&&("object"===n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}var s=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&u(t,e)}(l,t);var e,r,n,f=c(l);function l(){return o(this,l),f.apply(this,arguments)}return e=l,(r=[{key:"connect",value:function(){this.element.textContent="Hello Stimulus! Edit me in assets/controllers/hello_controller.js"}}])&&i(e.prototype,r),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),l}(r(6599).Qr)},9437:(t,e,r)=>{"use strict";(0,r(2192).x)(r(4180))}},t=>{t.O(0,[3],(()=>{return e=9437,t(t.s=e);var e}));t.O()}]);

7
public/build/app/bootstrap-css.css vendored Normal file

File diff suppressed because one or more lines are too long

1
public/build/app/bootstrap-css.js vendored Normal file
View File

@ -0,0 +1 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[113],{9218:()=>{}},s=>{var e;e=9218,s(s.s=e)}]);

1
public/build/app/bootstrap-js.js vendored Normal file
View File

@ -0,0 +1 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[144],{2576:(e,s,u)=>{u(3138)}},e=>{e.O(0,[138],(()=>{return s=2576,e(e.s=s);var s}));e.O()}]);

View File

@ -0,0 +1,30 @@
{
"entrypoints": {
"app": {
"js": [
"/build/app/runtime.js",
"/build/app/3.js",
"/build/app/app.js"
],
"css": [
"/build/app/app.css"
]
},
"bootstrap-css": {
"js": [
"/build/app/runtime.js",
"/build/app/bootstrap-css.js"
],
"css": [
"/build/app/bootstrap-css.css"
]
},
"bootstrap-js": {
"js": [
"/build/app/runtime.js",
"/build/app/138.js",
"/build/app/bootstrap-js.js"
]
}
}
}

View File

@ -0,0 +1,10 @@
{
"build/app/app.css": "/build/app/app.css",
"build/app/app.js": "/build/app/app.js",
"build/app/bootstrap-css.css": "/build/app/bootstrap-css.css",
"build/app/bootstrap-css.js": "/build/app/bootstrap-css.js",
"build/app/bootstrap-js.js": "/build/app/bootstrap-js.js",
"build/app/runtime.js": "/build/app/runtime.js",
"build/app/3.js": "/build/app/3.js",
"build/app/138.js": "/build/app/138.js"
}

View File

@ -0,0 +1 @@
(()=>{"use strict";var e,r={},t={};function o(e){var n=t[e];if(void 0!==n)return n.exports;var i=t[e]={exports:{}};return r[e].call(i.exports,i,i.exports,o),i.exports}o.m=r,e=[],o.O=(r,t,n,i)=>{if(!t){var l=1/0;for(s=0;s<e.length;s++){for(var[t,n,i]=e[s],a=!0,u=0;u<t.length;u++)(!1&i||l>=i)&&Object.keys(o.O).every((e=>o.O[e](t[u])))?t.splice(u--,1):(a=!1,i<l&&(l=i));if(a){e.splice(s--,1);var f=n();void 0!==f&&(r=f)}}return r}i=i||0;for(var s=e.length;s>0&&e[s-1][2]>i;s--)e[s]=e[s-1];e[s]=[t,n,i]},o.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return o.d(r,{a:r}),r},o.d=(e,r)=>{for(var t in r)o.o(r,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={666:0};o.O.j=r=>0===e[r];var r=(r,t)=>{var n,i,[l,a,u]=t,f=0;if(l.some((r=>0!==e[r]))){for(n in a)o.o(a,n)&&(o.m[n]=a[n]);if(u)var s=u(o)}for(r&&r(t);f<l.length;f++)i=l[f],o.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return o.O(s)},t=self.webpackChunk=self.webpackChunk||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})()})();

View File

@ -0,0 +1,13 @@
{
"entrypoints": {
"theme": {
"js": [
"/build/theme/runtime.js",
"/build/theme/theme.js"
],
"css": [
"/build/theme/theme.css"
]
}
}
}

View File

@ -0,0 +1,5 @@
{
"build/theme/theme.css": "/build/theme/theme.css",
"build/theme/theme.js": "/build/theme/theme.js",
"build/theme/runtime.js": "/build/theme/runtime.js"
}

View File

@ -0,0 +1 @@
(()=>{"use strict";var e,r={},o={};function t(e){var n=o[e];if(void 0!==n)return n.exports;var l=o[e]={exports:{}};return r[e](l,l.exports,t),l.exports}t.m=r,e=[],t.O=(r,o,n,l)=>{if(!o){var a=1/0;for(p=0;p<e.length;p++){for(var[o,n,l]=e[p],i=!0,f=0;f<o.length;f++)(!1&l||a>=l)&&Object.keys(t.O).every((e=>t.O[e](o[f])))?o.splice(f--,1):(i=!1,l<a&&(a=l));if(i){e.splice(p--,1);var u=n();void 0!==u&&(r=u)}}return r}l=l||0;for(var p=e.length;p>0&&e[p-1][2]>l;p--)e[p]=e[p-1];e[p]=[o,n,l]},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={666:0};t.O.j=r=>0===e[r];var r=(r,o)=>{var n,l,[a,i,f]=o,u=0;if(a.some((r=>0!==e[r]))){for(n in i)t.o(i,n)&&(t.m[n]=i[n]);if(f)var p=f(t)}for(r&&r(o);u<a.length;u++)l=a[u],t.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return t.O(p)},o=self.webpackChunk=self.webpackChunk||[];o.forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o))})()})();

View File

@ -0,0 +1 @@
input[type=radio]:checked~.app-item{--tw-shadow:0 10px 15px -3px rgba(22,78,99,.3),0 4px 6px -4px rgba(22,78,99,.3);background-color:rgba(76,233,14,.15)}

View File

@ -0,0 +1 @@
(self.webpackChunk=self.webpackChunk||[]).push([[505],{755:(s,e,k)=>{k(634),k(681)},634:()=>{},681:(s,e,k)=>{"use strict";k.r(e)}},s=>{var e;e=755,s(s.s=e)}]);

View File

@ -0,0 +1,2 @@
require('./theme.js')
require('./theme.css')

4
public/theme.css Normal file
View File

@ -0,0 +1,4 @@
input[type="radio"]:checked ~ .app-item {
--tw-shadow: 0 10px 15px -3px rgb(22 78 99 / 0.3), 0 4px 6px -4px rgb(22 78 99 / 0.3);
background-color: rgb(76 233 14 / 0.15);
}

View File

@ -46,7 +46,6 @@ Elle permet de se connecter à une base de donnée et de vérifier un mot de pas
| `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 | |
| `ALTCHA_ENABLED` | Désactivation d'altcha lors de la connexion | true | |
### Algorithmes de hashage compatibles
@ -110,10 +109,3 @@ ex : `'redis:?host[redis1:26379]&host[redis2:26379]&host[redis3:26379]&redis_sen
| `postgres` | Base de donnée postgres support du test et pour hydra | `5432` |
| `mariadb` | Base de donnée mariadb support du test | `3306` |
| `pgadmin` | pour administrer la base de donnée | `8085` |
### build du sql theme
copier les images et les fonts dans les dossier ./assets
modifier si besoin le fichier theme-entrypoints.js
lancer un `npm run build`

View File

@ -1,28 +0,0 @@
<?php
declare(strict_types=1);
use Rector\Config\RectorConfig;
use Rector\Renaming\Rector\Class_\RenameAttributeRector;
use Rector\Symfony\Set\SymfonySetList;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths([
__DIR__ . '/src',
]);
$rectorConfig->sets([
SymfonySetList::SYMFONY_60,
SymfonySetList::SYMFONY_61,
SymfonySetList::SYMFONY_62,
SymfonySetList::SYMFONY_63,
SymfonySetList::SYMFONY_64,
SymfonySetList::SYMFONY_CODE_QUALITY,
SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION,
]);
$rectorConfig->importShortClasses(false);
$rectorConfig->skip([
RenameAttributeRector::class
]);
};

View File

@ -1,48 +0,0 @@
<?php
namespace App\Altcha;
use App\Altcha\Form\AltchaModel;
use Symfony\Component\Form\DataTransformerInterface;
class AltchaTransformer implements DataTransformerInterface
{
/**
* {@inheritDoc}
*/
public function reverseTransform($value): AltchaModel
{
if (empty($value)) {
return new AltchaModel();
}
$decodedValue = base64_decode($value);
$data = json_decode($decodedValue);
$model = new AltchaModel();
foreach ($data as $property => $value) {
$model->{$property} = $value;
}
return $model;
}
/**
* {@inheritDoc}
*/
public function transform($value): string
{
if (empty($value)) {
return '';
}
$json = json_encode($value);
if (false === $json) {
return '';
}
return base64_encode($json);
}
}

View File

@ -1,52 +0,0 @@
<?php
namespace App\Altcha;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class AltchaValidator
{
public function __construct(
private readonly string $altchaHost,
private readonly string $altchaBaseUrl,
private readonly HttpClientInterface $httpClient,
private readonly TranslatorInterface $translator
) {
}
public function validate(FormEvent $formEvent): void
{
$form = $formEvent->getForm();
$data = $form->getData();
$response = $this->httpClient->request(
'POST',
$this->altchaHost.$this->altchaBaseUrl.'/verify',
[
'body' => json_encode($data),
'headers' => [
'Content-Type' => 'application/json',
],
],
);
if (Response::HTTP_OK !== $response->getStatusCode()) {
$form->addError(new FormError($this->translator->trans('altcha.validator.server_validation_error', [], 'form')));
return;
}
$content = $response->getContent();
$parsedResponse = json_decode($content);
if (true !== $parsedResponse->success) {
$form->addError(new FormError($this->translator->trans('altcha.validator.server_validation_error', [], 'form')));
return;
}
}
}

View File

@ -1,39 +0,0 @@
<?php
namespace App\Altcha\Form;
use Symfony\Component\Validator\Constraints as Assert;
class AltchaModel
{
/**
* @Assert\NotBlank()
* @Assert\Regex("/^(SHA-1|SHA-256|SHA-512)$/")
*/
public string $algorithm;
/**
* @Assert\NotBlank()
*/
public string $challenge;
/**
* @Assert\NotBlank()
*/
public string $salt;
/**
* @Assert\NotBlank()
*/
public int $number;
/**
* @Assert\NotBlank()
*/
public string $signature;
/**
* @Assert\NotBlank()
*/
public int $took;
}

View File

@ -1,81 +0,0 @@
<?php
namespace App\Altcha\Form;
use App\Altcha\AltchaTransformer;
use App\Altcha\AltchaValidator;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class AltchaType extends AbstractType
{
public function __construct(
private readonly string $altchaHost,
private readonly string $altchaBaseUrl,
private readonly string $altchaDebug,
private readonly string $altchaWorkers,
private readonly string $altchaDelay,
private readonly string $altchaMockError,
private readonly AltchaValidator $altchaValidator,
private readonly HttpClientInterface $httpClient,
private readonly TranslatorInterface $translator
) {
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->addModelTransformer(new AltchaTransformer());
$builder->addEventListener(FormEvents::POST_SUBMIT, [$this->altchaValidator, 'validate']);
}
public function buildView(FormView $view, FormInterface $form, array $options)
{
$translations = [
'label' => $this->translator->trans('altcha.widget.label', [], 'form'),
'verified' => $this->translator->trans('altcha.widget.verified', [], 'form'),
'verifying' => $this->translator->trans('altcha.widget.verifying', [], 'form'),
'waitAlert' => $this->translator->trans('altcha.widget.waitalert', [], 'form'),
'error' => $this->translator->trans('altcha.widget.error', [], 'form'),
'expired' => $this->translator->trans('altcha.widget.expired', [], 'form'),
];
$view->vars['translations'] = json_encode($translations);
$view->vars['challengeJson'] = $this->requestChallenge();
$view->vars['debug'] = $this->altchaDebug;
$view->vars['workers'] = $this->altchaWorkers;
$view->vars['delay'] = $this->altchaDelay;
$view->vars['mockError'] = $this->altchaMockError;
}
private function requestChallenge(): string
{
$resp = $this->httpClient->request('GET', $this->altchaHost.$this->altchaBaseUrl.'/request');
if (Response::HTTP_OK === $resp->getStatusCode()) {
return $resp->getContent();
}
return '';
}
public function getParent(): string
{
return TextType::class;
}
public function getName(): string
{
return $this->getBlockPrefix();
}
public function getBlockPrefix(): string
{
return 'altcha';
}
}

View File

@ -11,17 +11,21 @@ use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Symfony\Component\Finder\Exception\AccessDeniedException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
class MainController extends AbstractController
{
public function __construct(
private readonly RequestStack $requestStack,
private readonly HydraService $hydra,
private readonly Client $client
){
private HydraService $hydra;
private Client $client;
private SessionInterface $session;
public function __construct(SessionInterface $session, HydraService $hydra, Client $client)
{
$this->session = $session;
$this->client = $client;
$this->hydra = $hydra;
}
#[Route('/', name: 'app_home')]
@ -34,9 +38,9 @@ class MainController extends AbstractController
* Route de Healthcheck (notament pour kubernetes)
*/
#[Route('/health', name: 'health')]
public function health(): Response
public function health(Request $request): Response
{
return new Response('healthy', Response::HTTP_OK);
return new Response('healthy', 200);
}
#[Route('/connect/login-accept', name: 'app_login_accept', methods: ['GET'])]
@ -47,7 +51,7 @@ class MainController extends AbstractController
if (!$user instanceof User) {
throw new AccessDeniedException();
}
$challenge = $this->requestStack->getSession()->get('challenge');
$challenge = $this->session->get('challenge');
if (!$challenge) {
return new RedirectResponse($this->getParameter('issuer_url'));
}

View File

@ -39,12 +39,12 @@ class SecurityController extends AbstractController
}
return $this->render('login.html.twig', [
'loginForm' => $loginForm,
'loginForm' => $loginForm->createView(),
]);
}
#[Route('/logout', name: 'logout')]
public function logout(): void
public function logout(Request $request): void
{
}
}

View File

@ -8,7 +8,7 @@ use Symfony\Component\Config\Definition\ConfigurationInterface;
class SQLLoginConfiguration implements ConfigurationInterface
{
public function getConfigTreeBuilder(): TreeBuilder
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder('sql_login');
$treeBuilder->getRootNode()->children()

View File

@ -9,12 +9,14 @@ class User implements UserInterface
private array $attributes = [];
private string $login;
private string $password;
private bool $rememberMe;
public function __construct($login, $password, $attributes)
public function __construct($login, $password, $attributes, $rememberMe = false)
{
$this->password = $password;
$this->login = $login;
$this->attributes = $attributes;
$this->rememberMe = $rememberMe;
}
public function getLogin(): ?string
@ -32,6 +34,11 @@ class User implements UserInterface
return $this->attributes;
}
public function getRememberMe(): bool
{
return $this->rememberMe;
}
public function getRoles(): array
{
return ['ROLE_USER'];

View File

@ -2,8 +2,8 @@
namespace App\Form;
use App\Altcha\Form\AltchaType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
@ -11,11 +11,6 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
class LoginType extends AbstractType
{
public function __construct(
private readonly bool $altchaEnabled
) {
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
@ -27,15 +22,12 @@ class LoginType extends AbstractType
'translation_domain' => 'form',
'label' => 'form.label.password',
])
;
if ($this->altchaEnabled) {
$builder->add('altcha', AltchaType::class, [
->add('_remember_me', CheckboxType::class, [
'required' => false,
'translation_domain' => 'form',
'label' => 'altcha.widget.title',
'required' => true,
]);
}
'label' => 'form.label.remember_me',
])
;
}
public function configureOptions(OptionsResolver $resolver): void

View File

@ -3,22 +3,25 @@
namespace App\Hydra;
use App\Hydra\Exception\InvalidChallengeException;
use Exception;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\HttpClient\ResponseInterface;
class Client
{
private const int MAX_RETRY = 3;
private const array SLEEP_TIME = [
private HttpClientInterface $client;
private const MAX_RETRY = 3;
private const SLEEP_TIME = [
5,
500,
5000,
];
private string $hydraAdminBaseUrl;
public function __construct(
private readonly HttpClientInterface $client,
private readonly string $hydraAdminBaseUrl
) {
public function __construct(HttpClientInterface $client, string $hydraAdminBaseUrl)
{
$this->client = $client;
$this->hydraAdminBaseUrl = $hydraAdminBaseUrl;
}
public function fetchLoginRequestInfo(string $loginChallenge): ResponseInterface
@ -78,7 +81,7 @@ class Client
$status = $response->getStatusCode();
if (503 === $status) {
++$attempt;
usleep(1000 * self::SLEEP_TIME[$attempt] + random_int(1, 5) * 1000);
usleep(1000 * self::SLEEP_TIME[$attempt] + rand(1, 5) * 1000);
continue;
}
switch ($status) {
@ -88,7 +91,7 @@ class Client
break;
}
if (self::MAX_RETRY === $attempt) {
throw new \Exception(sprintf('Fetch consent a rencontré une erreur %s après %s tentatives', $response->getStatusCode(), self::MAX_RETRY));
throw new Exception(sprintf('Fetch consent a rencontré une erreur %s après %s tentatives', $response->getStatusCode(), self::MAX_RETRY));
}
return $response;

View File

@ -6,4 +6,4 @@ use Symfony\Component\HttpFoundation\Exception\BadRequestException;
class InvalidIssuerException extends BadRequestException
{
}
}

View File

@ -8,18 +8,23 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Exception\BadRequestException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class HydraService extends AbstractController
{
public function __construct(
private readonly Client $client,
private readonly RequestStack $requestStack,
private readonly TokenStorageInterface $tokenStorage,
private readonly string $baseUrl
){
private SessionInterface $session;
private Client $client;
private TokenStorageInterface $tokenStorage;
private string $baseUrl;
public function __construct(Client $client, SessionInterface $session, TokenStorageInterface $tokenStorage, string $baseUrl)
{
$this->session = $session;
$this->client = $client;
$this->tokenStorage = $tokenStorage;
$this->baseUrl = $baseUrl;
}
public function handleLoginRequest(Request $request): RedirectResponse
@ -33,13 +38,13 @@ class HydraService extends AbstractController
$res = $this->client->fetchLoginRequestInfo($challenge);
$loginRequestInfo = $res->toArray();
if (200 !== $res->getStatusCode()) {
$this->requestStack->getSession()->clear();
$this->session->clear();
throw new BadRequestException();
}
// si le challenge est validé par hydra, on le stocke en session pour l'utiliser par la suite et on redirige vers une route interne protégée qui va déclencher l'identification FranceConnect
$this->requestStack->getSession()->set('challenge', $loginRequestInfo['challenge']);
$this->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
@ -72,7 +77,7 @@ class HydraService extends AbstractController
}
$logoutRequestInfo = $this->client->fetchLogoutRequestInfo($logoutChallenge)->toArray();
$logoutAcceptRes = $this->client->acceptLogoutRequest($logoutRequestInfo['challenge'])->toArray();
$this->requestStack->getSession()->clear();
$this->session->clear();
$this->tokenStorage->setToken(null);
return new RedirectResponse($logoutAcceptRes['redirect_to']);

View File

@ -103,6 +103,6 @@ class SQLLoginRequest
{
$fields = join(',', array_merge($this->getPasswordFields(), $this->getDataFields()));
return 'SELECT '.$fields.' FROM '.$this->getTableName().' WHERE '.$this->getLoginColumnName().' = :'.$this->getLoginColumnName().';';
return 'SELECT '.$fields.' FROM '.$this->getTableName().' WHERE LOWER('.$this->getLoginColumnName().') = LOWER(:'.$this->getLoginColumnName().');';
}
}

View File

@ -10,16 +10,17 @@ use App\SQLLogin\Exception\EmptyResultException;
use App\SQLLogin\Exception\InvalidSQLPasswordException;
use App\SQLLogin\Exception\SecurityPatternConfigurationException;
use App\SQLLogin\SQLLoginRequest;
use PDOException;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\Exception\UserNotFoundException;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport;
use Symfony\Component\Security\Http\SecurityRequestAttributes;
class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
{
@ -27,12 +28,20 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
public const ERROR_LOGIN = 'error_login';
public const TECHNICAL_ERROR = 'technical_error';
private string $baseUrl;
public function __construct(
private readonly string $baseUrl,
private readonly SQLLoginService $sqlLoginService,
private readonly PasswordEncoder $passwordHasher,
private readonly SQLLoginRequest $sqlLoginRequest
){
string $baseUrl,
private SQLLoginService $sqlLoginService,
private PasswordEncoder $passwordHasher,
private SQLLoginRequest $sqlLoginRequest,
private LoggerInterface $logger
) {
$this->baseUrl = $baseUrl;
$this->sqlLoginService = $sqlLoginService;
$this->passwordHasher = $passwordHasher;
$this->sqlLoginRequest = $sqlLoginRequest;
$this->logger = $logger;
}
/**
@ -47,28 +56,30 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey): RedirectResponse
{
return new RedirectResponse($this->baseUrl.'/connect/login-accept');
return new RedirectResponse($this->baseUrl . '/connect/login-accept');
}
public function onAuthenticationFailure(Request $request, AuthenticationException $exception): RedirectResponse
{
$request->getSession()->set(SecurityRequestAttributes::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
{
$form = $request->request->all(key: 'login');
$form = $request->request->get('login');
$login = $form['login'];
$plaintextPassword = $form['password'];
$rememberMe = isset($form['_remember_me']) ? true : false;
$session = $request->getSession();
try {
$datas = $this->sqlLoginService->fetchPasswordAndDatas($login);
} catch (EmptyResultException $e) {
$session->set(self::ERROR_LOGIN, true);
$this->logger->warning("authentication failed", ['username' => $login, "remote_address" => $request->getClientIp()]);
throw new AuthenticationException();
} catch (DataToFetchConfigurationException|\PDOException $e) {
} catch (DataToFetchConfigurationException | PDOException $e) {
\Sentry\captureException($e);
$session->set(self::TECHNICAL_ERROR, true);
throw new AuthenticationException();
@ -88,31 +99,30 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
$this->passwordHasher->verify($remoteHashedPassword, $plaintextPassword, $remoteSalt);
} catch (InvalidSQLPasswordException $e) {
$session->set(self::ERROR_LOGIN, true);
$this->logger->warning("authentication failed", ['username' => $login, "remote_address" => $request->getClientIp()]);
throw new AuthenticationException();
} catch (SecurityPatternConfigurationException $e) {
\Sentry\captureException($e);
$session->set(self::TECHNICAL_ERROR, true);
throw new AuthenticationException();
}
$user = new User($login, $remoteHashedPassword, $datas);
$loader = function (string $userIdentifier) use ($user): UserInterface {
if ($user->getLogin() !== $userIdentifier) {
throw new UserNotFoundException(sprintf('User "%s" not found.', $userIdentifier));
}
return $user;
$user = new User($login, $remoteHashedPassword, $datas, $rememberMe);
$loader = function (string $userIdentifier) use ($user) {
return $user->getLogin() == $userIdentifier ? $user : null;
};
$passport = new SelfValidatingPassport(new UserBadge($login, $loader));
if ($rememberMe) {
$passport->addBadge(new RememberMeBadge());
}
$passport->setAttribute('attributes', $user->getAttributes());
$this->logger->warning("authentication succeeded", ['username' => $login, "remote_address" => $request->getClientIp()]);
return $passport;
}
protected function getLoginUrl(Request $request): string
{
return $this->baseUrl.'/login';
return $this->baseUrl . '/login';
}
}

View File

@ -3,48 +3,45 @@
namespace App\Security;
use App\Entity\User;
use App\Service\SQLLoginService;
use App\SQLLogin\SQLLoginRequest;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Symfony\Component\Security\Core\Exception\UserNotFoundException;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
class SQLLoginUserProvider implements UserProviderInterface
{
public function __construct(
private readonly RequestStack $requestStack,
private readonly SQLLoginService $sqlLoginService,
private readonly SQLLoginRequest $sqlLoginRequest
){
protected RequestStack $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public function loadUserByIdentifier(string $identifier): UserInterface
public function loadUserByIdentifier(string $identifier, ?User $user): ?UserInterface
{
$user = $this->sqlLoginService->fetchPasswordAndDatas($identifier);
$attributes = $user;
unset($attributes[$this->sqlLoginRequest->getPasswordColumnName()]);
if (empty($user[$this->sqlLoginRequest->getLoginColumnName()]) || empty($user[$this->sqlLoginRequest->getPasswordColumnName()])) {
throw new UserNotFoundException('email or password not found');
if ($user->getUserIdentifier() === $identifier) {
return $user;
}
return new User($user[$this->sqlLoginRequest->getLoginColumnName()], $user[$this->sqlLoginRequest->getPasswordColumnName()], $attributes);
return null;
}
public function refreshUser(UserInterface $user): UserInterface
public function loadUserByUsername(string $username): ?UserInterface
{
return $this->loadUserByIdentifier($username, null);
}
public function refreshUser(UserInterface $user): UserInterface|null
{
if (!$user instanceof User) {
throw new UnsupportedUserException(sprintf('Invalid user class "%s".', get_class($user)));
}
return $this->loadUserByIdentifier($user->getUserIdentifier());
return $this->loadUserByIdentifier($user->getUserIdentifier(), $user);
}
public function supportsClass(string $class): bool
{
return User::class === $class || \is_subclass_of($class, User::class);
return User::class === $class || is_subclass_of($class, User::class);
}
}

View File

@ -8,7 +8,6 @@ use App\SQLLogin\SQLLoginRequest;
use PDO;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Core\User\UserInterface;
class SQLLoginService extends AbstractController
{
@ -22,21 +21,14 @@ class SQLLoginService extends AbstractController
$this->loggerInterface = $loggerInterface;
}
/**
* @return array<string,string>
*/
public function fetchPasswordAndDatas(string $login): array
{
$dataRequest = $this->sqlLoginRequest->getDatasRequest();
$login = \strtolower($login);
$datas = $this->executeRequestWithLogin($dataRequest, $login);
return $datas;
}
/**
* @return array<string,string>
*/
private function executeRequestWithLogin(string $request, string $login): array
{
$attempt = 0;

View File

@ -11,15 +11,6 @@
"config/routes/annotations.yaml"
]
},
"doctrine/deprecations": {
"version": "1.1",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "1.0",
"ref": "87424683adc81d7dc305eefec1fced883084aab9"
}
},
"php-http/discovery": {
"version": "1.19",
"recipe": {
@ -32,18 +23,6 @@
"config/packages/http_discovery.yaml"
]
},
"phpstan/phpstan": {
"version": "2.1",
"recipe": {
"repo": "github.com/symfony/recipes-contrib",
"branch": "main",
"version": "1.0",
"ref": "5e490cc197fb6bb1ae22e5abbc531ddc633b6767"
},
"files": [
"phpstan.dist.neon"
]
},
"sentry/sentry-symfony": {
"version": "4.14",
"recipe": {
@ -123,6 +102,30 @@
"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/monolog-bundle": {
"version": "3.10",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "3.7",
"ref": "aff23899c4440dd995907613c1dd709b6f59503f"
},
"files": [
"config/packages/monolog.yaml"
]
},
"symfony/routing": {
"version": "5.4",
"recipe": {

View File

@ -1,13 +0,0 @@
{% block altcha_widget %}
<altcha-widget
challengejson={{challengeJson}}
name='altcha'
strings="{{translations}}"
hidelogo
hidefooter
workers= {{ workers }}
delay={{ delay }}
{{ debug ? 'debug' : ''}}
{{ mockError ? 'mockerror' : ''}}
></altcha-widget>
{% endblock %}

View File

@ -1,19 +1,21 @@
<!DOCTYPE html>
<html lang="{{app.request.session.get('_locale') is not null ? app.request.session.get('_locale') : 'fr'}}">
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}
{{ encore_entry_link_tags('app') }}
{{ encore_entry_link_tags('bootstrap-css') }}
{{ encore_entry_link_tags('app', null, 'appConfig') }}
{{ encore_entry_link_tags('bootstrap-css', null, 'appConfig') }}
{{ encore_entry_link_tags('theme', null, 'themeConfig') }}
{% endblock %}
</head>
<body>
{% block body %}{% endblock %}
{% block javascripts %}
{{ encore_entry_script_tags('app') }}
{{ encore_entry_script_tags('bootstrap-js') }}
{{ encore_entry_script_tags('app', null, 'appConfig') }}
{{ encore_entry_script_tags('bootstrap-js', null, 'appConfig') }}
{{ encore_entry_script_tags('theme', null, 'themeConfig') }}
{% endblock %}
</body>
</html>

View File

@ -6,23 +6,23 @@
{% block body %}
<div class="login-wrapper">
<div class="login">
{% if app.user %}
<div class="mb-3">
You are logged in as {{ app.user.login }}
{% if app.user %}
<div class="mb-3">
You are logged in as {{ app.user.login }}
</div>
{% endif %}
<div class="lang">
{% for locale in locales %}
<a href="{{ path('locale_change', {'locale':locale }) }}" title="{{locale}}" aria-label="{{locale}}" class="flag"><img class="w-10" src="{{ asset('flags/'~ locale ~'.svg') }}"/></a>
{% endfor %}
</div>
{% endif %}
<div class="lang">
{% for locale in locales %}
<a href="{{ path('locale_change', {'locale':locale }) }}" title="{{locale}}" aria-label="{{locale}}" class="flag"><img class="w-10" src="{{ asset('flags/'~ locale ~'.svg') }}"/></a>
{% endfor %}
</div>
<h1 class="h3 mb-3 font-weight-normal">{% trans from 'view' %} sign_in {% endtrans %}</h1>
{{form_start(loginForm)}}
{{form_widget(loginForm)}}
<h1 class="h3 mb-3 font-weight-normal">{% trans from 'view' %} sign_in {% endtrans %}</h1>
{{form_start(loginForm)}}
{{form_widget(loginForm)}}
<button class="btn btn-lg btn-primary" type="submit">
{% trans from 'view' %} submit {% endtrans %}
</button>
{{form_end(loginForm)}}
{{form_end(loginForm)}}
</div>
</div>

View File

3
tools/php-cs-fixer/.php-cs-fixer.dist.php Executable file → Normal file
View File

@ -5,6 +5,8 @@ $finder = PhpCsFixer\Finder::create()
->name('*.php')
;
// TODO: Définir les règles de style communes
// spécifiques au projet
return (new PhpCsFixer\Config())
->setRules([
'@Symfony' => true,
@ -20,7 +22,6 @@ return (new PhpCsFixer\Config())
'ternary_operator_spaces' => true,
'class_definition' => ['single_line' => true],
'whitespace_after_comma_in_array' => true,
'trailing_comma_in_multiline' => true,
// phpdoc
'phpdoc_add_missing_param_annotation' => ['only_untyped' => true],

View File

@ -7,47 +7,15 @@
<body>
<trans-unit id="4Lw8Y4y" resname="form.label.login">
<source>form.label.login</source>
<target>Email address *</target>
<target>login</target>
</trans-unit>
<trans-unit id="RmsDr53" resname="form.label.password">
<source>form.label.password</source>
<target>Password *</target>
<target>Password</target>
</trans-unit>
<trans-unit id="4kfMq14" resname="altcha.validator.server_validation_error">
<source>altcha.validator.server_validation_error</source>
<target>Verification failed. Try again later.</target>
</trans-unit>
<trans-unit id="7mZdXx_" resname="altcha.widget.error">
<source>altcha.widget.error</source>
<target>Verification failed. Try again later.</target>
</trans-unit>
<trans-unit id="Yg33QZt" resname="altcha.widget.expired">
<source>altcha.widget.expired</source>
<target>Verification expired. Try again.</target>
</trans-unit>
<trans-unit id="3y0.Bhb" resname="altcha.widget.label">
<source>altcha.widget.label</source>
<target>I'm not a robot</target>
</trans-unit>
<trans-unit id="QFBWtGD" resname="altcha.widget.verified">
<source>altcha.widget.verified</source>
<target>Verified</target>
</trans-unit>
<trans-unit id="SfOrgtj" resname="altcha.widget.verifying">
<source>altcha.widget.verifying</source>
<target>Verifying...</target>
</trans-unit>
<trans-unit id="9dhbPuz" resname="altcha.widget.waitalert">
<source>altcha.widget.waitalert</source>
<target>Verifying... please wait.</target>
</trans-unit>
<trans-unit id="9k5hI.D" resname="altcha.widget.title">
<source>altcha.widget.title</source>
<target>Verification *</target>
</trans-unit>
<trans-unit id="vGcy2C3" resname="altcha.widget.info">
<source>altcha.widget.info</source>
<target>Please check the box above to validate that you are not a robot. If you encounter any problem while doing this, please update your browser.</target>
<trans-unit id="t17Vcvs" resname="form.label.remember_me">
<source>form.label.remember_me</source>
<target>Remember me</target>
</trans-unit>
</body>
</file>

View File

@ -7,47 +7,15 @@
<body>
<trans-unit id="4Lw8Y4y" resname="form.label.login">
<source>form.label.login</source>
<target>Adresse courriel *</target>
<target>login</target>
</trans-unit>
<trans-unit id="RmsDr53" resname="form.label.password">
<source>form.label.password</source>
<target>Mot de passe *</target>
<target>Mot de passe</target>
</trans-unit>
<trans-unit id="4kfMq14" resname="altcha.validator.server_validation_error">
<source>altcha.validator.server_validation_error</source>
<target>Échec de la vérification. Réessayez plus tard.</target>
</trans-unit>
<trans-unit id="7mZdXx_" resname="altcha.widget.error">
<source>altcha.widget.error</source>
<target>Échec de la vérification. Réesayez plus tard.</target>
</trans-unit>
<trans-unit id="Yg33QZt" resname="altcha.widget.expired">
<source>altcha.widget.expired</source>
<target>Vérification expirée. Réessayez.</target>
</trans-unit>
<trans-unit id="3y0.Bhb" resname="altcha.widget.label">
<source>altcha.widget.label</source>
<target>Je ne suis pas un robot</target>
</trans-unit>
<trans-unit id="QFBWtGD" resname="altcha.widget.verified">
<source>altcha.widget.verified</source>
<target>Vérifié</target>
</trans-unit>
<trans-unit id="SfOrgtj" resname="altcha.widget.verifying">
<source>altcha.widget.verifying</source>
<target>Vérification en cours...</target>
</trans-unit>
<trans-unit id="9dhbPuz" resname="altcha.widget.waitalert">
<source>altcha.widget.waitalert</source>
<target>Vérification en cours... veuillez patienter.</target>
</trans-unit>
<trans-unit id="9k5hI.D" resname="altcha.widget.title">
<source>altcha.widget.title</source>
<target>Vérification *</target>
</trans-unit>
<trans-unit id="vGcy2C3" resname="altcha.widget.info">
<source>altcha.widget.info</source>
<target>Veuillez cocher la case ci dessus afin de valider que vous n'êtes pas un robot. Si vous rencontrez un problème lors de cette action, mettez à jour votre navigateur.</target>
<trans-unit id="t17Vcvs" resname="form.label.remember_me">
<source>form.label.remember_me</source>
<target>Se souvenir de moi</target>
</trans-unit>
</body>
</file>

View File

@ -6,19 +6,14 @@ if (!Encore.isRuntimeEnvironmentConfigured()) {
Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev');
}
const basePath = process.env.BASE_PATH || ''
const imagesPath = Encore.isProduction() ? 'images/[path][name].[hash:8].[ext]' : 'images/[path][name].[ext]';
const fontsPath = Encore.isProduction() ? 'fonts/[path][name].[hash:8].[ext]' : 'fonts/[path][name].[ext]';
// Definition de AppConfig
Encore
// directory where compiled assets will be stored
.setOutputPath('public/build/')
.setOutputPath('public/build/app/')
// public path used by the web server to access the output path
.setPublicPath(basePath + '/build/')
.setPublicPath('/build/app')
// only needed for CDN's or sub-directory deploy
.setManifestKeyPrefix('build')
//.setManifestKeyPrefix('build/')
/*
* ENTRY CONFIG
@ -29,23 +24,9 @@ Encore
.addEntry('app', './assets/app.js')
.addEntry('bootstrap-css', './assets/styles/bootstrap.scss')
.addEntry('bootstrap-js', './assets/app-bootstrap.js')
.addEntry('theme','./assets/theme-entrypoint.js')
.copyFiles({
from: './assets/images',
to: imagesPath,
})
.copyFiles({
from: './assets/fonts',
to: fontsPath,
})
.configureImageRule({
type: 'asset',
})
.configureFontRule({
type: 'asset',
})
// enables the Symfony UX Stimulus bridge (used in assets/bootstrap.js)
.enableStimulusBridge('./assets/controllers.json')
// When enabled, Webpack "splits" your files into smaller pieces for greater optimization.
.splitEntryChunks()
@ -65,10 +46,10 @@ Encore
.enableBuildNotifications()
.enableSourceMaps(!Encore.isProduction())
// enables hashed filenames (e.g. app.abc123.css)
.enableVersioning(Encore.isProduction())
.enableVersioning(!Encore.isProduction())
.configureBabel((config) => {
config.plugins.push('@babel/plugin-transform-class-properties');
config.plugins.push('@babel/plugin-proposal-class-properties');
})
// enables @babel/preset-env polyfills
@ -79,6 +60,37 @@ Encore
.enablePostCssLoader()
.autoProvidejQuery()
.enableSassLoader()
;
module.exports = Encore.getWebpackConfig();
// build the first configuration
const appConfig = Encore.getWebpackConfig();
// Set a unique name for the config (needed later!)
appConfig.name = 'appConfig';
// reset Encore to build the second config
Encore.reset();
// Definition de themeConfig
Encore
// directory where compiled assets will be stored
.setOutputPath('public/build/theme/')
// public path used by the web server to access the output path
.setPublicPath('/build/theme')
.addEntry('theme','./public/theme-entrypoint.js')
.splitEntryChunks()
.enableSingleRuntimeChunk()
.enableBuildNotifications()
.enableSourceMaps(false)
.enableVersioning(false)
.enablePostCssLoader()
;
// build the second configuration
const themeConfig = Encore.getWebpackConfig();
// Set a unique name for the config (needed later!)
themeConfig.name = 'themeConfig';
;
// export the final configuration as an array of multiple configurations
module.exports = [appConfig, themeConfig];