Release 2.61 (#5990)

This commit is contained in:
Kevin Papst
2026-06-17 07:27:57 +02:00
committed by GitHub
parent 7f716fa2d6
commit f8bc853d2f
14 changed files with 310 additions and 157 deletions

View File

@@ -98,6 +98,7 @@
"symfony/css-selector": "^6.0", "symfony/css-selector": "^6.0",
"symfony/debug-bundle": "^6.0", "symfony/debug-bundle": "^6.0",
"symfony/dom-crawler": "^6.0", "symfony/dom-crawler": "^6.0",
"symfony/maker-bundle": "^1.67",
"symfony/phpunit-bridge": "^6.0", "symfony/phpunit-bridge": "^6.0",
"symfony/stopwatch": "^6.0", "symfony/stopwatch": "^6.0",
"symfony/var-dumper": "^6.0", "symfony/var-dumper": "^6.0",

225
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "3a36f355f322598267719beb6a7c22e0", "content-hash": "ccb50983df5715995863ee9aa6d53de2",
"packages": [ "packages": [
{ {
"name": "azuyalabs/yasumi", "name": "azuyalabs/yasumi",
@@ -135,28 +135,29 @@
}, },
{ {
"name": "composer/pcre", "name": "composer/pcre",
"version": "3.3.2", "version": "3.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/composer/pcre.git", "url": "https://github.com/composer/pcre.git",
"reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" "reference": "d5a341b3fb61f3001970940afb1d332968a183ed"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed",
"reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "reference": "d5a341b3fb61f3001970940afb1d332968a183ed",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.4 || ^8.0" "php": "^7.4 || ^8.0"
}, },
"conflict": { "conflict": {
"phpstan/phpstan": "<1.11.10" "phpstan/phpstan": "<2.2.2"
}, },
"require-dev": { "require-dev": {
"phpstan/phpstan": "^1.12 || ^2", "phpstan/phpstan": "^2",
"phpstan/phpstan-strict-rules": "^1 || ^2", "phpstan/phpstan-deprecation-rules": "^2",
"phpunit/phpunit": "^8 || ^9" "phpstan/phpstan-strict-rules": "^2",
"phpunit/phpunit": "^9"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -194,7 +195,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/composer/pcre/issues", "issues": "https://github.com/composer/pcre/issues",
"source": "https://github.com/composer/pcre/tree/3.3.2" "source": "https://github.com/composer/pcre/tree/3.4.0"
}, },
"funding": [ "funding": [
{ {
@@ -204,13 +205,9 @@
{ {
"url": "https://github.com/composer", "url": "https://github.com/composer",
"type": "github" "type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
} }
], ],
"time": "2024-11-12T16:29:46+00:00" "time": "2026-06-07T11:47:49+00:00"
}, },
{ {
"name": "composer/semver", "name": "composer/semver",
@@ -774,16 +771,16 @@
}, },
{ {
"name": "doctrine/doctrine-bundle", "name": "doctrine/doctrine-bundle",
"version": "2.18.2", "version": "2.18.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/DoctrineBundle.git", "url": "https://github.com/doctrine/DoctrineBundle.git",
"reference": "0ff098b29b8b3c68307c8987dcaed7fd829c6546" "reference": "241d61f6bbc77275d5a9f95d514241c058bf2d0a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/0ff098b29b8b3c68307c8987dcaed7fd829c6546", "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/241d61f6bbc77275d5a9f95d514241c058bf2d0a",
"reference": "0ff098b29b8b3c68307c8987dcaed7fd829c6546", "reference": "241d61f6bbc77275d5a9f95d514241c058bf2d0a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -820,6 +817,7 @@
"psr/log": "^1.1.4 || ^2.0 || ^3.0", "psr/log": "^1.1.4 || ^2.0 || ^3.0",
"symfony/doctrine-messenger": "^6.4 || ^7.0", "symfony/doctrine-messenger": "^6.4 || ^7.0",
"symfony/expression-language": "^6.4 || ^7.0", "symfony/expression-language": "^6.4 || ^7.0",
"symfony/http-kernel": "^6.4 || ^7.0",
"symfony/messenger": "^6.4 || ^7.0", "symfony/messenger": "^6.4 || ^7.0",
"symfony/property-info": "^6.4 || ^7.0", "symfony/property-info": "^6.4 || ^7.0",
"symfony/security-bundle": "^6.4 || ^7.0", "symfony/security-bundle": "^6.4 || ^7.0",
@@ -875,7 +873,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/doctrine/DoctrineBundle/issues", "issues": "https://github.com/doctrine/DoctrineBundle/issues",
"source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.2" "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.3"
}, },
"funding": [ "funding": [
{ {
@@ -891,7 +889,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-12-20T21:35:32+00:00" "time": "2026-06-08T08:22:50+00:00"
}, },
{ {
"name": "doctrine/doctrine-migrations-bundle", "name": "doctrine/doctrine-migrations-bundle",
@@ -5187,16 +5185,16 @@
}, },
{ {
"name": "setasign/fpdi", "name": "setasign/fpdi",
"version": "v2.6.7", "version": "v2.6.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Setasign/FPDI.git", "url": "https://github.com/Setasign/FPDI.git",
"reference": "388c51e69982a3fc16698710b763e8107a49f510" "reference": "881945be29a4996ad3d008eb18ddc01fa3df890c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Setasign/FPDI/zipball/388c51e69982a3fc16698710b763e8107a49f510", "url": "https://api.github.com/repos/Setasign/FPDI/zipball/881945be29a4996ad3d008eb18ddc01fa3df890c",
"reference": "388c51e69982a3fc16698710b763e8107a49f510", "reference": "881945be29a4996ad3d008eb18ddc01fa3df890c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -5208,7 +5206,7 @@
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^8.5.52", "phpunit/phpunit": "^8.5.52",
"setasign/fpdf": "~1.8.6", "setasign/fpdf": "^1.9.0",
"setasign/tfpdf": "~1.33", "setasign/tfpdf": "~1.33",
"squizlabs/php_codesniffer": "^3.5", "squizlabs/php_codesniffer": "^3.5",
"tecnickcom/tcpdf": "^6.8" "tecnickcom/tcpdf": "^6.8"
@@ -5247,7 +5245,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/Setasign/FPDI/issues", "issues": "https://github.com/Setasign/FPDI/issues",
"source": "https://github.com/Setasign/FPDI/tree/v2.6.7" "source": "https://github.com/Setasign/FPDI/tree/v2.6.8"
}, },
"funding": [ "funding": [
{ {
@@ -5255,7 +5253,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2026-05-13T10:16:22+00:00" "time": "2026-06-11T10:37:24+00:00"
}, },
{ {
"name": "smalot/pdfparser", "name": "smalot/pdfparser",
@@ -8028,16 +8026,16 @@
}, },
{ {
"name": "symfony/polyfill-php83", "name": "symfony/polyfill-php83",
"version": "v1.38.1", "version": "v1.38.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-php83.git", "url": "https://github.com/symfony/polyfill-php83.git",
"reference": "8339098cae28673c15cce00d80734af0453054e2" "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/8339098cae28673c15cce00d80734af0453054e2", "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/796a26abb75ce49f3a84433cd81bf1009d73d5f8",
"reference": "8339098cae28673c15cce00d80734af0453054e2", "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -8084,7 +8082,7 @@
"shim" "shim"
], ],
"support": { "support": {
"source": "https://github.com/symfony/polyfill-php83/tree/v1.38.1" "source": "https://github.com/symfony/polyfill-php83/tree/v1.38.2"
}, },
"funding": [ "funding": [
{ {
@@ -8104,7 +8102,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2026-05-26T12:51:13+00:00" "time": "2026-05-27T06:51:48+00:00"
}, },
{ {
"name": "symfony/polyfill-php84", "name": "symfony/polyfill-php84",
@@ -10749,16 +10747,16 @@
}, },
{ {
"name": "webmozart/assert", "name": "webmozart/assert",
"version": "2.4.0", "version": "2.4.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/webmozarts/assert.git", "url": "https://github.com/webmozarts/assert.git",
"reference": "9007ea6f45ecf352a9422b36644e4bfc039b9155" "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/9007ea6f45ecf352a9422b36644e4bfc039b9155", "url": "https://api.github.com/repos/webmozarts/assert/zipball/2ccb7c2e821038c03a3e6e1700c570c158c55f70",
"reference": "9007ea6f45ecf352a9422b36644e4bfc039b9155", "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -10809,9 +10807,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/webmozarts/assert/issues", "issues": "https://github.com/webmozarts/assert/issues",
"source": "https://github.com/webmozarts/assert/tree/2.4.0" "source": "https://github.com/webmozarts/assert/tree/2.4.1"
}, },
"time": "2026-05-20T13:07:01+00:00" "time": "2026-06-15T15:31:57+00:00"
}, },
{ {
"name": "willdurand/jsonp-callback-validator", "name": "willdurand/jsonp-callback-validator",
@@ -11617,16 +11615,16 @@
}, },
{ {
"name": "friendsofphp/php-cs-fixer", "name": "friendsofphp/php-cs-fixer",
"version": "v3.95.4", "version": "v3.95.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
"reference": "3f8f68856837a77e1f1d870354eca3c8747f2f72" "reference": "4140023f552ff02346df9b1329742532166f677f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/3f8f68856837a77e1f1d870354eca3c8747f2f72", "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/4140023f552ff02346df9b1329742532166f677f",
"reference": "3f8f68856837a77e1f1d870354eca3c8747f2f72", "reference": "4140023f552ff02346df9b1329742532166f677f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -11644,7 +11642,7 @@
"react/event-loop": "^1.5", "react/event-loop": "^1.5",
"react/socket": "^1.16", "react/socket": "^1.16",
"react/stream": "^1.4", "react/stream": "^1.4",
"sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0", "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0 || ^9.0",
"symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
@@ -11660,16 +11658,16 @@
"require-dev": { "require-dev": {
"facile-it/paraunit": "^1.3.1 || ^2.11.0", "facile-it/paraunit": "^1.3.1 || ^2.11.0",
"infection/infection": "^0.32.7", "infection/infection": "^0.32.7",
"justinrainbow/json-schema": "^6.8.0", "justinrainbow/json-schema": "^6.9.0",
"keradus/cli-executor": "^2.3", "keradus/cli-executor": "^2.3",
"mikey179/vfsstream": "^1.6.12", "mikey179/vfsstream": "^1.6.12",
"php-coveralls/php-coveralls": "^2.9.1", "php-coveralls/php-coveralls": "^2.9.1",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.8", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.8",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.8", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.8",
"phpunit/phpunit": "^9.6.34 || ^10.5.63 || ^11.5.55", "phpunit/phpunit": "^9.6.34 || ^10.5.63 || ^11.5.55",
"symfony/polyfill-php85": "^1.37", "symfony/polyfill-php85": "^1.38",
"symfony/var-dumper": "^5.4.48 || ^6.4.32 || ^7.4.4 || ^8.0.8", "symfony/var-dumper": "^5.4.48 || ^6.4.36 || ^7.4.8 || ^8.1.0",
"symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0.11" "symfony/yaml": "^5.4.53 || ^6.4.41 || ^7.4.13 || ^8.1.0"
}, },
"suggest": { "suggest": {
"ext-dom": "For handling output formats in XML", "ext-dom": "For handling output formats in XML",
@@ -11710,7 +11708,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.4" "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.8"
}, },
"funding": [ "funding": [
{ {
@@ -11718,7 +11716,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2026-06-03T18:02:44+00:00" "time": "2026-06-16T09:52:26+00:00"
}, },
{ {
"name": "masterminds/html5", "name": "masterminds/html5",
@@ -12021,21 +12019,21 @@
}, },
{ {
"name": "phpstan/phpstan-doctrine", "name": "phpstan/phpstan-doctrine",
"version": "2.0.25", "version": "2.0.27",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpstan-doctrine.git", "url": "https://github.com/phpstan/phpstan-doctrine.git",
"reference": "e20e8bf3223ae6eba9c4b5987c391d922e094b3c" "reference": "39b4ca45a07cdd6366eeefa2f7a993cddf3b9f9f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/e20e8bf3223ae6eba9c4b5987c391d922e094b3c", "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/39b4ca45a07cdd6366eeefa2f7a993cddf3b9f9f",
"reference": "e20e8bf3223ae6eba9c4b5987c391d922e094b3c", "reference": "39b4ca45a07cdd6366eeefa2f7a993cddf3b9f9f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.4 || ^8.0", "php": "^7.4 || ^8.0",
"phpstan/phpstan": "^2.1.34" "phpstan/phpstan": "^2.2.2"
}, },
"conflict": { "conflict": {
"doctrine/collections": "<1.0", "doctrine/collections": "<1.0",
@@ -12092,9 +12090,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/phpstan/phpstan-doctrine/issues", "issues": "https://github.com/phpstan/phpstan-doctrine/issues",
"source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.25" "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.27"
}, },
"time": "2026-06-02T20:27:36+00:00" "time": "2026-06-10T10:39:35+00:00"
}, },
{ {
"name": "phpstan/phpstan-phpunit", "name": "phpstan/phpstan-phpunit",
@@ -12205,16 +12203,16 @@
}, },
{ {
"name": "phpstan/phpstan-symfony", "name": "phpstan/phpstan-symfony",
"version": "2.0.19", "version": "2.0.20",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpstan-symfony.git", "url": "https://github.com/phpstan/phpstan-symfony.git",
"reference": "546071ed7f80a89ec30909346eb7cc741800740a" "reference": "53f1a6462dbe71fad36ce054caf5e1b725b740fd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/546071ed7f80a89ec30909346eb7cc741800740a", "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/53f1a6462dbe71fad36ce054caf5e1b725b740fd",
"reference": "546071ed7f80a89ec30909346eb7cc741800740a", "reference": "53f1a6462dbe71fad36ce054caf5e1b725b740fd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -12273,9 +12271,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/phpstan/phpstan-symfony/issues", "issues": "https://github.com/phpstan/phpstan-symfony/issues",
"source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.19" "source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.20"
}, },
"time": "2026-05-29T12:52:44+00:00" "time": "2026-06-16T09:17:35+00:00"
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
@@ -14407,6 +14405,105 @@
], ],
"time": "2026-05-19T20:33:22+00:00" "time": "2026-05-19T20:33:22+00:00"
}, },
{
"name": "symfony/maker-bundle",
"version": "v1.67.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/maker-bundle.git",
"reference": "6ce8b313845f16bcf385ee3cb31d8b24e30d5516"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/6ce8b313845f16bcf385ee3cb31d8b24e30d5516",
"reference": "6ce8b313845f16bcf385ee3cb31d8b24e30d5516",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2.1",
"doctrine/inflector": "^2.0",
"nikic/php-parser": "^5.0",
"php": ">=8.1",
"symfony/config": "^6.4|^7.0|^8.0",
"symfony/console": "^6.4|^7.0|^8.0",
"symfony/dependency-injection": "^6.4|^7.0|^8.0",
"symfony/deprecation-contracts": "^2.2|^3",
"symfony/filesystem": "^6.4|^7.0|^8.0",
"symfony/finder": "^6.4|^7.0|^8.0",
"symfony/framework-bundle": "^6.4|^7.0|^8.0",
"symfony/http-kernel": "^6.4|^7.0|^8.0",
"symfony/process": "^6.4|^7.0|^8.0"
},
"conflict": {
"doctrine/doctrine-bundle": "<2.10",
"doctrine/orm": "<2.15"
},
"require-dev": {
"composer/semver": "^3.0",
"doctrine/doctrine-bundle": "^2.10|^3.0",
"doctrine/orm": "^2.15|^3",
"doctrine/persistence": "^3.1|^4.0",
"symfony/http-client": "^6.4|^7.0|^8.0",
"symfony/phpunit-bridge": "^6.4.1|^7.0|^8.0",
"symfony/security-core": "^6.4|^7.0|^8.0",
"symfony/security-http": "^6.4|^7.0|^8.0",
"symfony/yaml": "^6.4|^7.0|^8.0",
"twig/twig": "^3.0|^4.x-dev"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-main": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\MakerBundle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.",
"homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html",
"keywords": [
"code generator",
"dev",
"generator",
"scaffold",
"scaffolding"
],
"support": {
"issues": "https://github.com/symfony/maker-bundle/issues",
"source": "https://github.com/symfony/maker-bundle/tree/v1.67.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2026-03-18T13:39:06+00:00"
},
{ {
"name": "symfony/phpunit-bridge", "name": "symfony/phpunit-bridge",
"version": "v6.4.35", "version": "v6.4.35",

View File

@@ -19,4 +19,5 @@ return [
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
KevinPapst\TablerBundle\TablerBundle::class => ['all' => true], KevinPapst\TablerBundle\TablerBundle::class => ['all' => true],
Scheb\TwoFactorBundle\SchebTwoFactorBundle::class => ['all' => true], Scheb\TwoFactorBundle\SchebTwoFactorBundle::class => ['all' => true],
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
]; ];

View File

@@ -74,6 +74,7 @@ security:
login_link: login_link:
check_route: link_login_check check_route: link_login_check
lifetime: 900 lifetime: 900
login_path: login
max_uses: 3 max_uses: 3
# 'password' binds the HMAC signature to the password hash, so a # 'password' binds the HMAC signature to the password hash, so a
# link becomes invalid as soon as the user changes the password # link becomes invalid as soon as the user changes the password
@@ -93,6 +94,8 @@ security:
access_control: access_control:
- {path: '^/auth/2fa', role: IS_AUTHENTICATED_2FA_IN_PROGRESS} - {path: '^/auth/2fa', role: IS_AUTHENTICATED_2FA_IN_PROGRESS}
- {path: '^/auth', roles: PUBLIC_ACCESS} - {path: '^/auth', roles: PUBLIC_ACCESS}
- {path: '^/login', roles: PUBLIC_ACCESS}
- {path: '^/logout', roles: PUBLIC_ACCESS}
- {path: '^/{_locale}$', role: PUBLIC_ACCESS} - {path: '^/{_locale}$', role: PUBLIC_ACCESS}
- {path: '^/{_locale}/auth', role: PUBLIC_ACCESS} - {path: '^/{_locale}/auth', role: PUBLIC_ACCESS}
- {path: '^/{_locale}/login', role: PUBLIC_ACCESS} - {path: '^/{_locale}/login', role: PUBLIC_ACCESS}

View File

@@ -46,6 +46,24 @@ homeLocale:
route: homepage route: homepage
permanent: true permanent: true
# SF DefaultAuthenticationSuccessHandler uses /login as default target
loginFallback:
path: /login
defaults:
_controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction
_locale: '%locale%'
route: login
permanent: true
# SF LogoutListener uses /logout as default target
logoutFallback:
path: /logout
defaults:
_controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction
_locale: '%locale%'
route: logout
permanent: true
2fa_login: 2fa_login:
path: /{_locale}/auth/2fa path: /{_locale}/auth/2fa
defaults: defaults:

View File

@@ -42,14 +42,14 @@
"bootstrap": "^5.3.8", "bootstrap": "^5.3.8",
"chart.js": "^4.5.1", "chart.js": "^4.5.1",
"core-js": "^3.49.0", "core-js": "^3.49.0",
"dompurify": "^3.4.7", "dompurify": "^3.4.10",
"eslint": "^9.39.4", "eslint": "^9.39.4",
"globals": "^15.15.0", "globals": "^15.15.0",
"gridstack": "^7.3.0", "gridstack": "^7.3.0",
"highlight.js": "^11.11.1", "highlight.js": "^11.11.1",
"litepicker": "^2.0.12", "litepicker": "^2.0.12",
"luxon": "^3.7.2", "luxon": "^3.7.2",
"sass": "^1.100.0", "sass": "^1.101.0",
"sass-loader": "^16.0.8", "sass-loader": "^16.0.8",
"tom-select": "2.5.2", "tom-select": "2.5.2",
"webpack": "^5.107.2", "webpack": "^5.107.2",

165
pnpm-lock.yaml generated
View File

@@ -52,7 +52,7 @@ importers:
version: 2.11.8 version: 2.11.8
'@symfony/webpack-encore': '@symfony/webpack-encore':
specifier: ^6.0.0 specifier: ^6.0.0
version: 6.0.0(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(postcss@8.5.15)(sass-loader@16.0.8(sass@1.100.0)(webpack@5.107.2))(sass@1.100.0)(webpack-cli@6.0.1)(webpack@5.107.2) version: 6.0.0(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(postcss@8.5.15)(sass-loader@16.0.8(sass@1.101.0)(webpack@5.107.2))(sass@1.101.0)(webpack-cli@6.0.1)(webpack@5.107.2)
'@tabler/core': '@tabler/core':
specifier: ^1.4.0 specifier: ^1.4.0
version: 1.4.0 version: 1.4.0
@@ -66,8 +66,8 @@ importers:
specifier: ^3.49.0 specifier: ^3.49.0
version: 3.49.0 version: 3.49.0
dompurify: dompurify:
specifier: ^3.4.7 specifier: ^3.4.10
version: 3.4.7 version: 3.4.10
eslint: eslint:
specifier: ^9.39.4 specifier: ^9.39.4
version: 9.39.4 version: 9.39.4
@@ -87,11 +87,11 @@ importers:
specifier: ^3.7.2 specifier: ^3.7.2
version: 3.7.2 version: 3.7.2
sass: sass:
specifier: ^1.100.0 specifier: ^1.101.0
version: 1.100.0 version: 1.101.0
sass-loader: sass-loader:
specifier: ^16.0.8 specifier: ^16.0.8
version: 16.0.8(sass@1.100.0)(webpack@5.107.2) version: 16.0.8(sass@1.101.0)(webpack@5.107.2)
tom-select: tom-select:
specifier: 2.5.2 specifier: 2.5.2
version: 2.5.2 version: 2.5.2
@@ -945,8 +945,8 @@ packages:
'@types/json-schema@7.0.15': '@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/node@25.9.1': '@types/node@25.9.3':
resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} resolution: {integrity: sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==}
'@types/trusted-types@2.0.7': '@types/trusted-types@2.0.7':
resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
@@ -1047,8 +1047,8 @@ packages:
peerDependencies: peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
acorn@8.16.0: acorn@8.17.0:
resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
hasBin: true hasBin: true
@@ -1117,8 +1117,8 @@ packages:
balanced-match@1.0.2: balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
baseline-browser-mapping@2.10.33: baseline-browser-mapping@2.10.37:
resolution: {integrity: sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==} resolution: {integrity: sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
hasBin: true hasBin: true
@@ -1156,8 +1156,8 @@ packages:
caniuse-api@3.0.0: caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
caniuse-lite@1.0.30001793: caniuse-lite@1.0.30001799:
resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==}
chalk@4.1.2: chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -1351,8 +1351,8 @@ packages:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'} engines: {node: '>= 4'}
dompurify@3.4.7: dompurify@3.4.10:
resolution: {integrity: sha512-2jBxDJY4RR06tQNy4w5FlFH7kfxsQZlufd0sbv+chfHCxeJwrFw2baUDsSwvBISD4K4RDbd0PTfy3uNXsR6siA==} resolution: {integrity: sha512-0xzNv0e7oYC6yyuOGZIABPM4qtg3QxLFniDNPP4ZP90wR8Yq3zgwpRbrNiT4N3IKqDbbYFEJLV+JWEs19aZ//w==}
domutils@2.8.0: domutils@2.8.0:
resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
@@ -1360,8 +1360,8 @@ packages:
domutils@3.2.2: domutils@3.2.2:
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
electron-to-chromium@1.5.364: electron-to-chromium@1.5.374:
resolution: {integrity: sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==} resolution: {integrity: sha512-HCF5i7izveksHSGqa7mhDh6tr3Uz9Dar2RAjwuh69bw3QGPVObjQIgLwQWeO/Rxp9/r0KdboKy9RbpQDl97fjg==}
emoji-regex@8.0.0: emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -1370,8 +1370,8 @@ packages:
resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
engines: {node: '>= 4'} engines: {node: '>= 4'}
enhanced-resolve@5.22.1: enhanced-resolve@5.24.0:
resolution: {integrity: sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==} resolution: {integrity: sha512-SkE2t82KlkkxQRVMVLAGKxLfORGQfrkx5dkj+vlgXRVNEdPc4eZcR+J/Fvj8C+yKSFH5L0q3NFlyufOVQnCcYQ==}
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
entities@2.2.0: entities@2.2.0:
@@ -1744,8 +1744,8 @@ packages:
node-addon-api@7.1.1: node-addon-api@7.1.1:
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
node-releases@2.0.46: node-releases@2.0.47:
resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==}
engines: {node: '>=18'} engines: {node: '>=18'}
nth-check@2.1.1: nth-check@2.1.1:
@@ -1975,8 +1975,8 @@ packages:
peerDependencies: peerDependencies:
postcss: ^8.5.13 postcss: ^8.5.13
postcss-selector-parser@7.1.1: postcss-selector-parser@7.1.4:
resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==}
engines: {node: '>=4'} engines: {node: '>=4'}
postcss-svgo@7.1.3: postcss-svgo@7.1.3:
@@ -2037,8 +2037,8 @@ packages:
regjsgen@0.8.0: regjsgen@0.8.0:
resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
regjsparser@0.13.1: regjsparser@0.13.2:
resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} resolution: {integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==}
hasBin: true hasBin: true
renderkid@3.0.0: renderkid@3.0.0:
@@ -2090,8 +2090,8 @@ packages:
webpack: webpack:
optional: true optional: true
sass@1.100.0: sass@1.101.0:
resolution: {integrity: sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==} resolution: {integrity: sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw==}
engines: {node: '>=20.19.0'} engines: {node: '>=20.19.0'}
hasBin: true hasBin: true
@@ -2107,8 +2107,8 @@ packages:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true hasBin: true
semver@7.8.1: semver@7.8.4:
resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==}
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
@@ -2286,8 +2286,8 @@ packages:
utila@0.4.0: utila@0.4.0:
resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==}
watchpack@2.5.1: watchpack@2.5.2:
resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} resolution: {integrity: sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==}
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
webpack-cli@6.0.1: webpack-cli@6.0.1:
@@ -3143,7 +3143,7 @@ snapshots:
'@jest/pattern@30.4.0': '@jest/pattern@30.4.0':
dependencies: dependencies:
'@types/node': 25.9.1 '@types/node': 25.9.3
jest-regex-util: 30.4.0 jest-regex-util: 30.4.0
'@jest/schemas@30.4.1': '@jest/schemas@30.4.1':
@@ -3156,7 +3156,7 @@ snapshots:
'@jest/schemas': 30.4.1 '@jest/schemas': 30.4.1
'@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4 '@types/istanbul-reports': 3.0.4
'@types/node': 25.9.1 '@types/node': 25.9.3
'@types/yargs': 17.0.35 '@types/yargs': 17.0.35
chalk: 4.1.2 chalk: 4.1.2
@@ -3269,7 +3269,7 @@ snapshots:
'@sinclair/typebox@0.34.49': {} '@sinclair/typebox@0.34.49': {}
'@symfony/webpack-encore@6.0.0(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(postcss@8.5.15)(sass-loader@16.0.8(sass@1.100.0)(webpack@5.107.2))(sass@1.100.0)(webpack-cli@6.0.1)(webpack@5.107.2)': '@symfony/webpack-encore@6.0.0(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(postcss@8.5.15)(sass-loader@16.0.8(sass@1.101.0)(webpack@5.107.2))(sass@1.101.0)(webpack-cli@6.0.1)(webpack@5.107.2)':
dependencies: dependencies:
'@babel/core': 7.29.7 '@babel/core': 7.29.7
'@babel/preset-env': 7.29.7(@babel/core@7.29.7) '@babel/preset-env': 7.29.7(@babel/core@7.29.7)
@@ -3282,7 +3282,7 @@ snapshots:
picocolors: 1.1.1 picocolors: 1.1.1
pretty-error: 4.0.0 pretty-error: 4.0.0
resolve-url-loader: 5.0.0 resolve-url-loader: 5.0.0
semver: 7.8.1 semver: 7.8.4
style-loader: 4.0.0(webpack@5.107.2) style-loader: 4.0.0(webpack@5.107.2)
tapable: 2.3.3 tapable: 2.3.3
terser-webpack-plugin: 5.6.1(postcss@8.5.15)(webpack@5.107.2) terser-webpack-plugin: 5.6.1(postcss@8.5.15)(webpack@5.107.2)
@@ -3293,8 +3293,8 @@ snapshots:
yargs-parser: 21.1.1 yargs-parser: 21.1.1
optionalDependencies: optionalDependencies:
postcss: 8.5.15 postcss: 8.5.15
sass: 1.100.0 sass: 1.101.0
sass-loader: 16.0.8(sass@1.100.0)(webpack@5.107.2) sass-loader: 16.0.8(sass@1.101.0)(webpack@5.107.2)
transitivePeerDependencies: transitivePeerDependencies:
- '@minify-html/node' - '@minify-html/node'
- '@parcel/css' - '@parcel/css'
@@ -3329,7 +3329,7 @@ snapshots:
'@types/json-schema@7.0.15': {} '@types/json-schema@7.0.15': {}
'@types/node@25.9.1': '@types/node@25.9.3':
dependencies: dependencies:
undici-types: 7.24.6 undici-types: 7.24.6
@@ -3439,15 +3439,15 @@ snapshots:
'@xtuc/long@4.2.2': {} '@xtuc/long@4.2.2': {}
acorn-import-phases@1.0.4(acorn@8.16.0): acorn-import-phases@1.0.4(acorn@8.17.0):
dependencies: dependencies:
acorn: 8.16.0 acorn: 8.17.0
acorn-jsx@5.3.2(acorn@8.16.0): acorn-jsx@5.3.2(acorn@8.17.0):
dependencies: dependencies:
acorn: 8.16.0 acorn: 8.17.0
acorn@8.16.0: {} acorn@8.17.0: {}
adjust-sourcemap-loader@4.0.0: adjust-sourcemap-loader@4.0.0:
dependencies: dependencies:
@@ -3518,7 +3518,7 @@ snapshots:
balanced-match@1.0.2: {} balanced-match@1.0.2: {}
baseline-browser-mapping@2.10.33: {} baseline-browser-mapping@2.10.37: {}
big.js@5.2.2: {} big.js@5.2.2: {}
@@ -3539,10 +3539,10 @@ snapshots:
browserslist@4.28.2: browserslist@4.28.2:
dependencies: dependencies:
baseline-browser-mapping: 2.10.33 baseline-browser-mapping: 2.10.37
caniuse-lite: 1.0.30001793 caniuse-lite: 1.0.30001799
electron-to-chromium: 1.5.364 electron-to-chromium: 1.5.374
node-releases: 2.0.46 node-releases: 2.0.47
update-browserslist-db: 1.2.3(browserslist@4.28.2) update-browserslist-db: 1.2.3(browserslist@4.28.2)
buffer-from@1.1.2: {} buffer-from@1.1.2: {}
@@ -3552,11 +3552,11 @@ snapshots:
caniuse-api@3.0.0: caniuse-api@3.0.0:
dependencies: dependencies:
browserslist: 4.28.2 browserslist: 4.28.2
caniuse-lite: 1.0.30001793 caniuse-lite: 1.0.30001799
lodash.memoize: 4.1.2 lodash.memoize: 4.1.2
lodash.uniq: 4.5.0 lodash.uniq: 4.5.0
caniuse-lite@1.0.30001793: {} caniuse-lite@1.0.30001799: {}
chalk@4.1.2: chalk@4.1.2:
dependencies: dependencies:
@@ -3628,7 +3628,7 @@ snapshots:
postcss-modules-scope: 3.2.1(postcss@8.5.15) postcss-modules-scope: 3.2.1(postcss@8.5.15)
postcss-modules-values: 4.0.0(postcss@8.5.15) postcss-modules-values: 4.0.0(postcss@8.5.15)
postcss-value-parser: 4.2.0 postcss-value-parser: 4.2.0
semver: 7.8.1 semver: 7.8.4
optionalDependencies: optionalDependencies:
webpack: 5.107.2(postcss@8.5.15)(webpack-cli@6.0.1) webpack: 5.107.2(postcss@8.5.15)(webpack-cli@6.0.1)
@@ -3755,7 +3755,7 @@ snapshots:
dependencies: dependencies:
domelementtype: 2.3.0 domelementtype: 2.3.0
dompurify@3.4.7: dompurify@3.4.10:
optionalDependencies: optionalDependencies:
'@types/trusted-types': 2.0.7 '@types/trusted-types': 2.0.7
@@ -3771,13 +3771,13 @@ snapshots:
domelementtype: 2.3.0 domelementtype: 2.3.0
domhandler: 5.0.3 domhandler: 5.0.3
electron-to-chromium@1.5.364: {} electron-to-chromium@1.5.374: {}
emoji-regex@8.0.0: {} emoji-regex@8.0.0: {}
emojis-list@3.0.0: {} emojis-list@3.0.0: {}
enhanced-resolve@5.22.1: enhanced-resolve@5.24.0:
dependencies: dependencies:
graceful-fs: 4.2.11 graceful-fs: 4.2.11
tapable: 2.3.3 tapable: 2.3.3
@@ -3857,8 +3857,8 @@ snapshots:
espree@10.4.0: espree@10.4.0:
dependencies: dependencies:
acorn: 8.16.0 acorn: 8.17.0
acorn-jsx: 5.3.2(acorn@8.16.0) acorn-jsx: 5.3.2(acorn@8.17.0)
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
esquery@1.7.0: esquery@1.7.0:
@@ -3992,7 +3992,7 @@ snapshots:
jest-util@30.4.1: jest-util@30.4.1:
dependencies: dependencies:
'@jest/types': 30.4.1 '@jest/types': 30.4.1
'@types/node': 25.9.1 '@types/node': 25.9.3
chalk: 4.1.2 chalk: 4.1.2
ci-info: 4.4.0 ci-info: 4.4.0
graceful-fs: 4.2.11 graceful-fs: 4.2.11
@@ -4000,13 +4000,13 @@ snapshots:
jest-worker@27.5.1: jest-worker@27.5.1:
dependencies: dependencies:
'@types/node': 25.9.1 '@types/node': 25.9.3
merge-stream: 2.0.0 merge-stream: 2.0.0
supports-color: 8.1.1 supports-color: 8.1.1
jest-worker@30.4.1: jest-worker@30.4.1:
dependencies: dependencies:
'@types/node': 25.9.1 '@types/node': 25.9.3
'@ungap/structured-clone': 1.3.1 '@ungap/structured-clone': 1.3.1
jest-util: 30.4.1 jest-util: 30.4.1
merge-stream: 2.0.0 merge-stream: 2.0.0
@@ -4106,7 +4106,7 @@ snapshots:
node-addon-api@7.1.1: node-addon-api@7.1.1:
optional: true optional: true
node-releases@2.0.46: {} node-releases@2.0.47: {}
nth-check@2.1.1: nth-check@2.1.1:
dependencies: dependencies:
@@ -4160,7 +4160,7 @@ snapshots:
postcss-calc@10.1.1(postcss@8.5.15): postcss-calc@10.1.1(postcss@8.5.15):
dependencies: dependencies:
postcss: 8.5.15 postcss: 8.5.15
postcss-selector-parser: 7.1.1 postcss-selector-parser: 7.1.4
postcss-value-parser: 4.2.0 postcss-value-parser: 4.2.0
postcss-colormin@7.0.10(postcss@8.5.15): postcss-colormin@7.0.10(postcss@8.5.15):
@@ -4180,7 +4180,7 @@ snapshots:
postcss-discard-comments@7.0.8(postcss@8.5.15): postcss-discard-comments@7.0.8(postcss@8.5.15):
dependencies: dependencies:
postcss: 8.5.15 postcss: 8.5.15
postcss-selector-parser: 7.1.1 postcss-selector-parser: 7.1.4
postcss-discard-duplicates@7.0.4(postcss@8.5.15): postcss-discard-duplicates@7.0.4(postcss@8.5.15):
dependencies: dependencies:
@@ -4206,7 +4206,7 @@ snapshots:
caniuse-api: 3.0.0 caniuse-api: 3.0.0
cssnano-utils: 5.0.3(postcss@8.5.15) cssnano-utils: 5.0.3(postcss@8.5.15)
postcss: 8.5.15 postcss: 8.5.15
postcss-selector-parser: 7.1.1 postcss-selector-parser: 7.1.4
postcss-minify-font-values@7.0.3(postcss@8.5.15): postcss-minify-font-values@7.0.3(postcss@8.5.15):
dependencies: dependencies:
@@ -4233,7 +4233,7 @@ snapshots:
caniuse-api: 3.0.0 caniuse-api: 3.0.0
cssesc: 3.0.0 cssesc: 3.0.0
postcss: 8.5.15 postcss: 8.5.15
postcss-selector-parser: 7.1.1 postcss-selector-parser: 7.1.4
postcss-modules-extract-imports@3.1.0(postcss@8.5.15): postcss-modules-extract-imports@3.1.0(postcss@8.5.15):
dependencies: dependencies:
@@ -4243,13 +4243,13 @@ snapshots:
dependencies: dependencies:
icss-utils: 5.1.0(postcss@8.5.15) icss-utils: 5.1.0(postcss@8.5.15)
postcss: 8.5.15 postcss: 8.5.15
postcss-selector-parser: 7.1.1 postcss-selector-parser: 7.1.4
postcss-value-parser: 4.2.0 postcss-value-parser: 4.2.0
postcss-modules-scope@3.2.1(postcss@8.5.15): postcss-modules-scope@3.2.1(postcss@8.5.15):
dependencies: dependencies:
postcss: 8.5.15 postcss: 8.5.15
postcss-selector-parser: 7.1.1 postcss-selector-parser: 7.1.4
postcss-modules-values@4.0.0(postcss@8.5.15): postcss-modules-values@4.0.0(postcss@8.5.15):
dependencies: dependencies:
@@ -4318,7 +4318,7 @@ snapshots:
postcss: 8.5.15 postcss: 8.5.15
postcss-value-parser: 4.2.0 postcss-value-parser: 4.2.0
postcss-selector-parser@7.1.1: postcss-selector-parser@7.1.4:
dependencies: dependencies:
cssesc: 3.0.0 cssesc: 3.0.0
util-deprecate: 1.0.2 util-deprecate: 1.0.2
@@ -4332,7 +4332,7 @@ snapshots:
postcss-unique-selectors@7.0.7(postcss@8.5.15): postcss-unique-selectors@7.0.7(postcss@8.5.15):
dependencies: dependencies:
postcss: 8.5.15 postcss: 8.5.15
postcss-selector-parser: 7.1.1 postcss-selector-parser: 7.1.4
postcss-value-parser@4.2.0: {} postcss-value-parser@4.2.0: {}
@@ -4372,13 +4372,13 @@ snapshots:
regenerate: 1.4.2 regenerate: 1.4.2
regenerate-unicode-properties: 10.2.2 regenerate-unicode-properties: 10.2.2
regjsgen: 0.8.0 regjsgen: 0.8.0
regjsparser: 0.13.1 regjsparser: 0.13.2
unicode-match-property-ecmascript: 2.0.0 unicode-match-property-ecmascript: 2.0.0
unicode-match-property-value-ecmascript: 2.2.1 unicode-match-property-value-ecmascript: 2.2.1
regjsgen@0.8.0: {} regjsgen@0.8.0: {}
regjsparser@0.13.1: regjsparser@0.13.2:
dependencies: dependencies:
jsesc: 3.1.0 jsesc: 3.1.0
@@ -4415,14 +4415,14 @@ snapshots:
path-parse: 1.0.7 path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0 supports-preserve-symlinks-flag: 1.0.0
sass-loader@16.0.8(sass@1.100.0)(webpack@5.107.2): sass-loader@16.0.8(sass@1.101.0)(webpack@5.107.2):
dependencies: dependencies:
neo-async: 2.6.2 neo-async: 2.6.2
optionalDependencies: optionalDependencies:
sass: 1.100.0 sass: 1.101.0
webpack: 5.107.2(postcss@8.5.15)(webpack-cli@6.0.1) webpack: 5.107.2(postcss@8.5.15)(webpack-cli@6.0.1)
sass@1.100.0: sass@1.101.0:
dependencies: dependencies:
chokidar: 5.0.0 chokidar: 5.0.0
immutable: 5.1.6 immutable: 5.1.6
@@ -4441,7 +4441,7 @@ snapshots:
semver@6.3.1: {} semver@6.3.1: {}
semver@7.8.1: {} semver@7.8.4: {}
serialize-javascript@7.0.5: {} serialize-javascript@7.0.5: {}
@@ -4488,7 +4488,7 @@ snapshots:
dependencies: dependencies:
browserslist: 4.28.2 browserslist: 4.28.2
postcss: 8.5.15 postcss: 8.5.15
postcss-selector-parser: 7.1.1 postcss-selector-parser: 7.1.4
supports-color@7.2.0: supports-color@7.2.0:
dependencies: dependencies:
@@ -4525,7 +4525,7 @@ snapshots:
terser@5.48.0: terser@5.48.0:
dependencies: dependencies:
'@jridgewell/source-map': 0.3.11 '@jridgewell/source-map': 0.3.11
acorn: 8.16.0 acorn: 8.17.0
commander: 2.20.3 commander: 2.20.3
source-map-support: 0.5.21 source-map-support: 0.5.21
@@ -4569,9 +4569,8 @@ snapshots:
utila@0.4.0: {} utila@0.4.0: {}
watchpack@2.5.1: watchpack@2.5.2:
dependencies: dependencies:
glob-to-regexp: 0.4.1
graceful-fs: 4.2.11 graceful-fs: 4.2.11
webpack-cli@6.0.1(webpack@5.107.2): webpack-cli@6.0.1(webpack@5.107.2):
@@ -4617,11 +4616,11 @@ snapshots:
'@webassemblyjs/ast': 1.14.1 '@webassemblyjs/ast': 1.14.1
'@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1
'@webassemblyjs/wasm-parser': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1
acorn: 8.16.0 acorn: 8.17.0
acorn-import-phases: 1.0.4(acorn@8.16.0) acorn-import-phases: 1.0.4(acorn@8.17.0)
browserslist: 4.28.2 browserslist: 4.28.2
chrome-trace-event: 1.0.4 chrome-trace-event: 1.0.4
enhanced-resolve: 5.22.1 enhanced-resolve: 5.24.0
es-module-lexer: 2.1.0 es-module-lexer: 2.1.0
eslint-scope: 5.1.1 eslint-scope: 5.1.1
events: 3.3.0 events: 3.3.0
@@ -4633,7 +4632,7 @@ snapshots:
schema-utils: 4.3.3 schema-utils: 4.3.3
tapable: 2.3.3 tapable: 2.3.3
terser-webpack-plugin: 5.6.1(postcss@8.5.15)(webpack@5.107.2) terser-webpack-plugin: 5.6.1(postcss@8.5.15)(webpack@5.107.2)
watchpack: 2.5.1 watchpack: 2.5.2
webpack-sources: 3.5.0 webpack-sources: 3.5.0
optionalDependencies: optionalDependencies:
webpack-cli: 6.0.1(webpack@5.107.2) webpack-cli: 6.0.1(webpack@5.107.2)

View File

@@ -17,11 +17,11 @@ final class Constants
/** /**
* The current release version * The current release version
*/ */
public const VERSION = '2.60.0'; public const VERSION = '2.61.0';
/** /**
* The current release: major * 10000 + minor * 100 + patch * The current release: major * 10000 + minor * 100 + patch
*/ */
public const VERSION_ID = 26000; public const VERSION_ID = 26100;
/** /**
* The software name * The software name
*/ */

View File

@@ -23,6 +23,7 @@ final class Configuration
private array $options = []; private array $options = [];
private bool $enabled = true; private bool $enabled = true;
private bool $required = true; private bool $required = true;
private ?string $formTheme = null;
/** /**
* @var Constraint[] * @var Constraint[]
*/ */
@@ -149,4 +150,14 @@ final class Configuration
return $this; return $this;
} }
public function getFormTheme(): ?string
{
return $this->formTheme;
}
public function setFormTheme(string $formTheme): void
{
$this->formTheme = $formTheme;
}
} }

