diff --git a/composer.lock b/composer.lock index 1aacf535..59dde827 100644 --- a/composer.lock +++ b/composer.lock @@ -1387,16 +1387,16 @@ }, { "name": "doctrine/orm", - "version": "2.19.2", + "version": "2.19.3", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "40a0964f06e142e173b783c45688e5f5efaed6aa" + "reference": "1a5a4c674a416b4fdf76833c627c5e7f58bbb890" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/40a0964f06e142e173b783c45688e5f5efaed6aa", - "reference": "40a0964f06e142e173b783c45688e5f5efaed6aa", + "url": "https://api.github.com/repos/doctrine/orm/zipball/1a5a4c674a416b4fdf76833c627c5e7f58bbb890", + "reference": "1a5a4c674a416b4fdf76833c627c5e7f58bbb890", "shasum": "" }, "require": { @@ -1482,9 +1482,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.19.2" + "source": "https://github.com/doctrine/orm/tree/2.19.3" }, - "time": "2024-03-18T19:12:56+00:00" + "time": "2024-03-21T11:01:42+00:00" }, { "name": "doctrine/persistence", @@ -1891,28 +1891,29 @@ }, { "name": "friendsofsymfony/rest-bundle", - "version": "3.6.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/FriendsOfSymfony/FOSRestBundle.git", - "reference": "e01be8113d4451adb3cbb29d7d2cc96bbc698179" + "reference": "fa0f68bd1072d5d1e882a14deb8af0dd13bbdc70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/e01be8113d4451adb3cbb29d7d2cc96bbc698179", - "reference": "e01be8113d4451adb3cbb29d7d2cc96bbc698179", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/fa0f68bd1072d5d1e882a14deb8af0dd13bbdc70", + "reference": "fa0f68bd1072d5d1e882a14deb8af0dd13bbdc70", "shasum": "" }, "require": { - "php": "^7.2|^8.0", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/framework-bundle": "^4.4.1|^5.0|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/routing": "^5.4|^6.0", - "symfony/security-core": "^5.4|^6.0", + "php": "^7.4|^8.0", + "symfony/config": "^5.4|^6.4|^7.0", + "symfony/dependency-injection": "^5.4|^6.4|^7.0", + "symfony/deprecation-contracts": "^2.1|^3.0", + "symfony/event-dispatcher": "^5.4|^6.4|^7.0", + "symfony/framework-bundle": "^5.4|^6.4|^7.0", + "symfony/http-foundation": "^5.4|^6.4|^7.0", + "symfony/http-kernel": "^5.4|^6.4|^7.0", + "symfony/routing": "^5.4|^6.4|^7.0", + "symfony/security-core": "^5.4|^6.4|^7.0", "willdurand/jsonp-callback-validator": "^1.0|^2.0", "willdurand/negotiation": "^2.0|^3.0" }, @@ -1923,32 +1924,32 @@ "sensio/framework-extra-bundle": "<6.1" }, "require-dev": { - "doctrine/annotations": "^1.13.2|^2.0 ", - "friendsofphp/php-cs-fixer": "^3.0", + "doctrine/annotations": "^1.13.2|^2.0", + "friendsofphp/php-cs-fixer": "^3.43", "jms/serializer": "^1.13|^2.0|^3.0", "jms/serializer-bundle": "^2.4.3|^3.0.1|^4.0|^5.0", "psr/http-message": "^1.0", "psr/log": "^1.0|^2.0|^3.0", "sensio/framework-extra-bundle": "^6.1", - "symfony/asset": "^5.4|^6.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/css-selector": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/form": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0", - "symfony/phpunit-bridge": "^5.4|^6.0", - "symfony/security-bundle": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0", - "symfony/twig-bundle": "^5.4|^6.0", - "symfony/validator": "^5.4|^6.0", - "symfony/web-profiler-bundle": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/asset": "^5.4|^6.4|^7.0", + "symfony/browser-kit": "^5.4|^6.4|^7.0", + "symfony/css-selector": "^5.4|^6.4|^7.0", + "symfony/expression-language": "^5.4|^6.4|^7.0", + "symfony/form": "^5.4|^6.4|^7.0", + "symfony/mime": "^5.4|^6.4|^7.0", + "symfony/phpunit-bridge": "^7.0.1", + "symfony/security-bundle": "^5.4|^6.4|^7.0", + "symfony/serializer": "^5.4|^6.4|^7.0", + "symfony/twig-bundle": "^5.4|^6.4|^7.0", + "symfony/validator": "^5.4|^6.4|^7.0", + "symfony/web-profiler-bundle": "^5.4|^6.4|^7.0", + "symfony/yaml": "^5.4|^6.4|^7.0" }, "suggest": { - "jms/serializer-bundle": "Add support for advanced serialization capabilities, recommended, requires ^2.0|^3.0", - "sensio/framework-extra-bundle": "Add support for the request body converter and the view response listener, requires ^3.0", - "symfony/serializer": "Add support for basic serialization capabilities and xml decoding, requires ^2.7|^3.0", - "symfony/validator": "Add support for validation capabilities in the ParamFetcher, requires ^2.7|^3.0" + "jms/serializer-bundle": "Add support for advanced serialization capabilities, recommended", + "sensio/framework-extra-bundle": "Add support for the request body converter and the view response listener, not supported with Symfony >=7.0", + "symfony/serializer": "Add support for basic serialization capabilities and xml decoding", + "symfony/validator": "Add support for validation capabilities in the ParamFetcher" }, "type": "symfony-bundle", "extra": { @@ -1990,9 +1991,9 @@ ], "support": { "issues": "https://github.com/FriendsOfSymfony/FOSRestBundle/issues", - "source": "https://github.com/FriendsOfSymfony/FOSRestBundle/tree/3.6.0" + "source": "https://github.com/FriendsOfSymfony/FOSRestBundle/tree/3.7.0" }, - "time": "2023-09-27T11:41:02+00:00" + "time": "2024-04-04T17:25:49+00:00" }, { "name": "gedmo/doctrine-extensions", @@ -3109,16 +3110,16 @@ }, { "name": "nelmio/api-doc-bundle", - "version": "v4.24.0", + "version": "v4.25.1", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioApiDocBundle.git", - "reference": "9fb5170b5f7a88d1aaade05e3eb399e697ac0941" + "reference": "f594e600bf5943008562be35c4acd60957434d22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/9fb5170b5f7a88d1aaade05e3eb399e697ac0941", - "reference": "9fb5170b5f7a88d1aaade05e3eb399e697ac0941", + "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/f594e600bf5943008562be35c4acd60957434d22", + "reference": "f594e600bf5943008562be35c4acd60957434d22", "shasum": "" }, "require": { @@ -3141,10 +3142,14 @@ "symfony/routing": "^5.4|^6.0|^7.0", "zircote/swagger-php": "^4.6.1" }, + "conflict": { + "zircote/swagger-php": "4.8.7" + }, "require-dev": { "api-platform/core": "^2.7.0|^3", "composer/package-versions-deprecated": "1.11.99.1", "doctrine/annotations": "^2.0", + "friendsofphp/php-cs-fixer": "^3.52", "friendsofsymfony/rest-bundle": "^2.8|^3.0", "jms/serializer": "^1.14|^3.0", "jms/serializer-bundle": "^2.3|^3.0|^4.0|^5.0", @@ -3211,9 +3216,9 @@ ], "support": { "issues": "https://github.com/nelmio/NelmioApiDocBundle/issues", - "source": "https://github.com/nelmio/NelmioApiDocBundle/tree/v4.24.0" + "source": "https://github.com/nelmio/NelmioApiDocBundle/tree/v4.25.1" }, - "time": "2024-03-14T15:14:05+00:00" + "time": "2024-04-04T08:16:08+00:00" }, { "name": "nelmio/cors-bundle", @@ -3990,16 +3995,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.26.0", + "version": "1.28.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "231e3186624c03d7e7c890ec662b81e6b0405227" + "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/231e3186624c03d7e7c890ec662b81e6b0405227", - "reference": "231e3186624c03d7e7c890ec662b81e6b0405227", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", + "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", "shasum": "" }, "require": { @@ -4031,9 +4036,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.26.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" }, - "time": "2024-02-23T16:05:55+00:00" + "time": "2024-04-03T18:51:33+00:00" }, { "name": "psr/cache", @@ -4929,16 +4934,16 @@ }, { "name": "symfony/cache", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "0ef36534694c572ff526d91c7181f3edede176e7" + "reference": "b59bbf9c093b592d77110f9ee70c74dff89294cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/0ef36534694c572ff526d91c7181f3edede176e7", - "reference": "0ef36534694c572ff526d91c7181f3edede176e7", + "url": "https://api.github.com/repos/symfony/cache/zipball/b59bbf9c093b592d77110f9ee70c74dff89294cb", + "reference": "b59bbf9c093b592d77110f9ee70c74dff89294cb", "shasum": "" }, "require": { @@ -5005,7 +5010,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.4" + "source": "https://github.com/symfony/cache/tree/v6.4.6" }, "funding": [ { @@ -5021,20 +5026,20 @@ "type": "tidelift" } ], - "time": "2024-02-22T20:27:10+00:00" + "time": "2024-03-27T13:27:42+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.4.0", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "1d74b127da04ffa87aa940abe15446fa89653778" + "reference": "2c9db6509a1b21dad229606897639d3284f54b2a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/1d74b127da04ffa87aa940abe15446fa89653778", - "reference": "1d74b127da04ffa87aa940abe15446fa89653778", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/2c9db6509a1b21dad229606897639d3284f54b2a", + "reference": "2c9db6509a1b21dad229606897639d3284f54b2a", "shasum": "" }, "require": { @@ -5081,7 +5086,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.4.2" }, "funding": [ { @@ -5097,7 +5102,7 @@ "type": "tidelift" } ], - "time": "2023-09-25T12:52:38+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/clock", @@ -5175,16 +5180,16 @@ }, { "name": "symfony/config", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "6ea4affc27f2086c9d16b92ab5429ce1e3c38047" + "reference": "18ac9da3106222dde9fc9e09ec016e5de9d2658f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/6ea4affc27f2086c9d16b92ab5429ce1e3c38047", - "reference": "6ea4affc27f2086c9d16b92ab5429ce1e3c38047", + "url": "https://api.github.com/repos/symfony/config/zipball/18ac9da3106222dde9fc9e09ec016e5de9d2658f", + "reference": "18ac9da3106222dde9fc9e09ec016e5de9d2658f", "shasum": "" }, "require": { @@ -5230,7 +5235,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.4" + "source": "https://github.com/symfony/config/tree/v6.4.6" }, "funding": [ { @@ -5246,20 +5251,20 @@ "type": "tidelift" } ], - "time": "2024-02-26T07:52:26+00:00" + "time": "2024-03-27T19:47:45+00:00" }, { "name": "symfony/console", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0d9e4eb5ad413075624378f474c4167ea202de78" + "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0d9e4eb5ad413075624378f474c4167ea202de78", - "reference": "0d9e4eb5ad413075624378f474c4167ea202de78", + "url": "https://api.github.com/repos/symfony/console/zipball/a2708a5da5c87d1d0d52937bdeac625df659e11f", + "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f", "shasum": "" }, "require": { @@ -5324,7 +5329,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.4" + "source": "https://github.com/symfony/console/tree/v6.4.6" }, "funding": [ { @@ -5340,7 +5345,7 @@ "type": "tidelift" } ], - "time": "2024-02-22T20:27:10+00:00" + "time": "2024-03-29T19:07:53+00:00" }, { "name": "symfony/css-selector", @@ -5409,16 +5414,16 @@ }, { "name": "symfony/dependency-injection", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "6236e5e843cb763e9d0f74245678b994afea5363" + "reference": "31417777509923b22de5c6fb6b3ffcdebde37cb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6236e5e843cb763e9d0f74245678b994afea5363", - "reference": "6236e5e843cb763e9d0f74245678b994afea5363", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/31417777509923b22de5c6fb6b3ffcdebde37cb5", + "reference": "31417777509923b22de5c6fb6b3ffcdebde37cb5", "shasum": "" }, "require": { @@ -5470,7 +5475,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.4" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.6" }, "funding": [ { @@ -5486,7 +5491,7 @@ "type": "tidelift" } ], - "time": "2024-02-22T20:27:10+00:00" + "time": "2024-03-27T22:00:14+00:00" }, { "name": "symfony/deprecation-contracts", @@ -5557,16 +5562,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v6.4.5", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "fb868f29461c8a9ffc5c729ac03d08bf49e0139b" + "reference": "7bebe23117c24669f64c54f1c703a4ec4c0cecd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/fb868f29461c8a9ffc5c729ac03d08bf49e0139b", - "reference": "fb868f29461c8a9ffc5c729ac03d08bf49e0139b", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/7bebe23117c24669f64c54f1c703a4ec4c0cecd3", + "reference": "7bebe23117c24669f64c54f1c703a4ec4c0cecd3", "shasum": "" }, "require": { @@ -5584,7 +5589,7 @@ "doctrine/orm": "<2.15", "symfony/cache": "<5.4", "symfony/dependency-injection": "<6.2", - "symfony/form": "<5.4.21|>=6,<6.2.7", + "symfony/form": "<5.4.38|>=6,<6.4.6|>=7,<7.0.6", "symfony/http-foundation": "<6.3", "symfony/http-kernel": "<6.2", "symfony/lock": "<6.3", @@ -5605,7 +5610,7 @@ "symfony/dependency-injection": "^6.2|^7.0", "symfony/doctrine-messenger": "^5.4|^6.0|^7.0", "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4.21|^6.2.7|^7.0", + "symfony/form": "^5.4.38|^6.4.6|^7.0.6", "symfony/http-kernel": "^6.3|^7.0", "symfony/lock": "^6.3|^7.0", "symfony/messenger": "^5.4|^6.0|^7.0", @@ -5645,7 +5650,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.5" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.6" }, "funding": [ { @@ -5661,7 +5666,7 @@ "type": "tidelift" } ], - "time": "2024-02-27T12:33:30+00:00" + "time": "2024-03-19T09:28:31+00:00" }, { "name": "symfony/dotenv", @@ -5739,16 +5744,16 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c725219bdf2afc59423c32793d5019d2a904e13a" + "reference": "64db1c1802e3a4557e37ba33031ac39f452ac5d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c725219bdf2afc59423c32793d5019d2a904e13a", - "reference": "c725219bdf2afc59423c32793d5019d2a904e13a", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/64db1c1802e3a4557e37ba33031ac39f452ac5d4", + "reference": "64db1c1802e3a4557e37ba33031ac39f452ac5d4", "shasum": "" }, "require": { @@ -5794,7 +5799,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.4" + "source": "https://github.com/symfony/error-handler/tree/v6.4.6" }, "funding": [ { @@ -5810,7 +5815,7 @@ "type": "tidelift" } ], - "time": "2024-02-22T20:27:10+00:00" + "time": "2024-03-19T11:56:30+00:00" }, { "name": "symfony/event-dispatcher", @@ -5894,16 +5899,16 @@ }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.4.0", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" + "reference": "4e64b49bf370ade88e567de29465762e316e4224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224", + "reference": "4e64b49bf370ade88e567de29465762e316e4224", "shasum": "" }, "require": { @@ -5950,7 +5955,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2" }, "funding": [ { @@ -5966,7 +5971,7 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/expression-language", @@ -6034,16 +6039,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.3", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "7f3b1755eb49297a0827a7575d5d2b2fd11cc9fb" + "reference": "9919b5509ada52cc7f66f9a35c86a4a29955c9d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/7f3b1755eb49297a0827a7575d5d2b2fd11cc9fb", - "reference": "7f3b1755eb49297a0827a7575d5d2b2fd11cc9fb", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/9919b5509ada52cc7f66f9a35c86a4a29955c9d3", + "reference": "9919b5509ada52cc7f66f9a35c86a4a29955c9d3", "shasum": "" }, "require": { @@ -6077,7 +6082,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.3" + "source": "https://github.com/symfony/filesystem/tree/v6.4.6" }, "funding": [ { @@ -6093,7 +6098,7 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-03-21T19:36:20+00:00" }, { "name": "symfony/finder", @@ -6226,16 +6231,16 @@ }, { "name": "symfony/form", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "c72cf9aab0d6c6db64358f9dd0ab391c2cc6014a" + "reference": "57bc474472f488f3c7fcf1b1448f793caadb4ed0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/c72cf9aab0d6c6db64358f9dd0ab391c2cc6014a", - "reference": "c72cf9aab0d6c6db64358f9dd0ab391c2cc6014a", + "url": "https://api.github.com/repos/symfony/form/zipball/57bc474472f488f3c7fcf1b1448f793caadb4ed0", + "reference": "57bc474472f488f3c7fcf1b1448f793caadb4ed0", "shasum": "" }, "require": { @@ -6303,7 +6308,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.4" + "source": "https://github.com/symfony/form/tree/v6.4.6" }, "funding": [ { @@ -6319,20 +6324,20 @@ "type": "tidelift" } ], - "time": "2024-02-12T11:14:32+00:00" + "time": "2024-03-27T22:00:14+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "c76d3881596860ead95f5444a5ce4414447f0067" + "reference": "49093e57c7eea2ecd1603b0218c797fc37514ae9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/c76d3881596860ead95f5444a5ce4414447f0067", - "reference": "c76d3881596860ead95f5444a5ce4414447f0067", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/49093e57c7eea2ecd1603b0218c797fc37514ae9", + "reference": "49093e57c7eea2ecd1603b0218c797fc37514ae9", "shasum": "" }, "require": { @@ -6451,7 +6456,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.4" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.6" }, "funding": [ { @@ -6467,27 +6472,27 @@ "type": "tidelift" } ], - "time": "2024-02-22T22:50:59+00:00" + "time": "2024-03-23T16:06:09+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.5", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "f3c86a60a3615f466333a11fd42010d4382a82c7" + "reference": "6a46c0ea9b099f9a5132d560a51833ffcbd5b0d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/f3c86a60a3615f466333a11fd42010d4382a82c7", - "reference": "f3c86a60a3615f466333a11fd42010d4382a82c7", + "url": "https://api.github.com/repos/symfony/http-client/zipball/6a46c0ea9b099f9a5132d560a51833ffcbd5b0d9", + "reference": "6a46c0ea9b099f9a5132d560a51833ffcbd5b0d9", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-client-contracts": "^3", + "symfony/http-client-contracts": "^3.4.1", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -6505,7 +6510,7 @@ "amphp/http-client": "^4.2.1", "amphp/http-tunnel": "^1.0", "amphp/socket": "^1.1", - "guzzlehttp/promises": "^1.4", + "guzzlehttp/promises": "^1.4|^2.0", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", @@ -6544,7 +6549,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.5" + "source": "https://github.com/symfony/http-client/tree/v6.4.6" }, "funding": [ { @@ -6560,20 +6565,20 @@ "type": "tidelift" } ], - "time": "2024-03-02T12:45:30+00:00" + "time": "2024-04-01T20:35:50+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.4.0", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "1ee70e699b41909c209a0c930f11034b93578654" + "reference": "b6b5c876b3a4ed74460e2c5ac53bbce2f12e2a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/1ee70e699b41909c209a0c930f11034b93578654", - "reference": "1ee70e699b41909c209a0c930f11034b93578654", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/b6b5c876b3a4ed74460e2c5ac53bbce2f12e2a7e", + "reference": "b6b5c876b3a4ed74460e2c5ac53bbce2f12e2a7e", "shasum": "" }, "require": { @@ -6622,7 +6627,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.4.2" }, "funding": [ { @@ -6638,7 +6643,7 @@ "type": "tidelift" } ], - "time": "2023-07-30T20:28:31+00:00" + "time": "2024-04-01T18:51:09+00:00" }, { "name": "symfony/http-foundation", @@ -6719,16 +6724,16 @@ }, { "name": "symfony/http-kernel", - "version": "v6.4.5", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "f6947cb939d8efee137797382cb4db1af653ef75" + "reference": "060038863743fd0cd982be06acecccf246d35653" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f6947cb939d8efee137797382cb4db1af653ef75", - "reference": "f6947cb939d8efee137797382cb4db1af653ef75", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/060038863743fd0cd982be06acecccf246d35653", + "reference": "060038863743fd0cd982be06acecccf246d35653", "shasum": "" }, "require": { @@ -6812,7 +6817,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.5" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.6" }, "funding": [ { @@ -6828,7 +6833,7 @@ "type": "tidelift" } ], - "time": "2024-03-04T21:00:47+00:00" + "time": "2024-04-03T06:09:15+00:00" }, { "name": "symfony/intl", @@ -6914,16 +6919,16 @@ }, { "name": "symfony/mailer", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "791c5d31a8204cf3db0c66faab70282307f4376b" + "reference": "677f34a6f4b4559e08acf73ae0aec460479e5859" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/791c5d31a8204cf3db0c66faab70282307f4376b", - "reference": "791c5d31a8204cf3db0c66faab70282307f4376b", + "url": "https://api.github.com/repos/symfony/mailer/zipball/677f34a6f4b4559e08acf73ae0aec460479e5859", + "reference": "677f34a6f4b4559e08acf73ae0aec460479e5859", "shasum": "" }, "require": { @@ -6974,7 +6979,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.4" + "source": "https://github.com/symfony/mailer/tree/v6.4.6" }, "funding": [ { @@ -6990,20 +6995,20 @@ "type": "tidelift" } ], - "time": "2024-02-03T21:33:47+00:00" + "time": "2024-03-27T21:14:17+00:00" }, { "name": "symfony/mime", - "version": "v6.4.3", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "5017e0a9398c77090b7694be46f20eb796262a34" + "reference": "14762b86918823cb42e3558cdcca62e58b5227fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/5017e0a9398c77090b7694be46f20eb796262a34", - "reference": "5017e0a9398c77090b7694be46f20eb796262a34", + "url": "https://api.github.com/repos/symfony/mime/zipball/14762b86918823cb42e3558cdcca62e58b5227fe", + "reference": "14762b86918823cb42e3558cdcca62e58b5227fe", "shasum": "" }, "require": { @@ -7024,6 +7029,7 @@ "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.4|^7.0", "symfony/property-access": "^5.4|^6.0|^7.0", "symfony/property-info": "^5.4|^6.0|^7.0", "symfony/serializer": "^6.3.2|^7.0" @@ -7058,7 +7064,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.3" + "source": "https://github.com/symfony/mime/tree/v6.4.6" }, "funding": [ { @@ -7074,7 +7080,7 @@ "type": "tidelift" } ], - "time": "2024-01-30T08:32:12+00:00" + "time": "2024-03-21T19:36:20+00:00" }, { "name": "symfony/monolog-bridge", @@ -7781,16 +7787,16 @@ }, { "name": "symfony/property-access", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "c0664db266024013e31446dd690b6bfcf218ad93" + "reference": "304e5559cd3ebcfb5d743bd21a3d25eb3b7a6ae7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/c0664db266024013e31446dd690b6bfcf218ad93", - "reference": "c0664db266024013e31446dd690b6bfcf218ad93", + "url": "https://api.github.com/repos/symfony/property-access/zipball/304e5559cd3ebcfb5d743bd21a3d25eb3b7a6ae7", + "reference": "304e5559cd3ebcfb5d743bd21a3d25eb3b7a6ae7", "shasum": "" }, "require": { @@ -7838,7 +7844,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v6.4.4" + "source": "https://github.com/symfony/property-access/tree/v6.4.6" }, "funding": [ { @@ -7854,20 +7860,20 @@ "type": "tidelift" } ], - "time": "2024-02-16T13:31:43+00:00" + "time": "2024-03-19T11:56:30+00:00" }, { "name": "symfony/property-info", - "version": "v6.4.3", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "e96d740ab5ac39aa530c8eaa0720ea8169118e26" + "reference": "893120c46f8b78086d5bee90f91d6ff85e4057f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/e96d740ab5ac39aa530c8eaa0720ea8169118e26", - "reference": "e96d740ab5ac39aa530c8eaa0720ea8169118e26", + "url": "https://api.github.com/repos/symfony/property-info/zipball/893120c46f8b78086d5bee90f91d6ff85e4057f2", + "reference": "893120c46f8b78086d5bee90f91d6ff85e4057f2", "shasum": "" }, "require": { @@ -7921,7 +7927,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.4.3" + "source": "https://github.com/symfony/property-info/tree/v6.4.6" }, "funding": [ { @@ -7937,7 +7943,7 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-03-27T22:00:14+00:00" }, { "name": "symfony/rate-limiter", @@ -8012,16 +8018,16 @@ }, { "name": "symfony/routing", - "version": "v6.4.5", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "7fe30068e207d9c31c0138501ab40358eb2d49a4" + "reference": "f2591fd1f8c6e3734656b5d6b3829e8bf81f507c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/7fe30068e207d9c31c0138501ab40358eb2d49a4", - "reference": "7fe30068e207d9c31c0138501ab40358eb2d49a4", + "url": "https://api.github.com/repos/symfony/routing/zipball/f2591fd1f8c6e3734656b5d6b3829e8bf81f507c", + "reference": "f2591fd1f8c6e3734656b5d6b3829e8bf81f507c", "shasum": "" }, "require": { @@ -8075,7 +8081,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.5" + "source": "https://github.com/symfony/routing/tree/v6.4.6" }, "funding": [ { @@ -8091,7 +8097,7 @@ "type": "tidelift" } ], - "time": "2024-02-27T12:33:30+00:00" + "time": "2024-03-28T13:28:49+00:00" }, { "name": "symfony/runtime", @@ -8174,16 +8180,16 @@ }, { "name": "symfony/security-bundle", - "version": "v6.4.5", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "b7825ec970f51fcc4982397856405728544df9ce" + "reference": "232f25ff849353d6493cb34bfc1c5f293d8ff9c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/b7825ec970f51fcc4982397856405728544df9ce", - "reference": "b7825ec970f51fcc4982397856405728544df9ce", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/232f25ff849353d6493cb34bfc1c5f293d8ff9c3", + "reference": "232f25ff849353d6493cb34bfc1c5f293d8ff9c3", "shasum": "" }, "require": { @@ -8266,7 +8272,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.5" + "source": "https://github.com/symfony/security-bundle/tree/v6.4.6" }, "funding": [ { @@ -8282,7 +8288,7 @@ "type": "tidelift" } ], - "time": "2024-03-02T12:45:30+00:00" + "time": "2024-03-15T12:52:45+00:00" }, { "name": "symfony/security-core", @@ -8528,16 +8534,16 @@ }, { "name": "symfony/serializer", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "88da7f8fe03c5f4c2a69da907f1de03fab2e6872" + "reference": "3697adf91f83516c86b4912c08c28084711ed560" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/88da7f8fe03c5f4c2a69da907f1de03fab2e6872", - "reference": "88da7f8fe03c5f4c2a69da907f1de03fab2e6872", + "url": "https://api.github.com/repos/symfony/serializer/zipball/3697adf91f83516c86b4912c08c28084711ed560", + "reference": "3697adf91f83516c86b4912c08c28084711ed560", "shasum": "" }, "require": { @@ -8606,7 +8612,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.4" + "source": "https://github.com/symfony/serializer/tree/v6.4.6" }, "funding": [ { @@ -8622,20 +8628,20 @@ "type": "tidelift" } ], - "time": "2024-02-22T20:27:10+00:00" + "time": "2024-03-27T22:00:14+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.4.1", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" + "reference": "11bbf19a0fb7b36345861e85c5768844c552906e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", - "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e", + "reference": "11bbf19a0fb7b36345861e85c5768844c552906e", "shasum": "" }, "require": { @@ -8688,7 +8694,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.2" }, "funding": [ { @@ -8704,7 +8710,7 @@ "type": "tidelift" } ], - "time": "2023-12-26T14:02:43+00:00" + "time": "2023-12-19T21:51:00+00:00" }, { "name": "symfony/stopwatch", @@ -8951,16 +8957,16 @@ }, { "name": "symfony/translation-contracts", - "version": "v3.4.1", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "06450585bf65e978026bda220cdebca3f867fde7" + "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/06450585bf65e978026bda220cdebca3f867fde7", - "reference": "06450585bf65e978026bda220cdebca3f867fde7", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", + "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", "shasum": "" }, "require": { @@ -9009,7 +9015,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.4.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.2" }, "funding": [ { @@ -9025,20 +9031,20 @@ "type": "tidelift" } ], - "time": "2023-12-26T14:02:43+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/twig-bridge", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "256f330026d1c97187b61aa5c29e529499877f13" + "reference": "f150e06e2fbe8004dbcaa66a46bf20b2b3a99308" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/256f330026d1c97187b61aa5c29e529499877f13", - "reference": "256f330026d1c97187b61aa5c29e529499877f13", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/f150e06e2fbe8004dbcaa66a46bf20b2b3a99308", + "reference": "f150e06e2fbe8004dbcaa66a46bf20b2b3a99308", "shasum": "" }, "require": { @@ -9118,7 +9124,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.4" + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.6" }, "funding": [ { @@ -9134,7 +9140,7 @@ "type": "tidelift" } ], - "time": "2024-02-15T11:26:02+00:00" + "time": "2024-03-28T21:00:57+00:00" }, { "name": "symfony/twig-bundle", @@ -9222,16 +9228,16 @@ }, { "name": "symfony/validator", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "1cf92edc9a94d16275efef949fa6748d11cc8f47" + "reference": "ca1d78e8677e966e307a63799677b64b194d735d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/1cf92edc9a94d16275efef949fa6748d11cc8f47", - "reference": "1cf92edc9a94d16275efef949fa6748d11cc8f47", + "url": "https://api.github.com/repos/symfony/validator/zipball/ca1d78e8677e966e307a63799677b64b194d735d", + "reference": "ca1d78e8677e966e307a63799677b64b194d735d", "shasum": "" }, "require": { @@ -9298,7 +9304,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.4" + "source": "https://github.com/symfony/validator/tree/v6.4.6" }, "funding": [ { @@ -9314,20 +9320,20 @@ "type": "tidelift" } ], - "time": "2024-02-22T20:27:10+00:00" + "time": "2024-03-27T22:00:14+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "b439823f04c98b84d4366c79507e9da6230944b1" + "reference": "95bd2706a97fb875185b51ecaa6112ec184233d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b439823f04c98b84d4366c79507e9da6230944b1", - "reference": "b439823f04c98b84d4366c79507e9da6230944b1", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/95bd2706a97fb875185b51ecaa6112ec184233d4", + "reference": "95bd2706a97fb875185b51ecaa6112ec184233d4", "shasum": "" }, "require": { @@ -9383,7 +9389,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.4" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.6" }, "funding": [ { @@ -9399,20 +9405,20 @@ "type": "tidelift" } ], - "time": "2024-02-15T11:23:52+00:00" + "time": "2024-03-19T11:56:30+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "0bd342e24aef49fc82a21bd4eedd3e665d177e5b" + "reference": "20888cf4d11de203613515cf0587828bf5af0fe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0bd342e24aef49fc82a21bd4eedd3e665d177e5b", - "reference": "0bd342e24aef49fc82a21bd4eedd3e665d177e5b", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/20888cf4d11de203613515cf0587828bf5af0fe7", + "reference": "20888cf4d11de203613515cf0587828bf5af0fe7", "shasum": "" }, "require": { @@ -9420,6 +9426,8 @@ "symfony/deprecation-contracts": "^2.5|^3" }, "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", @@ -9458,7 +9466,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.4" + "source": "https://github.com/symfony/var-exporter/tree/v6.4.6" }, "funding": [ { @@ -9474,7 +9482,7 @@ "type": "tidelift" } ], - "time": "2024-02-26T08:37:45+00:00" + "time": "2024-03-20T21:07:14+00:00" }, { "name": "symfony/webpack-encore-bundle", @@ -10393,16 +10401,16 @@ }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", "shasum": "" }, "require": { @@ -10413,7 +10421,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -10437,9 +10445,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.4" }, "funding": [ { @@ -10455,7 +10463,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2024-03-26T18:29:49+00:00" }, { "name": "dama/doctrine-test-bundle", @@ -10853,16 +10861,16 @@ }, { "name": "masterminds/html5", - "version": "2.8.1", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", - "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", "shasum": "" }, "require": { @@ -10870,7 +10878,7 @@ "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" }, "type": "library", "extra": { @@ -10914,9 +10922,9 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" + "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" }, - "time": "2023-05-10T11:58:31+00:00" + "time": "2024-03-31T07:05:07+00:00" }, { "name": "nikic/php-parser", @@ -11096,16 +11104,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.63", + "version": "1.10.66", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "ad12836d9ca227301f5fb9960979574ed8628339" + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ad12836d9ca227301f5fb9960979574ed8628339", - "reference": "ad12836d9ca227301f5fb9960979574ed8628339", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd", + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd", "shasum": "" }, "require": { @@ -11154,25 +11162,25 @@ "type": "tidelift" } ], - "time": "2024-03-18T16:53:53+00:00" + "time": "2024-03-28T16:17:31+00:00" }, { "name": "phpstan/phpstan-doctrine", - "version": "1.3.63", + "version": "1.3.65", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-doctrine.git", - "reference": "6ccde2b243e30ba47f7cd29f87fb752263bcb25c" + "reference": "1667bda042320163fe503dd15e9fee3d37cb31cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/6ccde2b243e30ba47f7cd29f87fb752263bcb25c", - "reference": "6ccde2b243e30ba47f7cd29f87fb752263bcb25c", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/1667bda042320163fe503dd15e9fee3d37cb31cf", + "reference": "1667bda042320163fe503dd15e9fee3d37cb31cf", "shasum": "" }, "require": { "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.10.63" + "phpstan/phpstan": "^1.10.64" }, "conflict": { "doctrine/collections": "<1.0", @@ -11224,9 +11232,9 @@ "description": "Doctrine extensions for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-doctrine/issues", - "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.3.63" + "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.3.65" }, - "time": "2024-03-18T18:05:58+00:00" + "time": "2024-04-04T07:45:25+00:00" }, { "name": "phpstan/phpstan-phpunit", @@ -12996,16 +13004,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "16ed5bdfd18e14fc7de347c8688e8ac479284222" + "reference": "3065d1c5b4cd0a46b11845b705d21ee692e52cd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/16ed5bdfd18e14fc7de347c8688e8ac479284222", - "reference": "16ed5bdfd18e14fc7de347c8688e8ac479284222", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/3065d1c5b4cd0a46b11845b705d21ee692e52cd6", + "reference": "3065d1c5b4cd0a46b11845b705d21ee692e52cd6", "shasum": "" }, "require": { @@ -13057,7 +13065,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.4" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.6" }, "funding": [ { @@ -13073,7 +13081,7 @@ "type": "tidelift" } ], - "time": "2024-02-08T14:08:19+00:00" + "time": "2024-03-19T11:56:30+00:00" }, { "name": "symfony/process", diff --git a/config/services.yaml b/config/services.yaml index ea136436..07dcf388 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -100,7 +100,9 @@ services: # SAML Services # ================================================================================ App\Saml\SamlProvider: - arguments: ['@App\Repository\UserRepository', '@security.user.provider.concrete.kimai_internal', '@App\Configuration\SamlConfigurationInterface'] + arguments: + $userProvider: '@security.user.provider.concrete.kimai_internal' + $configuration: '@App\Configuration\SamlConfigurationInterface' # ================================================================================ # REPOSITORIES diff --git a/src/Command/ActivateUserCommand.php b/src/Command/ActivateUserCommand.php index 0896ae6f..f391cfef 100644 --- a/src/Command/ActivateUserCommand.php +++ b/src/Command/ActivateUserCommand.php @@ -50,7 +50,7 @@ final class ActivateUserCommand extends Command if (!$user->isEnabled()) { $user->setEnabled(true); - $this->userService->updateUser($user); + $this->userService->saveUser($user); $io->success(sprintf('User "%s" has been activated.', $username)); } else { $io->warning(sprintf('User "%s" is already active.', $username)); diff --git a/src/Command/CreateUserCommand.php b/src/Command/CreateUserCommand.php index ef0a2aba..e2078637 100644 --- a/src/Command/CreateUserCommand.php +++ b/src/Command/CreateUserCommand.php @@ -76,7 +76,7 @@ final class CreateUserCommand extends AbstractUserCommand } try { - $this->userService->saveNewUser($user); + $this->userService->saveUser($user); $io->success(sprintf('Success! Created user: %s', $username)); } catch (ValidationFailedException $ex) { $this->validationError($ex, $io); diff --git a/src/Command/DeactivateUserCommand.php b/src/Command/DeactivateUserCommand.php index 0f904007..0a0ef159 100644 --- a/src/Command/DeactivateUserCommand.php +++ b/src/Command/DeactivateUserCommand.php @@ -50,7 +50,7 @@ final class DeactivateUserCommand extends Command if ($user->isEnabled()) { $user->setEnabled(false); - $this->userService->updateUser($user); + $this->userService->saveUser($user); $io->success(sprintf('User "%s" has been deactivated.', $username)); } else { $io->warning(sprintf('User "%s" is already deactivated.', $username)); diff --git a/src/Command/DemoteUserCommand.php b/src/Command/DemoteUserCommand.php index 99717e6b..f51845d2 100644 --- a/src/Command/DemoteUserCommand.php +++ b/src/Command/DemoteUserCommand.php @@ -39,7 +39,7 @@ final class DemoteUserCommand extends AbstractRoleCommand if ($super) { if ($user->isSuperAdmin()) { $user->setSuperAdmin(false); - $manipulator->updateUser($user); + $manipulator->saveUser($user); $output->success(sprintf('Super administrator role has been removed from the user "%s".', $username)); } else { $output->warning(sprintf('User "%s" doesn\'t have the super administrator role.', $username)); @@ -47,7 +47,7 @@ final class DemoteUserCommand extends AbstractRoleCommand } else { if ($user->hasRole($role)) { $user->removeRole($role); - $manipulator->updateUser($user); + $manipulator->saveUser($user); $output->success(sprintf('Role "%s" has been removed from user "%s".', $role, $username)); } else { $output->warning(sprintf('User "%s" didn\'t have "%s" role.', $username, $role)); diff --git a/src/Command/PromoteUserCommand.php b/src/Command/PromoteUserCommand.php index 900c16d9..f81ed966 100644 --- a/src/Command/PromoteUserCommand.php +++ b/src/Command/PromoteUserCommand.php @@ -39,7 +39,7 @@ final class PromoteUserCommand extends AbstractRoleCommand if ($super) { if (!$user->isSuperAdmin()) { $user->setSuperAdmin(true); - $manipulator->updateUser($user); + $manipulator->saveUser($user); $output->success(sprintf('User "%s" has been promoted as a super administrator.', $username)); } else { $output->warning(sprintf('User "%s" does already have the super administrator role.', $username)); @@ -47,7 +47,7 @@ final class PromoteUserCommand extends AbstractRoleCommand } else { if (!$user->hasRole($role)) { $user->addRole($role); - $manipulator->updateUser($user); + $manipulator->saveUser($user); $output->success(sprintf('Role "%s" has been added to user "%s".', $role, $username)); } else { $output->warning(sprintf('User "%s" did already have "%s" role.', $username, $role)); diff --git a/src/Controller/ProfileController.php b/src/Controller/ProfileController.php index 36b66e00..05cc9351 100644 --- a/src/Controller/ProfileController.php +++ b/src/Controller/ProfileController.php @@ -136,7 +136,7 @@ final class ProfileController extends AbstractController $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $userService->updateUser($profile); + $userService->saveUser($profile); $this->flashSuccess('action.update.success'); @@ -409,7 +409,7 @@ final class ProfileController extends AbstractController { if (!$profile->hasTotpSecret()) { $profile->setTotpSecret($totpAuthenticator->generateSecret()); - $userService->updateUser($profile); + $userService->saveUser($profile); } $data = new TotpActivation($profile); @@ -423,7 +423,7 @@ final class ProfileController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $profile->enableTotpAuthentication(); - $userService->updateUser($profile); + $userService->saveUser($profile); $this->flashSuccess('action.update.success'); @@ -473,7 +473,7 @@ final class ProfileController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $profile->disableTotpAuthentication(); - $userService->updateUser($profile); + $userService->saveUser($profile); $this->flashSuccess('action.update.success'); } diff --git a/src/Controller/Security/PasswordResetController.php b/src/Controller/Security/PasswordResetController.php index e03cd5a2..923cfdb4 100644 --- a/src/Controller/Security/PasswordResetController.php +++ b/src/Controller/Security/PasswordResetController.php @@ -87,7 +87,7 @@ final class PasswordResetController extends AbstractController $this->eventDispatcher->dispatch(new EmailEvent($event->getEmail())); $user->markPasswordRequested(); - $this->userService->updateUser($user); + $this->userService->saveUser($user); } return $this->redirectToRoute('resetting_check_email', ['username' => $username]); @@ -146,7 +146,7 @@ final class PasswordResetController extends AbstractController $user->markPasswordResetted(); $user->setEnabled(true); - $this->userService->updateUser($user); + $this->userService->saveUser($user); $response = $this->redirectToRoute('my_profile'); $loginManager->logInUser($user, $response); diff --git a/src/Controller/Security/SelfRegistrationController.php b/src/Controller/Security/SelfRegistrationController.php index 073c4d70..95d8dafe 100644 --- a/src/Controller/Security/SelfRegistrationController.php +++ b/src/Controller/Security/SelfRegistrationController.php @@ -69,7 +69,7 @@ final class SelfRegistrationController extends AbstractController $request->getSession()->set('confirmation_email_address', $user->getEmail()); - $this->userService->saveNewUser($user); + $this->userService->saveUser($user); return $this->redirectToRoute('user_registration_check_email'); } @@ -126,7 +126,7 @@ final class SelfRegistrationController extends AbstractController $user->setConfirmationToken(null); $user->setEnabled(true); - $this->userService->updateUser($user); + $this->userService->saveUser($user); $response = $this->redirectToRoute('registration_confirmed'); $loginManager->logInUser($user, $response); diff --git a/src/Controller/WizardController.php b/src/Controller/WizardController.php index 277d22ff..ada9f702 100644 --- a/src/Controller/WizardController.php +++ b/src/Controller/WizardController.php @@ -35,7 +35,7 @@ final class WizardController extends AbstractController if ($wizard === 'intro') { $user->setWizardAsSeen('intro'); - $userService->updateUser($user); + $userService->saveUser($user); return $this->render('wizard/intro.html.twig', [ 'percent' => 0, @@ -77,7 +77,7 @@ final class WizardController extends AbstractController $user->setTimezone($data[UserPreference::TIMEZONE]); $user->setPreferenceValue(UserPreference::SKIN, $data[UserPreference::SKIN]); $user->setWizardAsSeen('profile'); - $userService->updateUser($user); + $userService->saveUser($user); if ($data['reload'] === '1') { return $this->redirectToRoute('wizard', ['wizard' => 'profile', '_locale' => $user->getLanguage()]); @@ -104,7 +104,7 @@ final class WizardController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $user->setRequiresPasswordReset(false); - $userService->updateUser($user); + $userService->saveUser($user); return $this->redirectToRoute('wizard', ['wizard' => 'done']); } diff --git a/src/Saml/SamlProvider.php b/src/Saml/SamlProvider.php index f152d509..02a16997 100644 --- a/src/Saml/SamlProvider.php +++ b/src/Saml/SamlProvider.php @@ -11,7 +11,7 @@ namespace App\Saml; use App\Configuration\SamlConfigurationInterface; use App\Entity\User; -use App\Repository\UserRepository; +use App\User\UserService; use Psr\Log\LoggerInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\UserNotFoundException; @@ -23,7 +23,7 @@ final class SamlProvider * @param UserProviderInterface $userProvider */ public function __construct( - private readonly UserRepository $repository, + private readonly UserService $userService, private readonly UserProviderInterface $userProvider, private readonly SamlConfigurationInterface $configuration, private readonly LoggerInterface $logger @@ -40,17 +40,17 @@ final class SamlProvider $user = $this->userProvider->loadUserByIdentifier($token->getUserIdentifier()); } } catch (UserNotFoundException $ex) { - $this->logger->error($ex->getMessage()); + // this is expected for new users + $this->logger->debug('User is not existing: ' . $token->getUserIdentifier()); } try { if (null === $user) { - $user = $this->createUser($token); - } else { - $this->hydrateUser($user, $token); + $user = $this->userService->createNewUser(); + $user->setUserIdentifier($token->getUserIdentifier()); } - - $this->repository->saveUser($user); + $this->hydrateUser($user, $token); + $this->userService->saveUser($user); } catch (\Exception $ex) { $this->logger->error($ex->getMessage()); throw new AuthenticationException( @@ -61,19 +61,6 @@ final class SamlProvider return $user; } - private function createUser(SamlLoginAttributes $token): User - { - // Not using UserService: user settings should be set via SAML attributes - $user = new User(); - $user->setEnabled(true); - $user->setUserIdentifier($token->getUserIdentifier()); - $user->setPassword(''); - - $this->hydrateUser($user, $token); - - return $user; - } - private function hydrateUser(User $user, SamlLoginAttributes $token): void { $groupAttribute = $this->configuration->getRolesAttribute(); @@ -119,11 +106,13 @@ final class SamlProvider } } - // fill them after hydrating account, so they can't be overwritten - // by the mapping attributes + // change after hydrating account, so it can't be overwritten by mapping attributes if ($user->getId() === null) { + // set a plain password to satisfy the validator + $user->setPlainPassword(substr(bin2hex(random_bytes(100)), 0, 50)); $user->setPassword(''); } + $user->setUserIdentifier($token->getUserIdentifier()); $user->setAuth(User::AUTH_SAML); } diff --git a/src/User/UserService.php b/src/User/UserService.php index af39d57e..f2028ce2 100644 --- a/src/User/UserService.php +++ b/src/User/UserService.php @@ -37,11 +37,11 @@ class UserService private array $cache = []; public function __construct( - private UserRepository $repository, - private EventDispatcherInterface $dispatcher, - private ValidatorInterface $validator, - private SystemConfiguration $configuration, - private UserPasswordHasherInterface $passwordHasher + private readonly UserRepository $repository, + private readonly EventDispatcherInterface $dispatcher, + private readonly ValidatorInterface $validator, + private readonly SystemConfiguration $configuration, + private readonly UserPasswordHasherInterface $passwordHasher ) { } @@ -70,6 +70,18 @@ class UserService return $user; } + public function saveUser(User $user): User + { + if ($user->getId() === null) { + return $this->saveNewUser($user); + } else { + return $this->updateUser($user); + } + } + + /** + * @internal will be made private soon + */ public function saveNewUser(User $user): User { if (null !== $user->getId()) { diff --git a/tests/Form/Type/TypeTestModel.php b/tests/Form/Type/TypeTestModel.php index 502bbf05..9b758d30 100644 --- a/tests/Form/Type/TypeTestModel.php +++ b/tests/Form/Type/TypeTestModel.php @@ -9,30 +9,18 @@ namespace App\Tests\Form\Type; -class TypeTestModel +/** + * @extends \ArrayObject + */ +class TypeTestModel extends \ArrayObject { - private $fields = []; - - public function __construct(array $fields = []) + public function __set(string $name, string|int|null $value) { - $this->fields = $fields; + $this->offsetSet($name, $value); } - public function __set($name, $value) + public function __get(string $name): mixed { - if (!isset($this->fields[$name])) { - throw new \InvalidArgumentException('Unknown field: ' . $name); - } - - $this->fields[$name] = $value; - } - - public function __get($name) - { - if (!isset($this->fields[$name])) { - throw new \InvalidArgumentException('Unknown field: ' . $name); - } - - return $this->fields[$name]; + return $this->offsetGet($name); } } diff --git a/tests/Saml/SamlProviderTest.php b/tests/Saml/SamlProviderTest.php index 7539e2be..dfb89602 100644 --- a/tests/Saml/SamlProviderTest.php +++ b/tests/Saml/SamlProviderTest.php @@ -11,11 +11,11 @@ namespace App\Tests\Saml; use App\Configuration\SamlConfiguration; use App\Entity\User; -use App\Repository\UserRepository; use App\Saml\SamlLoginAttributes; use App\Saml\SamlProvider; use App\Tests\Configuration\TestConfigLoader; use App\Tests\Mocks\SystemConfigurationFactory; +use App\User\UserService; use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; @@ -50,15 +50,14 @@ class SamlProviderTest extends TestCase $userProvider = $this->getMockBuilder(UserProviderInterface::class)->disableOriginalConstructor(); $userProvider->onlyMethods(['refreshUser', 'supportsClass', 'loadUserByIdentifier']); $userProvider = $userProvider->getMock(); - - $repository = $this->getMockBuilder(UserRepository::class)->disableOriginalConstructor()->getMock(); + $userService = $this->getMockBuilder(UserService::class)->disableOriginalConstructor()->getMock(); if ($user !== null) { $userProvider->method('loadUserByIdentifier')->willReturn($user); } else { $userProvider->method('loadUserByIdentifier')->willReturn(new User()); } - $provider = new SamlProvider($repository, $userProvider, $samlConfig, $this->createMock(LoggerInterface::class)); + $provider = new SamlProvider($userService, $userProvider, $samlConfig, $this->createMock(LoggerInterface::class)); return $provider; } diff --git a/tests/phpstan.neon b/tests/phpstan.neon index 7213babc..d08a4de2 100644 --- a/tests/phpstan.neon +++ b/tests/phpstan.neon @@ -2237,36 +2237,6 @@ parameters: count: 1 path: Form/Type/QuickEntryTimesheetTypeTest.php - - - message: "#^Method App\\\\Tests\\\\Form\\\\Type\\\\TypeTestModel\\:\\:__construct\\(\\) has parameter \\$fields with no value type specified in iterable type array\\.$#" - count: 1 - path: Form/Type/TypeTestModel.php - - - - message: "#^Method App\\\\Tests\\\\Form\\\\Type\\\\TypeTestModel\\:\\:__get\\(\\) has no return type specified\\.$#" - count: 1 - path: Form/Type/TypeTestModel.php - - - - message: "#^Method App\\\\Tests\\\\Form\\\\Type\\\\TypeTestModel\\:\\:__get\\(\\) has parameter \\$name with no type specified\\.$#" - count: 1 - path: Form/Type/TypeTestModel.php - - - - message: "#^Method App\\\\Tests\\\\Form\\\\Type\\\\TypeTestModel\\:\\:__set\\(\\) has parameter \\$name with no type specified\\.$#" - count: 1 - path: Form/Type/TypeTestModel.php - - - - message: "#^Method App\\\\Tests\\\\Form\\\\Type\\\\TypeTestModel\\:\\:__set\\(\\) has parameter \\$value with no type specified\\.$#" - count: 1 - path: Form/Type/TypeTestModel.php - - - - message: "#^Property App\\\\Tests\\\\Form\\\\Type\\\\TypeTestModel\\:\\:\\$fields type has no value type specified in iterable type array\\.$#" - count: 1 - path: Form/Type/TypeTestModel.php - - message: "#^Method App\\\\Tests\\\\Invoice\\\\Calculator\\\\AbstractCalculatorTest\\:\\:assertDescription\\(\\) has parameter \\$addActivity with no type specified\\.$#" count: 1