View File

@@ -16,7 +16,7 @@ final class SamlAuthenticationSuccessHandler extends DefaultAuthenticationSucces
{ {
protected $defaultOptions = [ protected $defaultOptions = [
'always_use_default_target_path' => false, 'always_use_default_target_path' => false,
'default_target_path' => '/', 'default_target_path' => 'homepage',
'login_path' => 'saml_login', 'login_path' => 'saml_login',
'target_path_parameter' => '_target_path', 'target_path_parameter' => '_target_path',
'use_referer' => false, 'use_referer' => false,

View File

@@ -461,6 +461,15 @@
"config/packages/mailer.yaml" "config/packages/mailer.yaml"
] ]
}, },
"symfony/maker-bundle": {
"version": "1.67",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "1.0",
"ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f"
}
},
"symfony/mime": { "symfony/mime": {
"version": "v4.3.3" "version": "v4.3.3"
}, },

View File

@@ -37,6 +37,11 @@
{% embed formEditTemplate with {'title': title, 'form': section.form} %} {% embed formEditTemplate with {'title': title, 'form': section.form} %}
{% block form_before %}<span id="conf_{{ section.model.section }}"></span>{% endblock %} {% block form_before %}<span id="conf_{{ section.model.section }}"></span>{% endblock %}
{% block form_body %} {% block form_body %}
{% for pref in form.children.configuration %}
{% if pref.vars.data.formTheme is not null %}
{% form_theme form pref.vars.data.formTheme %}
{% endif %}
{% endfor %}
{% for pref in form.children.configuration %} {% for pref in form.children.configuration %}
{{ form_widget(pref) }} {{ form_widget(pref) }}
{% endfor %} {% endfor %}

View File

@@ -11,6 +11,11 @@
{% endif %} {% endif %}
{% embed formEditTemplate with {'title': title, 'form': section.form} %} {% embed formEditTemplate with {'title': title, 'form': section.form} %}
{% block form_body %} {% block form_body %}
{% for pref in form.children.configuration %}
{% if pref.vars.data.formTheme is not null %}
{% form_theme form pref.vars.data.formTheme %}
{% endif %}
{% endfor %}
{% for pref in form.children.configuration %} {% for pref in form.children.configuration %}
{{ form_widget(pref) }} {{ form_widget(pref) }}
{% endfor %} {% endfor %}

View File

@@ -24,7 +24,7 @@ class SamlAuthenticationSuccessHandlerTest extends TestCase
{ {
public function testRelayStateWithInvalidHost(): void public function testRelayStateWithInvalidHost(): void
{ {
$handler = new SamlAuthenticationSuccessHandler(new HttpUtils($this->getUrlGenerator())); $handler = new SamlAuthenticationSuccessHandler(new HttpUtils($this->getUrlGenerator(['homepage' => 'http://example.com/'])));
$response = $handler->onAuthenticationSuccess($this->getRequest('http://example.com/sso/login', 'https://localhost/relayed'), $this->getSamlToken()); $response = $handler->onAuthenticationSuccess($this->getRequest('http://example.com/sso/login', 'https://localhost/relayed'), $this->getSamlToken());
self::assertInstanceOf(RedirectResponse::class, $response); self::assertInstanceOf(RedirectResponse::class, $response);
$target = $response->getTargetUrl(); $target = $response->getTargetUrl();
@@ -57,9 +57,9 @@ class SamlAuthenticationSuccessHandlerTest extends TestCase
public function testWithoutRelayState(): void public function testWithoutRelayState(): void
{ {
$httpUtils = new HttpUtils($this->getUrlGenerator()); $httpUtils = new HttpUtils($this->getUrlGenerator(['homepage' => '/homepage']));
$handler = new SamlAuthenticationSuccessHandler($httpUtils); $handler = new SamlAuthenticationSuccessHandler($httpUtils);
$defaultTargetPath = $httpUtils->generateUri($this->getRequest('/sso/login'), '/'); $defaultTargetPath = $httpUtils->generateUri($this->getRequest('/sso/login'), 'homepage');
$response = $handler->onAuthenticationSuccess($this->getRequest(), $this->getSamlToken()); $response = $handler->onAuthenticationSuccess($this->getRequest(), $this->getSamlToken());
self::assertInstanceOf(RedirectResponse::class, $response); self::assertInstanceOf(RedirectResponse::class, $response);
self::assertTrue($response->isRedirect($defaultTargetPath)); self::assertTrue($response->isRedirect($defaultTargetPath));
@@ -75,13 +75,17 @@ class SamlAuthenticationSuccessHandlerTest extends TestCase
self::assertTrue(!$response->isRedirect($loginPath)); self::assertTrue(!$response->isRedirect($loginPath));
} }
private function getUrlGenerator(): UrlGeneratorInterface private function getUrlGenerator(array $rules = []): UrlGeneratorInterface
{ {
$urlGenerator = $this->getMockBuilder(UrlGeneratorInterface::class)->getMock(); $urlGenerator = $this->getMockBuilder(UrlGeneratorInterface::class)->getMock();
$urlGenerator $urlGenerator
->expects($this->any()) ->expects($this->any())
->method('generate') ->method('generate')
->willReturnCallback(function ($name) { ->willReturnCallback(function ($name) use ($rules) {
if (\array_key_exists($name, $rules)) {
return $rules[$name];
}
return (string) $name; return (string) $name;
}) })
; ;