From 1b4446d678195364e312beef1d2b1907eba3970b Mon Sep 17 00:00:00 2001 From: Bas Date: Tue, 1 Jul 2025 09:37:42 +0200 Subject: [PATCH 1/5] Create intermediate EB upgrade branch Also adjust the CI/CD config to run GH actions. --- .github/workflows/run-cypress.yml | 1 + .github/workflows/test-integration.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/run-cypress.yml b/.github/workflows/run-cypress.yml index 063aaada7..95ccbff28 100644 --- a/.github/workflows/run-cypress.yml +++ b/.github/workflows/run-cypress.yml @@ -3,6 +3,7 @@ on: push: branches: - main + - upgrade pull_request: workflow_dispatch: # run at 6 hour UTC diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 16c36de77..83a0d87bf 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -3,6 +3,7 @@ on: push: branches: - main + - upgrade pull_request: # run at 6 hour UTC schedule: From 606556f4f3d11aa563834af83164603408d4e7d1 Mon Sep 17 00:00:00 2001 From: Johan Kromhout Date: Mon, 24 Feb 2025 11:31:33 +0100 Subject: [PATCH 2/5] Upgrade Symfony to 4.4 This will effectively do the following changes: - Fix conflicts after merge commits removal - Update very outdated packages in preparation for symfony 5.4 - Adding documentation for symfony 4.4 - Updating symfony 4.4 configuration and fix deprecation - Fix behat browser tab tests - Fix cypress tests - you need to focus the element - Update tests, gitignore and controller configuration - Add copyright for docheader check - Update functional testing configuration for symfony 4.4 - Codesniffer long lines updates - Update docker configuration for symfony 4.4 - Update functional testing configuration for symfony 4.4 - Change deprecation level - Chown tests dir - Fix xdebug mode - Fix unit tests - The way features are loaded have been changed since the symfony 4.4 upgrade - Fix Ci/CD pipeline - Make sure that all types of tests will run - Make behat compatible with symfony 4 - Replace app/console with bin/console - Additional update composer.lock with merge and remove legacy config from Kernel - Update migrations to be compatible with symfony 4.4 - Update service configuration to be compatible with symfony 4.4 - Update routing from config to annotation based - Upgrade to symfony 4 - App folder removed - Config folder added - AppKernel replaced with Kernel - Implement Rector recommendations - Fix caching and check cache permissions - Fix caching - Cleanup codebase - Fix deprecations - Fix Twig deprecations - Enable strict mode - Use Chrome for all browser tests (with Devconf) - Move Exceptions to comply with PSR-0 autoloading - Fix behat tests - Fix tests - Add upgrade doc --- .dockerignore | 2 +- .env | 2 + .github/workflows/run-cypress.yml | 11 +- .github/workflows/test-integration.yml | 37 +- .gitignore | 71 +- CHANGELOG.md | 6 + README.md | 96 +- UPGRADING.md | 70 +- app/.htaccess | 7 - app/AppCache.php | 7 - app/AppKernel.php | 78 - app/autoload.php | 11 - app/config/config.yml | 146 - app/config/config_dev.yml | 38 - app/config/config_prod.yml | 2 - app/config/config_test.yml | 80 - app/config/functional_testing.yml.dist | 8 - app/config/logging.yml | 23 - app/config/routing.yml | 21 - app/config/routing_test.yml | 6 - app/console | 28 - app/phpunit.xml.dist | 37 - bin/console | 39 + bin/makeRelease.sh | 9 +- ci/qa/behat.sh | 16 +- ci/qa/lint.sh | 3 +- ci/qa/phpunit.sh | 14 +- composer.json | 89 +- composer.lock | 9840 ++++++++++++----- config/bootstrap.php | 23 + config/bundles.php | 19 + {app/logs => config/packages/acc}/.gitkeep | 0 config/packages/cache.yaml | 26 + .../packages/ci/doctrine.yaml | 8 +- config/packages/ci/framework.yaml | 2 + config/packages/ci/parameters.yaml | 9 + config/packages/ci/web_profiler.yaml | 14 + config/packages/config.yaml | 10 + config/packages/dev/config.yaml | 24 + config/packages/dev/debug.yaml | 4 + config/packages/dev/monolog.yaml | 25 + config/packages/dev/web_profiler.yaml | 6 + config/packages/doctrine.yaml | 48 + config/packages/doctrine_migrations.yaml | 6 + config/packages/engineblock_features.yaml | 17 + config/packages/framework.yaml | 23 + config/packages/monolog.yaml | 25 + .../packages}/parameters.yml.dist | 7 +- config/packages/prod/.gitkeep | 0 .../packages/security.yaml | 2 +- config/packages/sensio_framework_extra.yaml | 3 + config/packages/swiftmailer.yaml | 6 + config/packages/test/config.yaml | 30 + config/packages/test/doctrine.yaml | 15 + config/packages/test/framework.yaml | 16 + config/packages/test/monolog.yaml | 14 + config/packages/test/twig.yaml | 2 + config/packages/test/web_profiler.yaml | 6 + config/packages/testing/.gitkeep | 0 config/packages/twig.yaml | 19 + config/packages/validator.yaml | 8 + config/preload.php | 9 + config/routes.yaml | 17 + .../routes/ci/routing.yml | 9 +- config/routes/dev/routing.yaml | 11 + .../functional_testing/functional_testing.yml | 0 config/routes/test/routing.yaml | 3 + config/services.yaml | 16 + config/services/README.md | 2 + config/services/bridge.yml | 18 + .../services}/bridge_event_listeners.yml | 8 +- config/services/ci/controllers.yml | 50 + .../config => config/services/ci}/mocks.yml | 3 + .../services/ci}/services.yml | 47 +- .../config => config/services}/compat.yml | 6 +- config/services/controllers/api.yml | 38 + .../services/controllers/authentication.yml | 78 + config/services/event_listeners.yml | 75 + config/services/logging.yml | 41 + config/services/repositories.yml | 42 + config/services/services.yml | 336 + config/services_ci.yaml | 68 + docker/Dockerfile.prod | 2 +- docker/ci/apache2.conf | 9 +- docker/conf/engine.conf | 6 +- docker/docker-compose.yml | 32 +- docs/logging.md | 6 +- .../EngineBlock/Application/Bootstrapper.php | 2 +- .../EngineBlock/Application/DiContainer.php | 49 +- .../Application/TestDiContainer.php | 2 +- library/EngineBlock/Corto/Module/Bindings.php | 3 +- .../Corto/Module/Service/Abstract.php | 6 +- .../Corto/Module/Service/ContinueToIdp.php | 5 +- .../Corto/Module/Service/Interface.php | 4 +- .../Corto/Module/Service/ProvideConsent.php | 2 +- .../Corto/Module/Service/SingleSignOn.php | 5 +- library/EngineBlock/Corto/Module/Services.php | 17 - .../Corto/Module/Services/Exception.php | 26 + .../Module/Services/SessionLostException.php | 21 + .../Services/SessionNotStartedException.php | 21 + library/EngineBlock/Corto/ProxyServer.php | 5 +- .../Version20160307162928.php | 6 +- .../Version20160412141621.php | 6 +- .../Version20160721121856.php | 6 +- .../Version20161123131704.php | 6 +- .../Version20161209145942.php | 6 +- .../Version20161209152354.php | 6 +- .../Version20170331145533.php | 6 +- .../Version20170912155800.php | 6 +- .../Version20180118115853.php | 6 +- .../Version20180202131013.php | 6 +- .../Version20180215132859.php | 6 +- .../Version20180219171531.php | 6 +- .../Version20180220080549.php | 6 +- .../Version20180221133212.php | 6 +- .../Version20180618134736.php | 6 +- .../Version20180804090135.php | 6 +- .../Version20190425205743.php | 6 +- .../Version20190504110100.php | 6 +- .../Version20190703235333.php | 6 +- .../Version20190710141146.php | 6 +- .../Version20191011132428.php | 0 .../Version20200422145000.php | 4 +- .../Version20201005161700.php | 0 .../Version20220425090852.php | 0 .../Version20230418113623.php | 0 .../Version20230824090020.php | 0 .../Version20250206095609.php | 0 public/.gitignore | 5 + {web => public}/favicon.ico | Bin public/index.php | 39 + {web => public}/robots.txt | 0 src/Kernel.php | 71 + .../CachedDoctrineMetadataRepository.php | 2 +- .../DoctrineMetadataPushRepository.php | 2 +- .../ErrorFeedbackConfiguration.php | 2 +- .../Configuration/FeatureConfiguration.php | 9 +- .../Api/AttributeReleasePolicyController.php | 7 +- .../Controller/Api/ConnectionsController.php | 4 + .../Controller/Api/ConsentController.php | 7 + .../Controller/Api/DeprovisionController.php | 17 +- .../Controller/Api/HeartbeatController.php | 4 + .../Controller/Api/MetadataController.php | 4 + .../Controller/DebugController.php | 3 +- .../Controller/FeedbackController.php | 172 +- .../Controller/IdentityProviderController.php | 76 +- .../Controller/IndexController.php | 6 +- .../Controller/LogoutController.php | 10 +- .../Controller/MetadataController.php | 26 +- .../Controller/ProxyController.php | 3 + .../Controller/ServiceProviderController.php | 5 + .../Controller/StepupController.php | 3 + .../Controller/WayfController.php | 19 +- .../DependencyInjection/Configuration.php | 88 - .../OpenConextEngineBlockExtension.php | 90 - .../Doctrine/Type/CollabPersonIdType.php | 8 + .../Doctrine/Type/CollabPersonUuidType.php | 8 + .../Doctrine/Type/MetadataCoinType.php | 8 + .../Doctrine/Type/MetadataMduiType.php | 8 + .../ApiHttpExceptionListener.php | 4 +- .../ExecutionTimePaddingListener.php | 4 +- .../FallbackExceptionListener.php | 4 +- .../MethodNotAllowedHttpExceptionListener.php | 12 +- .../NotFoundHttpExceptionListener.php | 12 +- ...edirectToFeedbackPageExceptionListener.php | 3 +- .../OpenConextEngineBlockBundle.php | 4 +- .../Resources/config/bridge.yml | 18 - .../Resources/config/controllers.yml | 3 - .../Resources/config/controllers/api.yml | 41 - .../config/controllers/authentication.yml | 90 - .../Resources/config/event_listeners.yml | 79 - .../Resources/config/logging.yml | 45 - .../Resources/config/repositories.yml | 43 - .../Resources/config/routing.yml | 33 - .../Resources/config/routing/feedback.yml | 159 - .../config/routing/identity_provider.yml | 93 - .../Resources/config/routing/logout.yml | 5 - .../Resources/config/routing/metadata.yml | 99 - .../config/routing/service_provider.yml | 18 - .../Resources/config/routing/wayf.yml | 17 - .../Resources/config/routing_api.yml | 63 - .../Resources/config/services.yml | 383 - .../Twig/Extensions/Extension/Debug.php | 4 +- .../Twig/Extensions/Extension/Feedback.php | 4 +- .../FunctionalTestingGlobalSiteNotice.php | 4 +- .../Extensions/Extension/GlobalSiteNotice.php | 4 +- .../Twig/Extensions/Extension/I18n.php | 65 +- .../Twig/Extensions/Extension/Locale.php | 4 +- .../Twig/Extensions/Extension/Metadata.php | 4 +- .../Twig/Extensions/Extension/Wayf.php | 4 +- .../Controllers/ConsentController.php | 15 +- .../Controllers/FeedbackController.php | 12 +- .../Controllers/StepupMockController.php | 6 +- .../Controllers/WayfController.php | 4 +- ...tEngineBlockFunctionalTestingExtension.php | 35 - .../Features/AttributeManipulation.feature | 2 +- .../Features/Context/MinkContext.php | 21 +- .../Features/MultipleSingleSignOn.feature | 12 +- .../Features/StepupKeyRollover.feature | 1 - .../FunctionalTestingFeatureConfiguration.php | 4 +- .../Mock/FakeUserDirectory.php | 4 +- .../Mock/MockStepupGateway.php | 2 +- .../Mock/MockTranslator.php | 2 +- .../Resources/config/controllers.yml | 48 - .../Service/EngineBlock.php | 24 +- tests/behat-ci.yml | 91 - tests/behat.yml | 34 +- tests/bootstrap.php | 7 +- tests/e2e/cypress.config.js | 91 +- .../wayf/WayfMouseBehaviour.spec.js | 4 +- .../shared/cookieRemoval.a11y.spec.js | 2 +- .../skeune/wayf/wayf.keyboard.spec.js | 12 +- .../skeune/wayf/wayf.mouse.spec.js | 4 +- tests/e2e/cypress/support/commands.js | 2 +- ...ttributeReleasePolicyControllerApiTest.php | 2 +- .../Api/ConnectionsControllerTest.php | 7 +- .../Controller/Api/ConsentControllerTest.php | 29 +- .../Api/DeprovisionControllerTest.php | 7 +- .../ExecutionTimeTrackerTest.php | 3 - .../Module/Service/ProcessConsentTest.php | 3 +- .../Module/Service/ProvideConsentTest.php | 7 +- .../Test/Corto/ProxyServerTest.php | 40 +- tests/phpunit.xml | 2 +- .../Service/SsoNotificationServiceTest.php | 2 +- .../Service/SsoSessionServiceTest.php | 2 +- .../EngineBlock/Xml/MetadataRendererTest.php | 3 +- .../ErrorFeedbackConfigurationTest.php | 2 +- .../FeatureConfigurationTest.php | 20 +- .../layouts/scripts/default.html.twig | 4 +- .../scripts/language-switcher.html.twig | 4 +- .../layouts/scripts/notConverted.twig | 4 +- .../Authentication/View/Metadata/idp.xml.twig | 4 +- .../View/Metadata/idps.xml.twig | 4 +- .../Consent/Attributes/tooltip.html.twig | 4 +- .../Proxy/Partials/WAYF/idp/idpList.html.twig | 4 +- .../Partials/WAYF/preselection.html.twig | 4 +- .../Authentication/View/Proxy/form.html.twig | 4 +- .../Default/View/Error/error.html.twig | 6 +- .../View/Error/method-not-allowed.html.twig | 2 +- .../Default/View/Error/not-found.html.twig | 2 +- .../layouts/scripts/default.html.twig | 4 +- .../Authentication/View/Index/index.html.twig | 4 +- .../Authentication/View/Metadata/idp.xml.twig | 4 +- .../View/Metadata/idps.xml.twig | 4 +- .../View/Proxy/consent.html.twig | 12 +- .../Authentication/View/Proxy/form.html.twig | 4 +- .../Default/View/Error/error.html.twig | 6 +- .../View/Error/method-not-allowed.html.twig | 2 +- .../Default/View/Error/not-found.html.twig | 2 +- theme/package.json | 26 +- theme/scripts/build.js | 6 +- theme/scripts/prepare-test.js | 8 +- theme/scripts/watch.js | 6 +- var/cache/.gitkeep | 0 var/log/.gitkeep | 0 web/app.php | 19 - web/cached/.gitignore | 2 - 257 files changed, 9515 insertions(+), 5677 deletions(-) create mode 100644 .env delete mode 100644 app/.htaccess delete mode 100644 app/AppCache.php delete mode 100644 app/AppKernel.php delete mode 100644 app/autoload.php delete mode 100644 app/config/config.yml delete mode 100644 app/config/config_dev.yml delete mode 100644 app/config/config_prod.yml delete mode 100644 app/config/config_test.yml delete mode 100644 app/config/functional_testing.yml.dist delete mode 100644 app/config/logging.yml delete mode 100644 app/config/routing.yml delete mode 100644 app/config/routing_test.yml delete mode 100755 app/console delete mode 100644 app/phpunit.xml.dist create mode 100755 bin/console create mode 100644 config/bootstrap.php create mode 100644 config/bundles.php rename {app/logs => config/packages/acc}/.gitkeep (100%) create mode 100644 config/packages/cache.yaml rename app/config/config_ci.yml => config/packages/ci/doctrine.yaml (84%) create mode 100644 config/packages/ci/framework.yaml create mode 100644 config/packages/ci/parameters.yaml create mode 100644 config/packages/ci/web_profiler.yaml create mode 100644 config/packages/config.yaml create mode 100644 config/packages/dev/config.yaml create mode 100644 config/packages/dev/debug.yaml create mode 100644 config/packages/dev/monolog.yaml create mode 100644 config/packages/dev/web_profiler.yaml create mode 100644 config/packages/doctrine.yaml create mode 100644 config/packages/doctrine_migrations.yaml create mode 100644 config/packages/engineblock_features.yaml create mode 100644 config/packages/framework.yaml create mode 100644 config/packages/monolog.yaml rename {app/config => config/packages}/parameters.yml.dist (97%) create mode 100644 config/packages/prod/.gitkeep rename app/config/security.yml => config/packages/security.yaml (91%) create mode 100644 config/packages/sensio_framework_extra.yaml create mode 100644 config/packages/swiftmailer.yaml create mode 100644 config/packages/test/config.yaml create mode 100644 config/packages/test/doctrine.yaml create mode 100644 config/packages/test/framework.yaml create mode 100644 config/packages/test/monolog.yaml create mode 100644 config/packages/test/twig.yaml create mode 100644 config/packages/test/web_profiler.yaml create mode 100644 config/packages/testing/.gitkeep create mode 100644 config/packages/twig.yaml create mode 100644 config/packages/validator.yaml create mode 100644 config/preload.php create mode 100644 config/routes.yaml rename app/config/routing_dev.yml => config/routes/ci/routing.yml (56%) create mode 100644 config/routes/dev/routing.yaml rename src/OpenConext/EngineBlockFunctionalTestingBundle/Resources/config/routing.yml => config/routes/functional_testing/functional_testing.yml (100%) create mode 100644 config/routes/test/routing.yaml create mode 100644 config/services.yaml create mode 100644 config/services/README.md create mode 100644 config/services/bridge.yml rename {src/OpenConext/EngineBlockBundle/Resources/config => config/services}/bridge_event_listeners.yml (58%) create mode 100644 config/services/ci/controllers.yml rename {src/OpenConext/EngineBlockFunctionalTestingBundle/Resources/config => config/services/ci}/mocks.yml (97%) rename {src/OpenConext/EngineBlockFunctionalTestingBundle/Resources/config => config/services/ci}/services.yml (85%) rename {src/OpenConext/EngineBlockBundle/Resources/config => config/services}/compat.yml (93%) create mode 100644 config/services/controllers/api.yml create mode 100644 config/services/controllers/authentication.yml create mode 100644 config/services/event_listeners.yml create mode 100644 config/services/logging.yml create mode 100644 config/services/repositories.yml create mode 100644 config/services/services.yml create mode 100644 config/services_ci.yaml create mode 100644 library/EngineBlock/Corto/Module/Services/Exception.php create mode 100644 library/EngineBlock/Corto/Module/Services/SessionLostException.php create mode 100644 library/EngineBlock/Corto/Module/Services/SessionNotStartedException.php rename {database => migrations}/DoctrineMigrations/Version20160307162928.php (93%) rename {database => migrations}/DoctrineMigrations/Version20160412141621.php (89%) rename {database => migrations}/DoctrineMigrations/Version20160721121856.php (84%) rename {database => migrations}/DoctrineMigrations/Version20161123131704.php (93%) rename {database => migrations}/DoctrineMigrations/Version20161209145942.php (83%) rename {database => migrations}/DoctrineMigrations/Version20161209152354.php (79%) rename {database => migrations}/DoctrineMigrations/Version20170331145533.php (89%) rename {database => migrations}/DoctrineMigrations/Version20170912155800.php (97%) rename {database => migrations}/DoctrineMigrations/Version20180118115853.php (89%) rename {database => migrations}/DoctrineMigrations/Version20180202131013.php (97%) rename {database => migrations}/DoctrineMigrations/Version20180215132859.php (88%) rename {database => migrations}/DoctrineMigrations/Version20180219171531.php (90%) rename {database => migrations}/DoctrineMigrations/Version20180220080549.php (87%) rename {database => migrations}/DoctrineMigrations/Version20180221133212.php (88%) rename {database => migrations}/DoctrineMigrations/Version20180618134736.php (88%) rename {database => migrations}/DoctrineMigrations/Version20180804090135.php (87%) rename {database => migrations}/DoctrineMigrations/Version20190425205743.php (87%) rename {database => migrations}/DoctrineMigrations/Version20190504110100.php (91%) rename {database => migrations}/DoctrineMigrations/Version20190703235333.php (88%) rename {database => migrations}/DoctrineMigrations/Version20190710141146.php (94%) rename {database => migrations}/DoctrineMigrations/Version20191011132428.php (100%) rename {database => migrations}/DoctrineMigrations/Version20200422145000.php (93%) rename {database => migrations}/DoctrineMigrations/Version20201005161700.php (100%) rename {database => migrations}/DoctrineMigrations/Version20220425090852.php (100%) rename {database => migrations}/DoctrineMigrations/Version20230418113623.php (100%) rename {database => migrations}/DoctrineMigrations/Version20230824090020.php (100%) rename {database => migrations}/DoctrineMigrations/Version20250206095609.php (100%) create mode 100644 public/.gitignore rename {web => public}/favicon.ico (100%) create mode 100644 public/index.php rename {web => public}/robots.txt (100%) create mode 100644 src/Kernel.php delete mode 100644 src/OpenConext/EngineBlockBundle/DependencyInjection/Configuration.php delete mode 100644 src/OpenConext/EngineBlockBundle/DependencyInjection/OpenConextEngineBlockExtension.php delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/bridge.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/controllers.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/controllers/api.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/controllers/authentication.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/event_listeners.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/logging.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/repositories.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/routing.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/routing/feedback.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/routing/identity_provider.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/routing/logout.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/routing/metadata.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/routing/service_provider.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/routing/wayf.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/routing_api.yml delete mode 100644 src/OpenConext/EngineBlockBundle/Resources/config/services.yml delete mode 100644 src/OpenConext/EngineBlockFunctionalTestingBundle/DependencyInjection/OpenConextEngineBlockFunctionalTestingExtension.php delete mode 100644 src/OpenConext/EngineBlockFunctionalTestingBundle/Resources/config/controllers.yml delete mode 100644 tests/behat-ci.yml create mode 100644 var/cache/.gitkeep create mode 100755 var/log/.gitkeep delete mode 100644 web/app.php delete mode 100644 web/cached/.gitignore diff --git a/.dockerignore b/.dockerignore index b3b2d4d92..b6d62a320 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,7 +2,7 @@ !ci !config !data -!database +!migrations !docker !languages !library diff --git a/.env b/.env new file mode 100644 index 000000000..6120c1cb1 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +APP_ENV=prod +APP_DEBUG=false diff --git a/.github/workflows/run-cypress.yml b/.github/workflows/run-cypress.yml index 95ccbff28..1eeb0457b 100644 --- a/.github/workflows/run-cypress.yml +++ b/.github/workflows/run-cypress.yml @@ -4,6 +4,7 @@ on: branches: - main - upgrade + - feature/sf_upgrade_44 pull_request: workflow_dispatch: # run at 6 hour UTC @@ -24,15 +25,15 @@ jobs: uses: actions/checkout@master - name: chown some dirs run: | - mkdir tmp vendor && sudo chown -R 33 app/ theme/ web/ tmp/ vendor/ + mkdir tmp vendor && sudo chown -R 33 theme/ public/ tmp/ vendor/ var/ config/ - name: Build Docker environmnent if: always() run: | cd docker && ${DOCKER_COMPOSE} up -d --build && docker compose exec -T --user www-data engine.dev.openconext.local bash -c ' - SYMFONY_ENV=ci composer install --prefer-dist -n -o --ignore-platform-reqs && \ - ./app/console cache:clear --env=ci && \ + composer install --prefer-dist -n -o --ignore-platform-reqs && \ + ./bin/console cache:clear --env=ci && \ cd theme && CYPRESS_INSTALL_BINARY=0 yarn install --frozen-lockfile && EB_THEME=skeune yarn build ' - name: Run Cypress integration tests @@ -43,11 +44,11 @@ jobs: EB_THEME=skeune ./theme/scripts/prepare-test.js ' && \ docker compose exec -T cypress bash -c ' - cd e2e && yarn install && cypress run --spec cypress/integration/skeune/**/*.spec.js,cypress/integration/shared/*.spec.js --browser=chrome --headless + yarn install && cypress run --spec "cypress/integration/skeune/**/*.spec.js,cypress/integration/shared/*.spec.js" --browser=chrome --headless ' && \ docker compose exec -T --user www-data engine.dev.openconext.local bash -c ' EB_THEME=openconext ./theme/scripts/prepare-test.js ' && \ docker compose exec -T cypress bash -c ' - cd e2e && cypress run --spec cypress/integration/openconext/**/*.spec.js --browser=chrome --headless + cypress run --spec "cypress/integration/openconext/**/*.spec.js" --browser=chrome --headless ' diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 83a0d87bf..25ecd79be 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -4,6 +4,7 @@ on: branches: - main - upgrade + - feature/sf_upgrade_44 pull_request: # run at 6 hour UTC schedule: @@ -24,15 +25,15 @@ jobs: uses: actions/checkout@master - name: chown some dirs run: | - mkdir tmp vendor && sudo chown -R 33 app/ theme/ web/ tmp/ vendor/ + mkdir tmp vendor && sudo chown -R 33 theme/ public/ tmp/ vendor/ var/ tests/ config/ - name: Build Docker environmnent if: always() run: | cd docker && ${DOCKER_COMPOSE} up -d --build && docker compose exec -T --user www-data engine.dev.openconext.local bash -c ' - SYMFONY_ENV=ci composer install --prefer-dist -n -o --ignore-platform-reqs && \ - ./app/console cache:clear --env=ci && \ + composer install --prefer-dist -n -o --ignore-platform-reqs && \ + ./bin/console cache:clear --env=ci && \ cd theme && CYPRESS_INSTALL_BINARY=0 yarn install --frozen-lockfile && EB_THEME=skeune yarn build ' - name: Run code quality tests @@ -48,58 +49,50 @@ jobs: echo -e "\nDoc header check\n" && \ ./vendor/bin/docheader check src/ tests/ library/ --exclude-dir resources --exclude-dir languages ' - env: - SYMFONY_ENV: ci - name: Run unit tests if: always() run: | - cd docker && APP_ENV=ci SYMFONY_ENV=ci docker compose exec -T --user www-data engine.dev.openconext.local bash -c ' + cd docker && APP_ENV=ci docker compose exec -e XDEBUG_MODE=coverage -T --user www-data engine.dev.openconext.local bash -c ' echo -e "\nInstalling database fixtures...\n" && \ - ./app/console doctrine:schema:drop --force --env=ci && \ - ./app/console doctrine:schema:create --env=ci && \ + ./bin/console doctrine:schema:drop --force --env=ci && \ + ./bin/console doctrine:schema:create --env=ci && \ echo -e "\nPHPUnit legacy tests\n" && \ ./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=eb4 --coverage-text && \ echo -e "\nPHPUnit unit tests\n" && \ ./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=unit --coverage-text && \ echo -e "\nPHPUnit API acceptance tests\n" && \ - APP_ENV=ci ./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=functional --coverage-text && \ + APP_ENV=test ./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=functional --coverage-text && \ echo -e "\nPHPUnit integration tests\n" && \ ./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=integration --coverage-text ' - env: - SYMFONY_ENV: ci - name: Run acceptance tests if: always() run: | cd docker && docker compose exec -T --user www-data engine.dev.openconext.local bash -c ' echo -e "\nInstalling database fixtures...\n" && \ - ./app/console doctrine:schema:drop --force --env=ci && \ - ./app/console doctrine:schema:create --env=ci && \ + ./bin/console doctrine:schema:drop --force --env=ci && \ + ./bin/console doctrine:schema:create --env=ci && \ echo -e "\nPreparing frontend assets\n" && \ EB_THEME=skeune ./theme/scripts/prepare-test.js > /dev/null && \ echo -e "\nRun the Behat tests\n" && \ - ./vendor/bin/behat -c ./tests/behat-ci.yml --suite default -vv --format progress --strict && \ - echo -e "\nBehat tests (with selenium and headless Chrome)\n" && \ - ./vendor/bin/behat -c ./tests/behat-ci.yml --suite selenium -vv --format progress --strict + ./vendor/bin/behat -c ./tests/behat.yml --suite default -vv --format pretty --strict && \ + echo -e "\nBehat tests (with headless Chrome)\n" && \ + ./vendor/bin/behat -c ./tests/behat.yml --suite functional -vv --format pretty --strict ' - env: - SYMFONY_ENV: ci - name: Run linting tests if: always() run: | cd docker && docker compose exec -T --user www-data engine.dev.openconext.local bash -c ' echo -e "\nTwig lint\n" && \ - app/console lint:twig theme/ && \ + bin/console lint:twig theme/ && \ cd theme && \ echo -e "\nLint frontend assets\n" && \ yarn lint ' - env: - SYMFONY_ENV: ci - name: Show log on failure if: failure() run: | - cd docker && docker compose exec -T engine.dev.openconext.local cat /var/www/html/app/logs/ci/ci.log + cd docker && docker compose exec -T engine.dev.openconext.local cat /var/www/html/var/log/application.log - name: Send notification on production build nightly build failure uses: sonots/slack-notice-action@v3 with: diff --git a/.gitignore b/.gitignore index 0a12fb5f9..09c62b71f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,31 +1,44 @@ -/build -/vendor/ -/www/authentication/generated/ -bin/ignore_me.php -/web/bundles -/web/app_dev.php -/web/javascripts/* -/web/stylesheets/* -/web/images/* -/web/fonts/* -!/web/fonts/.gitkeep -/app/cache -/app/logs -/app/SymfonyRequirements.php -/app/check.php -/tmp/ -/app/config/functional_testing.yml -/app/config/parameters.yml -/app/config/config_local.yml -.idea -local-php-security-checker -/tests/e2e/node_modules -/tests/.phpunit.result.cache -/languages/overrides.*.php -/theme/node_modules -/theme/.sass-cache -/theme/**/visual-regression/screenshots/* -!/theme/**/visual-regression/screenshots/.gitkeep -/theme/**/__image_snapshots__ +config/packages/parameters.yml + +var/cache/* +var/log/* +!var/cache/.gitkeep +!var/log/.gitkeep + +public/fonts +public/images +public/javascripts +public/stylesheets + +theme/node_modules +vendor + +tests/.phpunit.result.cache +tests/e2e/node_modules + +coverage.xml +.idea .DS_Store + +###> symfony/framework-bundle ### +/.env.local +/.env.local.php +/.env.*.local +/config/secrets/prod/prod.decrypt.private.php +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + +###> phpunit/phpunit ### +/phpunit.xml +.phpunit.result.cache +###< phpunit/phpunit ### + +###> symfony/phpunit-bridge ### +.phpunit +.phpunit.result.cache +/phpunit.xml +###< symfony/phpunit-bridge ### + diff --git a/CHANGELOG.md b/CHANGELOG.md index b5dd9b12b..a674ef6dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,12 @@ More information about our release strategy can be found in the [Development Guidelines](https://github.com/OpenConext/OpenConext-engineblock/wiki/Development-Guidelines#release-notes) on the EngineBlock wiki. +## 7.0.0 +Breaking changes please see: [upgrading](UPGRADING.md#700) + +Maintenance: +* upgrade to symfony 4.4 + ## 6.18.0 Dependencies: diff --git a/README.md b/README.md index 54b05bbbd..55fa25e28 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ - # OpenConext EngineBlock Build Status: @@ -19,10 +18,12 @@ See the [UPGRADING.md][upgrading] file ## (Theme) Development -Please see the [wiki][eb-wiki-theme-development] for information on how to get started with developing themes for OpenConext EngineBlock +Please see the [wiki][eb-wiki-theme-development] for information on how to get started with developing themes for +OpenConext EngineBlock In short, themes require front-end resource compilation which can be done by running the following commands: -First set the desired theme name in the parameters.yml. This will load the correct Twig templates as they are a part of the Symfony config. +First set the desired theme name in the parameters.yml. This will load the correct Twig templates as they are a part of +the Symfony config. ``` parameters: @@ -36,10 +37,11 @@ Next build the front-end assets for the selected theme. (cd theme && yarn install --frozen-lockfile && yarn build) ``` -Finally, when not in an environment with the debug flag enabled, you need to clear the cache. This will ensure the translations and templates are swapped out for the ones found in the new theme. +Finally, when not in an environment with the debug flag enabled, you need to clear the cache. This will ensure the +translations and templates are swapped out for the ones found in the new theme. ``` -$ php72 ./app/console cache:clear --env=prod +$ php72 ./bin/console cache:clear --env=prod ``` To setup the required tooling on the container, the following steps might be useful: @@ -50,7 +52,8 @@ To setup the required tooling on the container, the following steps might be use sudo npm install --global yarn (yarn install --frozen-lockfile && yarn build) -In addition to the npm/yarn scripts that are available to run (unit/e2e) tests and quality assurance, you can also use the +In addition to the npm/yarn scripts that are available to run (unit/e2e) tests and quality assurance, you can also use +the Twig linting tool built into Symfony. To run this linter: ``` @@ -58,7 +61,7 @@ If you are able to run Ant build targets use: $ ant php-twig-lint But you can also run the linter directly from the Symfony console. From the webroot: -$ php72 ./app/console lint:twig theme/ +$ php72 ./bin/console lint:twig theme/ ``` ## System Requirements @@ -84,7 +87,8 @@ it is only regularly tested with RedHat Enterprise Linux and CentOS._ _**Note**: you are highly encouraged to use [OpenConext-Devconf][op-dev] to deploy OpenConext installations._ -If you are reading this then you've probably already installed a copy of EngineBlock somewhere on the destination server, +If you are reading this then you've probably already installed a copy of EngineBlock somewhere on the destination +server, if not, then that would be step 1 for the installation. If you do not use [OpenConext-Devconf][op-dev] and have an installed copy and your server meets all the requirements @@ -104,57 +108,62 @@ above, then please follow the steps below to start your installation. mysql> create database engineblock default charset utf8 default collate utf8_unicode_ci; - ### Then configure application EngineBlock requires you to have the folders below writable by your webserver user. - app/cache + var/cache + var/log Run the command below in the root of your project to install the required dependencies. composer install --no-interaction --optimize-autoloader --prefer-dist --no-dev - **Note**: +**Note**: The command above assumes that the application must be build for production, and omits development dependencies. -Then edit the `parameters.yml` with your favorite editor and review the settings to make sure it matches your configuration. +Then edit the `parameters.yml` with your favorite editor and review the settings to make sure it matches your +configuration. ### Install database schema updates To install possible database updates, call doctrine migrations by using the following console command: - app/console doctrine:migrations:migrate --env=prod + bin/console doctrine:migrations:migrate --env=prod _**Note**: EngineBlock requires database settings, without it doctrine migrate will not function. Furthermore, this assumes that the application must use the production settings (`--env=prod`), this could be replaced with `dev` should you run a development version._ - ### Configure HTTP server -Configure a single virtual host, this should point to the `web` directory: +Configure a single virtual host, this should point to the `public` directory: - DocumentRoot /opt/www/engineblock/web + DocumentRoot /opt/www/engineblock/public It should also serve both the `engine.yourdomain.example` and `engine-api.yourdomain.example` domains. -Make sure the `ENGINEBLOCK_ENV` is set, and that the `SYMFONY_ENV` is set, this can be mapped from `ENGINEBLOCK_ENV` as: +Make sure the `APP_ENV` is set for the correct environment: -| `ENGINEBLOCK_ENV` | `SYMFONY_ENV` | -|-------------------| --- | -| production | prod | -| acceptance | acc | -| test | test | -| dev | dev | +| `APP_ENV` | Command | +|---------------|-------------------------------------------------------------------------------------------------------| +| prod | For production environment | +| acc | For acceptance environment | +| testing | For test environment | +| test | For unit testing: This suite has additional configuration and loads additional testing services | +| ci | For functional testing: This suite has additional configuration and loads additional testing services | +| dev | For development: This suite has additional debug configuration | + +Besides `APP_ENV` the only other environment variable supported is `APP_DEBUG`. For other adjustments, you would have to +adjust the parameters.yml file and place it in the corresponding environment folder in `config/`. **EXAMPLE** - SetEnv ENGINEBLOCK_ENV !!ENV!! - SetEnv SYMFONY_ENV !!SF_ENV!! + SetEnv APP_ENV !!SF_ENV!! + SetEnv APP_DEBUG true/false -Make sure you have the following rewrite rules (replace `app.php` with `app_dev.php` for development): +Make sure you have the following rewrite rules: RewriteEngine On # We support only GET/POST/HEAD @@ -164,10 +173,10 @@ Make sure you have the following rewrite rules (replace `app.php` with `app_dev. # Note that the requested URL MUST be appended because Corto uses the PATH_INFO server variable RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d - RewriteRule ^(.*)$ /app.php/$1 [L] # Send the query string to index.php + RewriteRule ^(.*)$ /index.php/$1 [L] # Send the query string to index.php # Requests to the domain (no query string) - RewriteRule ^$ app.php/ [L] + RewriteRule ^$ index.php/ [L] Note that EngineBlock SHOULD run on HTTPS, you can redirect users from HTTP to HTTPS with the following Apache rewrite rules on a *:80 VirtualHost: @@ -176,13 +185,6 @@ with the following Apache rewrite rules on a *:80 VirtualHost: RewriteCond %{SERVER_PORT} ^80$ RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R=301] -### Grab the front controller -Copy the `app_dev.php.dist` file to the `web` directory. - -```bash -Openconext-engineblock $ cp app_dev.php.dist web/app_dev.php -``` - ### Test your EngineBlock instance Use these URLs to test your EngineBlock instance: @@ -219,7 +221,7 @@ If you are using this pattern, an update can be done with the following: 3. Run the database migrations script. - app/console doctrine:migrations:migrate --env=prod + bin/console doctrine:migrations:migrate --env=prod 4. Change the symlink. @@ -228,14 +230,14 @@ If you are using this pattern, an update can be done with the following: The list of browsers that should be supported: | [IE / Edge](http://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | [iOS Safari](http://godban.github.io/browsers-support-badges/)
iOS Safari | [Samsung](http://godban.github.io/browsers-support-badges/)
Samsung | [Opera](http://godban.github.io/browsers-support-badges/)
Opera | -| --------- | --------- | --------- | --------- | --------- | --------- | --------- | -| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions| last 2 versions| last 2 versions| last 2 versions +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| IE10, IE11, Edge | last 2 versions | last 2 versions | last 2 versions | last 2 versions | last 2 versions | last 2 versions The list of browsers being tested: | [IE / Edge](http://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome Android | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | [iOS Safari](http://godban.github.io/browsers-support-badges/)
iOS Safari | -| --------- | --------- | --------- | --------- | --------- | --------- | -| IE11, Edge last version| last version| last version| last version| last version| last version| +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| IE11, Edge last version | last version | last version | last version | last version | last version | ## Additional Documentation @@ -250,17 +252,31 @@ Also, the following documentation can be found in the [docs][docs] directory: 1. [Release notes for releases < 5.0.0][docs-release-notes] [qa-build]: https://github.com/OpenConext/OpenConext-engineblock/workflows/test-integration/badge.svg + [license]: LICENSE + [notice]: NOTICE.txt + [upgrading]: UPGRADING.md + [comp]: https://getcomposer.org/ + [op-dev]: https://github.com/OpenConext/OpenConext-devconf + [manage]: https://github.com/OpenConext/OpenConext-manage + [eb-wiki-theme-development]: https://github.com/OpenConext/OpenConext-engineblock/wiki/Development-Guidelines#theme-development + [wiki]: https://github.com/OpenConext/OpenConext-engineblock/wiki + [wiki-development]: https://github.com/OpenConext/OpenConext-engineblock/wiki/Development-Guidelines + [docs]: https://github.com/OpenConext/OpenConext-engineblock/tree/master/docs/index.md + [docs-license]: https://github.com/OpenConext/OpenConext-engineblock/tree/master/docs/LICENSE + [docs-release]: https://github.com/OpenConext/OpenConext-engineblock/tree/master/docs/release_procedure.md + [docs-filter]: https://github.com/OpenConext/OpenConext-engineblock/tree/master/docs/filter_commands.md + [docs-release-notes]: https://github.com/OpenConext/OpenConext-engineblock/tree/master/docs/release_notes diff --git a/UPGRADING.md b/UPGRADING.md index 4827ff2fe..dbd693ce6 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -1,5 +1,71 @@ # UPGRADE NOTES +## 7.0.0 +Upgraded Symfony from **version 3.3** to **version 4.4 (LTS)**. +This update brings modernized architecture, performance improvements, enhanced developer experience, and long-term support till November 2023. + +### Directory Structure Overhaul - technical changes: +- The `app/` directory has been replaced with `config/` and `src/` +- All configuration files now reside under [config/](config), organized by environment +- Application configuration resides in [config/packages](config/packages) +- The console has moved form `app/console` to [bin/console](bin/console) +- Database migrations have moved to [migrations/](migrations) +- `AppKernel` has been replaced with [Kernel](src/Kernel.php) +- Logs has moved from `app/logs` to [var/log](var/log) +- cache has moved from `app/cache` to [var/cache](var/cache) +- The public access folder has changed from `web/` to [public/](public) +- The entry point has changed from `app.php` to [index.php](public/index.php) +- Some environment variables have changed. +- [index.php](public/index.php) has been updated to load based on environment variables and has some additional environment variables checks. +- All configurations injections from inside `src/` has been moved to `config/` + +### ⚠️ Breaking Changes - Configurational adjustments required: + +#### New public folder +Replace `web/` with `public/`. Ensure the folder `public/` is accessible and your php webservice is pointing to `public/index.php`. In apache this would mean: + +```shell +DocumentRoot /var/www/html/public + + Require all granted + Options -MultiViews + RewriteEngine On + RewriteBase / + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php [QSA,L] + +``` + +#### Configuration +1. **Any** configuration parameters should be mapped to a different folder location inside `config/`. + Most likely the only change will be `app/config/parameters.yml` to `config/packages/[env]/parameters.yml` +2. Overwriting the `config/packages/parameters.yml` will still work however, using the correct environment package is encouraged. +3. The value 'secret' in the parameters.yml is no longer used. Instead you should set `APP_SECRET` as an + environment variable: +
+ Length: While Symfony doesn’t enforce a strict length, at least 32 bytes (64 hex characters) is recommended for strong security. Uniqueness: Each application instance should have its own unique secret. Reusing secrets across projects or environments is discouraged +4. Remove the following environment variables: + - `ENGINEBLOCK_ENV` + - `SYMFONY_ENV` +5. Add the following environment variables: + - `APP_ENV` set for the correct env. See [README](README.md#configure-http-server) + - `APP_SECRET` + - `APP_DEBUG` set to true to enable debug mode. + +Example `.env` +```shell +APP_ENV=prod +APP_DEBUG=false +APP_SECRET=04d8ec52d3fd4eb9a8f5d4c69d82cfaec39f764af74b223c44e1ba9574b4b3d6 +``` + +Note: +
+See [apache2.conf](docker/ci/apache2.conf) and [docker-compose.yml](docker/docker-compose.yml) as an example. +
+See The changes in [https://github.com/OpenConext/OpenConext-devconf/compare/main...feature/sf_upgrade_44](https://github.com/OpenConext/OpenConext-devconf/compare/main...feature/sf_upgrade_44) as an example + + ## 6.15 -> 6.18 ### Dependencies @@ -113,7 +179,7 @@ application will result in the soft deletion of the consent row for that person, consent removal of. In order to work with this feature, the latest database migration must be installed on your database(s) containing the -`consent` table. This should be as simple as running `app/console doctrine:migrations:migrate`. Or executing +`consent` table. This should be as simple as running `bin/console doctrine:migrations:migrate`. Or executing `Version20220425090852` manually. ## 6.2 > 6.3 @@ -568,7 +634,7 @@ database.dbname = engineblock When a master/slave setup is still required, this can be configured by creating a `config_local.yml` in `app/config`. This file will be loaded automatically if present and will allow overriding any configuration present. Do note that in -order to be able to load the file `app/console cache:clear --env={current_env_as_in_vhost}` must be executed once. +order to be able to load the file `bin/console cache:clear --env={current_env_as_in_vhost}` must be executed once. More information on how to configure Doctrine can be found in [the bundle documentation][doct1] and the [configuration reference documentation][doct2]. Before considering using a master/slave setup, please review [this documentation][doct3] as to when a master or slave is used for a connection. diff --git a/app/.htaccess b/app/.htaccess deleted file mode 100644 index fb1de45bd..000000000 --- a/app/.htaccess +++ /dev/null @@ -1,7 +0,0 @@ - - Require all denied - - - Order deny,allow - Deny from all - diff --git a/app/AppCache.php b/app/AppCache.php deleted file mode 100644 index 639ec2cd7..000000000 --- a/app/AppCache.php +++ /dev/null @@ -1,7 +0,0 @@ -getEnvironment(), array('dev', 'test', 'ci'))) { - $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); - $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); - - // own bundles - $bundles[] = new OpenConext\EngineBlockFunctionalTestingBundle\OpenConextEngineBlockFunctionalTestingBundle(); - } - - return $bundles; - } - - public function registerContainerConfiguration(LoaderInterface $loader) - { - $configurationDirectory = $this->getRootDir() . '/config/'; - $loader->load($configurationDirectory . 'config_' . $this->getEnvironment() . '.yml'); - - $localConfiguration = $configurationDirectory . 'config_local.yml'; - if (!file_exists($localConfiguration)) { - return; - } - - if (!is_readable($localConfiguration)) { - throw new \RuntimeException(sprintf('Local configuration file "%s" is not readable', $localConfiguration)); - } - - $loader->load(($localConfiguration)); - } - - public function getCacheDir() - { - return $this->rootDir . '/cache/' . $this->environment; - } - - public function getLogDir() - { - return $this->rootDir . '/logs/' . $this->environment; - } - - public function getProjectDir() - { - // This is needed to define the project dir without composer.json - // @see: https://symfony.com/doc/current/reference/configuration/kernel.html#configuration-kernel-project-directory - return \dirname(__DIR__); - } - -} diff --git a/app/autoload.php b/app/autoload.php deleted file mode 100644 index 31321faa5..000000000 --- a/app/autoload.php +++ /dev/null @@ -1,11 +0,0 @@ -getParameterOption(['--env', '-e'], getenv('SYMFONY_ENV') ?: 'dev'); -$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(['--no-debug', '']) && $env !== 'prod'; - -if ($debug) { - Debug::enable(); -} - -$kernel = new AppKernel($env, $debug); -$application = new Application($kernel); -$application->run($input); diff --git a/app/phpunit.xml.dist b/app/phpunit.xml.dist deleted file mode 100644 index dc1bf70bd..000000000 --- a/app/phpunit.xml.dist +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - ../src/*/*Bundle/Tests - ../src/*/Bundle/*Bundle/Tests - ../src/*Bundle/Tests - - - - - - - - ../src - - ../src/*Bundle/Resources - ../src/*Bundle/Tests - ../src/*/*Bundle/Resources - ../src/*/*Bundle/Tests - ../src/*/Bundle/*Bundle/Resources - ../src/*/Bundle/*Bundle/Tests - - - - diff --git a/bin/console b/bin/console new file mode 100755 index 000000000..3882cc177 --- /dev/null +++ b/bin/console @@ -0,0 +1,39 @@ +#!/usr/bin/env php +getParameterOption(['--env', '-e'], $_ENV['APP_ENV'], true); +$debug = filter_var($_ENV['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN) && !$input->hasParameterOption('--no-debug', true); + +if ($debug) { + umask(0000); + + Debug::enable(); +} + +$kernel = new Kernel($env, $debug); +$application = new Application($kernel); +$application->run($input); diff --git a/bin/makeRelease.sh b/bin/makeRelease.sh index cefd67aef..766ab35c4 100755 --- a/bin/makeRelease.sh +++ b/bin/makeRelease.sh @@ -1,9 +1,7 @@ #!/bin/bash -PREVIOUS_SF_ENV=${SYMFONY_ENV} -PREVIOUS_EB_ENV=${ENGINEBLOCK_ENV} -export SYMFONY_ENV=prod -export ENGINEBLOCK_ENV=production +PREVIOUS_APP_ENV=${APP_ENV} +export APP_ENV=prod RELEASE_DIR=${HOME}/Releases GITHUB_USER=OpenConext @@ -166,5 +164,4 @@ then fi fi -export SYMFONY_ENV=${PREVIOUS_SF_ENV} -export ENGINEBLOCK_ENV=${PREVIOUS_EB_ENV} +export APP_ENV=${PREVIOUS_APP_ENV} diff --git a/ci/qa/behat.sh b/ci/qa/behat.sh index d542fa36b..fc2343284 100755 --- a/ci/qa/behat.sh +++ b/ci/qa/behat.sh @@ -4,7 +4,7 @@ set -e cd $(dirname $0)/../../ -CURRENT_ENV="${SYMFONY_ENV:-dev}" +CURRENT_ENV="${APP_ENV:-dev}" if [ "${CURRENT_ENV}" != "ci" ] then @@ -13,17 +13,17 @@ then fi echo -e "\nInstalling database fixtures...\n" -./app/console doctrine:schema:drop --force --env=ci -./app/console doctrine:schema:create --env=ci +./bin/console doctrine:schema:drop --force --env=ci +./bin/console doctrine:schema:create --env=ci echo -e "\nPreparing frontend assets\n" +rm -rf var/cache/ci EB_THEME=skeune ./theme/scripts/prepare-test.js > /dev/null - -chown -R www-data app/cache/ +chown -R www-data var/cache/ chmod -R 0777 /tmp/eb-fixtures echo -e "\nRun the Behat tests\n" -./vendor/bin/behat -c ./tests/behat-ci.yml --suite default -vv --format progress --strict $@ +./vendor/bin/behat -c ./tests/behat.yml --suite default -vv --format pretty --strict -#echo -e "\nBehat tests (with selenium and headless Chrome)\n" -#./vendor/bin/behat -c ./tests/behat-ci.yml --suite selenium -vv --format progress --strict +echo -e "\nBehat tests (with headless Chrome)\n" +./vendor/bin/behat -c ./tests/behat.yml --suite functional -vv --format pretty --strict diff --git a/ci/qa/lint.sh b/ci/qa/lint.sh index f1f6ec23f..16eac7e72 100755 --- a/ci/qa/lint.sh +++ b/ci/qa/lint.sh @@ -4,11 +4,12 @@ set -e cd $(dirname $0)/../../ echo -e "\nTwig lint\n" -app/console lint:twig theme/ +bin/console lint:twig theme/ cd theme echo -e "\nLint frontend assets\n" +yarn install yarn lint cd - diff --git a/ci/qa/phpunit.sh b/ci/qa/phpunit.sh index 9865233c2..205de40dd 100755 --- a/ci/qa/phpunit.sh +++ b/ci/qa/phpunit.sh @@ -3,21 +3,21 @@ set -e cd $(dirname $0)/../../ -chown -R www-data app/cache/ +chown -R www-data var/cache/ chmod -R 0777 /tmp/eb-fixtures echo -e "\nInstalling database fixtures...\n" -./app/console doctrine:schema:drop --force --env=ci -./app/console doctrine:schema:create --env=ci +./bin/console doctrine:schema:drop --force --env=ci +./bin/console doctrine:schema:create --env=ci echo -e "\nPHPUnit legacy tests\n" -./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=eb4 --coverage-text +XDEBUG_MODE=coverage ./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=eb4 --coverage-clover coverage.xml echo -e "\nPHPUnit unit tests\n" -./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=unit --coverage-text +XDEBUG_MODE=coverage ./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=unit --coverage-clover coverage.xml echo -e "\nPHPUnit API acceptance tests\n" -APP_ENV=ci ./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=functional --coverage-text +APP_ENV=test XDEBUG_MODE=coverage ./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=functional --coverage-clover coverage.xml echo -e "\nPHPUnit integration tests\n" -./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=integration --coverage-text +XDEBUG_MODE=coverage ./vendor/bin/phpunit --configuration=./tests/phpunit.xml --testsuite=integration --coverage-clover coverage.xml diff --git a/composer.json b/composer.json index 384d3ba81..99f89e4a4 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,7 @@ { "name": "openconext/engineblock", "description": "OpenConext SAML proxy", + "version": "7.0.0-dev", "type": "project", "keywords": [ "saml", @@ -15,16 +16,16 @@ "source": "https://github.com/OpenConext/OpenConext-engineblock" }, "require": { - "php": "~7.2", + "php": "^7.2.5", "ext-dom": "*", "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", "beberlei/assert": "^2.6", "composer/package-versions-deprecated": "^1.11", - "doctrine/doctrine-bundle": "^1.11", - "doctrine/doctrine-migrations-bundle": "^1.3", - "doctrine/orm": "~2.6", + "doctrine/doctrine-bundle": "^2.5.7", + "doctrine/doctrine-migrations-bundle": "^3.2.5", + "doctrine/orm": "^2.20.5", "guzzlehttp/guzzle": "^6.3", "incenteev/composer-parameter-handler": "~2.0", "monolog/monolog": "~1.13", @@ -32,24 +33,35 @@ "openconext/saml-value-object": "^1.3", "pimple/pimple": "~2.1", "ramsey/uuid": "^3.3.0", - "sensio/framework-extra-bundle": "^3.0", - "sensio/generator-bundle": "^3.0", + "sensio/framework-extra-bundle": "^5.0", "simplesamlphp/saml2": "4.17.*", - "swiftmailer/swiftmailer": "^5.4", - "symfony/monolog-bundle": "^3.1.0", - "symfony/swiftmailer-bundle": "^2.6", - "symfony/symfony": "3.4.*", - "twig/extensions": "^1.5", - "twig/twig": "^2.0" + "swiftmailer/swiftmailer": "^6.0", + "symfony/asset": "^4.4", + "symfony/console": "^4.4", + "symfony/dotenv": "^4.4", + "symfony/expression-language": "^4.4", + "symfony/flex": "^1.17", + "symfony/form": "^4.4", + "symfony/framework-bundle": "^4.4", + "symfony/monolog-bundle": "^3.5", + "symfony/security-bundle": "^4.4", + "symfony/swiftmailer-bundle": "^3.0", + "symfony/templating": "4.4.*", + "symfony/translation": "^4.4", + "symfony/twig-bundle": "^4.4", + "symfony/validator": "^4.4", + "symfony/yaml": "^4.4", + "twig/twig": "^v3.11.3" }, "require-dev": { "ext-zlib": "*", "behat/behat": "~3.7.0", "behat/mink": "~1.7", - "behat/mink-extension": "~2.0", "behat/mink-goutte-driver": "~1.0", - "behat/mink-selenium2-driver": "^1.3", - "behat/symfony2-extension": "~2.0", + "dmore/behat-chrome-extension": "^1.4", + "dmore/chrome-mink-driver": "^2.9", + "friends-of-behat/mink-extension": "^2.5", + "friends-of-behat/symfony-extension": "^2.1", "ingenerator/behat-tableassert": "^1.1", "league/flysystem": "^2.5", "liip/functional-test-bundle": "^4.3", @@ -60,7 +72,10 @@ "phpmd/phpmd": "^2.13", "phpunit/phpunit": "^8.5", "squizlabs/php_codesniffer": "^3.7", - "symfony/phpunit-bridge": "^3.0" + "symfony/debug-bundle": "4.4.*", + "symfony/phpunit-bridge": "^6.4", + "symfony/var-dumper": "4.4.*", + "symfony/web-profiler-bundle": "4.4.*" }, "replace": { "symfony/polyfill-mbstring": "1.99", @@ -69,6 +84,10 @@ "symfony/polyfill-php56": "1.99" }, "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd" + }, "post-install-cmd": [ "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters" ], @@ -92,8 +111,7 @@ "OpenConext\\": "src/OpenConext" }, "classmap": [ - "app/AppKernel.php", - "app/AppCache.php" + "src/Kernel.php" ] }, "autoload-dev": { @@ -103,31 +121,30 @@ "tests/integration/OpenConext/", "tests/functional/OpenConext/" ] - }, - "files": [ - "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php" - ] + } }, "config": { "optimize-autoloader": true, "platform": { - "php": "7.2" + "php": "7.2.5" }, - "sort-packages": true + "sort-packages": true, + "allow-plugins": { + "symfony/flex": true + } }, "extra": { - "symfony-app-dir": "app", - "symfony-var-dir": "app", - "symfony-bin-dir": "app", - "symfony-web-dir": "web", - "incenteev-parameters": [ - { - "file": "app/config/parameters.yml" - }, - { - "file": "app/config/functional_testing.yml" - } - ] + "symfony": { + "allow-contrib": false, + "require": "4.4.*" + }, + "symfony-var-dir": "var", + "symfony-bin-dir": "bin", + "symfony-web-dir": "public", + "incenteev-parameters": { + "file": "config/packages/parameters.yml", + "dist-file": "config/packages/parameters.yml.dist" + } }, "archive": { "exclude": [ diff --git a/composer.lock b/composer.lock index e67a2e4e9..f86bfca78 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5a2344673cd54385a01a30f9a8940f79", + "content-hash": "f0ba8d7025afe8aedeb8f584e7e9538f", "packages": [ { "name": "beberlei/assert", @@ -59,20 +59,24 @@ "assertion", "validation" ], + "support": { + "issues": "https://github.com/beberlei/assert/issues", + "source": "https://github.com/beberlei/assert/tree/v2.9.9" + }, "time": "2019-05-28T15:27:37+00:00" }, { "name": "composer/package-versions-deprecated", - "version": "1.11.99", + "version": "1.11.99.5", "source": { "type": "git", "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "c8c9aa8a14cc3d3bec86d0a8c3fa52ea79936855" + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/c8c9aa8a14cc3d3bec86d0a8c3fa52ea79936855", - "reference": "c8c9aa8a14cc3d3bec86d0a8c3fa52ea79936855", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", "shasum": "" }, "require": { @@ -114,6 +118,10 @@ } ], "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "support": { + "issues": "https://github.com/composer/package-versions-deprecated/issues", + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" + }, "funding": [ { "url": "https://packagist.com", @@ -128,34 +136,38 @@ "type": "tidelift" } ], - "time": "2020-08-25T05:50:16+00:00" + "time": "2022-01-17T14:14:24+00:00" }, { "name": "doctrine/annotations", - "version": "1.13.1", + "version": "1.14.4", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f" + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", - "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915", + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915", "shasum": "" }, "require": { - "doctrine/lexer": "1.*", + "doctrine/lexer": "^1 || ^2", "ext-tokenizer": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "~1.4.10 || ^1.10.28", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7", + "vimeo/psalm": "^4.30 || ^5.14" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" }, "type": "library", "autoload": { @@ -196,41 +208,39 @@ "docblock", "parser" ], - "time": "2021-05-16T18:07:53+00:00" + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.14.4" + }, + "time": "2024-09-05T10:15:52+00:00" }, { "name": "doctrine/cache", - "version": "1.11.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "163074496dc7c3c7b8ccbf3d4376c0187424ed81" + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/163074496dc7c3c7b8ccbf3d4376c0187424ed81", - "reference": "163074496dc7c3c7b8ccbf3d4376c0187424ed81", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", "shasum": "" }, "require": { "php": "~7.1 || ^8.0" }, "conflict": { - "doctrine/common": ">2.2,<2.4", - "psr/cache": ">=3" + "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^8.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "predis/predis": "~1.0", - "psr/cache": "^1.0 || ^2.0", - "symfony/cache": "^4.4 || ^5.2" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" }, "type": "library", "autoload": { @@ -277,6 +287,10 @@ "redis", "xcache" ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/2.2.0" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -291,30 +305,31 @@ "type": "tidelift" } ], - "time": "2021-05-18T16:45:32+00:00" + "time": "2022-05-20T20:07:39+00:00" }, { "name": "doctrine/collections", - "version": "1.6.7", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a" + "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/55f8b799269a1a472457bd1a41b4f379d4cfba4a", - "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a", + "url": "https://api.github.com/repos/doctrine/collections/zipball/2b44dd4cbca8b5744327de78bafef5945c7e7b5e", + "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e", "shasum": "" }, "require": { + "doctrine/deprecations": "^0.5.3 || ^1", "php": "^7.1.3 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan-shim": "^0.9.2", - "phpunit/phpunit": "^7.0", - "vimeo/psalm": "^3.8.1" + "doctrine/coding-standard": "^9.0 || ^10.0", + "phpstan/phpstan": "^1.4.8", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5", + "vimeo/psalm": "^4.22" }, "type": "library", "autoload": { @@ -356,50 +371,44 @@ "iterators", "php" ], - "time": "2020-07-27T17:53:49+00:00" + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/1.8.0" + }, + "time": "2022-09-01T20:12:10+00:00" }, { "name": "doctrine/common", - "version": "2.13.3", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "f3812c026e557892c34ef37f6ab808a6b567da7f" + "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/f3812c026e557892c34ef37f6ab808a6b567da7f", - "reference": "f3812c026e557892c34ef37f6ab808a6b567da7f", + "url": "https://api.github.com/repos/doctrine/common/zipball/d9ea4a54ca2586db781f0265d36bea731ac66ec5", + "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", - "doctrine/cache": "^1.0", - "doctrine/collections": "^1.0", - "doctrine/event-manager": "^1.0", - "doctrine/inflector": "^1.0", - "doctrine/lexer": "^1.0", - "doctrine/persistence": "^1.3.3", - "doctrine/reflection": "^1.0", + "doctrine/persistence": "^2.0 || ^3.0 || ^4.0", "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^1.0", - "phpstan/phpstan": "^0.11", - "phpstan/phpstan-phpunit": "^0.11", - "phpunit/phpunit": "^7.0", + "doctrine/coding-standard": "^9.0 || ^10.0", + "doctrine/collections": "^1", + "phpstan/phpstan": "^1.4.1", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^4.0.5" + "symfony/phpunit-bridge": "^6.1", + "vimeo/psalm": "^4.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.11.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -432,13 +441,17 @@ "email": "ocramius@gmail.com" } ], - "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, persistence interfaces, proxies, event system and much more.", + "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", "homepage": "https://www.doctrine-project.org/projects/common.html", "keywords": [ "common", "doctrine", "php" ], + "support": { + "issues": "https://github.com/doctrine/common/issues", + "source": "https://github.com/doctrine/common/tree/3.5.0" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -453,34 +466,39 @@ "type": "tidelift" } ], - "time": "2020-06-05T16:46:05+00:00" + "time": "2025-01-01T22:12:03+00:00" }, { "name": "doctrine/dbal", - "version": "v2.10.1", + "version": "2.13.9", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8" + "reference": "c480849ca3ad6706a39c970cdfe6888fa8a058b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8", - "reference": "c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/c480849ca3ad6706a39c970cdfe6888fa8a058b8", + "reference": "c480849ca3ad6706a39c970cdfe6888fa8a058b8", "shasum": "" }, "require": { - "doctrine/cache": "^1.0", + "doctrine/cache": "^1.0|^2.0", + "doctrine/deprecations": "^0.5.3|^1", "doctrine/event-manager": "^1.0", "ext-pdo": "*", - "php": "^7.2" + "php": "^7.1 || ^8" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "jetbrains/phpstorm-stubs": "^2019.1", - "phpstan/phpstan": "^0.11.3", - "phpunit/phpunit": "^8.4.1", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0" + "doctrine/coding-standard": "9.0.0", + "jetbrains/phpstorm-stubs": "2021.1", + "phpstan/phpstan": "1.4.6", + "phpunit/phpunit": "^7.5.20|^8.5|9.5.16", + "psalm/plugin-phpunit": "0.16.1", + "squizlabs/php_codesniffer": "3.6.2", + "symfony/cache": "^4.4", + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", + "vimeo/psalm": "4.22.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -489,12 +507,6 @@ "bin/doctrine-dbal" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.10.x-dev", - "dev-develop": "3.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" @@ -545,154 +557,137 @@ "sqlserver", "sqlsrv" ], - "time": "2020-01-04T12:56:21+00:00" + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/2.13.9" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2022-05-02T20:28:55+00:00" }, { - "name": "doctrine/doctrine-bundle", - "version": "1.12.7", + "name": "doctrine/deprecations", + "version": "1.1.5", "source": { "type": "git", - "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "18fb7d271676dcb8e882adb0157ac1445c8fe89c" + "url": "https://github.com/doctrine/deprecations.git", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/18fb7d271676dcb8e882adb0157ac1445c8fe89c", - "reference": "18fb7d271676dcb8e882adb0157ac1445c8fe89c", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", "shasum": "" }, "require": { - "doctrine/dbal": "^2.5.12", - "doctrine/doctrine-cache-bundle": "~1.2", - "doctrine/persistence": "^1.3.3", - "jdorn/sql-formatter": "^1.2.16", - "php": "^7.1", - "symfony/cache": "^3.4.30|^4.3.3", - "symfony/config": "^3.4.30|^4.3.3", - "symfony/console": "^3.4.30|^4.3.3", - "symfony/dependency-injection": "^3.4.30|^4.3.3", - "symfony/doctrine-bridge": "^3.4.30|^4.3.3", - "symfony/framework-bundle": "^3.4.30|^4.3.3", - "symfony/service-contracts": "^1.1.1|^2.0" + "php": "^7.1 || ^8.0" }, "conflict": { - "doctrine/orm": "<2.6", - "twig/twig": "<1.34|>=2.0,<2.4" + "phpunit/phpunit": "<=7.5 || >=13" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "doctrine/orm": "^2.6", - "ocramius/proxy-manager": "^2.1", - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^7.5", - "symfony/phpunit-bridge": "^4.2", - "symfony/property-info": "^3.4.30|^4.3.3", - "symfony/proxy-manager-bridge": "^3.4|^4|^5", - "symfony/twig-bridge": "^3.4|^4.1", - "symfony/validator": "^3.4.30|^4.3.3", - "symfony/web-profiler-bundle": "^3.4.30|^4.3.3", - "symfony/yaml": "^3.4.30|^4.3.3", - "twig/twig": "^1.34|^2.12" + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" }, "suggest": { - "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", - "symfony/web-profiler-bundle": "To use the data collector." - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "1.12.x-dev" - } + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, + "type": "library", "autoload": { "psr-4": { - "Doctrine\\Bundle\\DoctrineBundle\\": "" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org/" - } - ], - "description": "Symfony DoctrineBundle", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "database", - "dbal", - "orm", - "persistence" - ], - "time": "2020-01-10T12:25:22+00:00" + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + }, + "time": "2025-04-07T20:06:18+00:00" }, { - "name": "doctrine/doctrine-cache-bundle", - "version": "1.4.0", + "name": "doctrine/doctrine-bundle", + "version": "2.7.2", "source": { "type": "git", - "url": "https://github.com/doctrine/DoctrineCacheBundle.git", - "reference": "6bee2f9b339847e8a984427353670bad4e7bdccb" + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "22d53b2c5ad03929628fb4a928b01135585b7179" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/6bee2f9b339847e8a984427353670bad4e7bdccb", - "reference": "6bee2f9b339847e8a984427353670bad4e7bdccb", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/22d53b2c5ad03929628fb4a928b01135585b7179", + "reference": "22d53b2c5ad03929628fb4a928b01135585b7179", "shasum": "" }, "require": { - "doctrine/cache": "^1.4.2", - "doctrine/inflector": "^1.0", - "php": "^7.1", - "symfony/doctrine-bridge": "^3.4|^4.0" + "doctrine/annotations": "^1", + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/dbal": "^2.13.1 || ^3.3.2", + "doctrine/persistence": "^2.2 || ^3", + "doctrine/sql-formatter": "^1.0.1", + "php": "^7.1 || ^8.0", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "symfony/config": "^4.4.3 || ^5.4 || ^6.0", + "symfony/console": "^4.4 || ^5.4 || ^6.0", + "symfony/dependency-injection": "^4.4.18 || ^5.4 || ^6.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/doctrine-bridge": "^4.4.22 || ^5.4 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.4 || ^6.0", + "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" + }, + "conflict": { + "doctrine/orm": "<2.11 || >=3.0", + "twig/twig": "<1.34 || >=2.0,<2.4" }, "require-dev": { - "instaclick/coding-standard": "~1.1", - "instaclick/object-calisthenics-sniffs": "dev-master", - "instaclick/symfony2-coding-standard": "dev-remaster", - "phpunit/phpunit": "^7.0", - "predis/predis": "~0.8", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "~1.5", - "symfony/console": "^3.4|^4.0", - "symfony/finder": "^3.4|^4.0", - "symfony/framework-bundle": "^3.4|^4.0", - "symfony/phpunit-bridge": "^3.4|^4.0", - "symfony/security-acl": "^2.8", - "symfony/validator": "^3.4|^4.0", - "symfony/yaml": "^3.4|^4.0" + "doctrine/coding-standard": "^9.0", + "doctrine/orm": "^2.11 || ^3.0", + "friendsofphp/proxy-manager-lts": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.3 || ^10.0", + "psalm/plugin-phpunit": "^0.16.1", + "psalm/plugin-symfony": "^3", + "psr/log": "^1.1.4 || ^2.0 || ^3.0", + "symfony/phpunit-bridge": "^6.1", + "symfony/property-info": "^4.4 || ^5.4 || ^6.0", + "symfony/proxy-manager-bridge": "^4.4 || ^5.4 || ^6.0", + "symfony/security-bundle": "^4.4 || ^5.4 || ^6.0", + "symfony/twig-bridge": "^4.4 || ^5.4 || ^6.0", + "symfony/validator": "^4.4 || ^5.4 || ^6.0", + "symfony/web-profiler-bundle": "^4.4 || ^5.4 || ^6.0", + "symfony/yaml": "^4.4 || ^5.4 || ^6.0", + "twig/twig": "^1.34 || ^2.12 || ^3.0", + "vimeo/psalm": "^4.7" }, "suggest": { - "symfony/security-acl": "For using this bundle to cache ACLs" + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "ext-pdo": "*", + "symfony/web-profiler-bundle": "To use the data collector." }, "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Bundle\\DoctrineCacheBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Doctrine\\Bundle\\DoctrineBundle\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -707,65 +702,82 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Fabio B. Silva", - "email": "fabio.bat.silva@gmail.com" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@hotmail.com" - }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" }, { "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org/" + "homepage": "https://www.doctrine-project.org/" } ], - "description": "Symfony Bundle for Doctrine Cache", + "description": "Symfony DoctrineBundle", "homepage": "https://www.doctrine-project.org", "keywords": [ - "cache", - "caching" + "database", + "dbal", + "orm", + "persistence" ], - "abandoned": true, - "time": "2019-11-29T11:22:01+00:00" + "support": { + "issues": "https://github.com/doctrine/DoctrineBundle/issues", + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.7.2" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-bundle", + "type": "tidelift" + } + ], + "time": "2022-12-07T12:07:11+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "v1.3.2", + "version": "3.2.5", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "49fa399181db4bf4f9f725126bd1cb65c4398dce" + "reference": "90be4395597432a05ae9aad5e6fe490622226a77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/49fa399181db4bf4f9f725126bd1cb65c4398dce", - "reference": "49fa399181db4bf4f9f725126bd1cb65c4398dce", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/90be4395597432a05ae9aad5e6fe490622226a77", + "reference": "90be4395597432a05ae9aad5e6fe490622226a77", "shasum": "" }, "require": { - "doctrine/doctrine-bundle": "~1.0", - "doctrine/migrations": "^1.1", - "php": ">=5.4.0", - "symfony/framework-bundle": "~2.7|~3.3|~4.0" + "doctrine/doctrine-bundle": "~1.0|~2.0", + "doctrine/migrations": "^3.2", + "php": "^7.2|^8.0", + "symfony/framework-bundle": "~3.4|~4.0|~5.0|~6.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^7.4" + "doctrine/coding-standard": "^9", + "doctrine/orm": "^2.6", + "doctrine/persistence": "^1.3||^2.0", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5|^9.5", + "vimeo/psalm": "^4.22" }, "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Bundle\\MigrationsBundle\\": "" - } + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -773,60 +785,76 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org" + "homepage": "https://www.doctrine-project.org" }, { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony DoctrineMigrationsBundle", - "homepage": "http://www.doctrine-project.org", + "homepage": "https://www.doctrine-project.org", "keywords": [ "dbal", "migrations", "schema" ], - "time": "2018-12-03T11:55:33+00:00" + "support": { + "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.2.5" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-migrations-bundle", + "type": "tidelift" + } + ], + "time": "2023-11-13T08:28:17+00:00" }, { "name": "doctrine/event-manager", - "version": "1.1.1", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", "shasum": "" }, "require": { + "doctrine/deprecations": "^0.5.3 || ^1", "php": "^7.1 || ^8.0" }, "conflict": { - "doctrine/common": "<2.9@dev" + "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0" + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.8", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.24" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -868,6 +896,10 @@ "event system", "events" ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -882,42 +914,37 @@ "type": "tidelift" } ], - "time": "2020-05-29T18:28:51+00:00" + "time": "2022-10-12T20:51:15+00:00" }, { "name": "doctrine/inflector", - "version": "1.4.4", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9" + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9", - "reference": "4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector", - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -960,6 +987,10 @@ "uppercase", "words" ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.10" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -974,7 +1005,7 @@ "type": "tidelift" } ], - "time": "2021-04-16T17:34:40+00:00" + "time": "2024-02-18T20:23:39+00:00" }, { "name": "doctrine/instantiator", @@ -1048,35 +1079,33 @@ }, { "name": "doctrine/lexer", - "version": "1.2.1", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.21" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1106,6 +1135,10 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/2.1.1" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -1120,39 +1153,52 @@ "type": "tidelift" } ], - "time": "2020-05-25T17:44:05+00:00" + "time": "2024-02-05T11:35:39+00:00" }, { "name": "doctrine/migrations", - "version": "v1.8.1", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "215438c0eef3e5f9b7da7d09c6b90756071b43e6" + "reference": "362f07ff732a2b4498be919561536800cec29500" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/215438c0eef3e5f9b7da7d09c6b90756071b43e6", - "reference": "215438c0eef3e5f9b7da7d09c6b90756071b43e6", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/362f07ff732a2b4498be919561536800cec29500", + "reference": "362f07ff732a2b4498be919561536800cec29500", "shasum": "" }, "require": { - "doctrine/dbal": "~2.6", - "ocramius/proxy-manager": "^1.0|^2.0", - "php": "^7.1", - "symfony/console": "~3.3|^4.0" + "composer-runtime-api": "^2", + "doctrine/dbal": "^2.11 || ^3.0", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.0", + "friendsofphp/proxy-manager-lts": "^1.0", + "php": "^7.2 || ^8.0", + "psr/log": "^1.1.3 || ^2 || ^3", + "symfony/console": "^3.4 || ^4.4.16 || ^5.0 || ^6.0", + "symfony/stopwatch": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { - "doctrine/coding-standard": "^1.0", - "doctrine/orm": "~2.5", - "jdorn/sql-formatter": "~1.1", - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "~7.0", - "squizlabs/php_codesniffer": "^3.0", - "symfony/yaml": "~3.3|^4.0" + "doctrine/coding-standard": "^9", + "doctrine/orm": "^2.6", + "doctrine/persistence": "^1.3 || ^2.0", + "doctrine/sql-formatter": "^1.0", + "ergebnis/composer-normalize": "^2.9", + "ext-pdo_sqlite": "*", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan-symfony": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.4", + "symfony/cache": "^3.4.26 || ^4.2.12 || ^5.0 || ^6.0", + "symfony/process": "^3.4 || ^4.0 || ^5.0 || ^6.0", + "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, "suggest": { - "jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command.", + "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", "symfony/yaml": "Allows the use of yaml for migration configuration files." }, "bin": [ @@ -1160,14 +1206,14 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "v1.8.x-dev" + "composer-normalize": { + "indent-size": 4, + "indent-style": "space" } }, "autoload": { "psr-4": { - "Doctrine\\Migrations\\": "lib/Doctrine/Migrations", - "Doctrine\\DBAL\\Migrations\\": "lib/Doctrine/DBAL/Migrations" + "Doctrine\\Migrations\\": "lib/Doctrine/Migrations" } }, "notification-url": "https://packagist.org/downloads/", @@ -1188,62 +1234,95 @@ "email": "contact@mikesimonson.com" } ], - "description": "Database Schema migrations using Doctrine DBAL", + "description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.", "homepage": "https://www.doctrine-project.org/projects/migrations.html", "keywords": [ "database", + "dbal", "migrations" ], - "time": "2018-06-06T21:00:30+00:00" + "support": { + "issues": "https://github.com/doctrine/migrations/issues", + "source": "https://github.com/doctrine/migrations/tree/3.4.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fmigrations", + "type": "tidelift" + } + ], + "time": "2023-09-07T12:23:11+00:00" }, { "name": "doctrine/orm", - "version": "v2.7.1", + "version": "2.20.5", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "445796af0e873d9bd04f2502d322a7d5009b6846" + "reference": "6307b4fa7d7e3845a756106977e3b48907622098" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/445796af0e873d9bd04f2502d322a7d5009b6846", - "reference": "445796af0e873d9bd04f2502d322a7d5009b6846", + "url": "https://api.github.com/repos/doctrine/orm/zipball/6307b4fa7d7e3845a756106977e3b48907622098", + "reference": "6307b4fa7d7e3845a756106977e3b48907622098", "shasum": "" }, "require": { - "doctrine/annotations": "^1.8", - "doctrine/cache": "^1.9.1", - "doctrine/collections": "^1.5", - "doctrine/common": "^2.11", - "doctrine/dbal": "^2.9.3", - "doctrine/event-manager": "^1.1", - "doctrine/instantiator": "^1.3", - "doctrine/persistence": "^1.2", - "ext-pdo": "*", - "ocramius/package-versions": "^1.2", - "php": "^7.1", - "symfony/console": "^3.0|^4.0|^5.0" + "composer-runtime-api": "^2", + "doctrine/cache": "^1.12.1 || ^2.1.1", + "doctrine/collections": "^1.5 || ^2.1", + "doctrine/common": "^3.0.3", + "doctrine/dbal": "^2.13.1 || ^3.2", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2", + "doctrine/inflector": "^1.4 || ^2.0", + "doctrine/instantiator": "^1.3 || ^2", + "doctrine/lexer": "^2 || ^3", + "doctrine/persistence": "^2.4 || ^3", + "ext-ctype": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3", + "symfony/console": "^4.2 || ^5.0 || ^6.0 || ^7.0", + "symfony/polyfill-php72": "^1.23", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.13 || >= 3.0" }, "require-dev": { - "doctrine/coding-standard": "^5.0", - "phpunit/phpunit": "^7.5", - "symfony/yaml": "^3.4|^4.0|^5.0" + "doctrine/annotations": "^1.13 || ^2", + "doctrine/coding-standard": "^9.0.2 || ^13.0", + "phpbench/phpbench": "^0.16.10 || ^1.0", + "phpstan/extension-installer": "~1.1.0 || ^1.4", + "phpstan/phpstan": "~1.4.10 || 2.0.3", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "psr/log": "^1 || ^2 || ^3", + "squizlabs/php_codesniffer": "3.12.0", + "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7.0", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2 || ^7.0", + "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0" }, "suggest": { + "ext-dom": "Provides support for XSD validation for XML mapping files", + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" }, "bin": [ "bin/doctrine" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\ORM\\": "lib/Doctrine/ORM" + "Doctrine\\ORM\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1278,49 +1357,47 @@ "database", "orm" ], - "time": "2020-02-15T14:35:56+00:00" + "support": { + "issues": "https://github.com/doctrine/orm/issues", + "source": "https://github.com/doctrine/orm/tree/2.20.5" + }, + "time": "2025-06-24T17:50:46+00:00" }, { "name": "doctrine/persistence", - "version": "1.3.8", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288" + "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/7a6eac9fb6f61bba91328f15aa7547f4806ca288", - "reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/0ea965320cec355dba75031c1b23d4c78362e3ff", + "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", - "doctrine/cache": "^1.0", - "doctrine/collections": "^1.0", - "doctrine/event-manager": "^1.0", - "doctrine/reflection": "^1.2", - "php": "^7.1 || ^8.0" + "doctrine/event-manager": "^1 || ^2", + "php": "^7.2 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0" }, "conflict": { - "doctrine/common": "<2.10@dev" + "doctrine/common": "<2.10" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "vimeo/psalm": "^3.11" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } + "doctrine/coding-standard": "^12", + "doctrine/common": "^3.0", + "phpstan/phpstan": "1.12.7", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5.38 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" }, + "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common", - "Doctrine\\Persistence\\": "lib/Doctrine/Persistence" + "Doctrine\\Persistence\\": "src/Persistence" } }, "notification-url": "https://packagist.org/downloads/", @@ -1354,7 +1431,7 @@ } ], "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", - "homepage": "https://doctrine-project.org/projects/persistence.html", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", "keywords": [ "mapper", "object", @@ -1362,6 +1439,10 @@ "orm", "persistence" ], + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/3.4.0" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -1376,46 +1457,98 @@ "type": "tidelift" } ], - "time": "2020-06-20T12:56:16+00:00" + "time": "2024-10-30T19:48:12+00:00" }, { - "name": "doctrine/reflection", - "version": "1.2.2", + "name": "doctrine/sql-formatter", + "version": "1.3.0", "source": { "type": "git", - "url": "https://github.com/doctrine/reflection.git", - "reference": "fa587178be682efe90d005e3a322590d6ebb59a5" + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "3447381095d32a171fe3a58323749f44dbb5ac7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/reflection/zipball/fa587178be682efe90d005e3a322590d6ebb59a5", - "reference": "fa587178be682efe90d005e3a322590d6ebb59a5", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/3447381095d32a171fe3a58323749f44dbb5ac7d", + "reference": "3447381095d32a171fe3a58323749f44dbb5ac7d", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0" + "php": "^7.2 || ^8.0" }, - "conflict": { - "doctrine/common": "<2.9" + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.0", + "phpunit/phpunit": "^8.5 || ^9.6", + "vimeo/psalm": "^4.11" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "https://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/doctrine/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "support": { + "issues": "https://github.com/doctrine/sql-formatter/issues", + "source": "https://github.com/doctrine/sql-formatter/tree/1.3.0" + }, + "time": "2024-05-06T21:49:18+00:00" + }, + { + "name": "egulias/email-validator", + "version": "3.2.6", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", + "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.2|^2", + "php": ">=7.2", + "symfony/polyfill-intl-idn": "^1.15" }, "require-dev": { - "doctrine/coding-standard": "^6.0 || ^8.2.0", - "doctrine/common": "^2.10", - "phpstan/phpstan": "^0.11.0 || ^0.12.20", - "phpstan/phpstan-phpunit": "^0.11.0 || ^0.12.16", - "phpunit/phpunit": "^7.5 || ^9.1.5" + "phpunit/phpunit": "^8.5.8|^9.3.3", + "vimeo/psalm": "^4" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Egulias\\EmailValidator\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1424,73 +1557,70 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" + "name": "Eduardo Gulias Davis" } ], - "description": "The Doctrine Reflection project is a simple library used by the various Doctrine projects which adds some additional functionality on top of the reflection functionality that comes with PHP. It allows you to get the reflection information about classes, methods and properties statically.", - "homepage": "https://www.doctrine-project.org/projects/reflection.html", + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", "keywords": [ - "reflection", - "static" + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" ], - "abandoned": "roave/better-reflection", - "time": "2020-10-27T21:46:55+00:00" + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/3.2.6" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-06-01T07:04:22+00:00" }, { - "name": "fig/link-util", - "version": "1.1.2", + "name": "friendsofphp/proxy-manager-lts", + "version": "v1.0.18", "source": { "type": "git", - "url": "https://github.com/php-fig/link-util.git", - "reference": "5d7b8d04ed3393b4b59968ca1e906fb7186d81e8" + "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", + "reference": "2c8a6cffc3220e99352ad958fe7cf06bf6f7690f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/link-util/zipball/5d7b8d04ed3393b4b59968ca1e906fb7186d81e8", - "reference": "5d7b8d04ed3393b4b59968ca1e906fb7186d81e8", + "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/2c8a6cffc3220e99352ad958fe7cf06bf6f7690f", + "reference": "2c8a6cffc3220e99352ad958fe7cf06bf6f7690f", "shasum": "" }, "require": { - "php": ">=5.5.0", - "psr/link": "~1.0@dev" + "laminas/laminas-code": "~3.4.1|^4.0", + "php": ">=7.1", + "symfony/filesystem": "^4.4.17|^5.0|^6.0|^7.0" }, - "provide": { - "psr/link-implementation": "1.0" + "conflict": { + "laminas/laminas-stdlib": "<3.2.1", + "zendframework/zend-stdlib": "<3.2.1" + }, + "replace": { + "ocramius/proxy-manager": "^2.1" }, "require-dev": { - "phpunit/phpunit": "^5.1", - "squizlabs/php_codesniffer": "^2.3.1" + "ext-phar": "*", + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" + "thanks": { + "url": "https://github.com/Ocramius/ProxyManager", + "name": "ocramius/proxy-manager" } }, "autoload": { "psr-4": { - "Fig\\Link\\": "src/" + "ProxyManager\\": "src/ProxyManager" } }, "notification-url": "https://packagist.org/downloads/", @@ -1499,20 +1629,39 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" } ], - "description": "Common utility implementations for HTTP links", + "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager", + "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts", "keywords": [ - "http", - "http-link", - "link", - "psr", - "psr-13", - "rest" + "aop", + "lazy loading", + "proxy", + "proxy pattern", + "service proxies" ], - "time": "2021-02-03T23:36:04+00:00" + "support": { + "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", + "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.18" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", + "type": "tidelift" + } + ], + "time": "2024-03-20T12:50:41+00:00" }, { "name": "guzzlehttp/guzzle", @@ -1609,6 +1758,10 @@ "rest", "web service" ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5.8" + }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -1627,16 +1780,16 @@ }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "1.5.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e", + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e", "shasum": "" }, "require": { @@ -1646,11 +1799,6 @@ "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, "autoload": { "files": [ "src/functions_include.php" @@ -1689,6 +1837,10 @@ "keywords": [ "promise" ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.3" + }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -1703,7 +1855,7 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2023-05-21T12:31:43+00:00" }, { "name": "guzzlehttp/psr7", @@ -1812,26 +1964,26 @@ }, { "name": "incenteev/composer-parameter-handler", - "version": "v2.1.3", + "version": "v2.1.5", "source": { "type": "git", "url": "https://github.com/Incenteev/ParameterHandler.git", - "reference": "933c45a34814f27f2345c11c37d46b3ca7303550" + "reference": "e1dd118763503f7fd766f907013e1d76d525fcc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550", - "reference": "933c45a34814f27f2345c11c37d46b3ca7303550", + "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/e1dd118763503f7fd766f907013e1d76d525fcc4", + "reference": "e1dd118763503f7fd766f907013e1d76d525fcc4", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/yaml": "^2.3 || ^3.0 || ^4.0" + "symfony/yaml": "^2.3 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { "composer/composer": "^1.0@dev", - "symfony/filesystem": "^2.3 || ^3 || ^4", - "symfony/phpunit-bridge": "^4.0" + "symfony/filesystem": "^2.3 || ^3 || ^4 || ^5 || ^6.0", + "symfony/phpunit-bridge": "^3.4.47 || ^4.4.41 || ^5.4.8 || ^6.0" }, "type": "library", "extra": { @@ -1859,70 +2011,220 @@ "keywords": [ "parameters management" ], - "time": "2018-02-13T18:05:56+00:00" + "support": { + "issues": "https://github.com/Incenteev/ParameterHandler/issues", + "source": "https://github.com/Incenteev/ParameterHandler/tree/v2.1.5" + }, + "time": "2022-05-25T10:57:22+00:00" }, { - "name": "jdorn/sql-formatter", - "version": "v1.2.17", + "name": "laminas/laminas-code", + "version": "3.4.1", "source": { "type": "git", - "url": "https://github.com/jdorn/sql-formatter.git", - "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" + "url": "https://github.com/laminas/laminas-code.git", + "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", - "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/1cb8f203389ab1482bf89c0e70a04849bacd7766", + "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766", "shasum": "" }, "require": { - "php": ">=5.2.4" + "laminas/laminas-eventmanager": "^2.6 || ^3.0", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.1" + }, + "conflict": { + "phpspec/prophecy": "<1.9.0" + }, + "replace": { + "zendframework/zend-code": "self.version" }, "require-dev": { - "phpunit/phpunit": "3.7.*" + "doctrine/annotations": "^1.7", + "ext-phar": "*", + "laminas/laminas-coding-standard": "^1.0", + "laminas/laminas-stdlib": "^2.7 || ^3.0", + "phpunit/phpunit": "^7.5.16 || ^8.4" + }, + "suggest": { + "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", + "laminas/laminas-stdlib": "Laminas\\Stdlib component" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "3.4.x-dev", + "dev-dev-4.0": "4.0.x-dev", + "dev-develop": "3.5.x-dev" } }, "autoload": { - "classmap": [ - "lib" - ] + "psr-4": { + "Laminas\\Code\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "authors": [ - { - "name": "Jeremy Dorn", - "email": "jeremy@jeremydorn.com", - "homepage": "http://jeremydorn.com/" + "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", + "homepage": "https://laminas.dev", + "keywords": [ + "code", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-code/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-code/issues", + "rss": "https://github.com/laminas/laminas-code/releases.atom", + "source": "https://github.com/laminas/laminas-code" + }, + "time": "2019-12-31T16:28:24+00:00" + }, + { + "name": "laminas/laminas-eventmanager", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-eventmanager.git", + "reference": "ce4dc0bdf3b14b7f9815775af9dfee80a63b4748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/ce4dc0bdf3b14b7f9815775af9dfee80a63b4748", + "reference": "ce4dc0bdf3b14b7f9815775af9dfee80a63b4748", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-eventmanager": "self.version" + }, + "require-dev": { + "athletic/athletic": "^0.1", + "container-interop/container-interop": "^1.1.0", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "suggest": { + "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev", + "dev-develop": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Laminas\\EventManager\\": "src/" } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" ], - "description": "a PHP SQL highlighting library", - "homepage": "https://github.com/jdorn/sql-formatter/", + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://laminas.dev", "keywords": [ - "highlight", - "sql" + "event", + "eventmanager", + "events", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-eventmanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-eventmanager/issues", + "rss": "https://github.com/laminas/laminas-eventmanager/releases.atom", + "source": "https://github.com/laminas/laminas-eventmanager" + }, + "time": "2019-12-31T16:44:52+00:00" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "support": { + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } ], - "time": "2014-01-12T16:20:24+00:00" + "abandoned": true, + "time": "2020-09-14T14:23:00+00:00" }, { "name": "monolog/monolog", - "version": "1.26.0", + "version": "1.27.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33" + "reference": "904713c5929655dc9b97288b69cfeedad610c9a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/2209ddd84e7ef1256b7af205d0717fb62cfc9c33", - "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/904713c5929655dc9b97288b69cfeedad610c9a1", + "reference": "904713c5929655dc9b97288b69cfeedad610c9a1", "shasum": "" }, "require": { @@ -1981,6 +2283,10 @@ "logging", "psr-3" ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/1.27.1" + }, "funding": [ { "url": "https://github.com/Seldaek", @@ -1991,97 +2297,27 @@ "type": "tidelift" } ], - "time": "2020-12-14T12:56:38+00:00" + "time": "2022-06-09T08:53:42+00:00" }, { - "name": "ocramius/proxy-manager", - "version": "2.2.3", + "name": "openconext/monitor-bundle", + "version": "2.1.0", "source": { "type": "git", - "url": "https://github.com/Ocramius/ProxyManager.git", - "reference": "4d154742e31c35137d5374c998e8f86b54db2e2f" + "url": "https://github.com/OpenConext/Monitor-bundle.git", + "reference": "f06e967b702bc5d78d85c39ba4a90219af152a67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/4d154742e31c35137d5374c998e8f86b54db2e2f", - "reference": "4d154742e31c35137d5374c998e8f86b54db2e2f", + "url": "https://api.github.com/repos/OpenConext/Monitor-bundle/zipball/f06e967b702bc5d78d85c39ba4a90219af152a67", + "reference": "f06e967b702bc5d78d85c39ba4a90219af152a67", "shasum": "" }, "require": { - "ocramius/package-versions": "^1.1.3", - "php": "^7.2.0", - "zendframework/zend-code": "^3.3.0" - }, - "require-dev": { - "couscous/couscous": "^1.6.1", - "ext-phar": "*", - "humbug/humbug": "1.0.0-RC.0@RC", - "nikic/php-parser": "^3.1.1", - "padraic/phpunit-accelerator": "dev-master@DEV", - "phpbench/phpbench": "^0.12.2", - "phpstan/phpstan": "dev-master#856eb10a81c1d27c701a83f167dc870fd8f4236a as 0.9.999", - "phpstan/phpstan-phpunit": "dev-master#5629c0a1f4a9c417cb1077cf6693ad9753895761", - "phpunit/phpunit": "^6.4.3", - "squizlabs/php_codesniffer": "^2.9.1" - }, - "suggest": { - "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects", - "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)", - "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)", - "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "ProxyManager\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.io/" - } - ], - "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies", - "homepage": "https://github.com/Ocramius/ProxyManager", - "keywords": [ - "aop", - "lazy loading", - "proxy", - "proxy pattern", - "service proxies" - ], - "time": "2019-08-10T08:37:15+00:00" - }, - { - "name": "openconext/monitor-bundle", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/OpenConext/Monitor-bundle.git", - "reference": "f06e967b702bc5d78d85c39ba4a90219af152a67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/OpenConext/Monitor-bundle/zipball/f06e967b702bc5d78d85c39ba4a90219af152a67", - "reference": "f06e967b702bc5d78d85c39ba4a90219af152a67", - "shasum": "" - }, - "require": { - "php": ">=5.4,<8.0-dev", - "symfony/dependency-injection": ">=3.4,<5", - "symfony/framework-bundle": ">=3.4,<5", - "webmozart/assert": "^1.2" + "php": ">=5.4,<8.0-dev", + "symfony/dependency-injection": ">=3.4,<5", + "symfony/framework-bundle": ">=3.4,<5", + "webmozart/assert": "^1.2" }, "require-dev": { "jakub-onderka/php-parallel-lint": "^0.9.2", @@ -2113,6 +2349,10 @@ "stepup", "surfnet" ], + "support": { + "issues": "https://github.com/OpenConext/Monitor-bundle/issues", + "source": "https://github.com/OpenConext/Monitor-bundle/tree/2.1.0" + }, "time": "2021-09-28T11:09:57+00:00" }, { @@ -2154,24 +2394,28 @@ } ], "description": "Set of value objects for usage with SAML2", + "support": { + "issues": "https://github.com/OpenConext/SamlValueObject/issues", + "source": "https://github.com/OpenConext/SamlValueObject/tree/1.3.2" + }, "time": "2018-01-22T15:22:14+00:00" }, { "name": "paragonie/random_compat", - "version": "v9.99.99", + "version": "v9.99.100", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", "shasum": "" }, "require": { - "php": "^7" + "php": ">= 7" }, "require-dev": { "phpunit/phpunit": "4.*|5.*", @@ -2199,7 +2443,12 @@ "pseudorandom", "random" ], - "time": "2018-07-02T15:55:56+00:00" + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" }, { "name": "pimple/pimple", @@ -2245,6 +2494,10 @@ "container", "dependency injection" ], + "support": { + "issues": "https://github.com/silexphp/Pimple/issues", + "source": "https://github.com/silexphp/Pimple/tree/v2.1.1" + }, "time": "2014-07-24T07:10:08+00:00" }, { @@ -2291,6 +2544,9 @@ "psr", "psr-6" ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, "time": "2016-08-06T20:24:11+00:00" }, { @@ -2394,55 +2650,6 @@ }, "time": "2023-04-04T09:50:52+00:00" }, - { - "name": "psr/link", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/link.git", - "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562", - "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Link\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for HTTP links", - "keywords": [ - "http", - "http-link", - "link", - "psr", - "psr-13", - "rest" - ], - "time": "2016-10-28T16:06:13+00:00" - }, { "name": "psr/log", "version": "1.1.4", @@ -2493,54 +2700,6 @@ }, "time": "2021-05-03T11:20:27+00:00" }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "time": "2017-10-23T01:57:42+00:00" - }, { "name": "ralouphie/getallheaders", "version": "3.0.3", @@ -2587,54 +2746,56 @@ }, { "name": "ramsey/uuid", - "version": "3.8.0", + "version": "3.9.7", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" + "reference": "dc75aa439eb4c1b77f5379fd958b3dc0e6014178" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", - "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/dc75aa439eb4c1b77f5379fd958b3dc0e6014178", + "reference": "dc75aa439eb4c1b77f5379fd958b3dc0e6014178", "shasum": "" }, "require": { - "paragonie/random_compat": "^1.0|^2.0|9.99.99", - "php": "^5.4 || ^7.0", + "ext-json": "*", + "paragonie/random_compat": "^1 | ^2 | ^9.99.99", + "php": "^5.4 | ^7.0 | ^8.0", "symfony/polyfill-ctype": "^1.8" }, "replace": { "rhumsaa/uuid": "self.version" }, "require-dev": { - "codeception/aspect-mock": "^1.0 | ~2.0.0", - "doctrine/annotations": "~1.2.0", - "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", - "ircmaxell/random-lib": "^1.1", - "jakub-onderka/php-parallel-lint": "^0.9.0", - "mockery/mockery": "^0.9.9", + "codeception/aspect-mock": "^1 | ^2", + "doctrine/annotations": "^1.2", + "goaop/framework": "1.0.0-alpha.2 | ^1 | >=2.1.0 <=2.3.2", + "mockery/mockery": "^0.9.11 | ^1", "moontoast/math": "^1.1", - "php-mock/php-mock-phpunit": "^0.3|^1.1", - "phpunit/phpunit": "^4.7|^5.0|^6.5", - "squizlabs/php_codesniffer": "^2.3" + "nikic/php-parser": "<=4.5.0", + "paragonie/random-lib": "^2", + "php-mock/php-mock-phpunit": "^0.3 | ^1.1 | ^2.6", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpunit/phpunit": ">=4.8.36 <9.0.0 | >=9.3.0", + "squizlabs/php_codesniffer": "^3.5", + "yoast/phpunit-polyfills": "^1.0" }, "suggest": { "ext-ctype": "Provides support for PHP Ctype functions", "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator", "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { "Ramsey\\Uuid\\": "src/" } @@ -2665,6 +2826,12 @@ "identifier", "uuid" ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "rss": "https://github.com/ramsey/uuid/releases.atom", + "source": "https://github.com/ramsey/uuid", + "wiki": "https://github.com/ramsey/uuid/wiki" + }, "funding": [ { "url": "https://github.com/ramsey", @@ -2675,7 +2842,7 @@ "type": "tidelift" } ], - "time": "2018-07-19T23:38:55+00:00" + "time": "2022-12-19T21:55:10+00:00" }, { "name": "robrichards/xmlseclibs", @@ -2721,56 +2888,62 @@ }, { "name": "sensio/framework-extra-bundle", - "version": "v3.0.29", + "version": "v5.6.1", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "bb907234df776b68922eb4b25bfa061683597b6a" + "reference": "430d14c01836b77c28092883d195a43ce413ee32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bb907234df776b68922eb4b25bfa061683597b6a", - "reference": "bb907234df776b68922eb4b25bfa061683597b6a", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/430d14c01836b77c28092883d195a43ce413ee32", + "reference": "430d14c01836b77c28092883d195a43ce413ee32", "shasum": "" }, "require": { - "doctrine/common": "~2.2", - "symfony/dependency-injection": "~2.3|~3.0", - "symfony/framework-bundle": "~2.3|~3.0|~4.0" + "doctrine/annotations": "^1.0", + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0" }, - "require-dev": { - "doctrine/doctrine-bundle": "~1.5", - "doctrine/orm": "~2.4,>=2.4.5", - "symfony/asset": "~2.7|~3.0|~4.0", - "symfony/browser-kit": "~2.3|~3.0|~4.0", - "symfony/dom-crawler": "~2.3|~3.0|~4.0", - "symfony/expression-language": "~2.4|~3.0|~4.0", - "symfony/finder": "~2.3|~3.0|~4.0", - "symfony/phpunit-bridge": "~3.2|~4.0", - "symfony/psr-http-message-bridge": "^0.3|^1.0", - "symfony/security-bundle": "~2.4|~3.0|~4.0", - "symfony/templating": "~2.3|~3.0|~4.0", - "symfony/translation": "~2.3|~3.0|~4.0", - "symfony/twig-bundle": "~2.3|~3.0|~4.0", - "symfony/yaml": "~2.3|~3.0|~4.0", - "twig/twig": "~1.12|~2.0", - "zendframework/zend-diactoros": "^1.3" + "conflict": { + "doctrine/doctrine-cache-bundle": "<1.3.1", + "doctrine/persistence": "<1.3" }, - "suggest": { - "symfony/expression-language": "", - "symfony/psr-http-message-bridge": "To use the PSR-7 converters", - "symfony/security-bundle": "" + "require-dev": { + "doctrine/dbal": "^2.10|^3.0", + "doctrine/doctrine-bundle": "^1.11|^2.0", + "doctrine/orm": "^2.5", + "nyholm/psr7": "^1.1", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/doctrine-bridge": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/monolog-bridge": "^4.0|^5.0", + "symfony/monolog-bundle": "^3.2", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9", + "symfony/psr-http-message-bridge": "^1.1", + "symfony/security-bundle": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0", + "twig/twig": "^1.34|^2.4|^3.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "5.6.x-dev" } }, "autoload": { "psr-4": { - "Sensio\\Bundle\\FrameworkExtraBundle\\": "" - } + "Sensio\\Bundle\\FrameworkExtraBundle\\": "src/" + }, + "exclude-from-classmap": [ + "/tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2787,62 +2960,12 @@ "annotations", "controllers" ], - "time": "2017-12-14T19:03:23+00:00" - }, - { - "name": "sensio/generator-bundle", - "version": "v3.1.7", - "source": { - "type": "git", - "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git", - "reference": "28cbaa244bd0816fd8908b93f90380bcd7b67a65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65", - "reference": "28cbaa244bd0816fd8908b93f90380bcd7b67a65", - "shasum": "" - }, - "require": { - "symfony/console": "~2.7|~3.0", - "symfony/framework-bundle": "~2.7|~3.0", - "symfony/process": "~2.7|~3.0", - "symfony/yaml": "~2.7|~3.0", - "twig/twig": "^1.28.2|^2.0" - }, - "require-dev": { - "doctrine/orm": "~2.4", - "symfony/doctrine-bridge": "~2.7|~3.0", - "symfony/filesystem": "~2.7|~3.0", - "symfony/phpunit-bridge": "^3.3" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Sensio\\Bundle\\GeneratorBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "support": { + "issues": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/issues", + "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v5.6.1" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "This bundle generates code for you", - "abandoned": "symfony/maker-bundle", - "time": "2017-12-07T15:36:41+00:00" + "abandoned": "Symfony", + "time": "2020-08-25T19:10:18+00:00" }, { "name": "simplesamlphp/saml2", @@ -2907,29 +3030,36 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.12", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950" + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", "shasum": "" }, "require": { - "php": ">=5.3.3" + "egulias/email-validator": "^2.0|^3.1", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { - "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.2" + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.4" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "6.2-dev" } }, "autoload": { @@ -2957,45 +3087,52 @@ "mail", "mailer" ], + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], "abandoned": "symfony/mailer", - "time": "2018-07-31T09:26:32+00:00" + "time": "2021-10-18T15:26:12+00:00" }, { - "name": "symfony/monolog-bundle", - "version": "v3.4.0", + "name": "symfony/asset", + "version": "v4.4.46", "source": { "type": "git", - "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "7fbecb371c1c614642c93c6b2cbcdf723ae8809d" + "url": "https://github.com/symfony/asset.git", + "reference": "6ef0f9f352f90c469e8b363ebc038d81a7198873" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/7fbecb371c1c614642c93c6b2cbcdf723ae8809d", - "reference": "7fbecb371c1c614642c93c6b2cbcdf723ae8809d", + "url": "https://api.github.com/repos/symfony/asset/zipball/6ef0f9f352f90c469e8b363ebc038d81a7198873", + "reference": "6ef0f9f352f90c469e8b363ebc038d81a7198873", "shasum": "" }, "require": { - "monolog/monolog": "~1.22", - "php": ">=5.6", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4.10|^4.0.10", - "symfony/http-kernel": "~3.4|~4.0", - "symfony/monolog-bridge": "~3.4|~4.0" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "symfony/console": "~3.4|~4.0", - "symfony/phpunit-bridge": "^3.4.19|^4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/http-kernel": "^3.4|^4.0|^5.0" }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } + "suggest": { + "symfony/http-foundation": "" }, + "type": "library", "autoload": { "psr-4": { - "Symfony\\Bundle\\MonologBundle\\": "" + "Symfony\\Component\\Asset\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -3006,57 +3143,91 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony MonologBundle", - "homepage": "http://symfony.com", - "keywords": [ - "log", - "logging" + "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/asset/tree/v4.4.46" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-06-20T12:18:19+00:00" + "time": "2022-08-30T22:05:24+00:00" }, { - "name": "symfony/polyfill-apcu", - "version": "v1.22.1", + "name": "symfony/cache", + "version": "v4.4.48", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-apcu.git", - "reference": "bc9974e74f8c05f4ceb500b1e0603e36be7d8223" + "url": "https://github.com/symfony/cache.git", + "reference": "3b98ed664887ad197b8ede3da2432787212eb915" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/bc9974e74f8c05f4ceb500b1e0603e36be7d8223", - "reference": "bc9974e74f8c05f4ceb500b1e0603e36be7d8223", + "url": "https://api.github.com/repos/symfony/cache/zipball/3b98ed664887ad197b8ede3da2432787212eb915", + "reference": "3b98ed664887ad197b8ede3da2432787212eb915", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.1.3", + "psr/cache": "^1.0|^2.0", + "psr/log": "^1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.2|^5.0" + }, + "conflict": { + "doctrine/dbal": "<2.7", + "symfony/dependency-injection": "<3.4", + "symfony/http-kernel": "<4.4|>=5.0", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0|2.0", + "symfony/cache-implementation": "1.0|2.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6|^2.0", + "doctrine/dbal": "^2.7|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0|^2.0", + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.1|^5.0", + "symfony/filesystem": "^4.4|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/var-dumper": "^4.4|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Apcu\\": "" - } + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3072,15 +3243,15 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", "homepage": "https://symfony.com", "keywords": [ - "apcu", - "compatibility", - "polyfill", - "portable", - "shim" + "caching", + "psr6" ], + "support": { + "source": "https://github.com/symfony/cache/tree/v4.4.48" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3095,44 +3266,42 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2022-10-17T20:21:54+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.31.0", + "name": "symfony/cache-contracts", + "version": "v2.5.4", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/517c3a3619dadfa6952c4651767fcadffb4df65e", + "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e", "shasum": "" }, "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0|^3.0" }, "suggest": { - "ext-ctype": "For best performance" + "symfony/cache-implementation": "" }, "type": "library", "extra": { "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" + "Symfony\\Contracts\\Cache\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -3141,24 +3310,26 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Generic abstractions related to caching", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.4" }, "funding": [ { @@ -3174,48 +3345,47 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { - "name": "symfony/polyfill-intl-icu", - "version": "v1.22.1", + "name": "symfony/config", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "af1842919c7e7364aaaa2798b29839e3ba168588" + "url": "https://github.com/symfony/config.git", + "reference": "ed42f8f9da528d2c6cae36fe1f380b0c1d8f0658" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/af1842919c7e7364aaaa2798b29839e3ba168588", - "reference": "af1842919c7e7364aaaa2798b29839e3ba168588", + "url": "https://api.github.com/repos/symfony/config/zipball/ed42f8f9da528d2c6cae36fe1f380b0c1d8f0658", + "reference": "ed42f8f9da528d2c6cae36fe1f380b0c1d8f0658", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.1.3", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22" + }, + "conflict": { + "symfony/finder": "<3.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/messenger": "^4.1|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { - "ext-intl": "For best performance and support of other locales than \"en\"" + "symfony/yaml": "To use the yaml reference dumper" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Icu\\": "" + "Symfony\\Component\\Config\\": "" }, - "classmap": [ - "Resources/stubs" - ], "exclude-from-classmap": [ "/Tests/" ] @@ -3226,24 +3396,19 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's ICU-related data and classes", + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "icu", - "intl", - "polyfill", - "portable", - "shim" - ], + "support": { + "source": "https://github.com/symfony/config/tree/v4.4.44" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3258,47 +3423,62 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2022-07-20T09:59:04+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.26.0", + "name": "symfony/console", + "version": "v4.4.49", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" + "url": "https://github.com/symfony/console.git", + "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", + "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/lock": "<4.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^4.3", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^4.3|^5.0" }, "suggest": { - "ext-intl": "For best performance" + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3306,28 +3486,19 @@ ], "authors": [ { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], + "support": { + "source": "https://github.com/symfony/console/tree/v4.4.49" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3342,47 +3513,39 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-05T17:10:16+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "name": "symfony/debug", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "url": "https://github.com/symfony/debug.git", + "reference": "1a692492190773c5310bc7877cb590c04c2f05be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/debug/zipball/1a692492190773c5310bc7877cb590c04c2f05be", + "reference": "1a692492190773c5310bc7877cb590c04c2f05be", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.1.3", + "psr/log": "^1|^2|^3" }, - "suggest": { - "ext-intl": "For best performance" + "conflict": { + "symfony/http-kernel": "<3.4" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } + "require-dev": { + "symfony/http-kernel": "^3.4|^4.0|^5.0" }, + "type": "library", "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + "Symfony\\Component\\Debug\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3391,24 +3554,19 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", + "description": "Provides tools to ease debugging PHP code", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], + "support": { + "source": "https://github.com/symfony/debug/tree/v4.4.44" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3423,34 +3581,59 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "abandoned": "symfony/error-handler", + "time": "2022-07-28T16:29:46+00:00" }, { - "name": "symfony/polyfill-php70", - "version": "v1.20.0", + "name": "symfony/dependency-injection", + "version": "v4.4.49", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "9065fe97dbd38a897e95ea254eb5ddfe1310f734" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/9065fe97dbd38a897e95ea254eb5ddfe1310f734", + "reference": "9065fe97dbd38a897e95ea254eb5ddfe1310f734", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.1.3", + "psr/container": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1.6|^2" }, - "type": "metapackage", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" + "conflict": { + "symfony/config": "<4.3|>=5.0", + "symfony/finder": "<3.4", + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<4.4.26" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0|2.0" + }, + "require-dev": { + "symfony/config": "^4.3", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/yaml": "^4.4.26|^5.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3458,22 +3641,19 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v4.4.49" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3488,32 +3668,40 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2022-11-16T16:18:09+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.31.0", + "name": "symfony/deprecation-contracts", + "version": "v2.5.4", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918", + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=7.1" }, - "type": "metapackage", + "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" } }, + "autoload": { + "files": [ + "function.php" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -3528,16 +3716,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4" }, "funding": [ { @@ -3553,43 +3735,82 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { - "name": "symfony/service-contracts", - "version": "v1.1.9", + "name": "symfony/doctrine-bridge", + "version": "v4.4.48", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26" + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "8dbbec53714eb512321380d582b45ff7e074a5d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26", - "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/8dbbec53714eb512321380d582b45ff7e074a5d6", + "reference": "8dbbec53714eb512321380d582b45ff7e074a5d6", "shasum": "" }, "require": { + "doctrine/event-manager": "~1.0", + "doctrine/persistence": "^1.3|^2|^3", "php": ">=7.1.3", - "psr/container": "^1.0" + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "doctrine/dbal": "<2.7", + "doctrine/lexer": "<1.1", + "doctrine/orm": "<2.6.3", + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/dependency-injection": "<3.4", + "symfony/form": "<4.4", + "symfony/http-kernel": "<4.3.7", + "symfony/messenger": "<4.3", + "symfony/proxy-manager-bridge": "<4.4.19", + "symfony/security-core": "<4.4", + "symfony/validator": "<4.4.2|<5.0.2,>=5.0" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.8", + "doctrine/annotations": "^1.10.4", + "doctrine/collections": "~1.0", + "doctrine/data-fixtures": "^1.1", + "doctrine/dbal": "^2.7|^3.0", + "doctrine/orm": "^2.6.3", + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/form": "^4.4.41|^5.0.11", + "symfony/http-kernel": "^4.3.7", + "symfony/messenger": "^4.4|^5.0", + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/property-info": "^3.4|^4.0|^5.0", + "symfony/proxy-manager-bridge": "^3.4|^4.0|^5.0", + "symfony/security-core": "^4.4|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/translation": "^3.4|^4.0|^5.0", + "symfony/validator": "^4.4.2|^5.0.2", + "symfony/var-dumper": "^3.4|^4.0|^5.0" }, "suggest": { - "symfony/service-implementation": "" + "doctrine/data-fixtures": "", + "doctrine/dbal": "", + "doctrine/orm": "", + "symfony/form": "", + "symfony/property-info": "", + "symfony/validator": "" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "" }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3597,24 +3818,19 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to writing services", + "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], + "support": { + "source": "https://github.com/symfony/doctrine-bridge/tree/v4.4.48" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3629,199 +3845,108 @@ "type": "tidelift" } ], - "time": "2020-07-06T13:19:58+00:00" + "time": "2022-10-14T11:24:01+00:00" }, { - "name": "symfony/swiftmailer-bundle", - "version": "v2.6.7", + "name": "symfony/dotenv", + "version": "v4.4.37", "source": { "type": "git", - "url": "https://github.com/symfony/swiftmailer-bundle.git", - "reference": "c4808f5169efc05567be983909d00f00521c53ec" + "url": "https://github.com/symfony/dotenv.git", + "reference": "fcedd6d382b3afc3e1e786aa4e4fc4cf06f564cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/c4808f5169efc05567be983909d00f00521c53ec", - "reference": "c4808f5169efc05567be983909d00f00521c53ec", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/fcedd6d382b3afc3e1e786aa4e4fc4cf06f564cf", + "reference": "fcedd6d382b3afc3e1e786aa4e4fc4cf06f564cf", "shasum": "" }, "require": { - "php": ">=5.3.2", - "swiftmailer/swiftmailer": "~4.2|~5.0", - "symfony/config": "~2.7|~3.0", - "symfony/dependency-injection": "~2.7|~3.0", - "symfony/http-kernel": "~2.7|~3.0" + "php": ">=7.1.3" }, "require-dev": { - "symfony/console": "~2.7|~3.0", - "symfony/framework-bundle": "~2.7|~3.0", - "symfony/phpunit-bridge": "~3.3@dev", - "symfony/yaml": "~2.7|~3.0" - }, - "suggest": { - "psr/log": "Allows logging" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } + "symfony/process": "^3.4.2|^4.0|^5.0" }, + "type": "library", "autoload": { "psr-4": { - "Symfony\\Bundle\\SwiftmailerBundle\\": "" - } + "Symfony\\Component\\Dotenv\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "source": "https://github.com/symfony/dotenv/tree/v4.4.37" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony SwiftmailerBundle", - "homepage": "http://symfony.com", - "abandoned": "symfony/mailer", - "time": "2017-10-19T01:06:41+00:00" + "time": "2022-01-02T09:41:36+00:00" }, { - "name": "symfony/symfony", - "version": "v3.4.49", + "name": "symfony/error-handler", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/symfony/symfony.git", - "reference": "ba0e346e3ad11de4a307fe4fa2452a3656dcc17b" + "url": "https://github.com/symfony/error-handler.git", + "reference": "be731658121ef2d8be88f3a1ec938148a9237291" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/symfony/zipball/ba0e346e3ad11de4a307fe4fa2452a3656dcc17b", - "reference": "ba0e346e3ad11de4a307fe4fa2452a3656dcc17b", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/be731658121ef2d8be88f3a1ec938148a9237291", + "reference": "be731658121ef2d8be88f3a1ec938148a9237291", "shasum": "" }, "require": { - "doctrine/common": "~2.4", - "ext-xml": "*", - "fig/link-util": "^1.0", - "php": "^5.5.9|>=7.0.8", - "psr/cache": "~1.0", - "psr/container": "^1.0", - "psr/link": "^1.0", - "psr/log": "~1.0", - "psr/simple-cache": "^1.0", - "symfony/polyfill-apcu": "~1.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php56": "~1.0", - "symfony/polyfill-php70": "~1.6", - "twig/twig": "^1.41|^2.10" - }, - "conflict": { - "monolog/monolog": ">=2", - "phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2", - "phpdocumentor/type-resolver": "<0.3.0", - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" - }, - "provide": { - "psr/cache-implementation": "1.0", - "psr/container-implementation": "1.0", - "psr/log-implementation": "1.0", - "psr/simple-cache-implementation": "1.0" - }, - "replace": { - "symfony/asset": "self.version", - "symfony/browser-kit": "self.version", - "symfony/cache": "self.version", - "symfony/class-loader": "self.version", - "symfony/config": "self.version", - "symfony/console": "self.version", - "symfony/css-selector": "self.version", - "symfony/debug": "self.version", - "symfony/debug-bundle": "self.version", - "symfony/dependency-injection": "self.version", - "symfony/doctrine-bridge": "self.version", - "symfony/dom-crawler": "self.version", - "symfony/dotenv": "self.version", - "symfony/event-dispatcher": "self.version", - "symfony/expression-language": "self.version", - "symfony/filesystem": "self.version", - "symfony/finder": "self.version", - "symfony/form": "self.version", - "symfony/framework-bundle": "self.version", - "symfony/http-foundation": "self.version", - "symfony/http-kernel": "self.version", - "symfony/inflector": "self.version", - "symfony/intl": "self.version", - "symfony/ldap": "self.version", - "symfony/lock": "self.version", - "symfony/monolog-bridge": "self.version", - "symfony/options-resolver": "self.version", - "symfony/process": "self.version", - "symfony/property-access": "self.version", - "symfony/property-info": "self.version", - "symfony/proxy-manager-bridge": "self.version", - "symfony/routing": "self.version", - "symfony/security": "self.version", - "symfony/security-bundle": "self.version", - "symfony/security-core": "self.version", - "symfony/security-csrf": "self.version", - "symfony/security-guard": "self.version", - "symfony/security-http": "self.version", - "symfony/serializer": "self.version", - "symfony/stopwatch": "self.version", - "symfony/templating": "self.version", - "symfony/translation": "self.version", - "symfony/twig-bridge": "self.version", - "symfony/twig-bundle": "self.version", - "symfony/validator": "self.version", - "symfony/var-dumper": "self.version", - "symfony/web-link": "self.version", - "symfony/web-profiler-bundle": "self.version", - "symfony/web-server-bundle": "self.version", - "symfony/workflow": "self.version", - "symfony/yaml": "self.version" + "php": ">=7.1.3", + "psr/log": "^1|^2|^3", + "symfony/debug": "^4.4.5", + "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/annotations": "~1.0", - "doctrine/cache": "~1.6", - "doctrine/data-fixtures": "^1.1", - "doctrine/dbal": "~2.4", - "doctrine/doctrine-bundle": "~1.4", - "doctrine/orm": "~2.4,>=2.4.5", - "egulias/email-validator": "~1.2,>=1.2.8|~2.0", - "monolog/monolog": "~1.11", - "ocramius/proxy-manager": "~0.4|~1.0|~2.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0", - "predis/predis": "~1.0", - "symfony/phpunit-bridge": "^5.2", - "symfony/security-acl": "~2.8|~3.0" + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" }, "type": "library", - "extra": { - "branch-version": "3.4" - }, "autoload": { "psr-4": { - "Symfony\\Bundle\\": "src/Symfony/Bundle/", - "Symfony\\Component\\": "src/Symfony/Component/", - "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", - "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/", - "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/", - "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/" + "Symfony\\Component\\ErrorHandler\\": "" }, - "classmap": [ - "src/Symfony/Component/Intl/Resources/stubs" - ], "exclude-from-classmap": [ - "**/Tests/" + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3838,11 +3963,11 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "The Symfony PHP framework", + "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", - "keywords": [ - "framework" - ], + "support": { + "source": "https://github.com/symfony/error-handler/tree/v4.4.44" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3857,45 +3982,56 @@ "type": "tidelift" } ], - "time": "2021-05-19T12:07:19+00:00" + "time": "2022-07-28T16:29:46+00:00" }, { - "name": "twig/extensions", - "version": "v1.5.4", + "name": "symfony/event-dispatcher", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/twigphp/Twig-extensions.git", - "reference": "57873c8b0c1be51caa47df2cdb824490beb16202" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/57873c8b0c1be51caa47df2cdb824490beb16202", - "reference": "57873c8b0c1be51caa47df2cdb824490beb16202", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a", + "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a", "shasum": "" }, "require": { - "twig/twig": "^1.27|^2.0" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { - "symfony/phpunit-bridge": "^3.4", - "symfony/translation": "^2.7|^3.4" + "psr/log": "^1|^2|^3", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, "suggest": { - "symfony/translation": "Allow the time_diff output to be translated" + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, "autoload": { - "psr-0": { - "Twig_Extensions_": "lib/" - }, "psr-4": { - "Twig\\Extensions\\": "src/" - } + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3905,131 +4041,139 @@ { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Common additional features for Twig that do not directly belong in core", - "keywords": [ - "i18n", - "text" + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "abandoned": true, - "time": "2018-12-05T18:34:18+00:00" + "time": "2022-07-20T09:59:04+00:00" }, { - "name": "twig/twig", - "version": "v2.16.1", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.10.0", "source": { "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "19185947ec75d433a3ac650af32fc05649b95ee1" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "761c8b8387cfe5f8026594a75fdf0a4e83ba6974" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/19185947ec75d433a3ac650af32fc05649b95ee1", - "reference": "19185947ec75d433a3ac650af32fc05649b95ee1", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/761c8b8387cfe5f8026594a75fdf0a4e83ba6974", + "reference": "761c8b8387cfe5f8026594a75fdf0a4e83ba6974", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.8" + "php": ">=7.1.3" }, - "require-dev": { - "psr/container": "^1.0", - "symfony/phpunit-bridge": "^5.4.9|^6.3" + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { - "dev-master": "2.16-dev" + "dev-main": "1.1-dev" } }, "autoload": { - "psr-0": { - "Twig_": "lib/" - }, "psr-4": { - "Twig\\": "src/" + "Symfony\\Contracts\\EventDispatcher\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", "keywords": [ - "templating" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v2.16.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.10.0" }, "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, { "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T17:53:56+00:00" + "time": "2022-07-20T09:59:04+00:00" }, { - "name": "webmozart/assert", - "version": "1.11.0", + "name": "symfony/expression-language", + "version": "v4.4.47", "source": { "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "url": "https://github.com/symfony/expression-language.git", + "reference": "e4964c7636e19f6008660f450c09121c80c2a7b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/e4964c7636e19f6008660f450c09121c80c2a7b9", + "reference": "e4964c7636e19f6008660f450c09121c80c2a7b9", "shasum": "" }, "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" + "php": ">=7.1.3", + "symfony/cache": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, "autoload": { "psr-4": { - "Webmozart\\Assert\\": "src/" - } + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4037,182 +4181,4031 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], + "description": "Provides an engine that can compile and evaluate expressions", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/symfony/expression-language/tree/v4.4.47" }, - "time": "2022-06-03T18:03:27+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-03T15:15:11+00:00" }, { - "name": "zendframework/zend-code", - "version": "3.3.2", + "name": "symfony/filesystem", + "version": "v4.4.42", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-code.git", - "reference": "936fa7ad4d53897ea3e3eb41b5b760828246a20b" + "url": "https://github.com/symfony/filesystem.git", + "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-code/zipball/936fa7ad4d53897ea3e3eb41b5b760828246a20b", - "reference": "936fa7ad4d53897ea3e3eb41b5b760828246a20b", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/815412ee8971209bd4c1eecd5f4f481eacd44bf5", + "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5", "shasum": "" }, "require": { - "php": "^7.1", - "zendframework/zend-eventmanager": "^2.6 || ^3.0" - }, - "require-dev": { - "doctrine/annotations": "^1.0", - "ext-phar": "*", - "phpunit/phpunit": "^7.5.15", - "zendframework/zend-coding-standard": "^1.0", - "zendframework/zend-stdlib": "^2.7 || ^3.0" - }, - "suggest": { - "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", - "zendframework/zend-stdlib": "Zend\\Stdlib component" + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev", - "dev-develop": "3.4.x-dev" - } - }, "autoload": { "psr-4": { - "Zend\\Code\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v4.4.42" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-20T08:49:14+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.4.44", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "66bd787edb5e42ff59d3523f623895af05043e4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/66bd787edb5e42ff59d3523f623895af05043e4f", + "reference": "66bd787edb5e42ff59d3523f623895af05043e4f", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-29T07:35:46+00:00" + }, + { + "name": "symfony/flex", + "version": "v1.22.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/flex.git", + "reference": "5cc985971b1a700cb74bedd9e01cfa93eb4747f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/5cc985971b1a700cb74bedd9e01cfa93eb4747f7", + "reference": "5cc985971b1a700cb74bedd9e01cfa93eb4747f7", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": ">=7.1" + }, + "conflict": { + "composer/semver": "<1.7.2" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "symfony/dotenv": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/phpunit-bridge": "^4.4.12|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Flex\\Flex" + }, + "autoload": { + "psr-4": { + "Symfony\\Flex\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "Composer plugin for Symfony", + "support": { + "issues": "https://github.com/symfony/flex/issues", + "source": "https://github.com/symfony/flex/tree/v1.22.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-03-03T07:50:24+00:00" + }, + { + "name": "symfony/form", + "version": "v4.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/form.git", + "reference": "e1d137b13e0ec2cb5c5e38debca7a510c6f858c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/form/zipball/e1d137b13e0ec2cb5c5e38debca7a510c6f858c6", + "reference": "e1d137b13e0ec2cb5c5e38debca7a510c6f858c6", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/event-dispatcher": "^4.3", + "symfony/intl": "^4.4|^5.0", + "symfony/options-resolver": "~4.3|^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/property-access": "^3.4.40|^4.4.8|^5.0.8", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<4.3", + "symfony/dependency-injection": "<3.4", + "symfony/doctrine-bridge": "<3.4", + "symfony/framework-bundle": "<3.4", + "symfony/http-kernel": "<4.4", + "symfony/intl": "<4.3", + "symfony/translation": "<4.2", + "symfony/twig-bridge": "<3.4.5|<4.0.5,>=4.0" + }, + "require-dev": { + "doctrine/collections": "~1.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^4.3|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/security-csrf": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2|^5.0", + "symfony/validator": "^4.4.17|^5.1.9", + "symfony/var-dumper": "^4.3|^5.0" + }, + "suggest": { + "symfony/security-csrf": "For protecting forms against CSRF attacks.", + "symfony/twig-bridge": "For templating with Twig.", + "symfony/validator": "For form validation." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Form\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows to easily create, process and reuse HTML forms", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/form/tree/v4.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-22T05:50:33+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v4.4.51", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "8f1698ff2a97be8442fb202ac93111f7b6b40781" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/8f1698ff2a97be8442fb202ac93111f7b6b40781", + "reference": "8f1698ff2a97be8442fb202ac93111f7b6b40781", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=7.1.3", + "symfony/cache": "^4.4|^5.0", + "symfony/config": "^4.4.11|~5.0.11|^5.1.3", + "symfony/dependency-injection": "^4.4.38|^5.0.1", + "symfony/error-handler": "^4.4.1|^5.0.1", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/routing": "^4.4.12|^5.1.4" + }, + "conflict": { + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.0|>=3.2.0,<3.2.2", + "phpdocumentor/type-resolver": "<0.3.0|1.3.*", + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/asset": "<3.4", + "symfony/browser-kit": "<4.3", + "symfony/console": "<4.4.21", + "symfony/dom-crawler": "<4.3", + "symfony/dotenv": "<4.3.6", + "symfony/form": "<4.3.5", + "symfony/http-client": "<4.4", + "symfony/lock": "<4.4", + "symfony/mailer": "<4.4", + "symfony/messenger": "<4.4", + "symfony/mime": "<4.4", + "symfony/property-info": "<3.4", + "symfony/security-bundle": "<4.4", + "symfony/serializer": "<4.4", + "symfony/stopwatch": "<3.4", + "symfony/translation": "<4.4", + "symfony/twig-bridge": "<4.1.1", + "symfony/twig-bundle": "<4.4", + "symfony/validator": "<4.4", + "symfony/web-profiler-bundle": "<4.4", + "symfony/workflow": "<4.3.6" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "doctrine/cache": "^1.0|^2.0", + "doctrine/persistence": "^1.3|^2|^3", + "paragonie/sodium_compat": "^1.8", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^3.4|^4.0|^5.0", + "symfony/browser-kit": "^4.3|^5.0", + "symfony/console": "^4.4.42|^5.4.9", + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/dom-crawler": "^4.4.30|^5.3.7", + "symfony/dotenv": "^4.3.6|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/form": "^4.3.5|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/mailer": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/property-info": "^3.4|^4.0|^5.0", + "symfony/security-core": "^3.4|^4.4|^5.2", + "symfony/security-csrf": "^3.4|^4.0|^5.0", + "symfony/security-http": "^3.4|^4.0|^5.0", + "symfony/serializer": "^4.4|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/templating": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/validator": "^4.4|^5.0", + "symfony/web-link": "^4.4|^5.0", + "symfony/workflow": "^4.3.6|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0", + "twig/twig": "^1.43|^2.13|^3.0.4" + }, + "suggest": { + "ext-apcu": "For best performance of the system caches", + "symfony/console": "For using the console commands", + "symfony/form": "For using forms", + "symfony/property-info": "For using the property_info service", + "symfony/serializer": "For using the serializer service", + "symfony/validator": "For using validation", + "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", + "symfony/yaml": "For using the debug:config and lint:yaml commands" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides 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/v4.4.51" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-05T15:42:31+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v2.5.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "48ef1d0a082885877b664332b9427662065a360c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/48ef1d0a082885877b664332b9427662065a360c", + "reference": "48ef1d0a082885877b664332b9427662065a360c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-28T08:37:04+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v4.4.49", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "191413c7b832c015bb38eae963f2e57498c3c173" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/191413c7b832c015bb38eae963f2e57498c3c173", + "reference": "191413c7b832c015bb38eae963f2e57498c3c173", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/mime": "^4.3|^5.0", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/expression-language": "^3.4|^4.0|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v4.4.49" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-04T16:17:57+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v4.4.51", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "ad8ab192cb619ff7285c95d28c69b36d718416c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ad8ab192cb619ff7285c95d28c69b36d718416c7", + "reference": "ad8ab192cb619ff7285c95d28c69b36d718416c7", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "psr/log": "^1|^2", + "symfony/error-handler": "^4.4", + "symfony/event-dispatcher": "^4.4", + "symfony/http-client-contracts": "^1.1|^2", + "symfony/http-foundation": "^4.4.30|^5.3.7", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/browser-kit": "<4.3", + "symfony/config": "<3.4", + "symfony/console": ">=5", + "symfony/dependency-injection": "<4.3", + "symfony/translation": "<4.2", + "twig/twig": "<1.43|<2.13,>=2" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^4.3|^5.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0", + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^4.3|^5.0", + "symfony/dom-crawler": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/routing": "^3.4|^4.0|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/templating": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^1.43|^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v4.4.51" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-11-10T13:31:29+00:00" + }, + { + "name": "symfony/inflector", + "version": "v4.4.44", + "source": { + "type": "git", + "url": "https://github.com/symfony/inflector.git", + "reference": "66185be61805b1e44a5c4000929e700228d426cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/inflector/zipball/66185be61805b1e44a5c4000929e700228d426cc", + "reference": "66185be61805b1e44a5c4000929e700228d426cc", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Inflector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts words between their singular and plural forms (English only)", + "homepage": "https://symfony.com", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string", + "symfony", + "words" + ], + "support": { + "source": "https://github.com/symfony/inflector/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "abandoned": "EnglishInflector from the String component", + "time": "2022-07-20T09:59:04+00:00" + }, + { + "name": "symfony/intl", + "version": "v4.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/intl.git", + "reference": "f1d0f9d91ab482d33423b788999fbb43c34a9a59" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/intl/zipball/f1d0f9d91ab482d33423b788999fbb43c34a9a59", + "reference": "f1d0f9d91ab482d33423b788999fbb43c34a9a59", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/filesystem": "^3.4|^4.0|^5.0" + }, + "suggest": { + "ext-intl": "to use the component with locales other than \"en\"" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Intl\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Eriksen Costa", + "email": "eriksen.costa@infranology.com.br" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a PHP replacement layer for the C intl extension that includes additional data from the ICU library", + "homepage": "https://symfony.com", + "keywords": [ + "i18n", + "icu", + "internationalization", + "intl", + "l10n", + "localization" + ], + "support": { + "source": "https://github.com/symfony/intl/tree/v4.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-03T15:15:11+00:00" + }, + { + "name": "symfony/mime", + "version": "v4.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "0eaf33cd6d1b3eaa50e7bc48b17f6e45789df35d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/0eaf33cd6d1b3eaa50e7bc48b17f6e45789df35d", + "reference": "0eaf33cd6d1b3eaa50e7bc48b17f6e45789df35d", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "symfony/dependency-injection": "^3.4|^4.1|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v4.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-03T15:15:11+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v4.4.43", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "ad09c9980b912e757c4ecd8363cebf3039d1d471" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/ad09c9980b912e757c4ecd8363cebf3039d1d471", + "reference": "ad09c9980b912e757c4ecd8363cebf3039d1d471", + "shasum": "" + }, + "require": { + "monolog/monolog": "^1.25.1", + "php": ">=7.1.3", + "symfony/http-kernel": "^4.3", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/console": "<3.4", + "symfony/http-foundation": "<3.4" + }, + "require-dev": { + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/security-core": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.", + "symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.", + "symfony/var-dumper": "For using the debugging handlers like the console handler or the log server handler." + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Monolog\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Monolog with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/monolog-bridge/tree/v4.4.43" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-16T12:12:11+00:00" + }, + { + "name": "symfony/monolog-bundle", + "version": "v3.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d", + "reference": "a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d", + "shasum": "" + }, + "require": { + "monolog/monolog": "^1.22 || ^2.0 || ^3.0", + "php": ">=7.1.3", + "symfony/config": "~4.4 || ^5.0 || ^6.0", + "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", + "symfony/http-kernel": "~4.4 || ^5.0 || ^6.0", + "symfony/monolog-bridge": "~4.4 || ^5.0 || ^6.0" + }, + "require-dev": { + "symfony/console": "~4.4 || ^5.0 || ^6.0", + "symfony/phpunit-bridge": "^5.2 || ^6.0", + "symfony/yaml": "~4.4 || ^5.0 || ^6.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MonologBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony MonologBundle", + "homepage": "https://symfony.com", + "keywords": [ + "log", + "logging" + ], + "support": { + "issues": "https://github.com/symfony/monolog-bundle/issues", + "source": "https://github.com/symfony/monolog-bundle/tree/v3.8.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-10T14:24:36+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v4.4.44", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "583f56160f716dd435f1cd721fd14b548f4bb510" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/583f56160f716dd435f1cd721fd14b548f4bb510", + "reference": "583f56160f716dd435f1cd721fd14b548f4bb510", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-20T09:59:04+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "5f3b930437ae03ae5dff61269024d8ea1b3774aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/5f3b930437ae03ae5dff61269024d8ea1b3774aa", + "reference": "5f3b930437ae03ae5dff61269024d8ea1b3774aa", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-iconv": "*" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-17T14:58:18+00:00" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "763d2a91fea5681509ca01acbc1c5e450d127811" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/763d2a91fea5681509ca01acbc1c5e450d127811", + "reference": "763d2a91fea5681509ca01acbc1c5e450d127811", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance and support of other locales than \"en\"" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Icu\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-21T18:38:29+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-10T14:38:51+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "metapackage", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/property-access", + "version": "v4.4.44", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "d49682f6f0764df725c95128213a38f7e0a9f358" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/d49682f6f0764df725c95128213a38f7e0a9f358", + "reference": "d49682f6f0764df725c95128213a38f7e0a9f358", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/inflector": "^3.4|^4.0|^5.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/cache": "^3.4|^4.0|^5.0" + }, + "suggest": { + "psr/cache-implementation": "To cache access methods." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T13:16:42+00:00" + }, + { + "name": "symfony/routing", + "version": "v4.4.44", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "f7751fd8b60a07f3f349947a309b5bdfce22d6ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/f7751fd8b60a07f3f349947a309b5bdfce22d6ae", + "reference": "f7751fd8b60a07f3f349947a309b5bdfce22d6ae", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "psr/log": "^1|^2|^3", + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-20T09:59:04+00:00" + }, + { + "name": "symfony/security-bundle", + "version": "v4.4.50", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-bundle.git", + "reference": "076fd2088ada33d760758d98ff07ddedbf567946" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/076fd2088ada33d760758d98ff07ddedbf567946", + "reference": "076fd2088ada33d760758d98ff07ddedbf567946", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=7.1.3", + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/polyfill-php80": "^1.16", + "symfony/security-core": "^4.4", + "symfony/security-csrf": "^4.2|^5.0", + "symfony/security-guard": "^4.2|^5.0", + "symfony/security-http": "^4.4.50" + }, + "conflict": { + "symfony/browser-kit": "<4.2", + "symfony/console": "<3.4", + "symfony/framework-bundle": "<4.4", + "symfony/ldap": "<4.4", + "symfony/twig-bundle": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "symfony/asset": "^3.4|^4.0|^5.0", + "symfony/browser-kit": "^4.2|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/dom-crawler": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/form": "^3.4|^4.0|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/serializer": "^4.4|^5.0", + "symfony/translation": "^3.4|^4.0|^5.0", + "symfony/twig-bridge": "^3.4|^4.0|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/validator": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0", + "twig/twig": "^1.43|^2.13|^3.0.4" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\SecurityBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides 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/v4.4.50" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-24T10:39:54+00:00" + }, + { + "name": "symfony/security-core", + "version": "v4.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "423ccb332784b236dfe6c5f396d0ac49db57c914" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/423ccb332784b236dfe6c5f396d0ac49db57c914", + "reference": "423ccb332784b236dfe6c5f396d0ac49db57c914", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1|^2", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1.6|^2" + }, + "conflict": { + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/ldap": "<4.4", + "symfony/security-guard": "<4.3" + }, + "require-dev": { + "psr/container": "^1.0|^2.0", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^4.3", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/ldap": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/validator": "^3.4.31|^4.3.4|^5.0" + }, + "suggest": { + "psr/container-implementation": "To instantiate the Security class", + "symfony/event-dispatcher": "", + "symfony/expression-language": "For using the expression voter", + "symfony/http-foundation": "", + "symfony/ldap": "For using LDAP integration", + "symfony/validator": "For using the user password constraint" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Core\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - Core Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-core/tree/v4.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-22T05:50:33+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v4.4.37", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "45c956ef58135091f53732646a0acd28034f02c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/45c956ef58135091f53732646a0acd28034f02c0", + "reference": "45c956ef58135091f53732646a0acd28034f02c0", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16", + "symfony/security-core": "^3.4|^4.0|^5.0" + }, + "conflict": { + "symfony/http-foundation": "<3.4" + }, + "require-dev": { + "symfony/http-foundation": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/http-foundation": "For using the class SessionTokenStorage." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Csrf\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - CSRF Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-csrf/tree/v4.4.37" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:41:36+00:00" + }, + { + "name": "symfony/security-guard", + "version": "v4.4.46", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-guard.git", + "reference": "f199eb1b19db11ce254b891580728c45a7ccacfd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-guard/zipball/f199eb1b19db11ce254b891580728c45a7ccacfd", + "reference": "f199eb1b19db11ce254b891580728c45a7ccacfd", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/security-core": "^3.4.22|^4.2.3|^5.0", + "symfony/security-http": "^4.4.1" + }, + "require-dev": { + "psr/log": "^1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Guard\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - Guard", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-guard/tree/v4.4.46" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-09-23T06:06:49+00:00" + }, + { + "name": "symfony/security-http", + "version": "v4.4.50", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-http.git", + "reference": "7fa4a0cac16f02cb534a6e9adcdb17385f94004f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-http/zipball/7fa4a0cac16f02cb534a6e9adcdb17385f94004f", + "reference": "7fa4a0cac16f02cb534a6e9adcdb17385f94004f", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/http-foundation": "^3.4.40|^4.4.7|^5.0.7", + "symfony/http-kernel": "^4.4", + "symfony/polyfill-php80": "^1.16", + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/security-core": "^4.4.8" + }, + "conflict": { + "symfony/event-dispatcher": ">=5", + "symfony/security-csrf": "<3.4.11|~4.0,<4.0.11" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/routing": "^3.4|^4.0|^5.0", + "symfony/security-csrf": "^3.4.11|^4.0.11|^5.0" + }, + "suggest": { + "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", + "symfony/security-csrf": "For using tokens to protect authentication/logout attempts" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Http\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - HTTP Integration", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-http/tree/v4.4.50" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-24T10:39:54+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.5.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300", + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v4.4.46", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "757660703fbd139eea0001b759c6c3bf5bc3ea52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/757660703fbd139eea0001b759c6c3bf5bc3ea52", + "reference": "757660703fbd139eea0001b759c6c3bf5bc3ea52", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/service-contracts": "^1.0|^2" + }, + "require-dev": { + "symfony/polyfill-php72": "~1.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v4.4.46" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-09-28T12:53:24+00:00" + }, + { + "name": "symfony/swiftmailer-bundle", + "version": "v3.5.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/swiftmailer-bundle.git", + "reference": "9daab339f226ac958192bf89836cb3378cc0e652" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/9daab339f226ac958192bf89836cb3378cc0e652", + "reference": "9daab339f226ac958192bf89836cb3378cc0e652", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "swiftmailer/swiftmailer": "^6.1.3", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0" + }, + "conflict": { + "twig/twig": "<1.41|>=2.0,<2.10" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/phpunit-bridge": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\SwiftmailerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony SwiftmailerBundle", + "homepage": "http://symfony.com", + "support": { + "issues": "https://github.com/symfony/swiftmailer-bundle/issues", + "source": "https://github.com/symfony/swiftmailer-bundle/tree/v3.5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "abandoned": "symfony/mailer", + "time": "2022-02-06T08:03:40+00:00" + }, + { + "name": "symfony/templating", + "version": "v4.4.44", + "source": { + "type": "git", + "url": "https://github.com/symfony/templating.git", + "reference": "2bfe94a5ebe0176612186e5f6b6a08a480c9e1f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/templating/zipball/2bfe94a5ebe0176612186e5f6b6a08a480c9e1f9", + "reference": "2bfe94a5ebe0176612186e5f6b6a08a480c9e1f9", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "require-dev": { + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log-implementation": "For using debug logging in loaders" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Templating\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides all the tools needed to build any kind of template system", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/templating/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T13:16:42+00:00" + }, + { + "name": "symfony/translation", + "version": "v4.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "45036b1d53accc48fe9bab71ccd86d57eba0dd94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/45036b1d53accc48fe9bab71ccd86d57eba0dd94", + "reference": "45036b1d53accc48fe9bab71ccd86d57eba0dd94", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^1.1.6|^2" + }, + "conflict": { + "symfony/config": "<3.4", + "symfony/dependency-injection": "<3.4", + "symfony/http-kernel": "<4.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "symfony/translation-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/finder": "~2.8|~3.0|~4.0|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/intl": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v4.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-03T15:15:11+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.5.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "450d4172653f38818657022252f9d81be89ee9a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/450d4172653f38818657022252f9d81be89ee9a8", + "reference": "450d4172653f38818657022252f9d81be89ee9a8", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v4.4.51", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "83b021cd395053ed30327b9ee5d3fd60631f73f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/83b021cd395053ed30327b9ee5d3fd60631f73f5", + "reference": "83b021cd395053ed30327b9ee5d3fd60631f73f5", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^1.43|^2.13|^3.0.4" + }, + "conflict": { + "symfony/console": "<3.4", + "symfony/form": "<4.4", + "symfony/http-foundation": "<4.3", + "symfony/translation": "<4.2", + "symfony/workflow": "<4.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3", + "symfony/asset": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/form": "^4.4.17", + "symfony/http-foundation": "^4.3|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/intl": "^4.4|^5.0", + "symfony/mime": "^4.3|^5.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/routing": "^3.4|^4.0|^5.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^3.0|^4.0|^5.0", + "symfony/security-csrf": "^3.4|^4.0|^5.0", + "symfony/security-http": "^3.4|^4.0|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/templating": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2.1|^5.0", + "symfony/web-link": "^4.4|^5.0", + "symfony/workflow": "^4.3|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0", + "twig/cssinliner-extra": "^2.12|^3", + "twig/inky-extra": "^2.12|^3", + "twig/markdown-extra": "^2.12|^3" + }, + "suggest": { + "symfony/asset": "For using the AssetExtension", + "symfony/expression-language": "For using the ExpressionExtension", + "symfony/finder": "", + "symfony/form": "For using the FormExtension", + "symfony/http-kernel": "For using the HttpKernelExtension", + "symfony/routing": "For using the RoutingExtension", + "symfony/security-core": "For using the SecurityExtension", + "symfony/security-csrf": "For using the CsrfExtension", + "symfony/security-http": "For using the LogoutUrlExtension", + "symfony/stopwatch": "For using the StopwatchExtension", + "symfony/templating": "For using the TwigEngine", + "symfony/translation": "For using the TranslationExtension", + "symfony/var-dumper": "For using the DumpExtension", + "symfony/web-link": "For using the WebLinkExtension", + "symfony/yaml": "For using the YamlExtension" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Twig with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v4.4.51" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-11-09T21:17:38+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v4.4.41", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "164c1edc69f2c7ee337323efc78a8a8a263f45ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/164c1edc69f2c7ee337323efc78a8a8a263f45ff", + "reference": "164c1edc69f2c7ee337323efc78a8a8a263f45ff", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/http-foundation": "^4.3|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/twig-bridge": "^4.4|^5.0", + "twig/twig": "^1.43|^2.13|^3.0.4" + }, + "conflict": { + "symfony/dependency-injection": "<4.1", + "symfony/framework-bundle": "<4.4", + "symfony/translation": "<4.2" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "doctrine/cache": "^1.0|^2.0", + "symfony/asset": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^4.2.5|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/form": "^3.4|^4.0|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/routing": "^3.4|^4.0|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/templating": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2|^5.0", + "symfony/web-link": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of Twig into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v4.4.41" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-12T15:19:55+00:00" + }, + { + "name": "symfony/validator", + "version": "v4.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "54781a4c41efbd283b779110bf8ae7f263737775" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/54781a4c41efbd283b779110bf8ae7f263737775", + "reference": "54781a4c41efbd283b779110bf8ae7f263737775", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^1.1|^2" + }, + "conflict": { + "doctrine/lexer": "<1.1", + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/dependency-injection": "<3.4", + "symfony/http-kernel": "<4.4", + "symfony/intl": "<4.3", + "symfony/translation": ">=5.0", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "doctrine/cache": "^1.0|^2.0", + "egulias/email-validator": "^2.1.10|^3", + "symfony/cache": "^3.4|^4.0|^5.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-client": "^4.3|^5.0", + "symfony/http-foundation": "^4.1|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/intl": "^4.3|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/property-info": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader.", + "egulias/email-validator": "Strict (RFC compliant) email validation", + "psr/cache-implementation": "For using the mapping cache.", + "symfony/config": "", + "symfony/expression-language": "For using the Expression validator", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/property-access": "For accessing properties within comparison constraints", + "symfony/property-info": "To automatically add NotNull and Type constraints", + "symfony/translation": "For translating validation errors.", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to validate values", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/v4.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-25T13:54:11+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v4.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "1069c7a3fca74578022fab6f81643248d02f8e63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1069c7a3fca74578022fab6f81643248d02f8e63", + "reference": "1069c7a3fca74578022fab6f81643248d02f8e63", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^1.43|^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v4.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-03T15:15:11+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "862700068db0ddfd8c5b850671e029a90246ec75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/862700068db0ddfd8c5b850671e029a90246ec75", + "reference": "862700068db0ddfd8c5b850671e029a90246ec75", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/yaml", + "version": "v4.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d", + "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v4.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-08-02T15:47:23+00:00" + }, + { + "name": "twig/twig", + "version": "v3.11.3", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "3b06600ff3abefaf8ff55d5c336cd1c4253f8c7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3b06600ff3abefaf8ff55d5c336cd1c4253f8c7e", + "reference": "3b06600ff3abefaf8ff55d5c336cd1c4253f8c7e", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.22", + "symfony/polyfill-php81": "^1.29" + }, + "require-dev": { + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.11.3" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2024-11-07T12:34:41+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "behat/behat", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Behat.git", + "reference": "08052f739619a9e9f62f457a67302f0715e6dd13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Behat/zipball/08052f739619a9e9f62f457a67302f0715e6dd13", + "reference": "08052f739619a9e9f62f457a67302f0715e6dd13", + "shasum": "" + }, + "require": { + "behat/gherkin": "^4.6.0", + "behat/transliterator": "^1.2", + "ext-mbstring": "*", + "php": ">=5.3.3", + "psr/container": "^1.0", + "symfony/config": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", + "symfony/console": "^2.7.51 || ^2.8.33 || ^3.3.15 || ^3.4.3 || ^4.0.3 || ^5.0", + "symfony/dependency-injection": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", + "symfony/event-dispatcher": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", + "symfony/translation": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", + "symfony/yaml": "^2.7.51 || ^3.0 || ^4.0 || ^5.0" + }, + "require-dev": { + "container-interop/container-interop": "^1.2", + "herrera-io/box": "~1.6.1", + "phpunit/phpunit": "^4.8.36 || ^6.5.14 || ^7.5.20", + "symfony/process": "~2.5 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "ext-dom": "Needed to output test results in JUnit format." + }, + "bin": [ + "bin/behat" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Behat\\Behat\\": "src/Behat/Behat/", + "Behat\\Testwork\\": "src/Behat/Testwork/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Scenario-oriented BDD framework for PHP 5.3", + "homepage": "http://behat.org/", + "keywords": [ + "Agile", + "BDD", + "ScenarioBDD", + "Scrum", + "StoryBDD", + "User story", + "business", + "development", + "documentation", + "examples", + "symfony", + "testing" + ], + "support": { + "issues": "https://github.com/Behat/Behat/issues", + "source": "https://github.com/Behat/Behat/tree/v3.7.0" + }, + "time": "2020-06-03T13:08:44+00:00" + }, + { + "name": "behat/gherkin", + "version": "v4.10.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "cbb83c4c435dd8d05a161f2a5ae322e61b2f4db6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/cbb83c4c435dd8d05a161f2a5ae322e61b2f4db6", + "reference": "cbb83c4c435dd8d05a161f2a5ae322e61b2f4db6", + "shasum": "" + }, + "require": { + "php": "~7.2|~8.0" + }, + "require-dev": { + "cucumber/cucumber": "dev-gherkin-24.1.0", + "phpunit/phpunit": "~8|~9", + "symfony/yaml": "~3|~4|~5|~6|~7" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "support": { + "issues": "https://github.com/Behat/Gherkin/issues", + "source": "https://github.com/Behat/Gherkin/tree/v4.10.0" + }, + "time": "2024-10-19T14:46:06+00:00" + }, + { + "name": "behat/mink", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/minkphp/Mink.git", + "reference": "7e4edec6c335937029cb3569ce7ef81182804d0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/7e4edec6c335937029cb3569ce7ef81182804d0a", + "reference": "7e4edec6c335937029cb3569ce7ef81182804d0a", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/css-selector": "^4.4 || ^5.0 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^8.5.22 || ^9.5.11", + "symfony/error-handler": "^4.4 || ^5.0 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0" + }, + "suggest": { + "behat/mink-browserkit-driver": "fast headless driver for any app without JS emulation", + "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", + "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Behat\\Mink\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Browser controller/emulator abstraction for PHP", + "homepage": "https://mink.behat.org/", + "keywords": [ + "browser", + "testing", + "web" + ], + "support": { + "issues": "https://github.com/minkphp/Mink/issues", + "source": "https://github.com/minkphp/Mink/tree/v1.12.0" + }, + "time": "2024-10-30T18:48:14+00:00" + }, + { + "name": "behat/mink-browserkit-driver", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/minkphp/MinkBrowserKitDriver.git", + "reference": "057926c9da452bac5bfcffb92eb4f3e1ce74dae9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/057926c9da452bac5bfcffb92eb4f3e1ce74dae9", + "reference": "057926c9da452bac5bfcffb92eb4f3e1ce74dae9", + "shasum": "" + }, + "require": { + "behat/mink": "^1.7.1@dev", + "php": ">=5.4", + "symfony/browser-kit": "~2.3|~3.0|~4.0", + "symfony/dom-crawler": "~2.3|~3.0|~4.0" + }, + "require-dev": { + "mink/driver-testsuite": "dev-master", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.18 || ^8.5 || ^9.5", + "symfony/debug": "^2.7|^3.0|^4.0", + "symfony/http-kernel": "~2.3|~3.0|~4.0", + "yoast/phpunit-polyfills": "^1.0" + }, + "type": "mink-driver", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Behat\\Mink\\Driver\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Symfony2 BrowserKit driver for Mink framework", + "homepage": "https://mink.behat.org/", + "keywords": [ + "Mink", + "Symfony2", + "browser", + "testing" + ], + "support": { + "issues": "https://github.com/minkphp/MinkBrowserKitDriver/issues", + "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v1.4.1" + }, + "time": "2021-12-10T14:17:06+00:00" + }, + { + "name": "behat/mink-goutte-driver", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/minkphp/MinkGoutteDriver.git", + "reference": "8139f520f417c81bf9d2f9a171fff400f6adc9ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/8139f520f417c81bf9d2f9a171fff400f6adc9ea", + "reference": "8139f520f417c81bf9d2f9a171fff400f6adc9ea", + "shasum": "" + }, + "require": { + "behat/mink-browserkit-driver": "~1.2@dev", + "fabpot/goutte": "~1.0.4|~2.0|~3.1", + "php": ">=5.4" + }, + "require-dev": { + "mink/driver-testsuite": "dev-master" + }, + "type": "mink-driver", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Behat\\Mink\\Driver\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } ], - "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", + "description": "Goutte driver for Mink framework", + "homepage": "https://mink.behat.org/", "keywords": [ - "ZendFramework", - "code", - "zf" + "browser", + "goutte", + "headless", + "testing" ], - "abandoned": "laminas/laminas-code", - "time": "2019-08-31T14:14:34+00:00" + "support": { + "issues": "https://github.com/minkphp/MinkGoutteDriver/issues", + "source": "https://github.com/minkphp/MinkGoutteDriver/tree/v1.3.0" + }, + "abandoned": "behat/mink-browserkit-driver", + "time": "2021-10-12T11:35:46+00:00" }, { - "name": "zendframework/zend-eventmanager", - "version": "3.2.1", + "name": "behat/transliterator", + "version": "v1.5.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-eventmanager.git", - "reference": "a5e2583a211f73604691586b8406ff7296a946dd" + "url": "https://github.com/Behat/Transliterator.git", + "reference": "baac5873bac3749887d28ab68e2f74db3a4408af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd", - "reference": "a5e2583a211f73604691586b8406ff7296a946dd", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/baac5873bac3749887d28ab68e2f74db3a4408af", + "reference": "baac5873bac3749887d28ab68e2f74db3a4408af", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": ">=7.2" }, "require-dev": { - "athletic/athletic": "^0.1", - "container-interop/container-interop": "^1.1.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", - "zendframework/zend-coding-standard": "~1.0.0", - "zendframework/zend-stdlib": "^2.7.3 || ^3.0" - }, - "suggest": { - "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", - "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + "chuyskywalker/rolling-curl": "^3.1", + "php-yaoi/php-yaoi": "^1.0", + "phpunit/phpunit": "^8.5.25 || ^9.5.19" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev", - "dev-develop": "3.3-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "Zend\\EventManager\\": "src/" + "Behat\\Transliterator\\": "src/Behat/Transliterator" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "Artistic-1.0" ], - "description": "Trigger and listen to events within a PHP application", - "homepage": "https://github.com/zendframework/zend-eventmanager", + "description": "String transliterator", "keywords": [ - "event", - "eventmanager", - "events", - "zf2" + "i18n", + "slug", + "transliterator" ], - "abandoned": "laminas/laminas-eventmanager", - "time": "2018-04-25T15:33:34+00:00" - } - ], - "packages-dev": [ + "support": { + "issues": "https://github.com/Behat/Transliterator/issues", + "source": "https://github.com/Behat/Transliterator/tree/v1.5.0" + }, + "abandoned": true, + "time": "2022-03-30T09:27:43+00:00" + }, { - "name": "behat/behat", - "version": "v3.7.0", + "name": "composer/pcre", + "version": "2.3.2", "source": { "type": "git", - "url": "https://github.com/Behat/Behat.git", - "reference": "08052f739619a9e9f62f457a67302f0715e6dd13" + "url": "https://github.com/composer/pcre.git", + "reference": "ebb81df8f52b40172d14062ae96a06939d80a069" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/08052f739619a9e9f62f457a67302f0715e6dd13", - "reference": "08052f739619a9e9f62f457a67302f0715e6dd13", + "url": "https://api.github.com/repos/composer/pcre/zipball/ebb81df8f52b40172d14062ae96a06939d80a069", + "reference": "ebb81df8f52b40172d14062ae96a06939d80a069", "shasum": "" }, "require": { - "behat/gherkin": "^4.6.0", - "behat/transliterator": "^1.2", - "ext-mbstring": "*", - "php": ">=5.3.3", - "psr/container": "^1.0", - "symfony/config": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", - "symfony/console": "^2.7.51 || ^2.8.33 || ^3.3.15 || ^3.4.3 || ^4.0.3 || ^5.0", - "symfony/dependency-injection": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", - "symfony/event-dispatcher": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", - "symfony/translation": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", - "symfony/yaml": "^2.7.51 || ^3.0 || ^4.0 || ^5.0" + "php": "^7.2 || ^8.0" }, - "require-dev": { - "container-interop/container-interop": "^1.2", - "herrera-io/box": "~1.6.1", - "phpunit/phpunit": "^4.8.36 || ^6.5.14 || ^7.5.20", - "symfony/process": "~2.5 || ^3.0 || ^4.0 || ^5.0" + "conflict": { + "phpstan/phpstan": "<1.11.10" }, - "suggest": { - "ext-dom": "Needed to output test results in JUnit format." + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" }, - "bin": [ - "bin/behat" - ], "type": "library", "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, "branch-alias": { - "dev-master": "3.6.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { "psr-4": { - "Behat\\Behat\\": "src/Behat/Behat/", - "Behat\\Testwork\\": "src/Behat/Testwork/" + "Composer\\Pcre\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4221,67 +8214,66 @@ ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "Scenario-oriented BDD framework for PHP 5.3", - "homepage": "http://behat.org/", + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", "keywords": [ - "Agile", - "BDD", - "ScenarioBDD", - "Scrum", - "StoryBDD", - "User story", - "business", - "development", - "documentation", - "examples", - "symfony", - "testing" + "PCRE", + "preg", + "regex", + "regular expression" ], "support": { - "issues": "https://github.com/Behat/Behat/issues", - "source": "https://github.com/Behat/Behat/tree/v3.7.0" + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/2.3.2" }, - "time": "2020-06-03T13:08:44+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:24:47+00:00" }, { - "name": "behat/gherkin", - "version": "v4.6.0", + "name": "composer/xdebug-handler", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/Behat/Gherkin.git", - "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", - "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { - "php": ">=5.3.1" + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3|~4", - "symfony/yaml": "~2.3|~3|~4" - }, - "suggest": { - "symfony/yaml": "If you want to parse features, represented in YAML files" + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, "autoload": { - "psr-0": { - "Behat\\Gherkin": "src/" + "psr-4": { + "Composer\\XdebugHandler\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4290,59 +8282,63 @@ ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "Gherkin DSL parser for PHP 5.3", - "homepage": "http://behat.org/", + "description": "Restarts a process without Xdebug.", "keywords": [ - "BDD", - "Behat", - "Cucumber", - "DSL", - "gherkin", - "parser" + "Xdebug", + "performance" + ], + "support": { + "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.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } ], - "time": "2019-01-16T14:22:17+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { - "name": "behat/mink", - "version": "v1.7.1", + "name": "dmore/behat-chrome-extension", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/minkphp/Mink.git", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" + "url": "https://gitlab.com/behat-chrome/behat-chrome-extension.git", + "reference": "888e91f52b3ffd19afe61cea3d5edebb0a4d43a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "url": "https://gitlab.com/api/v4/projects/behat-chrome%2Fbehat-chrome-extension/repository/archive.zip?sha=888e91f52b3ffd19afe61cea3d5edebb0a4d43a7", + "reference": "888e91f52b3ffd19afe61cea3d5edebb0a4d43a7", "shasum": "" }, "require": { - "php": ">=5.3.1", - "symfony/css-selector": "~2.1|~3.0" + "behat/behat": "^3.0.4", + "dmore/chrome-mink-driver": "^2.4.1", + "friends-of-behat/mink-extension": "^2.0", + "php": ">=7.1" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0" - }, - "suggest": { - "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", - "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", - "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" + "phpunit/phpunit": "^8.5 || ^9.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7.x-dev" - } - }, "autoload": { "psr-4": { - "Behat\\Mink\\": "src/" + "DMore\\ChromeExtension\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4351,54 +8347,110 @@ ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Dorian More", + "email": "doriancmore@gmail.com" } ], - "description": "Browser controller/emulator abstraction for PHP", - "homepage": "http://mink.behat.org/", + "description": "Behat extension for controlling Chrome without Selenium", + "homepage": "https://gitlab.com/behat-chrome/chrome-mink-driver", "keywords": [ - "browser", - "testing", - "web" + "Behat", + "chrome", + "driver", + "headless" ], - "time": "2016-03-05T08:26:18+00:00" + "support": { + "issues": "https://gitlab.com/behat-chrome/behat-chrome-extension/-/issues", + "source": "https://gitlab.com/behat-chrome/behat-chrome-extension/-/tree/1.4.0" + }, + "time": "2022-04-10T04:25:11+00:00" }, { - "name": "behat/mink-browserkit-driver", - "version": "1.3.3", + "name": "dmore/chrome-mink-driver", + "version": "2.9.2", "source": { "type": "git", - "url": "https://github.com/minkphp/MinkBrowserKitDriver.git", - "reference": "1b9a7ce903cfdaaec5fb32bfdbb26118343662eb" + "url": "git@gitlab.com:behat-chrome/chrome-mink-driver.git", + "reference": "a91b61c809c2e834c5f94f6df3af4d4117735e70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/1b9a7ce903cfdaaec5fb32bfdbb26118343662eb", - "reference": "1b9a7ce903cfdaaec5fb32bfdbb26118343662eb", + "url": "https://gitlab.com/api/v4/projects/behat-chrome%2Fchrome-mink-driver/repository/archive.zip?sha=a91b61c809c2e834c5f94f6df3af4d4117735e70", + "reference": "a91b61c809c2e834c5f94f6df3af4d4117735e70", "shasum": "" }, "require": { - "behat/mink": "^1.7.1@dev", - "php": ">=5.3.6", - "symfony/browser-kit": "~2.3|~3.0|~4.0", - "symfony/dom-crawler": "~2.3|~3.0|~4.0" + "behat/mink": "^1.9", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "textalk/websocket": "^1.2.0" }, "require-dev": { "mink/driver-testsuite": "dev-master", - "symfony/http-kernel": "~2.3|~3.0|~4.0" + "phpunit/phpunit": "^8.5.22 || ^9.5.11", + "squizlabs/php_codesniffer": "^3.5" }, - "type": "mink-driver", + "type": "library", + "autoload": { + "psr-4": { + "DMore\\ChromeDriver\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dorian More", + "email": "doriancmore@gmail.com" + } + ], + "description": "Mink driver for controlling chrome without selenium", + "homepage": "https://gitlab.com/behat-chrome/chrome-mink-driver", + "support": { + "issues": "https://gitlab.com/behat-chrome/chrome-mink-driver/-/issues" + }, + "time": "2023-04-03T10:37:34+00:00" + }, + { + "name": "fabpot/goutte", + "version": "v3.3.1", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/Goutte.git", + "reference": "80a23b64f44d54dd571d114c473d9d7e9ed84ca5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/80a23b64f44d54dd571d114c473d9d7e9ed84ca5", + "reference": "80a23b64f44d54dd571d114c473d9d7e9ed84ca5", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": ">=7.1.3", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^5.0" + }, + "type": "application", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "3.3-dev" } }, "autoload": { "psr-4": { - "Behat\\Mink\\Driver\\": "src/" - } + "Goutte\\": "Goutte" + }, + "exclude-from-classmap": [ + "Goutte/Tests" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4406,44 +8458,48 @@ ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], - "description": "Symfony2 BrowserKit driver for Mink framework", - "homepage": "http://mink.behat.org/", - "keywords": [ - "Mink", - "Symfony2", - "browser", - "testing" + "description": "A simple PHP Web Scraper", + "homepage": "https://github.com/FriendsOfPHP/Goutte", + "keywords": [ + "scraper" ], - "time": "2018-05-02T09:25:31+00:00" + "support": { + "issues": "https://github.com/FriendsOfPHP/Goutte/issues", + "source": "https://github.com/FriendsOfPHP/Goutte/tree/v3.3.1" + }, + "abandoned": "symfony/browser-kit", + "time": "2020-11-01T09:30:18+00:00" }, { - "name": "behat/mink-extension", - "version": "2.3.1", + "name": "friends-of-behat/mink-extension", + "version": "v2.5.0", "source": { "type": "git", - "url": "https://github.com/Behat/MinkExtension.git", - "reference": "80f7849ba53867181b7e412df9210e12fba50177" + "url": "https://github.com/FriendsOfBehat/MinkExtension.git", + "reference": "83119aa70be1f2c63061c29dced9d41775cd9db2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/MinkExtension/zipball/80f7849ba53867181b7e412df9210e12fba50177", - "reference": "80f7849ba53867181b7e412df9210e12fba50177", + "url": "https://api.github.com/repos/FriendsOfBehat/MinkExtension/zipball/83119aa70be1f2c63061c29dced9d41775cd9db2", + "reference": "83119aa70be1f2c63061c29dced9d41775cd9db2", "shasum": "" }, "require": { "behat/behat": "^3.0.5", "behat/mink": "^1.5", - "php": ">=5.3.2", - "symfony/config": "^2.7|^3.0|^4.0" + "php": ">=7.2", + "symfony/config": "^3.4 || ^4.4 || ^5.0" + }, + "replace": { + "behat/mink-extension": "self.version" }, "require-dev": { "behat/mink-goutte-driver": "^1.1", - "phpspec/phpspec": "^2.0" + "phpspec/phpspec": "^6.0 || ^7.0" }, "type": "behat-extension", "extra": { @@ -4461,13 +8517,13 @@ "MIT" ], "authors": [ - { - "name": "Christophe Coevoet", - "email": "stof@notk.org" - }, { "name": "Konstantin Kudryashov", "email": "ever.zet@gmail.com" + }, + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" } ], "description": "Mink extension for Behat", @@ -4478,40 +8534,60 @@ "test", "web" ], - "time": "2018-02-06T15:36:30+00:00" + "support": { + "source": "https://github.com/FriendsOfBehat/MinkExtension/tree/v2.5.0" + }, + "time": "2021-01-21T09:27:44+00:00" }, { - "name": "behat/mink-goutte-driver", - "version": "v1.2.1", + "name": "friends-of-behat/symfony-extension", + "version": "v2.1.0", "source": { "type": "git", - "url": "https://github.com/minkphp/MinkGoutteDriver.git", - "reference": "8b9ad6d2d95bc70b840d15323365f52fcdaea6ca" + "url": "https://github.com/FriendsOfBehat/SymfonyExtension.git", + "reference": "0f906e1156546095f4287be7cd5ceede2d3e22cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/8b9ad6d2d95bc70b840d15323365f52fcdaea6ca", - "reference": "8b9ad6d2d95bc70b840d15323365f52fcdaea6ca", + "url": "https://api.github.com/repos/FriendsOfBehat/SymfonyExtension/zipball/0f906e1156546095f4287be7cd5ceede2d3e22cc", + "reference": "0f906e1156546095f4287be7cd5ceede2d3e22cc", "shasum": "" }, "require": { - "behat/mink": "~1.6@dev", - "behat/mink-browserkit-driver": "~1.2@dev", - "fabpot/goutte": "~1.0.4|~2.0|~3.1", - "php": ">=5.3.1" + "behat/behat": "^3.6.1", + "php": "^7.1", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/proxy-manager-bridge": "^4.4|^5.0" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0" + "behat/mink-selenium2-driver": "^1.3", + "friends-of-behat/mink": "^1.7", + "friends-of-behat/mink-browserkit-driver": "^1.3", + "friends-of-behat/mink-extension": "^2.2", + "friends-of-behat/page-object-extension": "^0.3.1", + "friends-of-behat/service-container-extension": "^1.0", + "sylius-labs/coding-standard": "^3.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0", + "vimeo/psalm": "3.10.1" }, - "type": "mink-driver", + "suggest": { + "friends-of-behat/mink": "^1.7", + "friends-of-behat/mink-browserkit-driver": "^1.3", + "friends-of-behat/mink-extension": "^2.2" + }, + "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "2.1-dev" } }, "autoload": { "psr-4": { - "Behat\\Mink\\Driver\\": "src/" + "FriendsOfBehat\\SymfonyExtension\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4520,219 +8596,234 @@ ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Kamil Kokot", + "email": "kamil@kokot.me", + "homepage": "https://kamilkokot.com" } ], - "description": "Goutte driver for Mink framework", - "homepage": "http://mink.behat.org/", - "keywords": [ - "browser", - "goutte", - "headless", - "testing" - ], - "time": "2016-03-05T09:04:22+00:00" + "description": "Integrates Behat with Symfony.", + "support": { + "issues": "https://github.com/FriendsOfBehat/SymfonyExtension/issues", + "source": "https://github.com/FriendsOfBehat/SymfonyExtension/tree/2.1" + }, + "time": "2020-04-04T20:07:00+00:00" }, { - "name": "behat/mink-selenium2-driver", - "version": "v1.3.1", + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", "source": { "type": "git", - "url": "https://github.com/minkphp/MinkSelenium2Driver.git", - "reference": "473a9f3ebe0c134ee1e623ce8a9c852832020288" + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/MinkSelenium2Driver/zipball/473a9f3ebe0c134ee1e623ce8a9c852832020288", - "reference": "473a9f3ebe0c134ee1e623ce8a9c852832020288", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, "require": { - "behat/mink": "~1.7@dev", - "instaclick/php-webdriver": "~1.1", - "php": ">=5.3.1" + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" }, - "type": "mink-driver", + "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.1-dev" } }, "autoload": { - "psr-4": { - "Behat\\Mink\\Driver\\": "src/" - } + "classmap": [ + "hamcrest" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Pete Otaqui", - "email": "pete@otaqui.com", - "homepage": "https://github.com/pete-otaqui" - } + "BSD-3-Clause" ], - "description": "Selenium2 (WebDriver) driver for Mink framework", - "homepage": "http://mink.behat.org/", + "description": "This is the PHP port of Hamcrest Matchers", "keywords": [ - "ajax", - "browser", - "javascript", - "selenium", - "testing", - "webdriver" + "test" ], - "time": "2016-03-05T09:10:18+00:00" + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" }, { - "name": "behat/symfony2-extension", - "version": "2.1.5", + "name": "ingenerator/behat-tableassert", + "version": "v1.2.1", "source": { "type": "git", - "url": "https://github.com/Behat/Symfony2Extension.git", - "reference": "d7c834487426a784665f9c1e61132274dbf2ea26" + "url": "https://github.com/ingenerator/behat-tableassert.git", + "reference": "d1609a660cc48051fe04fa53f4f7ff37a9c3788e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Symfony2Extension/zipball/d7c834487426a784665f9c1e61132274dbf2ea26", - "reference": "d7c834487426a784665f9c1e61132274dbf2ea26", + "url": "https://api.github.com/repos/ingenerator/behat-tableassert/zipball/d1609a660cc48051fe04fa53f4f7ff37a9c3788e", + "reference": "d1609a660cc48051fe04fa53f4f7ff37a9c3788e", "shasum": "" }, "require": { - "behat/behat": "^3.4.3", - "php": ">=5.3.3", - "symfony/framework-bundle": "~2.0|~3.0|~4.0" + "behat/gherkin": ">=2.0.0 <5.0.0", + "ext-dom": "*", + "ext-libxml": "*", + "ext-simplexml": "*", + "php": "^7.2" }, "require-dev": { - "behat/mink": "~1.7@dev", - "behat/mink-browserkit-driver": "~1.3@dev", - "behat/mink-extension": "~2.0", - "phpspec/phpspec": "~2.0|~3.0|~4.0", - "phpunit/phpunit": "~4.0|~5.0", - "symfony/symfony": "~2.1|~3.0|~4.0" + "behat/mink": "^1.7", + "phpunit/phpunit": "^7.0" }, - "type": "behat-extension", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } + "suggest": { + "behat/mink": "For parsing tables from a browser response" }, + "type": "library", "autoload": { - "psr-0": { - "Behat\\Symfony2Extension": "src/" + "psr-4": { + "Ingenerator\\BehatTableAssert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Christophe Coevoet", - "email": "stof@notk.org" - }, - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com" + "name": "Andrew Coulton", + "email": "andrew@ingenerator.com" } ], - "description": "Symfony2 framework extension for Behat", - "homepage": "http://behat.org", - "keywords": [ - "BDD", - "framework", - "symfony" - ], - "abandoned": "friends-of-behat/symfony-extension", - "time": "2018-04-20T15:48:23+00:00" + "description": "Assertions for all sorts of tabular data in behat", + "homepage": "https://github.com/ingenerator/behat-tableassert", + "support": { + "issues": "https://github.com/ingenerator/behat-tableassert/issues", + "source": "https://github.com/ingenerator/behat-tableassert/" + }, + "time": "2020-06-07T08:26:31+00:00" }, { - "name": "behat/transliterator", - "version": "v1.2.0", + "name": "league/flysystem", + "version": "2.5.0", "source": { "type": "git", - "url": "https://github.com/Behat/Transliterator.git", - "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c" + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "8aaffb653c5777781b0f7f69a5d937baf7ab6cdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c", - "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8aaffb653c5777781b0f7f69a5d937baf7ab6cdb", + "reference": "8aaffb653c5777781b0f7f69a5d937baf7ab6cdb", "shasum": "" }, "require": { - "php": ">=5.3.3" + "ext-json": "*", + "league/mime-type-detection": "^1.0.0", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "guzzlehttp/ringphp": "<1.1.1" }, "require-dev": { - "chuyskywalker/rolling-curl": "^3.1", - "php-yaoi/php-yaoi": "^1.0" + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.0", + "aws/aws-sdk-php": "^3.132.4", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "friendsofphp/php-cs-fixer": "^3.2", + "google/cloud-storage": "^1.23", + "phpseclib/phpseclib": "^2.0", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^8.5 || ^9.4", + "sabre/dav": "^4.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, "autoload": { - "psr-0": { - "Behat\\Transliterator": "src/" + "psr-4": { + "League\\Flysystem\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Artistic-1.0" + "MIT" ], - "description": "String transliterator", + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", "keywords": [ - "i18n", - "slug", - "transliterator" + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/2.5.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } ], - "time": "2017-04-04T11:38:05+00:00" + "time": "2022-09-17T21:02:32+00:00" }, { - "name": "composer/pcre", - "version": "1.0.1", + "name": "league/mime-type-detection", + "version": "1.12.0", "source": { "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "c7f2872fb273bf493811473dafc88d60ae829f48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/c7f2872fb273bf493811473dafc88d60ae829f48", + "reference": "c7f2872fb273bf493811473dafc88d60ae829f48", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5" + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, "autoload": { "psr-4": { - "Composer\\Pcre\\": "src" + "League\\MimeTypeDetection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4741,66 +8832,80 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" } ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], + "description": "Mime-type detection for Flysystem", "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/1.0.1" + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.12.0" }, "funding": [ { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", + "url": "https://github.com/frankdejonge", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", "type": "tidelift" } ], - "time": "2022-01-21T20:24:37+00:00" + "time": "2023-08-03T07:14:11+00:00" }, { - "name": "composer/xdebug-handler", - "version": "2.0.5", + "name": "liip/functional-test-bundle", + "version": "4.9.0", "source": { "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a" + "url": "https://github.com/liip/LiipFunctionalTestBundle.git", + "reference": "782586afa58080c27b5557fbff7239f87a747b1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/9e36aeed4616366d2b690bdce11f71e9178c579a", - "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a", + "url": "https://api.github.com/repos/liip/LiipFunctionalTestBundle/zipball/782586afa58080c27b5557fbff7239f87a747b1d", + "reference": "782586afa58080c27b5557fbff7239f87a747b1d", "shasum": "" }, "require": { - "composer/pcre": "^1", - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1 || ^2 || ^3" + "php": "^7.2 || ^8.0", + "phpunit/phpunit": "^7.5.0 || ^8.0 || ^9.0 || ^10.0", + "symfony/browser-kit": "^4.4 || ^5.1 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.1 || ^6.0" + }, + "conflict": { + "symfony/framework-bundle": "4.3.0" }, "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" + "doctrine/annotations": "^1.3 || ^2.0", + "doctrine/doctrine-bundle": "^2.1", + "doctrine/orm": "^2.7", + "ext-json": "*", + "monolog/monolog": "~1.11", + "symfony/css-selector": "^4.4 || ^5.1 || ^6.0", + "symfony/doctrine-bridge": "^4.4 || ^5.1 || ^6.0", + "symfony/form": "^4.4 || ^5.1 || ^6.0", + "symfony/http-kernel": "^4.4 || ^5.1 || ^6.0", + "symfony/monolog-bundle": "^3.4", + "symfony/security-bundle": "^4.4 || ^5.1 || ^6.0", + "symfony/twig-bundle": "^4.4 || ^5.1 || ^6.0", + "symfony/validator": "^4.4 || ^5.1 || ^6.0", + "symfony/yaml": "^4.4 || ^5.1 || ^6.0", + "twig/twig": "^2.0 || ^3.0" + }, + "suggest": { + "doctrine/annotations": "Required to use the @QueryCount(…) annotation", + "liip/test-fixtures-bundle": "Efficient loading of Doctrine fixtures in functional test-cases for Symfony applications" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } }, - "type": "library", "autoload": { "psr-4": { - "Composer\\XdebugHandler\\": "src" + "Liip\\FunctionalTestBundle\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4809,73 +8914,57 @@ ], "authors": [ { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" + "name": "Liip AG", + "homepage": "http://www.liip.ch/" + }, + { + "name": "Community contributions", + "homepage": "https://github.com/liip/LiipFunctionalTestBundle/contributors" } ], - "description": "Restarts a process without Xdebug.", + "description": "This bundles provides additional functional test-cases for Symfony applications", "keywords": [ - "Xdebug", - "performance" + "symfony", + "testing" ], "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/2.0.5" + "issues": "https://github.com/liip/LiipFunctionalTestBundle/issues", + "source": "https://github.com/liip/LiipFunctionalTestBundle/tree/4.9.0" }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-02-24T20:20:32+00:00" + "time": "2023-04-11T18:57:22+00:00" }, { - "name": "fabpot/goutte", - "version": "v3.2.3", + "name": "malukenho/docheader", + "version": "0.1.8", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/Goutte.git", - "reference": "3f0eaf0a40181359470651f1565b3e07e3dd31b8" + "url": "https://github.com/malukenho/docheader.git", + "reference": "a15c22ba8a44add72a2b2bca5e40af244a53497c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/3f0eaf0a40181359470651f1565b3e07e3dd31b8", - "reference": "3f0eaf0a40181359470651f1565b3e07e3dd31b8", + "url": "https://api.github.com/repos/malukenho/docheader/zipball/a15c22ba8a44add72a2b2bca5e40af244a53497c", + "reference": "a15c22ba8a44add72a2b2bca5e40af244a53497c", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^6.0", - "php": ">=5.5.0", - "symfony/browser-kit": "~2.1|~3.0|~4.0", - "symfony/css-selector": "~2.1|~3.0|~4.0", - "symfony/dom-crawler": "~2.1|~3.0|~4.0" + "php": "^7.1 | ^8.0", + "symfony/console": "^3.0 || ^4.0 || ^5.0", + "symfony/finder": "^3.0 || ^4.0 || ^5.0" }, "require-dev": { - "symfony/phpunit-bridge": "^3.3 || ^4" - }, - "type": "application", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } + "doctrine/coding-standard": "^6.0", + "phpunit/phpunit": "^7.0 || ^8.0", + "vimeo/psalm": "^3.3" }, + "bin": [ + "bin/docheader" + ], + "type": "library", "autoload": { "psr-4": { - "Goutte\\": "Goutte" - }, - "exclude-from-classmap": [ - "Goutte/Tests" - ] + "DocHeader\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4883,475 +8972,501 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Jefersson Nathan", + "email": "malukenho.dev@gmail.com" } ], - "description": "A simple PHP Web Scraper", - "homepage": "https://github.com/FriendsOfPHP/Goutte", + "description": "A small library to check header docs", + "homepage": "https://github.com/malukenho/docheader", "keywords": [ - "scraper" + "Code style", + "code standard", + "license" ], - "time": "2018-06-29T15:13:57+00:00" + "support": { + "issues": "https://github.com/malukenho/docheader/issues", + "source": "https://github.com/malukenho/docheader/tree/master" + }, + "time": "2019-11-22T07:32:36+00:00" }, { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.0", + "name": "mockery/mockery", + "version": "1.3.6", "source": { "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" + "url": "https://github.com/mockery/mockery.git", + "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", - "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", + "url": "https://api.github.com/repos/mockery/mockery/zipball/dc206df4fa314a50bbb81cf72239a305c5bbd5c0", + "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0", "shasum": "" }, "require": { - "php": "^5.3|^7.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=5.6.0" }, "require-dev": { - "phpunit/php-file-iterator": "1.3.3", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "^1.0" + "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { - "classmap": [ - "hamcrest" - ] + "psr-0": { + "Mockery": "library/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "BSD-3-Clause" ], - "description": "This is the PHP port of Hamcrest Matchers", + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", "keywords": [ - "test" + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" ], - "time": "2016-01-20T08:20:44+00:00" + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.3.6" + }, + "time": "2022-09-07T15:05:49+00:00" }, { - "name": "ingenerator/behat-tableassert", - "version": "v1.2.0", + "name": "myclabs/deep-copy", + "version": "1.13.3", "source": { "type": "git", - "url": "https://github.com/ingenerator/behat-tableassert.git", - "reference": "9c0b254fc798f75151200c58662c31f6d6a05184" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "faed855a7b5f4d4637717c2b3863e277116beb36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ingenerator/behat-tableassert/zipball/9c0b254fc798f75151200c58662c31f6d6a05184", - "reference": "9c0b254fc798f75151200c58662c31f6d6a05184", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/faed855a7b5f4d4637717c2b3863e277116beb36", + "reference": "faed855a7b5f4d4637717c2b3863e277116beb36", "shasum": "" }, "require": { - "behat/gherkin": ">=2.0.0 <5.0.0", - "ext-dom": "*", - "ext-libxml": "*", - "ext-simplexml": "*", - "php": "^7.2" + "php": "^7.1 || ^8.0" }, - "require-dev": { - "behat/mink": "^1.7", - "phpunit/phpunit": "^7.0" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, - "suggest": { - "behat/mink": "For parsing tables from a browser response" + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], "psr-4": { - "Ingenerator\\BehatTableAssert\\": "src/" + "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.3" + }, + "funding": [ { - "name": "Andrew Coulton", - "email": "andrew@ingenerator.com" + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" } ], - "description": "Assertions for all sorts of tabular data in behat", - "homepage": "https://github.com/ingenerator/behat-tableassert", - "time": "2019-04-03T14:26:15+00:00" + "time": "2025-07-05T12:25:42+00:00" }, { - "name": "instaclick/php-webdriver", - "version": "1.4.6", + "name": "pdepend/pdepend", + "version": "2.16.2", "source": { "type": "git", - "url": "https://github.com/instaclick/php-webdriver.git", - "reference": "bd9405077ca04129a73059a06873bedb5e138402" + "url": "https://github.com/pdepend/pdepend.git", + "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/instaclick/php-webdriver/zipball/bd9405077ca04129a73059a06873bedb5e138402", - "reference": "bd9405077ca04129a73059a06873bedb5e138402", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/f942b208dc2a0868454d01b29f0c75bbcfc6ed58", + "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58", "shasum": "" }, "require": { - "ext-curl": "*", - "php": ">=5.3.2" + "php": ">=5.3.7", + "symfony/config": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/polyfill-mbstring": "^1.19" }, "require-dev": { - "phpunit/phpunit": "^4.8", - "satooshi/php-coveralls": "^1.0||^2.0" + "easy-doc/easy-doc": "0.0.0|^1.2.3", + "gregwar/rst": "^1.0", + "squizlabs/php_codesniffer": "^2.0.0" }, + "bin": [ + "src/bin/pdepend" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { - "psr-0": { - "WebDriver": "lib/" + "psr-4": { + "PDepend\\": "src/main/php/PDepend" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "BSD-3-Clause" ], - "authors": [ - { - "name": "Justin Bishop", - "email": "jubishop@gmail.com", - "role": "Developer" - }, + "description": "Official version of pdepend to be handled with Composer", + "keywords": [ + "PHP Depend", + "PHP_Depend", + "dev", + "pdepend" + ], + "support": { + "issues": "https://github.com/pdepend/pdepend/issues", + "source": "https://github.com/pdepend/pdepend/tree/2.16.2" + }, + "funding": [ { - "name": "Anthon Pang", - "email": "apang@softwaredevelopment.ca", - "role": "Fork Maintainer" + "url": "https://tidelift.com/funding/github/packagist/pdepend/pdepend", + "type": "tidelift" } ], - "description": "PHP WebDriver for Selenium 2", - "homepage": "http://instaclick.com/", - "keywords": [ - "browser", - "selenium", - "webdriver", - "webtest" - ], - "time": "2019-09-23T15:50:44+00:00" + "time": "2023-12-17T18:09:59+00:00" }, { - "name": "league/flysystem", - "version": "2.5.0", + "name": "phake/phake", + "version": "v4.6.1", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "8aaffb653c5777781b0f7f69a5d937baf7ab6cdb" + "url": "https://github.com/phake/phake.git", + "reference": "fca279683f26db1ec729da773479f6bfceb6f0e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8aaffb653c5777781b0f7f69a5d937baf7ab6cdb", - "reference": "8aaffb653c5777781b0f7f69a5d937baf7ab6cdb", + "url": "https://api.github.com/repos/phake/phake/zipball/fca279683f26db1ec729da773479f6bfceb6f0e0", + "reference": "fca279683f26db1ec729da773479f6bfceb6f0e0", "shasum": "" }, "require": { - "ext-json": "*", - "league/mime-type-detection": "^1.0.0", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "guzzlehttp/ringphp": "<1.1.1" + "doctrine/instantiator": "^1.4", + "php": "^7.1|^8.0", + "sebastian/comparator": "^1.1|^2.0|^3.0|^4.0|^5.0|^6.0|^7.0" }, "require-dev": { - "async-aws/s3": "^1.5", - "async-aws/simple-s3": "^1.0", - "aws/aws-sdk-php": "^3.132.4", - "composer/semver": "^3.0", - "ext-fileinfo": "*", - "ext-ftp": "*", - "friendsofphp/php-cs-fixer": "^3.2", - "google/cloud-storage": "^1.23", - "phpseclib/phpseclib": "^2.0", - "phpstan/phpstan": "^0.12.26", - "phpunit/phpunit": "^8.5 || ^9.4", - "sabre/dav": "^4.1" + "doctrine/annotations": "^1.13", + "hamcrest/hamcrest-php": "^1.1|^2.0", + "phpunit/phpunit": "^6.5|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "psalm/phar": "^4.18" + }, + "suggest": { + "doctrine/annotations": "Allows mock annotations to use import statements for classes.", + "hamcrest/hamcrest-php": "Use Hamcrest matchers." }, "type": "library", + "extra": { + "branch-alias": { + "dev-4.4": "4.4.x-dev", + "dev-master": "5.0.x-dev" + } + }, "autoload": { + "files": [ + "src/Phake.php" + ], "psr-4": { - "League\\Flysystem\\": "src" + "Phake\\": "src/Phake" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" + { + "name": "Mike Lively", + "email": "m@digitalsandwich.com" } ], - "description": "File storage abstraction for PHP", + "description": "The Phake mock testing library", + "homepage": "https://phake.github.io", "keywords": [ - "WebDAV", - "aws", - "cloud", - "file", - "files", - "filesystem", - "filesystems", - "ftp", - "s3", - "sftp", - "storage" + "mock", + "phake", + "spy", + "stub", + "test-doubles", + "testing" ], "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/2.5.0" + "docs": "https://phake.github.io/doc/", + "issues": "https://github.com/phake/phake/issues", + "source": "https://github.com/phake/phake/tree/v4.6.1" }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2022-09-17T21:02:32+00:00" + "time": "2025-03-11T03:06:35+00:00" }, { - "name": "league/mime-type-detection", - "version": "1.7.0", + "name": "phar-io/manifest", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3" + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { - "ext-fileinfo": "*", + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", "php": "^7.2 || ^8.0" }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.18", - "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" - }, "type": "library", - "autoload": { - "psr-4": { - "League\\MimeTypeDetection\\": "src" + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Mime-type detection for Flysystem", + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, "funding": [ { - "url": "https://github.com/frankdejonge", + "url": "https://github.com/theseer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" } ], - "time": "2021-01-18T20:58:21+00:00" + "time": "2024-03-03T12:33:53+00:00" }, { - "name": "liip/functional-test-bundle", - "version": "4.3.0", + "name": "phar-io/version", + "version": "3.2.1", "source": { "type": "git", - "url": "https://github.com/liip/LiipFunctionalTestBundle.git", - "reference": "9797828746b67b7aeb03a136a951d28781f09253" + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/liip/LiipFunctionalTestBundle/zipball/9797828746b67b7aeb03a136a951d28781f09253", - "reference": "9797828746b67b7aeb03a136a951d28781f09253", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { - "doctrine/annotations": "^1.3", - "php": "^7.2 || ^8.0", - "phpunit/phpunit": "^7.5.0 || ^8.0 || ^9.0", - "symfony/browser-kit": "^3.4 || ^4.4 || ^5.1", - "symfony/framework-bundle": "^3.4 || ^4.4 || ^5.1" - }, - "conflict": { - "symfony/framework-bundle": "4.3.0" - }, - "require-dev": { - "doctrine/doctrine-bundle": "^1.8 || ^2.0", - "doctrine/orm": "^2.6.3", - "monolog/monolog": "~1.11", - "symfony/css-selector": "^3.4.33 || ^4.4 || ^5.1", - "symfony/form": "^3.4.33 || ^4.4 || ^5.1", - "symfony/http-kernel": "^3.4.33 || ^4.4 || ^5.1", - "symfony/monolog-bundle": "^3.4", - "symfony/phpunit-bridge": "^3.4.33 || ^4.4 || ^5.1", - "symfony/security-bundle": "^3.4.33 || ^4.4 || ^5.1", - "symfony/twig-bundle": "^3.4.33 || ^4.4 || ^5.1", - "symfony/validator": "^3.4.33 || ^4.4 || ^5.1", - "symfony/yaml": "^3.4.33 || ^4.4 || ^5.1", - "twig/twig": "^2.0 || ^3.0" - }, - "suggest": { - "liip/test-fixtures-bundle": "Efficient loading of Doctrine fixtures in functional test-cases for Symfony applications" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } + "php": "^7.2 || ^8.0" }, + "type": "library", "autoload": { - "psr-4": { - "Liip\\FunctionalTestBundle\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Liip AG", - "homepage": "http://www.liip.ch/" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "Community contributions", - "homepage": "https://github.com/liip/LiipFunctionalTestBundle/contributors" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "This bundles provides additional functional test-cases for Symfony applications", - "keywords": [ - "symfony", - "testing" - ], + "description": "Library for handling version information and constraints", "support": { - "issues": "https://github.com/liip/LiipFunctionalTestBundle/issues", - "source": "https://github.com/liip/LiipFunctionalTestBundle/tree/4.3.0" + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2021-02-24T21:17:26+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { - "name": "malukenho/docheader", - "version": "0.1.8", + "name": "phpcompatibility/php-compatibility", + "version": "9.3.5", "source": { "type": "git", - "url": "https://github.com/malukenho/docheader.git", - "reference": "a15c22ba8a44add72a2b2bca5e40af244a53497c" + "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", + "reference": "9fb324479acf6f39452e0655d2429cc0d3914243" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/malukenho/docheader/zipball/a15c22ba8a44add72a2b2bca5e40af244a53497c", - "reference": "a15c22ba8a44add72a2b2bca5e40af244a53497c", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243", + "reference": "9fb324479acf6f39452e0655d2429cc0d3914243", "shasum": "" }, "require": { - "php": "^7.1 | ^8.0", - "symfony/console": "^3.0 || ^4.0 || ^5.0", - "symfony/finder": "^3.0 || ^4.0 || ^5.0" + "php": ">=5.3", + "squizlabs/php_codesniffer": "^2.3 || ^3.0.2" + }, + "conflict": { + "squizlabs/php_codesniffer": "2.6.2" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0 || ^8.0", - "vimeo/psalm": "^3.3" + "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0" }, - "bin": [ - "bin/docheader" - ], - "type": "library", - "autoload": { - "psr-4": { - "DocHeader\\": "src/" - } + "suggest": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.", + "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." }, + "type": "phpcodesniffer-standard", "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-3.0-or-later" ], "authors": [ { - "name": "Jefersson Nathan", - "email": "malukenho.dev@gmail.com" + "name": "Wim Godden", + "homepage": "https://github.com/wimg", + "role": "lead" + }, + { + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", + "role": "lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors" } ], - "description": "A small library to check header docs", - "homepage": "https://github.com/malukenho/docheader", + "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.", + "homepage": "http://techblog.wimgodden.be/tag/codesniffer/", "keywords": [ - "Code style", - "code standard", - "license" + "compatibility", + "phpcs", + "standards" ], "support": { - "issues": "https://github.com/malukenho/docheader/issues", - "source": "https://github.com/malukenho/docheader/tree/master" + "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues", + "source": "https://github.com/PHPCompatibility/PHPCompatibility" }, - "time": "2019-11-22T07:32:36+00:00" + "time": "2019-12-27T09:44:58+00:00" }, { - "name": "mockery/mockery", - "version": "1.3.1", + "name": "phpmd/phpmd", + "version": "2.15.0", "source": { "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be" + "url": "https://github.com/phpmd/phpmd.git", + "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", - "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/74a1f56e33afad4128b886e334093e98e1b5e7c0", + "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "~2.0", - "lib-pcre": ">=7.0", - "php": ">=5.6.0" + "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0", + "ext-xml": "*", + "pdepend/pdepend": "^2.16.1", + "php": ">=5.3.9" }, "require-dev": { - "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" + "easy-doc/easy-doc": "0.0.0 || ^1.3.2", + "ext-json": "*", + "ext-simplexml": "*", + "gregwar/rst": "^1.0", + "mikey179/vfsstream": "^1.6.8", + "squizlabs/php_codesniffer": "^2.9.2 || ^3.7.2" }, + "bin": [ + "src/bin/phpmd" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, "autoload": { "psr-0": { - "Mockery": "library/" + "PHPMD\\": "src/main/php" } }, "notification-url": "https://packagist.org/downloads/", @@ -5360,190 +9475,201 @@ ], "authors": [ { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" + "name": "Manuel Pichler", + "email": "github@manuel-pichler.de", + "homepage": "https://github.com/manuelpichler", + "role": "Project Founder" }, { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" + "name": "Marc Würth", + "email": "ravage@bluewin.ch", + "homepage": "https://github.com/ravage84", + "role": "Project Maintainer" + }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" } ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", + "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", + "homepage": "https://phpmd.org/", "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" + "dev", + "mess detection", + "mess detector", + "pdepend", + "phpmd", + "pmd" ], "support": { - "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/master" + "irc": "irc://irc.freenode.org/phpmd", + "issues": "https://github.com/phpmd/phpmd/issues", + "source": "https://github.com/phpmd/phpmd/tree/2.15.0" }, - "time": "2019-12-26T09:49:15+00:00" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/phpmd/phpmd", + "type": "tidelift" + } + ], + "time": "2023-12-11T08:22:20+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.10.2", + "name": "phpunit/php-code-coverage", + "version": "7.0.17", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "40a4ed114a4aea5afd6df8d0f0c9cd3033097f66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/40a4ed114a4aea5afd6df8d0f0c9cd3033097f66", + "reference": "40a4ed114a4aea5afd6df8d0f0c9cd3033097f66", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": ">=7.2", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.1.3 || ^4.0", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^4.2.2", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1.3" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^8.2.2" + }, + "suggest": { + "ext-xdebug": "^2.7.2" }, "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "Create deep copies (clones) of your objects", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "coverage", + "testing", + "xunit" ], "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.17" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2024-03-02T06:09:37+00:00" }, { - "name": "pdepend/pdepend", - "version": "2.13.0", + "name": "phpunit/php-file-iterator", + "version": "2.0.6", "source": { "type": "git", - "url": "https://github.com/pdepend/pdepend.git", - "reference": "31be7cd4f305f3f7b52af99c1cb13fc938d1cfad" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "69deeb8664f611f156a924154985fbd4911eb36b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/31be7cd4f305f3f7b52af99c1cb13fc938d1cfad", - "reference": "31be7cd4f305f3f7b52af99c1cb13fc938d1cfad", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/69deeb8664f611f156a924154985fbd4911eb36b", + "reference": "69deeb8664f611f156a924154985fbd4911eb36b", "shasum": "" }, "require": { - "php": ">=5.3.7", - "symfony/config": "^2.3.0|^3|^4|^5|^6.0", - "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0", - "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0" + "php": ">=7.1" }, "require-dev": { - "easy-doc/easy-doc": "0.0.0|^1.2.3", - "gregwar/rst": "^1.0", - "phpunit/phpunit": "^4.8.36|^5.7.27", - "squizlabs/php_codesniffer": "^2.0.0" + "phpunit/phpunit": "^8.5" }, - "bin": [ - "src/bin/pdepend" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "PDepend\\": "src/main/php/PDepend" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "Official version of pdepend to be handled with Composer", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], "support": { - "issues": "https://github.com/pdepend/pdepend/issues", - "source": "https://github.com/pdepend/pdepend/tree/2.13.0" + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.6" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/pdepend/pdepend", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2023-02-28T20:56:15+00:00" + "time": "2024-03-01T13:39:50+00:00" }, { - "name": "phake/phake", - "version": "v4.4.0", + "name": "phpunit/php-text-template", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/phake/phake.git", - "reference": "5c8954791645d9b7fc027bf76822a221a5a4de8a" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phake/phake/zipball/5c8954791645d9b7fc027bf76822a221a5a4de8a", - "reference": "5c8954791645d9b7fc027bf76822a221a5a4de8a", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.4", - "php": "^7.1|^8.0", - "sebastian/comparator": "^1.1|^2.0|^3.0|^4.0|^5.0" - }, - "require-dev": { - "doctrine/annotations": "^1.13", - "hamcrest/hamcrest-php": "1.1.*", - "phpunit/phpunit": "^6.5|^7.0|^8.0|^9.0|^10.0", - "psalm/phar": "^4.18" - }, - "suggest": { - "doctrine/annotations": "Allows mock annotations to use import statements for classes.", - "hamcrest/hamcrest-php": "Use Hamcrest matchers." + "php": ">=5.3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, "autoload": { - "files": [ - "src/Phake.php" - ], - "psr-4": { - "Phake\\": "src/Phake" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5551,52 +9677,46 @@ ], "authors": [ { - "name": "Mike Lively", - "email": "m@digitalsandwich.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "The Phake mock testing library", - "homepage": "https://phake.github.io", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "mock", - "phake", - "spy", - "stub", - "test-doubles", - "testing" + "template" ], "support": { - "docs": "https://phake.github.io/doc/", - "issues": "https://github.com/phake/phake/issues", - "source": "https://github.com/phake/phake/tree/v4.4.0" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" }, - "time": "2023-02-10T20:32:41+00:00" + "time": "2015-06-21T13:50:34+00:00" }, { - "name": "phar-io/manifest", - "version": "2.0.3", + "name": "phpunit/php-timer", + "version": "2.1.4", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "a691211e94ff39a34811abd521c31bd5b305b0bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/a691211e94ff39a34811abd521c31bd5b305b0bb", + "reference": "a691211e94ff39a34811abd521c31bd5b305b0bb", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -5609,47 +9729,56 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", - "role": "Developer" + "role": "lead" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-01T13:42:41+00:00" }, { - "name": "phar-io/version", - "version": "3.2.1", + "name": "phpunit/php-token-stream", + "version": "3.1.3", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "9c1da83261628cb24b6a6df371b6e312b3954768" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768", + "reference": "9c1da83261628cb24b6a6df371b6e312b3954768", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "ext-tokenizer": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } }, - "type": "library", "autoload": { "classmap": [ "src/" @@ -5660,210 +9789,216 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "email": "sebastian@phpunit.de" } ], - "description": "Library for handling version information and constraints", + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3" }, - "time": "2022-02-21T01:04:05+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "abandoned": true, + "time": "2021-07-26T12:15:06+00:00" }, { - "name": "phpcompatibility/php-compatibility", - "version": "9.3.5", + "name": "phpunit/phpunit", + "version": "8.5.42", "source": { "type": "git", - "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", - "reference": "9fb324479acf6f39452e0655d2429cc0d3914243" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "3a68a70824da546d26ac08ca4fced67341f4158f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243", - "reference": "9fb324479acf6f39452e0655d2429cc0d3914243", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3a68a70824da546d26ac08ca4fced67341f4158f", + "reference": "3a68a70824da546d26ac08ca4fced67341f4158f", "shasum": "" }, "require": { - "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.3 || ^3.0.2" + "doctrine/instantiator": "^1.5.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=7.2", + "phpunit/php-code-coverage": "^7.0.17", + "phpunit/php-file-iterator": "^2.0.6", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1.4", + "sebastian/comparator": "^3.0.5", + "sebastian/diff": "^3.0.6", + "sebastian/environment": "^4.2.5", + "sebastian/exporter": "^3.1.6", + "sebastian/global-state": "^3.0.5", + "sebastian/object-enumerator": "^3.0.5", + "sebastian/resource-operations": "^2.0.3", + "sebastian/type": "^1.1.5", + "sebastian/version": "^2.0.1" }, - "conflict": { - "squizlabs/php_codesniffer": "2.6.2" + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage", + "phpunit/php-invoker": "To allow enforcing time limits" }, - "require-dev": { - "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0" + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.5-dev" + } }, - "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.", - "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." + "autoload": { + "classmap": [ + "src/" + ] }, - "type": "phpcodesniffer-standard", "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0-or-later" + "BSD-3-Clause" ], "authors": [ { - "name": "Wim Godden", - "homepage": "https://github.com/wimg", - "role": "lead" - }, - { - "name": "Juliette Reinders Folmer", - "homepage": "https://github.com/jrfnl", + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", "role": "lead" - }, - { - "name": "Contributors", - "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors" } ], - "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.", - "homepage": "http://techblog.wimgodden.be/tag/codesniffer/", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "compatibility", - "phpcs", - "standards" + "phpunit", + "testing", + "xunit" ], "support": { - "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues", - "source": "https://github.com/PHPCompatibility/PHPCompatibility" + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.42" }, - "time": "2019-12-27T09:44:58+00:00" + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2025-05-02T06:33:00+00:00" }, { - "name": "phpmd/phpmd", - "version": "2.13.0", + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/phpmd/phpmd.git", - "reference": "dad0228156856b3ad959992f9748514fa943f3e3" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/dad0228156856b3ad959992f9748514fa943f3e3", - "reference": "dad0228156856b3ad959992f9748514fa943f3e3", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54", + "reference": "92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54", "shasum": "" }, "require": { - "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0", - "ext-xml": "*", - "pdepend/pdepend": "^2.12.1", - "php": ">=5.3.9" + "php": ">=5.6" }, "require-dev": { - "easy-doc/easy-doc": "0.0.0 || ^1.3.2", - "ext-json": "*", - "ext-simplexml": "*", - "gregwar/rst": "^1.0", - "mikey179/vfsstream": "^1.6.8", - "phpunit/phpunit": "^4.8.36 || ^5.7.27", - "squizlabs/php_codesniffer": "^2.0" + "phpunit/phpunit": "^8.5" }, - "bin": [ - "src/bin/phpmd" - ], "type": "library", - "autoload": { - "psr-0": { - "PHPMD\\": "src/main/php" + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Manuel Pichler", - "email": "github@manuel-pichler.de", - "homepage": "https://github.com/manuelpichler", - "role": "Project Founder" - }, - { - "name": "Marc Würth", - "email": "ravage@bluewin.ch", - "homepage": "https://github.com/ravage84", - "role": "Project Maintainer" - }, - { - "name": "Other contributors", - "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", - "role": "Contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", - "homepage": "https://phpmd.org/", - "keywords": [ - "mess detection", - "mess detector", - "pdepend", - "phpmd", - "pmd" - ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { - "irc": "irc://irc.freenode.org/phpmd", - "issues": "https://github.com/phpmd/phpmd/issues", - "source": "https://github.com/phpmd/phpmd/tree/2.13.0" + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.3" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/phpmd/phpmd", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2022-09-10T08:44:15+00:00" + "time": "2024-03-01T13:45:45+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "7.0.15", + "name": "sebastian/comparator", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "819f92bba8b001d4363065928088de22f25a3a48" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/819f92bba8b001d4363065928088de22f25a3a48", - "reference": "819f92bba8b001d4363065928088de22f25a3a48", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770", + "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": ">=7.2", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.3 || ^4.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.2.2", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1.3" + "php": ">=7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^8.2.2" - }, - "suggest": { - "ext-xdebug": "^2.7.2" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -5878,20 +10013,31 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ - "coverage", - "testing", - "xunit" + "comparator", + "compare", + "equality" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.15" + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5" }, "funding": [ { @@ -5899,32 +10045,33 @@ "type": "github" } ], - "time": "2021-07-26T12:20:09+00:00" + "time": "2022-09-14T12:31:48+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "2.0.5", + "name": "sebastian/diff", + "version": "3.0.6", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "98ff311ca519c3aa73ccd3de053bdb377171d7b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", - "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/98ff311ca519c3aa73ccd3de053bdb377171d7b6", + "reference": "98ff311ca519c3aa73ccd3de053bdb377171d7b6", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -5939,19 +10086,24 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "filesystem", - "iterator" + "diff", + "udiff", + "unidiff", + "unified diff" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.5" + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/3.0.6" }, "funding": [ { @@ -5959,26 +10111,37 @@ "type": "github" } ], - "time": "2021-12-02T12:42:26+00:00" + "time": "2024-03-02T06:16:36+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "sebastian/environment", + "version": "4.2.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "56932f6049a0482853056ffd617c91ffcc754205" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/56932f6049a0482853056ffd617c91ffcc754205", + "reference": "56932f6049a0482853056ffd617c91ffcc754205", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -5991,45 +10154,54 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "template" + "Xdebug", + "environment", + "hhvm" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/4.2.5" }, - "time": "2015-06-21T13:50:34+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-01T13:49:59+00:00" }, { - "name": "phpunit/php-timer", - "version": "2.1.3", + "name": "sebastian/exporter", + "version": "3.1.6", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "1939bc8fd1d39adcfa88c5b35335910869214c56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/1939bc8fd1d39adcfa88c5b35335910869214c56", + "reference": "1939bc8fd1d39adcfa88c5b35335910869214c56", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2", + "sebastian/recursion-context": "^3.0" }, "require-dev": { + "ext-mbstring": "*", "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { @@ -6044,18 +10216,34 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ - "timer" + "export", + "exporter" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.6" }, "funding": [ { @@ -6063,33 +10251,38 @@ "type": "github" } ], - "time": "2020-11-30T08:20:02+00:00" + "time": "2024-03-02T06:21:38+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "3.1.3", + "name": "sebastian/global-state", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "9c1da83261628cb24b6a6df371b6e312b3954768" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "91c7c47047a971f02de57ed6f040087ef110c5d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768", - "reference": "9c1da83261628cb24b6a6df371b6e312b3954768", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/91c7c47047a971f02de57ed6f040087ef110c5d9", + "reference": "91c7c47047a971f02de57ed6f040087ef110c5d9", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.1" + "php": ">=7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "ext-dom": "*", + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -6107,14 +10300,14 @@ "email": "sebastian@phpunit.de" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ - "tokenizer" + "global state" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", - "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3" + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.5" }, "funding": [ { @@ -6122,61 +10315,34 @@ "type": "github" } ], - "abandoned": true, - "time": "2021-07-26T12:15:06+00:00" + "time": "2024-03-02T06:13:16+00:00" }, { - "name": "phpunit/phpunit", - "version": "8.5.33", + "name": "sebastian/object-enumerator", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "7d1ff0e8c6b35db78ff13e3e05517d7cbf7aa32e" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "ac5b293dba925751b808e02923399fb44ff0d541" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7d1ff0e8c6b35db78ff13e3e05517d7cbf7aa32e", - "reference": "7d1ff0e8c6b35db78ff13e3e05517d7cbf7aa32e", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/ac5b293dba925751b808e02923399fb44ff0d541", + "reference": "ac5b293dba925751b808e02923399fb44ff0d541", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.0", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.2", - "phpunit/php-code-coverage": "^7.0.12", - "phpunit/php-file-iterator": "^2.0.4", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1.2", - "sebastian/comparator": "^3.0.5", - "sebastian/diff": "^3.0.2", - "sebastian/environment": "^4.2.3", - "sebastian/exporter": "^3.1.5", - "sebastian/global-state": "^3.0.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0.1", - "sebastian/type": "^1.1.3", - "sebastian/version": "^2.0.1" + "php": ">=7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0.0" + "require-dev": { + "phpunit/phpunit": "^6.0" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "8.5-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -6191,61 +10357,47 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.33" + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.5" }, "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" } ], - "time": "2023-02-27T13:04:50+00:00" + "time": "2024-03-01T13:54:02+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.2", + "name": "sebastian/object-reflector", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "1d439c229e61f244ff1f211e5c99737f90c67def" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/1d439c229e61f244ff1f211e5c99737f90c67def", + "reference": "1d439c229e61f244ff1f211e5c99737f90c67def", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -6263,11 +10415,11 @@ "email": "sebastian@phpunit.de" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.3" }, "funding": [ { @@ -6275,34 +10427,32 @@ "type": "github" } ], - "time": "2020-11-30T08:15:22+00:00" + "time": "2024-03-01T13:56:04+00:00" }, { - "name": "sebastian/comparator", - "version": "3.0.5", + "name": "sebastian/recursion-context", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "9bfd3c6f1f08c026f542032dfb42813544f7d64c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770", - "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/9bfd3c6f1f08c026f542032dfb42813544f7d64c", + "reference": "9bfd3c6f1f08c026f542032dfb42813544f7d64c", "shasum": "" }, "require": { - "php": ">=7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -6324,24 +10474,15 @@ "email": "whatthejeff@gmail.com" }, { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5" + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.2" }, "funding": [ { @@ -6349,33 +10490,29 @@ "type": "github" } ], - "time": "2022-09-14T12:31:48+00:00" + "time": "2024-03-01T14:07:30+00:00" }, { - "name": "sebastian/diff", - "version": "3.0.4", + "name": "sebastian/resource-operations", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "72a7f7674d053d548003b16ff5a106e7e0e06eee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/6296a0c086dd0117c1b78b059374d7fcbe7545ae", - "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/72a7f7674d053d548003b16ff5a106e7e0e06eee", + "reference": "72a7f7674d053d548003b16ff5a106e7e0e06eee", "shasum": "" }, "require": { "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" - }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -6391,23 +10528,12 @@ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/3.0.4" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.3" }, "funding": [ { @@ -6415,35 +10541,32 @@ "type": "github" } ], - "time": "2023-05-07T05:30:20+00:00" + "time": "2024-03-01T13:59:09+00:00" }, { - "name": "sebastian/environment", - "version": "4.2.4", + "name": "sebastian/type", + "version": "1.1.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "18f071c3a29892b037d35e6b20ddf3ea39b42874" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/18f071c3a29892b037d35e6b20ddf3ea39b42874", + "reference": "18f071c3a29892b037d35e6b20ddf3ea39b42874", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "require-dev": { - "phpunit/phpunit": "^7.5" - }, - "suggest": { - "ext-posix": "*" + "phpunit/phpunit": "^8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -6458,19 +10581,15 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/1.1.5" }, "funding": [ { @@ -6478,34 +10597,29 @@ "type": "github" } ], - "time": "2020-11-30T07:53:42+00:00" + "time": "2024-03-01T14:04:07+00:00" }, { - "name": "sebastian/exporter", - "version": "3.1.5", + "name": "sebastian/version", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6", - "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^8.5" + "php": ">=5.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -6520,571 +10634,685 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T06:00:17+00:00" + "time": "2016-10-03T07:35:21+00:00" }, { - "name": "sebastian/global-state", - "version": "3.0.2", + "name": "squizlabs/php_codesniffer", + "version": "3.13.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "de036ec91d55d2a9e0db2ba975b512cdb1c23921" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "5b5e3821314f947dd040c70f7992a64eac89025c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/de036ec91d55d2a9e0db2ba975b512cdb1c23921", - "reference": "de036ec91d55d2a9e0db2ba975b512cdb1c23921", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/5b5e3821314f947dd040c70f7992a64eac89025c", + "reference": "5b5e3821314f947dd040c70f7992a64eac89025c", "shasum": "" }, "require": { - "php": ">=7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" }, "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^8.0" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, + "bin": [ + "bin/phpcbf", + "bin/phpcs" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.x-dev" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Greg Sherwood", + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ - "global state" + "phpcs", + "standards", + "static analysis" ], "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.2" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2022-02-10T06:55:38+00:00" + "time": "2025-06-17T22:17:01+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "3.0.4", + "name": "symfony/browser-kit", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" + "url": "https://github.com/symfony/browser-kit.git", + "reference": "2a1ff40723ef6b29c8229a860a9c8f815ad7dbbb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/2a1ff40723ef6b29c8229a860a9c8f815ad7dbbb", + "reference": "2a1ff40723ef6b29c8229a860a9c8f815ad7dbbb", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=7.1.3", + "symfony/dom-crawler": "^3.4|^4.0|^5.0", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/http-client": "^4.3|^5.0", + "symfony/mime": "^4.3|^5.0", + "symfony/process": "^3.4|^4.0|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } + "suggest": { + "symfony/process": "" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + "source": "https://github.com/symfony/browser-kit/tree/v4.4.44" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-11-30T07:40:27+00:00" + "time": "2022-07-25T12:56:14+00:00" }, { - "name": "sebastian/object-reflector", - "version": "1.1.2", + "name": "symfony/css-selector", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" + "url": "https://github.com/symfony/css-selector.git", + "reference": "bd0a6737e48de45b4b0b7b6fc98c78404ddceaed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/bd0a6737e48de45b4b0b7b6fc98c78404ddceaed", + "reference": "bd0a6737e48de45b4b0b7b6fc98c78404ddceaed", "shasum": "" }, "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + "source": "https://github.com/symfony/css-selector/tree/v4.4.44" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-11-30T07:37:18+00:00" + "time": "2022-06-27T13:16:42+00:00" }, { - "name": "sebastian/recursion-context", - "version": "3.0.1", + "name": "symfony/debug-bundle", + "version": "v4.4.37", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" + "url": "https://github.com/symfony/debug-bundle.git", + "reference": "f21cce588be146c9111cb9041f0784a6534fd648" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/f21cce588be146c9111cb9041f0784a6534fd648", + "reference": "f21cce588be146c9111cb9041f0784a6534fd648", "shasum": "" }, "require": { - "php": ">=7.0" + "ext-xml": "*", + "php": ">=7.1.3", + "symfony/http-kernel": "^3.4|^4.0|^5.0", + "symfony/polyfill-php80": "^1.16", + "symfony/twig-bridge": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^4.1.1|^5.0" + }, + "conflict": { + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/web-profiler-bundle": "^3.4|^4.0|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } + "suggest": { + "symfony/config": "For service container configuration", + "symfony/dependency-injection": "For using as a service from the container" }, + "type": "symfony-bundle", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Bundle\\DebugBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" + "source": "https://github.com/symfony/debug-bundle/tree/v4.4.37" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-11-30T07:34:24+00:00" + "time": "2022-01-02T09:41:36+00:00" }, { - "name": "sebastian/resource-operations", - "version": "2.0.2", + "name": "symfony/dom-crawler", + "version": "v4.4.45", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "4b8daf6c56801e6d664224261cb100b73edc78a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4b8daf6c56801e6d664224261cb100b73edc78a5", + "reference": "4b8daf6c56801e6d664224261cb100b73edc78a5", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } + "conflict": { + "masterminds/html5": "<2.6" + }, + "require-dev": { + "masterminds/html5": "^2.6", + "symfony/css-selector": "^3.4|^4.0|^5.0" }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "Eases DOM navigation for HTML and XML documents", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.45" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-11-30T07:30:19+00:00" + "time": "2022-08-03T12:57:57+00:00" }, { - "name": "sebastian/type", - "version": "1.1.4", + "name": "symfony/phpunit-bridge", + "version": "v6.4.23", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" + "url": "https://github.com/symfony/phpunit-bridge.git", + "reference": "0d26168bf78993b3c49e69e41bea3e7cbecc426c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", - "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/0d26168bf78993b3c49e69e41bea3e7cbecc426c", + "reference": "0d26168bf78993b3c49e69e41bea3e7cbecc426c", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=7.1.3" + }, + "conflict": { + "phpunit/phpunit": "<7.5|9.1.2" }, "require-dev": { - "phpunit/phpunit": "^8.2" + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/polyfill-php81": "^1.27" }, - "type": "library", + "bin": [ + "bin/simple-phpunit" + ], + "type": "symfony-bridge", "extra": { - "branch-alias": { - "dev-master": "1.1-dev" + "thanks": { + "url": "https://github.com/sebastianbergmann/phpunit", + "name": "phpunit/phpunit" } }, "autoload": { - "classmap": [ - "src/" + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Bridge\\PhpUnit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/bin/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Provides utilities for PHPUnit, especially user deprecation notices management", + "homepage": "https://symfony.com", + "keywords": [ + "testing" + ], "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/1.1.4" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.23" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-11-30T07:25:11+00:00" + "time": "2025-06-04T07:29:26+00:00" }, { - "name": "sebastian/version", - "version": "2.0.1", + "name": "symfony/proxy-manager-bridge", + "version": "v4.4.39", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "url": "https://github.com/symfony/proxy-manager-bridge.git", + "reference": "66c4de1f6fc16371c06762d6b7fafab2308a15a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/66c4de1f6fc16371c06762d6b7fafab2308a15a1", + "reference": "66c4de1f6fc16371c06762d6b7fafab2308a15a1", "shasum": "" }, "require": { - "php": ">=5.6" + "friendsofphp/proxy-manager-lts": "^1.0.2", + "php": ">=7.1.3", + "symfony/dependency-injection": "^4.0|^5.0", + "symfony/polyfill-php80": "^1.16" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } + "require-dev": { + "symfony/config": "^3.4|^4.0|^5.0" }, + "type": "symfony-bridge", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Bridge\\ProxyManager\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Provides integration for ProxyManager with various Symfony components", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/master" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v4.4.39" }, - "time": "2016-10-03T07:35:21+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-25T10:38:15+00:00" }, { - "name": "squizlabs/php_codesniffer", - "version": "3.7.2", + "name": "symfony/web-profiler-bundle", + "version": "v4.4.47", "source": { "type": "git", - "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "c173202d8ce82fde63ec0953eaffdf065018b8f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/c173202d8ce82fde63ec0953eaffdf065018b8f4", + "reference": "c173202d8ce82fde63ec0953eaffdf065018b8f4", "shasum": "" }, "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" + "php": ">=7.1.3", + "symfony/config": "^4.2|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/polyfill-php80": "^1.16", + "symfony/routing": "^4.3|^5.0", + "symfony/twig-bundle": "^4.2|^5.0", + "twig/twig": "^1.43|^2.13|^3.0.4" + }, + "conflict": { + "symfony/form": "<4.3", + "symfony/messenger": "<4.2" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "symfony/browser-kit": "^4.3|^5.0", + "symfony/console": "^4.3|^5.0", + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\WebProfilerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Greg Sherwood", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards", - "static analysis" - ], + "description": "Provides a development tool that gives detailed information about the execution of any request", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v4.4.47" }, - "time": "2023-02-22T23:07:41+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-09-29T14:10:52+00:00" }, { - "name": "symfony/phpunit-bridge", - "version": "v3.4.31", + "name": "textalk/websocket", + "version": "1.5.8", "source": { "type": "git", - "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "028617b04ae19d99d89089626ac969d161244ebc" + "url": "https://github.com/Textalk/websocket-php.git", + "reference": "d05dbaa97500176447ffb1f1800573f23085ab13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/028617b04ae19d99d89089626ac969d161244ebc", - "reference": "028617b04ae19d99d89089626ac969d161244ebc", + "url": "https://api.github.com/repos/Textalk/websocket-php/zipball/d05dbaa97500176447ffb1f1800573f23085ab13", + "reference": "d05dbaa97500176447ffb1f1800573f23085ab13", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" - }, - "suggest": { - "symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" + "php": "^7.2 | ^8.0", + "psr/log": "^1 | ^2 | ^3" }, - "bin": [ - "bin/simple-phpunit" - ], - "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - }, - "thanks": { - "name": "phpunit/phpunit", - "url": "https://github.com/sebastianbergmann/phpunit" - } + "require-dev": { + "php-coveralls/php-coveralls": "^2.0", + "phpunit/phpunit": "^8.0|^9.0", + "squizlabs/php_codesniffer": "^3.5" }, + "type": "library", "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Bridge\\PhpUnit\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "WebSocket\\": "lib" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "ISC" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fredrik Liljegren" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sören Jensen", + "email": "soren@abicart.se" } ], - "description": "Symfony PHPUnit Bridge", - "homepage": "https://symfony.com", - "time": "2019-08-20T13:31:17+00:00" + "description": "WebSocket client and server", + "support": { + "issues": "https://github.com/Textalk/websocket-php/issues", + "source": "https://github.com/Textalk/websocket-php/tree/1.5.8" + }, + "time": "2022-04-26T06:28:24+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -7113,7 +11341,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -7121,16 +11349,16 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~7.2", + "php": "^7.2.5", "ext-dom": "*", "ext-json": "*", "ext-mbstring": "*", @@ -7140,7 +11368,7 @@ "ext-zlib": "*" }, "platform-overrides": { - "php": "7.2" + "php": "7.2.5" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/config/bootstrap.php b/config/bootstrap.php new file mode 100644 index 000000000..55560fb83 --- /dev/null +++ b/config/bootstrap.php @@ -0,0 +1,23 @@ +=1.2) +if (is_array($env = @include dirname(__DIR__).'/.env.local.php') && (!isset($env['APP_ENV']) || ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? $env['APP_ENV']) === $env['APP_ENV'])) { + (new Dotenv(false))->populate($env); +} else { + // load all the .env files + (new Dotenv(false))->loadEnv(dirname(__DIR__).'/.env'); +} + +$_SERVER += $_ENV; +$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev'; +$_SERVER['APP_DEBUG'] = $_SERVER['APP_DEBUG'] ?? $_ENV['APP_DEBUG'] ?? 'prod' !== $_SERVER['APP_ENV']; +$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = (int) $_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN) ? '1' : '0'; diff --git a/config/bundles.php b/config/bundles.php new file mode 100644 index 000000000..8cd2f1ccb --- /dev/null +++ b/config/bundles.php @@ -0,0 +1,19 @@ + ['all' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], + Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle::class => ['all' => true], + Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], + OpenConext\MonitorBundle\OpenConextMonitorBundle::class => ['all' => true], + OpenConext\EngineBlockBundle\OpenConextEngineBlockBundle::class => ['all' => true], + Liip\FunctionalTestBundle\LiipFunctionalTestBundle::class => ['test' => true], + Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true, 'ci' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true, 'ci' => true], + OpenConext\EngineBlockFunctionalTestingBundle\OpenConextEngineBlockFunctionalTestingBundle::class => ['test' => true, 'ci' => true], + FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['ci' => true], +]; diff --git a/app/logs/.gitkeep b/config/packages/acc/.gitkeep similarity index 100% rename from app/logs/.gitkeep rename to config/packages/acc/.gitkeep diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml new file mode 100644 index 000000000..0ecd1881d --- /dev/null +++ b/config/packages/cache.yaml @@ -0,0 +1,26 @@ +#framework: +# cache: + # Unique name of your app: used to compute stable namespaces for cache keys. + #prefix_seed: your_vendor_name/app_name + + # The "app" cache stores to the filesystem by default. + # The data in this cache should persist between deploys. + # Other options include: + + # Redis + #app: cache.adapter.redis + #default_redis_provider: redis://localhost + + # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) + #app: cache.adapter.apcu + + # Namespaced pools use the above "app" backend by default + #pools: + #my.dedicated.cache: null +framework: + cache: + pools: + doctrine.system_cache_pool: + adapter: cache.system + doctrine.result_cache_pool: + adapter: cache.app diff --git a/app/config/config_ci.yml b/config/packages/ci/doctrine.yaml similarity index 84% rename from app/config/config_ci.yml rename to config/packages/ci/doctrine.yaml index 3997141ef..26f9ce1f9 100644 --- a/app/config/config_ci.yml +++ b/config/packages/ci/doctrine.yaml @@ -1,7 +1,3 @@ -imports: - - { resource: functional_testing.yml } - - { resource: config_test.yml } - doctrine: dbal: default_connection: engineblock_test @@ -10,7 +6,7 @@ doctrine: driver: pdo_mysql # This must be PDO until all database interaction runs through doctrine server_version: '10.6.0-MariaDB' dbname: "%database.dbname%" - host: "mariadb" + host: "%database.test.host%" port: "%database.port%" user: "%database.user%" password: "%database.password%" @@ -18,7 +14,7 @@ doctrine: driver: pdo_mysql # This must be PDO until all database interaction runs through doctrine server_version: '10.6.0-MariaDB' dbname: "%database.test.dbname%" - host: "mariadb" + host: "%database.test.host%" port: "%database.test.port%" user: "%database.test.user%" password: "%database.test.password%" diff --git a/config/packages/ci/framework.yaml b/config/packages/ci/framework.yaml new file mode 100644 index 000000000..f76cc2ef5 --- /dev/null +++ b/config/packages/ci/framework.yaml @@ -0,0 +1,2 @@ +framework: + test: true diff --git a/config/packages/ci/parameters.yaml b/config/packages/ci/parameters.yaml new file mode 100644 index 000000000..50b103c88 --- /dev/null +++ b/config/packages/ci/parameters.yaml @@ -0,0 +1,9 @@ +# This file is auto-generated during the composer install +parameters: + router.request_context.host: engine.%domain% + router.request_context.scheme: https + idp_fixture_file: /tmp/eb-fixtures/db/idp.states.php.serialized + sp_fixture_file: /tmp/eb-fixtures/db/sp.states.php.serialized + stepup.sfo.override_engine_entityid: 'https://engine.dev.openconext.local/new/stepup/metadata' + # Disable for local tests + database.test.host: mariadb diff --git a/config/packages/ci/web_profiler.yaml b/config/packages/ci/web_profiler.yaml new file mode 100644 index 000000000..102c6c65d --- /dev/null +++ b/config/packages/ci/web_profiler.yaml @@ -0,0 +1,14 @@ +# Only use dev toolbar locally as cypress test fail when adding toolbar, because of invalid HTML syntax +# +#web_profiler: +# toolbar: true +# intercept_redirects: false +# +#framework: +# profiler: { only_exceptions: false } +web_profiler: + toolbar: false + intercept_redirects: false + +framework: + profiler: { collect: false } diff --git a/config/packages/config.yaml b/config/packages/config.yaml new file mode 100644 index 000000000..fa1fd7978 --- /dev/null +++ b/config/packages/config.yaml @@ -0,0 +1,10 @@ +# Put parameters here that don't need to change on each machine where the app is deployed +parameters: + # based on the hardcoded value in + # https://github.com/OpenConext/OpenConext-engineblock/blob/ + # 4102bffe58a9ecbce3c7c934e0aa8ece46efcf82/library/EngineBlock/Application/Bootstrapper.php#L242 + locale: en + container.autowiring.strict_mode: true + + # This value is used as cache-buster, replaced by the release script + asset_version: "#ASSET_VERSION#" diff --git a/config/packages/dev/config.yaml b/config/packages/dev/config.yaml new file mode 100644 index 000000000..589a90895 --- /dev/null +++ b/config/packages/dev/config.yaml @@ -0,0 +1,24 @@ +parameters: + # This value is used as cache-buster + asset_version: "dev" + global.site_notice.show: false + +framework: + translator: + enabled: true + fallbacks: [ "%locale%" ] + paths: + - '%kernel.root_dir%/../languages' + - '%kernel.root_dir%/../theme/base/translations' + - '%kernel.root_dir%/../theme/%theme.name%/translations' + profiler: { only_exceptions: false } + +web_profiler: + toolbar: true + intercept_redirects: false + +twig: + cache: false + auto_reload: true + debug: true + strict_variables: false diff --git a/config/packages/dev/debug.yaml b/config/packages/dev/debug.yaml new file mode 100644 index 000000000..26d4e53d2 --- /dev/null +++ b/config/packages/dev/debug.yaml @@ -0,0 +1,4 @@ +debug: + # Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser. + # See the "server:dump" command to start a new server. + dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%" diff --git a/config/packages/dev/monolog.yaml b/config/packages/dev/monolog.yaml new file mode 100644 index 000000000..b02340fed --- /dev/null +++ b/config/packages/dev/monolog.yaml @@ -0,0 +1,25 @@ +monolog: + channels: ["engineblock", "authentication"] + handlers: + main: + type: fingers_crossed + activation_strategy: OpenConext\EngineBlock\Logger\Handler\FingersCrossed\ManualOrDecoratedActivationStrategy + passthru_level: "%logger.fingers_crossed.passthru_level%" + handler: nested + level: debug + channels: ["!authentication"] + nested: + type: stream + level: debug + path: "%kernel.logs_dir%/application.log" + formatter: OpenConext\EngineBlockBundle\Monolog\Formatter\SyslogJsonFormatter + authentication: + type: stream + path: "%kernel.logs_dir%/authentication.log" + level: debug + channels: [authentication] + formatter: OpenConext\EngineBlockBundle\Monolog\Formatter\SyslogJsonFormatter + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] diff --git a/config/packages/dev/web_profiler.yaml b/config/packages/dev/web_profiler.yaml new file mode 100644 index 000000000..e92166a7f --- /dev/null +++ b/config/packages/dev/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: true + intercept_redirects: false + +framework: + profiler: { only_exceptions: false } diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml new file mode 100644 index 000000000..af390c095 --- /dev/null +++ b/config/packages/doctrine.yaml @@ -0,0 +1,48 @@ +doctrine: + dbal: + default_connection: engineblock + connections: + engineblock: + # schema_filter: ~^(?!group_|virtual_|service_provider_|saml_persistent_id|sso_provider_roles|log_logins|db_changelog|consent)~ + driver: pdo_mysql # This must be PDO until all database interaction runs through doctrine + dbname: "%database.dbname%" + host: "%database.host%" + port: "%database.port%" + user: "%database.user%" + password: "%database.password%" + charset: UTF8 + # when true, queries are logged to a 'doctrine' monolog channel + logging: '%kernel.debug%' + profiling: '%kernel.debug%' + server_version: '10.11.13-MariaDB' + mapping_types: + enum: string + types: + engineblock_collab_person_id: OpenConext\EngineBlockBundle\Doctrine\Type\CollabPersonIdType + engineblock_collab_person_uuid: OpenConext\EngineBlockBundle\Doctrine\Type\CollabPersonUuidType + engineblock_metadata_coins: OpenConext\EngineBlockBundle\Doctrine\Type\MetadataCoinType + engineblock_metadata_mdui: OpenConext\EngineBlockBundle\Doctrine\Type\MetadataMduiType + orm: + auto_generate_proxy_classes: "%kernel.debug%" + proxy_dir: '%kernel.cache_dir%/doctrine/orm/Proxies' + entity_managers: + engineblock: + naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware + connection: ~ + mappings: + # An array of mappings, which may be a bundle name or something else + Authentication: + mapping: true + type: annotation + dir: "%kernel.root_dir%/../src/OpenConext/EngineBlockBundle/Authentication" + prefix: OpenConext\EngineBlockBundle\Authentication + is_bundle: false + Metadata: + mapping: true + type: annotation + dir: "%kernel.root_dir%/../src/OpenConext/EngineBlock/Metadata" + prefix: OpenConext\EngineBlock\Metadata + is_bundle: false + dql: + string_functions: + md5: OpenConext\EngineBlockBundle\Doctrine\DqlFunction\Md5 diff --git a/config/packages/doctrine_migrations.yaml b/config/packages/doctrine_migrations.yaml new file mode 100644 index 000000000..0c232efcb --- /dev/null +++ b/config/packages/doctrine_migrations.yaml @@ -0,0 +1,6 @@ +doctrine_migrations: + migrations_paths: + OpenConext\EngineBlock\Doctrine\Migrations: '%kernel.project_dir%/migrations/DoctrineMigrations' + storage: + table_storage: + table_name: 'migration_versions' diff --git a/config/packages/engineblock_features.yaml b/config/packages/engineblock_features.yaml new file mode 100644 index 000000000..467d8c190 --- /dev/null +++ b/config/packages/engineblock_features.yaml @@ -0,0 +1,17 @@ +parameters: + custom_features: + api.metadata_push: "%feature_api_metadata_push%" + api.consent_listing: "%feature_api_consent_listing%" + api.consent_remove: "%feature_api_consent_remove%" + api.metadata_api: "%feature_api_metadata_api%" + api.deprovision: "%feature_api_deprovision%" + eb.encrypted_assertions: "%feature_eb_encrypted_assertions%" + eb.encrypted_assertions_require_outer_signature: "%feature_eb_encrypted_assertions_require_outer_signature%" + eb.run_all_manipulations_prior_to_consent: "%feature_run_all_manipulations_prior_to_consent%" + eb.block_user_on_violation: "%feature_block_user_on_violation%" + eb.enable_sso_notification: "%feature_enable_sso_notification%" + eb.feature_enable_consent: "%feature_enable_consent%" + eb.enable_sso_session_cookie: "%feature_enable_sso_session_cookie%" + eb.feature_enable_idp_initiated_flow: "%feature_enable_idp_initiated_flow%" + eb.stepup.sfo.override_engine_entityid: "%feature_stepup_sfo_override_engine_entityid%" + eb.stepup.send_user_attributes: "%feature_stepup_send_user_attributes%" diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml new file mode 100644 index 000000000..deb2dcb89 --- /dev/null +++ b/config/packages/framework.yaml @@ -0,0 +1,23 @@ +framework: + secret: '%env(APP_SECRET)%' + esi: false + translator: + fallbacks: [ "%locale%" ] + paths: + - '%kernel.root_dir%/../languages' + - '%kernel.root_dir%/../theme/base/translations' + - '%kernel.root_dir%/../theme/%theme.name%/translations' + form: ~ + csrf_protection: ~ + validation: { enable_annotations: true } + default_locale: "%locale%" + trusted_hosts: ~ + session: + # handler_id set to null will use default session handler from php.ini + handler_id: ~ + fragments: false + http_method_override: true + assets: ~ + php_errors: + log: true + error_controller: 'Symfony\Component\HttpKernel\Controller\ErrorController::show' diff --git a/config/packages/monolog.yaml b/config/packages/monolog.yaml new file mode 100644 index 000000000..35ac3149b --- /dev/null +++ b/config/packages/monolog.yaml @@ -0,0 +1,25 @@ +monolog: + channels: ["engineblock", "authentication"] + handlers: + main: + type: fingers_crossed + activation_strategy: OpenConext\EngineBlock\Logger\Handler\FingersCrossed\ManualOrDecoratedActivationStrategy + passthru_level: "%logger.fingers_crossed.passthru_level%" + handler: nested + level: info + channels: ["!authentication"] + nested: + type: stream + level: info + path: "%kernel.logs_dir%/application.log" + formatter: OpenConext\EngineBlockBundle\Monolog\Formatter\SyslogJsonFormatter + authentication: + type: stream + path: "%kernel.logs_dir%/authentication.log" + level: info + channels: [authentication] + formatter: OpenConext\EngineBlockBundle\Monolog\Formatter\SyslogJsonFormatter + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] diff --git a/app/config/parameters.yml.dist b/config/packages/parameters.yml.dist similarity index 97% rename from app/config/parameters.yml.dist rename to config/packages/parameters.yml.dist index 0847a0d2a..b1b2ecdb7 100644 --- a/app/config/parameters.yml.dist +++ b/config/packages/parameters.yml.dist @@ -2,11 +2,6 @@ parameters: ########################################################################################## ## GLOBAL SETTINGS ########################################################################################## - ## This is a string that should be unique to your application and it's commonly used to add more - ## entropy to security related operations. Its value should be a series of characters, numbers and - ## symbols chosen randomly and the recommended length is around 32 characters. - secret: secret - ## Note: due to legacy reasons, hostname must be left empty (hostname ## from the Host header will be used) or set to match the domain ## setting. For example: @@ -36,7 +31,7 @@ parameters: ## * How attributes are displayed in Profile and Consent ## * How attributes are Normalized and Denormalized ## * How attributes are validated - attribute_definition_file_path: %kernel.project_dir%/application/configs/attributes.json + attribute_definition_file_path: '%kernel.project_dir%/application/configs/attributes.json' ## The Signing / Encryption keys used for the SAML2 authentication and metadata ## When EngineBlock signs responses (when it acts as an Idp) diff --git a/config/packages/prod/.gitkeep b/config/packages/prod/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/app/config/security.yml b/config/packages/security.yaml similarity index 91% rename from app/config/security.yml rename to config/packages/security.yaml index dc4dad1b2..3d4aa973e 100644 --- a/app/config/security.yml +++ b/config/packages/security.yaml @@ -29,7 +29,7 @@ security: api: host: ^engine-api\..+ http_basic: ~ - entry_point: engineblock.security.http_basic_entry_point + entry_point: OpenConext\EngineBlockBundle\Security\Http\EntryPoint\JsonBasicAuthenticationEntryPoint stateless: true pattern: ^/.+ diff --git a/config/packages/sensio_framework_extra.yaml b/config/packages/sensio_framework_extra.yaml new file mode 100644 index 000000000..1821ccc07 --- /dev/null +++ b/config/packages/sensio_framework_extra.yaml @@ -0,0 +1,3 @@ +sensio_framework_extra: + router: + annotations: false diff --git a/config/packages/swiftmailer.yaml b/config/packages/swiftmailer.yaml new file mode 100644 index 000000000..8b051356b --- /dev/null +++ b/config/packages/swiftmailer.yaml @@ -0,0 +1,6 @@ +swiftmailer: + transport: "%mailer_transport%" + host: "%mailer_host%" + port: "%mailer_port%" + username: "%mailer_user%" + password: "%mailer_password%" diff --git a/config/packages/test/config.yaml b/config/packages/test/config.yaml new file mode 100644 index 000000000..76b7fb3ad --- /dev/null +++ b/config/packages/test/config.yaml @@ -0,0 +1,30 @@ +# Test service DI container overwrites (used for test and ci envs) +services: + engineblock.features: + class: OpenConext\EngineBlockBundle\Configuration\TestFeatureConfiguration + public: true + + engineblock.twig.extension.global_site_notice: + class: OpenConext\EngineBlockBundle\Twig\Extensions\Extension\FunctionalTestingGlobalSiteNotice + arguments: + - "@request_stack" + - "%global.site_notice.allowed.tags%" + tags: + - { name: 'twig.extension' } + +web_profiler: + toolbar: false + intercept_redirects: false + + +security: + providers: + in_memory: + memory: + users: + no_roles: + password: no_roles + roles: [] + + + diff --git a/config/packages/test/doctrine.yaml b/config/packages/test/doctrine.yaml new file mode 100644 index 000000000..448b48047 --- /dev/null +++ b/config/packages/test/doctrine.yaml @@ -0,0 +1,15 @@ +doctrine: + dbal: + default_connection: engineblock_test + connections: + engineblock_test: + driver: pdo_mysql # This must be PDO until all database interaction runs through doctrine + server_version: '10.6.0-MariaDB' + dbname: "%database.test.dbname%" + host: "%database.test.host%" + port: "%database.test.port%" + user: "%database.test.user%" + password: "%database.test.password%" +# +#parameters: +# database.test.host: 127.0.0.1 diff --git a/config/packages/test/framework.yaml b/config/packages/test/framework.yaml new file mode 100644 index 000000000..8243b6ebb --- /dev/null +++ b/config/packages/test/framework.yaml @@ -0,0 +1,16 @@ +framework: + test: ~ + translator: + fallbacks: ["%locale%"] + paths: + - '%kernel.root_dir%/../languages' + - '%kernel.root_dir%/../theme/base/translations' + - '%kernel.root_dir%/../theme/%theme.name%/translations' + - '%kernel.root_dir%/../src/OpenConext/EngineBlockFunctionalTestingBundle/Resources/languages' + session: + storage_id: session.storage.mock_file + name: MOCKSESSION + router: + strict_requirements: true + profiler: + collect: false diff --git a/config/packages/test/monolog.yaml b/config/packages/test/monolog.yaml new file mode 100644 index 000000000..0866a82e3 --- /dev/null +++ b/config/packages/test/monolog.yaml @@ -0,0 +1,14 @@ +# override the logging settings so that we can log to readable files on github actions +monolog: + channels: ["%logger.channel%", "authentication"] + handlers: + main: + type: fingers_crossed + activation_strategy: OpenConext\EngineBlock\Logger\Handler\FingersCrossed\ManualOrDecoratedActivationStrategy + passthru_level: "%logger.fingers_crossed.passthru_level%" + handler: nested + channels: ['!event'] + nested: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: DEBUG diff --git a/config/packages/test/twig.yaml b/config/packages/test/twig.yaml new file mode 100644 index 000000000..8c6e0b401 --- /dev/null +++ b/config/packages/test/twig.yaml @@ -0,0 +1,2 @@ +twig: + strict_variables: true diff --git a/config/packages/test/web_profiler.yaml b/config/packages/test/web_profiler.yaml new file mode 100644 index 000000000..03752de21 --- /dev/null +++ b/config/packages/test/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: false + intercept_redirects: false + +framework: + profiler: { collect: false } diff --git a/config/packages/testing/.gitkeep b/config/packages/testing/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml new file mode 100644 index 000000000..f103727c1 --- /dev/null +++ b/config/packages/twig.yaml @@ -0,0 +1,19 @@ +# Twig Configuration +twig: + exception_controller: null + debug: '%kernel.debug%' + strict_variables: '%kernel.debug%' + paths: + "%kernel.project_dir%/theme/%theme.name%/templates/modules": theme + "%kernel.project_dir%/theme/%theme.name%/templates/layouts": themeLayouts + "%kernel.project_dir%/theme/%theme.name%/images": images + "%kernel.project_dir%/theme/base/templates/modules": theme + "%kernel.project_dir%/theme/base/templates/layouts": themeLayouts + "%kernel.project_dir%/theme/base/images": images + globals: + assetsVersion: "%asset_version%" + defaultTitle: "%view_default_title%" + defaultHeader: "%view_default_header%" + defaultLogo: "%view_default_logo%" + envName: "%env_name%" + envRibbonColor: "%env_ribbon_color%" diff --git a/config/packages/validator.yaml b/config/packages/validator.yaml new file mode 100644 index 000000000..7b2a2a1c7 --- /dev/null +++ b/config/packages/validator.yaml @@ -0,0 +1,8 @@ +#framework: +# validation: +# email_validation_mode: html5 +# +# # Enables validator auto-mapping support. +# # For instance, basic validation constraints will be inferred from Doctrine's metadata. +# #auto_mapping: +# # App\Entity\: [] diff --git a/config/preload.php b/config/preload.php new file mode 100644 index 000000000..064bdcd6a --- /dev/null +++ b/config/preload.php @@ -0,0 +1,9 @@ + - DocumentRoot /var/www/html/web - + DocumentRoot /var/www/html/public + Require all granted Options -MultiViews RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f - RewriteRule ^(.*)$ app.php [QSA,L] + RewriteRule ^(.*)$ index.php [QSA,L] Require all granted Header always set X-Content-Type-Options "nosniff" - SetEnv APP_ENV=ci - SetEnv SYMFONY_ENV=ci - SetEnv ENGINEBLOCK_ENV=ci SetEnv HTTPS on diff --git a/docker/conf/engine.conf b/docker/conf/engine.conf index 31bd65f39..9e8111c8b 100644 --- a/docker/conf/engine.conf +++ b/docker/conf/engine.conf @@ -1,14 +1,14 @@ -DocumentRoot /var/www/html/web +DocumentRoot /var/www/html/public ServerName engine SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 - + Require all granted Options -MultiViews RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f - RewriteRule ^(.*)$ app.php [QSA,L] + RewriteRule ^(.*)$ index.php [QSA,L] Header always set X-Content-Type-Options "nosniff" diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 93270ca47..b55cf0b34 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -3,7 +3,7 @@ version: '2.4' services: mariadb: - image: mariadb:10.2 + image: mariadb:10.6 restart: always container_name: eb-db-test environment: @@ -26,6 +26,9 @@ services: # override this in a dedicated dockerfile per php version # dockerfile: docker/ci/Dockerfile container_name: eb-phpfpm +# Local debugging +# ports: +# - 443:443 volumes: - ../:/var/www/html - ../ci/qa-config/files/engine.dev.openconext.local.crt:/config/engine/engineblock.crt @@ -35,30 +38,29 @@ services: condition: service_healthy environment: APP_ENV: ci - SYMFONY_ENV: ci + APP_SECRET: secret + APP_DEBUG: false - selenium.dev.openconext.local: - image: selenium/standalone-chrome:2.53.1 - container_name: eb-selenium - user: "${UID}:${GID}" + chrome.dev.openconext.local: + image: alpeware/chrome-headless-trunk + ports: + - 9222:9222 environment: - START_XVFB: "false" + - CHROME_OPTS=--ignore-certificate-errors --window-size=1920,1080 --ignore-ssl-errors volumes: - - /dev/shm:/dev/shm - healthcheck: - test: ["CMD", "/opt/bin/check-grid.sh:", "--host", "0.0.0.0", "--port", "4444"] - timeout: 30s - retries: 5 - interval: 15s + - /tmp/chromedata/:/data +# Remove commands for local X11 debugging cypress: image: "cypress/included:13.1.0" environment: - CYPRESS_baseUrl=https://engine.dev.openconext.local - working_dir: /e2e +# - DISPLAY=${DISPLAY} + working_dir: /e2e/ entrypoint: cypress open --project . volumes: - - ../tests:/e2e +# - /tmp/.X11-unix:/tmp/.X11-unix + - ../tests/e2e:/e2e - ../theme:/theme volumes: diff --git a/docs/logging.md b/docs/logging.md index 3096c279d..435144b1f 100644 --- a/docs/logging.md +++ b/docs/logging.md @@ -18,14 +18,14 @@ monolog: type: fingers_crossed activation_strategy: engineblock.logger.manual_or_error_activation_strategy passthru_level: "%logger.fingers_crossed.passthru_level%" - channels: [!authentication] + channels: ["!authentication"] handler: nested authentication: type: syslog ident: EBAUTH facility: user level: INFO - channels: [authentication] + channels: ["authentication"] formatter: engineblock.logger.formatter.syslog_json nested: type: syslog @@ -34,4 +34,4 @@ monolog: console: type: console process_psr_3_messages: false - channels: [!event, !doctrine, !console] + channels: ["!event", "!doctrine", "!console"] diff --git a/library/EngineBlock/Application/Bootstrapper.php b/library/EngineBlock/Application/Bootstrapper.php index 21b5e03b9..ea70f9c89 100644 --- a/library/EngineBlock/Application/Bootstrapper.php +++ b/library/EngineBlock/Application/Bootstrapper.php @@ -87,7 +87,7 @@ protected function _bootstrapHttpCommunication() $configuredHostname = $this->_application->getDiContainer()->getHostname(); if (empty($configuredHostname)) { throw new RuntimeException( - "The 'hostname' parameters.yml setting is required" + "The 'hostname' parameters.yaml setting is required" ); } $httpRequest->setHostName($configuredHostname); diff --git a/library/EngineBlock/Application/DiContainer.php b/library/EngineBlock/Application/DiContainer.php index d2fc9f025..8c2893460 100644 --- a/library/EngineBlock/Application/DiContainer.php +++ b/library/EngineBlock/Application/DiContainer.php @@ -27,6 +27,7 @@ use OpenConext\EngineBlock\Stepup\StepupGatewayCallOutHelper; use OpenConext\EngineBlock\Validator\AllowedSchemeValidator; use Symfony\Component\DependencyInjection\ContainerInterface as SymfonyContainerInterface; +use Twig\Environment; class EngineBlock_Application_DiContainer extends Pimple { @@ -69,7 +70,7 @@ public function getPhpSettings() */ public function getAuthenticationLogger() { - return $this->container->get('engineblock.bridge.authentication_logger_adapter'); + return $this->container->get('OpenConext\EngineBlockBridge\Logger\AuthenticationLoggerAdapter'); } /** @@ -117,7 +118,7 @@ public function getConsentFactory() */ public function getAttributeAggregationClient() { - return $this->container->get('engineblock.attribute_aggregation.client'); + return $this->container->get('OpenConext\EngineBlockBundle\AttributeAggregation\AttributeAggregationClient'); } /** @@ -125,7 +126,7 @@ public function getAttributeAggregationClient() */ public function getMetadataRepository() { - return $this->container->get('engineblock.metadata.repository.cached_doctrine'); + return $this->container->get('OpenConext\EngineBlock\Metadata\MetadataRepository\CachedDoctrineMetadataRepository'); } /** @@ -133,7 +134,7 @@ public function getMetadataRepository() */ public function getUserDirectory() { - return $this->container->get('engineblock.bridge.authentication.user_directory'); + return $this->container->get('OpenConext\EngineBlockBridge\Authentication\Repository\UserDirectoryAdapter'); } /** @@ -141,7 +142,7 @@ public function getUserDirectory() */ public function getFeatureConfiguration() { - return $this->container->get('engineblock.features'); + return $this->container->get('OpenConext\EngineBlockBundle\Configuration\FeatureConfiguration'); } /** @@ -149,7 +150,7 @@ public function getFeatureConfiguration() */ public function getAuthenticationLoopGuard() { - return $this->container->get('engineblock.authentication.authentication_loop_guard'); + return $this->container->get('OpenConext\EngineBlockBundle\Authentication\AuthenticationLoopGuard'); } /** @@ -157,7 +158,7 @@ public function getAuthenticationLoopGuard() */ public function getConsentService() { - return $this->container->get('engineblock.service.consent'); + return $this->container->get('OpenConext\EngineBlock\Service\ConsentService'); } /** @@ -165,7 +166,7 @@ public function getConsentService() */ public function getTimeProvider() { - return $this->container->get('engineblock.service.time_provider'); + return $this->container->get('OpenConext\EngineBlock\Service\TimeProvider\TimeProvider'); } /** @@ -308,7 +309,7 @@ protected function getSymfonyContainer() public function getPdpClient() { - return $this->container->get('engineblock.pdp.pdp_client'); + return $this->container->get('OpenConext\EngineBlockBundle\Pdp\PdpClient'); } public function getPdpClientId() @@ -326,7 +327,7 @@ public function getFunctionalTestingPdpClient() */ public function getLocaleProvider() { - return $this->container->get('engineblock.locale_provider'); + return $this->container->get('OpenConext\EngineBlockBundle\Localization\LocaleProvider'); } /** @@ -342,7 +343,7 @@ public function getTranslator() */ public function getUrlProvider() { - return $this->container->get('engineblock.url_provider'); + return $this->container->get('OpenConext\EngineBlockBundle\Url\UrlProvider'); } /** @@ -374,7 +375,7 @@ public function getStepupServiceProvider(EngineBlock_Corto_ProxyServer $server) */ public function getStepupGatewayCallOutHelper() { - return $this->container->get('engineblock.service.stepup.gateway_callout_helper'); + return $this->container->get('OpenConext\EngineBlock\Stepup\StepupGatewayCallOutHelper'); } @@ -383,7 +384,7 @@ public function getStepupGatewayCallOutHelper() */ public function getServiceProviderFactory() { - return $this->container->get('engineblock.factory.service_provider_factory'); + return $this->container->get('OpenConext\EngineBlock\Metadata\Factory\Factory\ServiceProviderFactory'); } /** @@ -391,7 +392,7 @@ public function getServiceProviderFactory() */ public function getLoaRepository() { - return $this->container->get('engineblock.configuration.stepup.loa_repository'); + return $this->container->get('OpenConext\EngineBlock\Metadata\LoaRepository'); } /** @@ -403,7 +404,7 @@ public function getEncryptionKeysConfiguration() } /** - * @return Twig_Environment + * @return Environment */ public function getTwigEnvironment() { @@ -431,7 +432,7 @@ public function getForbiddenSignatureMethods() */ public function getAcsLocationSchemeValidator() { - return $this->container->get('engineblock.validator.allowed_scheme_validator'); + return $this->container->get('OpenConext\EngineBlock\Validator\AllowedSchemeValidator'); } /** @@ -452,7 +453,7 @@ public function isConsentStoreValuesActive() public function getAuthenticationStateHelper() { - return $this->container->get('engineblock.service.authentication_state_helper'); + return $this->container->get('OpenConext\EngineBlock\Service\AuthenticationStateHelper'); } /** @@ -460,7 +461,7 @@ public function getAuthenticationStateHelper() */ public function getProcessingStateHelper() { - return $this->container->get('engineblock.service.processing_state_helper'); + return $this->container->get('OpenConext\EngineBlock\Service\ProcessingStateHelper'); } /** @@ -468,12 +469,12 @@ public function getProcessingStateHelper() */ public function getDiscoverySelectionService() { - return $this->container->get('engineblock.service.discovery_selection_service'); + return $this->container->get('OpenConext\EngineBlockBundle\Service\DiscoverySelectionService'); } public function getMfaHelper(): MfaHelperInterface { - return $this->container->get('engineblock.service.mfa_helper'); + return $this->container->get('OpenConext\EngineBlock\Service\MfaHelper'); } /** @@ -535,7 +536,7 @@ public function getAuthnContextClassRefBlacklistRegex() /** @return \OpenConext\EngineBlock\Stepup\StepupEndpoint $stepupEndpoint */ protected function getStepupEndpoint() { - return $this->container->get('engineblock.configuration.stepup.endpoint'); + return $this->container->get('OpenConext\EngineBlock\Stepup\StepupEndpoint'); } /** @return string */ @@ -560,7 +561,7 @@ public function getCookieDomain() */ public function getCookieService() { - return $this->container->get('engineblock.service.cookie'); + return $this->container->get('OpenConext\EngineBlock\Service\CookieService'); } /** @@ -568,7 +569,7 @@ public function getCookieService() */ public function getSsoSessionService() { - return $this->container->get('engineblock.service.sso_session'); + return $this->container->get('OpenConext\EngineBlock\Service\SsoSessionService'); } /** @@ -576,7 +577,7 @@ public function getSsoSessionService() */ public function getSsoNotificationService() { - return $this->container->get('engineblock.service.sso_notification'); + return $this->container->get('OpenConext\EngineBlock\Service\SsoNotificationService'); } /** diff --git a/library/EngineBlock/Application/TestDiContainer.php b/library/EngineBlock/Application/TestDiContainer.php index 39246a54b..810b17dde 100644 --- a/library/EngineBlock/Application/TestDiContainer.php +++ b/library/EngineBlock/Application/TestDiContainer.php @@ -89,7 +89,7 @@ public function getEncryptionKeysConfiguration() return [ 'default' => [ - 'publicFile' => '/config/engine/engineblock.crt', + 'publicFile' => $basePath . '/ci/qa-config/files/engineblock.crt', 'privateFile' => $basePath . '/ci/qa-config/files/engineblock.pem', ], ]; diff --git a/library/EngineBlock/Corto/Module/Bindings.php b/library/EngineBlock/Corto/Module/Bindings.php index 7581c11d9..0f360ef10 100644 --- a/library/EngineBlock/Corto/Module/Bindings.php +++ b/library/EngineBlock/Corto/Module/Bindings.php @@ -36,6 +36,7 @@ use SAML2\Message; use SAML2\Response; use SAML2\Signature\PublicKeyValidator; +use Twig\Environment; /** * The bindings module for Corto, which implements support for various data @@ -94,7 +95,7 @@ class EngineBlock_Corto_Module_Bindings extends EngineBlock_Corto_Module_Abstrac private $_logger; /** - * @var Twig_Environment + * @var Environment */ private $twig; diff --git a/library/EngineBlock/Corto/Module/Service/Abstract.php b/library/EngineBlock/Corto/Module/Service/Abstract.php index fb2480340..ce7e00fcd 100644 --- a/library/EngineBlock/Corto/Module/Service/Abstract.php +++ b/library/EngineBlock/Corto/Module/Service/Abstract.php @@ -1,5 +1,7 @@ _server = $server; $this->_xmlConverter = $xmlConverter; diff --git a/library/EngineBlock/Corto/Module/Service/ContinueToIdp.php b/library/EngineBlock/Corto/Module/Service/ContinueToIdp.php index d83d5f926..ee3a3a0f3 100644 --- a/library/EngineBlock/Corto/Module/Service/ContinueToIdp.php +++ b/library/EngineBlock/Corto/Module/Service/ContinueToIdp.php @@ -20,6 +20,7 @@ use OpenConext\EngineBlock\Metadata\Factory\Factory\ServiceProviderFactory; use OpenConext\EngineBlock\Metadata\X509\KeyPairFactory; use Symfony\Component\HttpFoundation\Request; +use Twig\Environment; class EngineBlock_Corto_Module_Service_ContinueToIdp implements EngineBlock_Corto_Module_Service_ServiceInterface { @@ -32,7 +33,7 @@ class EngineBlock_Corto_Module_Service_ContinueToIdp implements EngineBlock_Cort protected $_xmlConverter; /** - * @var Twig_Environment + * @var Environment */ protected $twig; @@ -44,7 +45,7 @@ class EngineBlock_Corto_Module_Service_ContinueToIdp implements EngineBlock_Cort public function __construct( EngineBlock_Corto_ProxyServer $server, EngineBlock_Corto_XmlToArray $xmlConverter, - Twig_Environment $twig, + Environment $twig, ServiceProviderFactory $serviceProviderFactory ) { $this->_server = $server; diff --git a/library/EngineBlock/Corto/Module/Service/Interface.php b/library/EngineBlock/Corto/Module/Service/Interface.php index def5d555c..2b6d46355 100644 --- a/library/EngineBlock/Corto/Module/Service/Interface.php +++ b/library/EngineBlock/Corto/Module/Service/Interface.php @@ -1,5 +1,7 @@ getDiContainer(); - // Profile url is configurable in parameters.yml (profile_base_url) + // Profile url is configurable in parameters.yaml (profile_base_url) $profileUrl = '#'; $configuredUrl = $settings->getProfileBaseUrl(); if (!empty($configuredUrl)) { diff --git a/library/EngineBlock/Corto/Module/Service/SingleSignOn.php b/library/EngineBlock/Corto/Module/Service/SingleSignOn.php index e05b0cf2a..3550a9da2 100644 --- a/library/EngineBlock/Corto/Module/Service/SingleSignOn.php +++ b/library/EngineBlock/Corto/Module/Service/SingleSignOn.php @@ -28,6 +28,7 @@ use SAML2\Response; use SAML2\XML\saml\Issuer; use Symfony\Component\HttpFoundation\Request; +use Twig\Environment; class EngineBlock_Corto_Module_Service_SingleSignOn implements EngineBlock_Corto_Module_Service_ServiceInterface { @@ -42,7 +43,7 @@ class EngineBlock_Corto_Module_Service_SingleSignOn implements EngineBlock_Corto protected $_xmlConverter; /** - * @var Twig_Environment + * @var Environment */ protected $twig; @@ -59,7 +60,7 @@ class EngineBlock_Corto_Module_Service_SingleSignOn implements EngineBlock_Corto public function __construct( EngineBlock_Corto_ProxyServer $server, EngineBlock_Corto_XmlToArray $xmlConverter, - Twig_Environment $twig, + Environment $twig, ServiceProviderFactory $serviceProviderFactory, DiscoverySelectionService $discoverySelectionService ) { diff --git a/library/EngineBlock/Corto/Module/Services.php b/library/EngineBlock/Corto/Module/Services.php index d700844d3..763469a5a 100644 --- a/library/EngineBlock/Corto/Module/Services.php +++ b/library/EngineBlock/Corto/Module/Services.php @@ -16,23 +16,6 @@ * limitations under the License. */ -class EngineBlock_Corto_Module_Services_Exception extends EngineBlock_Corto_ProxyServer_Exception -{ - public function __construct($message, $severity = self::CODE_NOTICE, Exception $previous = null) - { - parent::__construct($message, $severity, $previous); - } - -} - -class EngineBlock_Corto_Module_Services_SessionLostException extends EngineBlock_Corto_Module_Services_Exception -{ -} - -class EngineBlock_Corto_Module_Services_SessionNotStartedException extends EngineBlock_Corto_Module_Services_Exception -{ -} - class EngineBlock_Corto_Module_Services extends EngineBlock_Corto_Module_Abstract { protected $_aliases = array( diff --git a/library/EngineBlock/Corto/Module/Services/Exception.php b/library/EngineBlock/Corto/Module/Services/Exception.php new file mode 100644 index 000000000..c6c94e43b --- /dev/null +++ b/library/EngineBlock/Corto/Module/Services/Exception.php @@ -0,0 +1,26 @@ +_server = $this; $this->twig = $twig; diff --git a/database/DoctrineMigrations/Version20160307162928.php b/migrations/DoctrineMigrations/Version20160307162928.php similarity index 93% rename from database/DoctrineMigrations/Version20160307162928.php rename to migrations/DoctrineMigrations/Version20160307162928.php index 75400f643..128b87b47 100644 --- a/database/DoctrineMigrations/Version20160307162928.php +++ b/migrations/DoctrineMigrations/Version20160307162928.php @@ -2,8 +2,8 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; +use Doctrine\Migrations\AbstractMigration; /** * Auto-generated Migration: Please modify to your needs! @@ -13,7 +13,7 @@ class Version20160307162928 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -25,7 +25,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20160412141621.php b/migrations/DoctrineMigrations/Version20160412141621.php similarity index 89% rename from database/DoctrineMigrations/Version20160412141621.php rename to migrations/DoctrineMigrations/Version20160412141621.php index d4914fccf..176ad2d1a 100644 --- a/database/DoctrineMigrations/Version20160412141621.php +++ b/migrations/DoctrineMigrations/Version20160412141621.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20160412141621 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -24,7 +24,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20160721121856.php b/migrations/DoctrineMigrations/Version20160721121856.php similarity index 84% rename from database/DoctrineMigrations/Version20160721121856.php rename to migrations/DoctrineMigrations/Version20160721121856.php index 104b4338c..bb32e4298 100644 --- a/database/DoctrineMigrations/Version20160721121856.php +++ b/migrations/DoctrineMigrations/Version20160721121856.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20160721121856 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->addSql('CREATE TABLE sso_provider_roles_eb5 LIKE sso_provider_roles'); @@ -23,7 +23,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->addSql('DROP TABLE sso_provider_roles_eb5'); diff --git a/database/DoctrineMigrations/Version20161123131704.php b/migrations/DoctrineMigrations/Version20161123131704.php similarity index 93% rename from database/DoctrineMigrations/Version20161123131704.php rename to migrations/DoctrineMigrations/Version20161123131704.php index c4802288a..8e3c13874 100644 --- a/database/DoctrineMigrations/Version20161123131704.php +++ b/migrations/DoctrineMigrations/Version20161123131704.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20161123131704 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs @@ -30,7 +30,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->addSql('CREATE TABLE IF NOT EXISTS virtual_organisation (vo_id VARCHAR(255) NOT NULL, vo_type enum(\'GROUP\',\'STEM\',\'IDP\', \'MIXED\') NOT NULL, PRIMARY KEY (vo_id)) ENGINE=InnoDB'); diff --git a/database/DoctrineMigrations/Version20161209145942.php b/migrations/DoctrineMigrations/Version20161209145942.php similarity index 83% rename from database/DoctrineMigrations/Version20161209145942.php rename to migrations/DoctrineMigrations/Version20161209145942.php index 78eff0c50..1540ac140 100644 --- a/database/DoctrineMigrations/Version20161209145942.php +++ b/migrations/DoctrineMigrations/Version20161209145942.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20161209145942 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // Make sure consent_date is not updated every time a row is updated $this->addSql('ALTER TABLE consent CHANGE consent_date consent_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;'); @@ -22,7 +22,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { $this->addSql('ALTER TABLE consent CHANGE consent_date consent_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;'); diff --git a/database/DoctrineMigrations/Version20161209152354.php b/migrations/DoctrineMigrations/Version20161209152354.php similarity index 79% rename from database/DoctrineMigrations/Version20161209152354.php rename to migrations/DoctrineMigrations/Version20161209152354.php index dcf42e2b3..5c2944f33 100644 --- a/database/DoctrineMigrations/Version20161209152354.php +++ b/migrations/DoctrineMigrations/Version20161209152354.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20161209152354 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { $this->addSql('ALTER TABLE consent DROP COLUMN usage_date'); @@ -22,7 +22,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { $this->addSql('ALTER TABLE consent ADD COLUMN usage_date TIMESTAMP DEFAULT \'0000-00-00 00:00:00\' AFTER consent_date'); } diff --git a/database/DoctrineMigrations/Version20170331145533.php b/migrations/DoctrineMigrations/Version20170331145533.php similarity index 89% rename from database/DoctrineMigrations/Version20170331145533.php rename to migrations/DoctrineMigrations/Version20170331145533.php index 2b1451975..afac06ec2 100644 --- a/database/DoctrineMigrations/Version20170331145533.php +++ b/migrations/DoctrineMigrations/Version20170331145533.php @@ -2,19 +2,19 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; class Version20170331145533 extends AbstractMigration { - public function up(Schema $schema) + public function up(Schema $schema): void { $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('DROP TABLE IF EXISTS log_logins'); } - public function down(Schema $schema) + public function down(Schema $schema): void { $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20170912155800.php b/migrations/DoctrineMigrations/Version20170912155800.php similarity index 97% rename from database/DoctrineMigrations/Version20170912155800.php rename to migrations/DoctrineMigrations/Version20170912155800.php index f17664ccf..22f543c78 100644 --- a/database/DoctrineMigrations/Version20170912155800.php +++ b/migrations/DoctrineMigrations/Version20170912155800.php @@ -2,12 +2,12 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; class Version20170912155800 extends AbstractMigration { - public function up(Schema $schema) + public function up(Schema $schema): void { $this->addSql('DROP TABLE IF EXISTS group_provider'); $this->addSql('DROP TABLE IF EXISTS group_provider_decorator'); @@ -21,7 +21,7 @@ public function up(Schema $schema) $this->addSql('DROP TABLE IF EXISTS service_provider_group_acl'); } - public function down(Schema $schema) + public function down(Schema $schema): void { $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20180118115853.php b/migrations/DoctrineMigrations/Version20180118115853.php similarity index 89% rename from database/DoctrineMigrations/Version20180118115853.php rename to migrations/DoctrineMigrations/Version20180118115853.php index 208f174b8..65163526c 100644 --- a/database/DoctrineMigrations/Version20180118115853.php +++ b/migrations/DoctrineMigrations/Version20180118115853.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20180118115853 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -25,7 +25,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20180202131013.php b/migrations/DoctrineMigrations/Version20180202131013.php similarity index 97% rename from database/DoctrineMigrations/Version20180202131013.php rename to migrations/DoctrineMigrations/Version20180202131013.php index f9710ee1a..663b358d6 100644 --- a/database/DoctrineMigrations/Version20180202131013.php +++ b/migrations/DoctrineMigrations/Version20180202131013.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20180202131013 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -26,7 +26,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20180215132859.php b/migrations/DoctrineMigrations/Version20180215132859.php similarity index 88% rename from database/DoctrineMigrations/Version20180215132859.php rename to migrations/DoctrineMigrations/Version20180215132859.php index 95471756e..2ba18cabc 100644 --- a/database/DoctrineMigrations/Version20180215132859.php +++ b/migrations/DoctrineMigrations/Version20180215132859.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20180215132859 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -24,7 +24,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20180219171531.php b/migrations/DoctrineMigrations/Version20180219171531.php similarity index 90% rename from database/DoctrineMigrations/Version20180219171531.php rename to migrations/DoctrineMigrations/Version20180219171531.php index 3cd0faac3..5e30cd68d 100644 --- a/database/DoctrineMigrations/Version20180219171531.php +++ b/migrations/DoctrineMigrations/Version20180219171531.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20180219171531 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -24,7 +24,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20180220080549.php b/migrations/DoctrineMigrations/Version20180220080549.php similarity index 87% rename from database/DoctrineMigrations/Version20180220080549.php rename to migrations/DoctrineMigrations/Version20180220080549.php index 11d87548a..528552d7d 100644 --- a/database/DoctrineMigrations/Version20180220080549.php +++ b/migrations/DoctrineMigrations/Version20180220080549.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20180220080549 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -26,7 +26,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20180221133212.php b/migrations/DoctrineMigrations/Version20180221133212.php similarity index 88% rename from database/DoctrineMigrations/Version20180221133212.php rename to migrations/DoctrineMigrations/Version20180221133212.php index 8fa6005f4..25ea732eb 100644 --- a/database/DoctrineMigrations/Version20180221133212.php +++ b/migrations/DoctrineMigrations/Version20180221133212.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20180221133212 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -24,7 +24,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20180618134736.php b/migrations/DoctrineMigrations/Version20180618134736.php similarity index 88% rename from database/DoctrineMigrations/Version20180618134736.php rename to migrations/DoctrineMigrations/Version20180618134736.php index 02ace2688..5a9f5d836 100644 --- a/database/DoctrineMigrations/Version20180618134736.php +++ b/migrations/DoctrineMigrations/Version20180618134736.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -15,7 +15,7 @@ class Version20180618134736 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -26,7 +26,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20180804090135.php b/migrations/DoctrineMigrations/Version20180804090135.php similarity index 87% rename from database/DoctrineMigrations/Version20180804090135.php rename to migrations/DoctrineMigrations/Version20180804090135.php index 200d69798..1f7833e57 100644 --- a/database/DoctrineMigrations/Version20180804090135.php +++ b/migrations/DoctrineMigrations/Version20180804090135.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20180804090135 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -24,7 +24,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20190425205743.php b/migrations/DoctrineMigrations/Version20190425205743.php similarity index 87% rename from database/DoctrineMigrations/Version20190425205743.php rename to migrations/DoctrineMigrations/Version20190425205743.php index b059efa7b..71abad4cb 100644 --- a/database/DoctrineMigrations/Version20190425205743.php +++ b/migrations/DoctrineMigrations/Version20190425205743.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20190425205743 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -24,7 +24,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20190504110100.php b/migrations/DoctrineMigrations/Version20190504110100.php similarity index 91% rename from database/DoctrineMigrations/Version20190504110100.php rename to migrations/DoctrineMigrations/Version20190504110100.php index 830faf8d8..6c820fe02 100644 --- a/database/DoctrineMigrations/Version20190504110100.php +++ b/migrations/DoctrineMigrations/Version20190504110100.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -21,7 +21,7 @@ class Version20190504110100 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -32,7 +32,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20190703235333.php b/migrations/DoctrineMigrations/Version20190703235333.php similarity index 88% rename from database/DoctrineMigrations/Version20190703235333.php rename to migrations/DoctrineMigrations/Version20190703235333.php index 0a63d107f..78053373c 100644 --- a/database/DoctrineMigrations/Version20190703235333.php +++ b/migrations/DoctrineMigrations/Version20190703235333.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20190703235333 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -24,7 +24,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20190710141146.php b/migrations/DoctrineMigrations/Version20190710141146.php similarity index 94% rename from database/DoctrineMigrations/Version20190710141146.php rename to migrations/DoctrineMigrations/Version20190710141146.php index ef1cee096..06d3b81b8 100644 --- a/database/DoctrineMigrations/Version20190710141146.php +++ b/migrations/DoctrineMigrations/Version20190710141146.php @@ -2,7 +2,7 @@ namespace OpenConext\EngineBlock\Doctrine\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; +use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; /** @@ -13,7 +13,7 @@ class Version20190710141146 extends AbstractMigration /** * @param Schema $schema */ - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -24,7 +24,7 @@ public function up(Schema $schema) /** * @param Schema $schema */ - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20191011132428.php b/migrations/DoctrineMigrations/Version20191011132428.php similarity index 100% rename from database/DoctrineMigrations/Version20191011132428.php rename to migrations/DoctrineMigrations/Version20191011132428.php diff --git a/database/DoctrineMigrations/Version20200422145000.php b/migrations/DoctrineMigrations/Version20200422145000.php similarity index 93% rename from database/DoctrineMigrations/Version20200422145000.php rename to migrations/DoctrineMigrations/Version20200422145000.php index 63fa5cede..a4442cde1 100644 --- a/database/DoctrineMigrations/Version20200422145000.php +++ b/migrations/DoctrineMigrations/Version20200422145000.php @@ -10,7 +10,7 @@ */ final class Version20200422145000 extends AbstractMigration { - public function up(Schema $schema) + public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); @@ -19,7 +19,7 @@ public function up(Schema $schema) '); } - public function down(Schema $schema) + public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); diff --git a/database/DoctrineMigrations/Version20201005161700.php b/migrations/DoctrineMigrations/Version20201005161700.php similarity index 100% rename from database/DoctrineMigrations/Version20201005161700.php rename to migrations/DoctrineMigrations/Version20201005161700.php diff --git a/database/DoctrineMigrations/Version20220425090852.php b/migrations/DoctrineMigrations/Version20220425090852.php similarity index 100% rename from database/DoctrineMigrations/Version20220425090852.php rename to migrations/DoctrineMigrations/Version20220425090852.php diff --git a/database/DoctrineMigrations/Version20230418113623.php b/migrations/DoctrineMigrations/Version20230418113623.php similarity index 100% rename from database/DoctrineMigrations/Version20230418113623.php rename to migrations/DoctrineMigrations/Version20230418113623.php diff --git a/database/DoctrineMigrations/Version20230824090020.php b/migrations/DoctrineMigrations/Version20230824090020.php similarity index 100% rename from database/DoctrineMigrations/Version20230824090020.php rename to migrations/DoctrineMigrations/Version20230824090020.php diff --git a/database/DoctrineMigrations/Version20250206095609.php b/migrations/DoctrineMigrations/Version20250206095609.php similarity index 100% rename from database/DoctrineMigrations/Version20250206095609.php rename to migrations/DoctrineMigrations/Version20250206095609.php diff --git a/public/.gitignore b/public/.gitignore new file mode 100644 index 000000000..3283583e8 --- /dev/null +++ b/public/.gitignore @@ -0,0 +1,5 @@ +cached +fonts +images +javascripts +stylesheets diff --git a/web/favicon.ico b/public/favicon.ico similarity index 100% rename from web/favicon.ico rename to public/favicon.ico diff --git a/public/index.php b/public/index.php new file mode 100644 index 000000000..e75c311da --- /dev/null +++ b/public/index.php @@ -0,0 +1,39 @@ +handle($request); +$response->send(); +$kernel->terminate($request, $response); diff --git a/web/robots.txt b/public/robots.txt similarity index 100% rename from web/robots.txt rename to public/robots.txt diff --git a/src/Kernel.php b/src/Kernel.php new file mode 100644 index 000000000..746780db1 --- /dev/null +++ b/src/Kernel.php @@ -0,0 +1,71 @@ +getProjectDir().'/config/bundles.php'; + foreach ($contents as $class => $envs) { + if ($envs[$this->environment] ?? $envs['all'] ?? false) { + yield new $class(); + } + } + } + + public function getProjectDir(): string + { + return \dirname(__DIR__); + } + + protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void + { + $container->addResource(new FileResource($this->getProjectDir().'/config/bundles.php')); + $container->setParameter('container.dumper.inline_class_loader', \PHP_VERSION_ID < 70400 || $this->debug); + $container->setParameter('container.dumper.inline_factories', true); + + $confDir = $this->getProjectDir().'/config'; + + $loader->load($confDir.'/{packages}/*'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{packages}/'.$this->environment.'/*'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{services}'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{services}_'.$this->environment.self::CONFIG_EXTS, 'glob'); + } + + protected function configureRoutes(RouteCollectionBuilder $routes): void + { + $confDir = $this->getProjectDir().'/config'; + + $routes->import($confDir.'/{routes}/'.$this->environment.'/*'.self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir.'/{routes}/*'.self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir.'/{routes}'.self::CONFIG_EXTS, '/', 'glob'); + } +} diff --git a/src/OpenConext/EngineBlock/Metadata/MetadataRepository/CachedDoctrineMetadataRepository.php b/src/OpenConext/EngineBlock/Metadata/MetadataRepository/CachedDoctrineMetadataRepository.php index c3c7b6077..d26c4c12d 100644 --- a/src/OpenConext/EngineBlock/Metadata/MetadataRepository/CachedDoctrineMetadataRepository.php +++ b/src/OpenConext/EngineBlock/Metadata/MetadataRepository/CachedDoctrineMetadataRepository.php @@ -67,7 +67,7 @@ public function __construct(DoctrineMetadataRepository $repository) */ public function invoke($name, array $args) { - $signature = $name . ':' . serialize($args); + $signature = $name . ':' . json_encode($args); if (!isset($this->cache[$signature])) { $this->cache[$signature] = call_user_func_array(array($this->repository, $name), $args); diff --git a/src/OpenConext/EngineBlock/Metadata/MetadataRepository/DoctrineMetadataPushRepository.php b/src/OpenConext/EngineBlock/Metadata/MetadataRepository/DoctrineMetadataPushRepository.php index 8308b62e4..963cffc9a 100644 --- a/src/OpenConext/EngineBlock/Metadata/MetadataRepository/DoctrineMetadataPushRepository.php +++ b/src/OpenConext/EngineBlock/Metadata/MetadataRepository/DoctrineMetadataPushRepository.php @@ -80,7 +80,7 @@ public function synchronize(array $roles) { $result = new SynchronizationResult(); - $this->connection->transactional(function () use ($roles, $result) { + $this->connection->transactional(function () use ($roles, $result): void { $idpsToBeRemoved = $this->findAllRoleEntityIds($this->idpMetadata); $spsToBeRemoved = $this->findAllRoleEntityIds($this->spMetadata); diff --git a/src/OpenConext/EngineBlockBundle/Configuration/ErrorFeedbackConfiguration.php b/src/OpenConext/EngineBlockBundle/Configuration/ErrorFeedbackConfiguration.php index 0e445a8ac..38c7ca1fa 100644 --- a/src/OpenConext/EngineBlockBundle/Configuration/ErrorFeedbackConfiguration.php +++ b/src/OpenConext/EngineBlockBundle/Configuration/ErrorFeedbackConfiguration.php @@ -18,7 +18,7 @@ namespace OpenConext\EngineBlockBundle\Configuration; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class ErrorFeedbackConfiguration implements ErrorFeedbackConfigurationInterface { diff --git a/src/OpenConext/EngineBlockBundle/Configuration/FeatureConfiguration.php b/src/OpenConext/EngineBlockBundle/Configuration/FeatureConfiguration.php index 6223760c7..dfd001b18 100644 --- a/src/OpenConext/EngineBlockBundle/Configuration/FeatureConfiguration.php +++ b/src/OpenConext/EngineBlockBundle/Configuration/FeatureConfiguration.php @@ -33,10 +33,13 @@ class FeatureConfiguration implements FeatureConfigurationInterface */ public function __construct(array $features) { - Assertion::allIsInstanceOf($features, Feature::class); - Assertion::allString(array_keys($features), 'All keys for features must be a string (the feature key itself).'); + $this->features = []; + foreach ($features as $feature => $onOrOff) { + $this->features[$feature] = new Feature($feature, $onOrOff); + } - $this->features = $features; + Assertion::allIsInstanceOf($this->features, Feature::class); + Assertion::allString(array_keys($this->features), 'All keys for features must be a string (the feature key itself).'); } public function hasFeature($featureKey) diff --git a/src/OpenConext/EngineBlockBundle/Controller/Api/AttributeReleasePolicyController.php b/src/OpenConext/EngineBlockBundle/Controller/Api/AttributeReleasePolicyController.php index cac09e461..d8c4f1e5d 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/Api/AttributeReleasePolicyController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/Api/AttributeReleasePolicyController.php @@ -27,6 +27,7 @@ use OpenConext\EngineBlockBundle\Http\Response\JsonResponse; use OpenConext\Value\Saml\EntityId; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; final class AttributeReleasePolicyController @@ -57,8 +58,7 @@ public function __construct( } /** - * @param Request $request - * @return JsonResponse + * @Route("/arp", name="api_apply_attribute_release_policy", defaults={"_format"="json"}) * * @SuppressWarnings(PHPMD.CyclomaticComplexity) Extensive request validation * @SuppressWarnings(PHPMD.NPathComplexity) Extensive request validation @@ -122,8 +122,7 @@ public function applyArpAction(Request $request) } /** - * @param Request $request - * @return JsonResponse + * @Route("/read-arp", name="api_read_attribute_release_policy", defaults={"_format"="json"}) */ public function readArpAction(Request $request) { diff --git a/src/OpenConext/EngineBlockBundle/Controller/Api/ConnectionsController.php b/src/OpenConext/EngineBlockBundle/Controller/Api/ConnectionsController.php index 24be5ed7f..56c8541f0 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/Api/ConnectionsController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/Api/ConnectionsController.php @@ -31,6 +31,7 @@ use OpenConext\EngineBlockBundle\Http\Request\JsonRequestHelper; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; /** @@ -87,6 +88,9 @@ public function __construct( $this->memoryLimit = $memoryLimit; } + /** + * @Route("/api/connections", name="api_connections", defaults={"_format"="json"}) + */ public function pushConnectionsAction(Request $request) { if (!$request->isMethod(Request::METHOD_POST)) { diff --git a/src/OpenConext/EngineBlockBundle/Controller/Api/ConsentController.php b/src/OpenConext/EngineBlockBundle/Controller/Api/ConsentController.php index 4c0adeba5..28eae8fd7 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/Api/ConsentController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/Api/ConsentController.php @@ -30,6 +30,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use function array_key_exists; use function sprintf; @@ -64,6 +65,9 @@ public function __construct( $this->consentService = $consentService; } + /** + * @Route("/consent/{userId}", name="api_consent_user", defaults={"_format"="json"}) + */ public function userAction($userId, Request $request) { if (!$request->isMethod(Request::METHOD_GET)) { @@ -100,6 +104,9 @@ public function userAction($userId, Request $request) return new JsonResponse($consentList, Response::HTTP_OK); } + /** + * @Route("/remove-consent", name="api_remove_consent_user", defaults={"_format"="json"}) + */ public function removeAction(Request $request): JsonResponse { if (!$request->isMethod(Request::METHOD_POST)) { diff --git a/src/OpenConext/EngineBlockBundle/Controller/Api/DeprovisionController.php b/src/OpenConext/EngineBlockBundle/Controller/Api/DeprovisionController.php index 5ed524b4b..3b7ef21e2 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/Api/DeprovisionController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/Api/DeprovisionController.php @@ -27,6 +27,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; /** @@ -73,9 +74,11 @@ public function __construct( } /** - * @param Request $request - * @param string $collabPersonId - * @return JsonResponse + * @Route( + * "/deprovision/{collabPersonId}", + * name="api_deprovision_get_user_data", + * defaults={"_format"="json"} + * ) */ public function userDataAction(Request $request, $collabPersonId) { @@ -95,9 +98,11 @@ public function userDataAction(Request $request, $collabPersonId) } /** - * @param Request $request - * @param string $collabPersonId - * @return JsonResponse + * @Route( + * "/deprovision/{collabPersonId}/dry-run", + * name="api_deprovision_delete_user_data_dry_run", + * defaults={"_format"="json"} + * ) */ public function dryRunAction(Request $request, $collabPersonId) { diff --git a/src/OpenConext/EngineBlockBundle/Controller/Api/HeartbeatController.php b/src/OpenConext/EngineBlockBundle/Controller/Api/HeartbeatController.php index af8c84a26..3f24a4360 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/Api/HeartbeatController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/Api/HeartbeatController.php @@ -19,9 +19,13 @@ namespace OpenConext\EngineBlockBundle\Controller\Api; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Annotation\Route; class HeartbeatController { + /** + * @Route("/", name="api_heartbeat", defaults={"_format"="json"}) + */ public function itWorksAction() { return new Response(); diff --git a/src/OpenConext/EngineBlockBundle/Controller/Api/MetadataController.php b/src/OpenConext/EngineBlockBundle/Controller/Api/MetadataController.php index 5339a995e..2978681ea 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/Api/MetadataController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/Api/MetadataController.php @@ -29,6 +29,7 @@ use OpenConext\Value\Exception\InvalidArgumentException; use OpenConext\Value\Saml\EntityId; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; /** @@ -62,6 +63,9 @@ public function __construct( $this->metadataService = $metadataService; } + /** + * @Route("/metadata/idp", name="api_metadata_idp", defaults={"_format"="json"}) + */ public function idpAction(Request $request) { if (!$request->isMethod(Request::METHOD_GET)) { diff --git a/src/OpenConext/EngineBlockBundle/Controller/DebugController.php b/src/OpenConext/EngineBlockBundle/Controller/DebugController.php index b7d85fd8f..56872b2e8 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/DebugController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/DebugController.php @@ -25,6 +25,7 @@ use OpenConext\Value\Saml\EntityId; use OpenConext\Value\Saml\EntityType; use Symfony\Component\HttpFoundation\Session\SessionInterface; +use Symfony\Component\Routing\Annotation\Route; class DebugController implements AuthenticationLoopThrottlingController { @@ -47,7 +48,7 @@ public function __construct( } /** - * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response + * @Route("/authentication/sp/debug", name="authentication_sp_debug", methods={"GET","POST"}) */ public function debugSpConnectionAction() { diff --git a/src/OpenConext/EngineBlockBundle/Controller/FeedbackController.php b/src/OpenConext/EngineBlockBundle/Controller/FeedbackController.php index 877e3f7a1..76edf1e31 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/FeedbackController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/FeedbackController.php @@ -24,8 +24,9 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Session\SessionInterface; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Translation\TranslatorInterface; -use Twig_Environment; +use Twig\Environment; /** * @SuppressWarnings(PHPMD.TooManyPublicMethods) Mimics the previous methodology, will be refactored @@ -40,7 +41,7 @@ class FeedbackController private $translator; /** - * @var Twig_Environment + * @var Environment */ private $twig; @@ -51,7 +52,7 @@ class FeedbackController public function __construct( TranslatorInterface $translator, - Twig_Environment $twig, + Environment $twig, LoggerInterface $logger ) { $this->translator = $translator; @@ -64,8 +65,11 @@ public function __construct( } /** - * @return Response - * @throws \EngineBlock_Exception + * @Route( + * "/authentication/feedback/unable-to-receive-message", + * name="authentication_feedback_unable_to_receive_message", + * methods={"GET"} + * ) */ public function unableToReceiveMessageAction() { @@ -75,6 +79,9 @@ public function unableToReceiveMessageAction() ); } + /** + * @Route("/feedback/unknown-error", name="feedback_unknown_error", methods={"GET"}) + */ public function unknownErrorAction() { return new Response( @@ -83,9 +90,9 @@ public function unknownErrorAction() ); } + /** - * @return Response - * @throws \EngineBlock_Exception + * @Route("/authentication/feedback/session-lost", name="authentication_feedback_session_lost", methods={"GET"}) */ public function sessionLostAction() { @@ -93,8 +100,7 @@ public function sessionLostAction() } /** - * @return Response - * @throws \EngineBlock_Exception + * @Route("/authentication/feedback/session-not-started", name="authentication_feedback_session_not_started", methods={"GET"}) */ public function sessionNotStartedAction() { @@ -102,8 +108,7 @@ public function sessionNotStartedAction() } /** - * @return Response - * @throws \EngineBlock_Exception + * @Route("/authentication/feedback/no-idps", name="authentication_feedback_no_idps", methods={"GET"}) */ public function noIdpsAction() { @@ -113,8 +118,7 @@ public function noIdpsAction() } /** - * @return Response - * @throws \EngineBlock_Exception + * @Route("/authentication/feedback/invalidAcsLocation", name="authentication_feedback_invalid_acs_location", methods={"GET"}) */ public function invalidAcsLocationAction() { @@ -125,9 +129,11 @@ public function invalidAcsLocationAction() } /** - * @param Request $request - * @return Response - * @throws \EngineBlock_Exception + * @Route( + * "/authentication/feedback/unsupportedSignatureMethod", + * name="authentication_feedback_unsupported_signature_method", + * methods={"GET"} + * ) */ public function unsupportedSignatureMethodAction(Request $request) { @@ -144,8 +150,11 @@ public function unsupportedSignatureMethodAction(Request $request) } /** - * @return Response - * @throws \EngineBlock_Exception + * @Route( + * "/authentication/feedback/unsupported-acs-location-scheme", + * name="authentication_feedback_unsupported_acs_location_uri_scheme", + * methods={"GET"} + * ) */ public function unsupportedAcsLocationSchemeAction() { @@ -158,10 +167,13 @@ public function unsupportedAcsLocationSchemeAction() ); } + /** - * @param Request $request - * @return Response - * @throws \EngineBlock_Exception + * @Route( + * "/authentication/feedback/unknown-service-provider", + * name="authentication_feedback_unknown_service_provider", + * methods={"GET"} + * ) */ public function unknownServiceProviderAction(Request $request) { @@ -182,9 +194,11 @@ public function unknownServiceProviderAction(Request $request) } /** - * @param Request $request - * @return Response - * @throws \EngineBlock_Exception + * @Route( + * "/authentication/feedback/unknown-identity-provider", + * name="authentication_feedback_unknown_identity_provider", + * methods={"GET"} + * ) */ public function unknownIdentityProviderAction(Request $request) { @@ -202,9 +216,11 @@ public function unknownIdentityProviderAction(Request $request) } /** - * @param Request $request - * @return Response - * @throws \EngineBlock_Exception + * @Route( + * "/authentication/feedback/unknown-signing-key", + * name="authentication_feedback_unknown_signing_key", + * methods={"GET"} + * ) */ public function unknownSigningKeyAction(Request $request) { @@ -214,9 +230,13 @@ public function unknownSigningKeyAction(Request $request) ); } + /** - * @return Response - * @throws \EngineBlock_Exception + * @Route( + * "/authentication/feedback/missing-required-fields", + * name="authentication_feedback_missing_required_fields", + * methods={"GET"} + * ) */ public function missingRequiredFieldsAction() { @@ -227,7 +247,11 @@ public function missingRequiredFieldsAction() } /** - * @return Response + * @Route( + * "/authentication/feedback/authn-context-class-ref-blacklisted", + * name="authentication_authn_context_class_ref_blacklisted", + * methods={"GET"} + * ) */ public function authnContextClassRefBlacklistedAction() { @@ -239,7 +263,11 @@ public function authnContextClassRefBlacklistedAction() /** - * @return Response + * @Route( + * "/authentication/feedback/invalid-mfa-authn-context-class-ref", + * name="authentication_invalid_mfa_authn_context_class_ref", + * methods={"GET"} + * ) */ public function invalidMfAuthnContextClassRefAction() { @@ -249,9 +277,9 @@ public function invalidMfAuthnContextClassRefAction() ); } + /** - * @param Request $request - * @return Response + * @Route("/authentication/feedback/invalid-attribute-value", name="authentication_feedback_invalid_attribute_value", methods={"GET"}) */ public function invalidAttributeValueAction(Request $request) { @@ -272,6 +300,13 @@ public function invalidAttributeValueAction(Request $request) ); } + /** + * @Route( + * "/authentication/feedback/metadata-entity-not-found", + * name="authentication_feedback_metadata_entity_not_found", + * methods={"GET"} + * ) + */ public function metadataEntityNotFoundAction(Request $request) { // The exception message is used on the error page. As mostly developers or other tech-savvy people will see @@ -297,8 +332,7 @@ public function metadataEntityNotFoundAction(Request $request) } /** - * @param Request $request - * @return Response + * @Route("/authentication/feedback/custom", name="authentication_feedback_custom", methods={"GET"}) */ public function customAction(Request $request) { @@ -331,8 +365,7 @@ public function customAction(Request $request) } /** - * @return Response - * @throws \EngineBlock_Exception + * @Route("/authentication/feedback/invalid-acs-binding", name="authentication_feedback_invalid_acs_binding", methods={"GET"}) */ public function invalidAcsBindingAction() { @@ -341,8 +374,11 @@ public function invalidAcsBindingAction() } /** - * @return Response - * @throws \EngineBlock_Exception + * @Route( + * "/authentication/feedback/received-error-status-code", + * name="authentication_feedback_received_error_status_code", + * methods={"GET"} + * ) */ public function receivedErrorStatusCodeAction() { @@ -353,8 +389,11 @@ public function receivedErrorStatusCodeAction() } /** - * @return Response - * @throws \EngineBlock_Exception + * @Route( + * "/authentication/feedback/received-invalid-signed-response", + * name="authentication_feedback_signature_verification_failed", + * methods={"GET"} + * ) */ public function signatureVerificationFailedAction() { @@ -365,8 +404,7 @@ public function signatureVerificationFailedAction() } /** - * @return Response - * @throws \EngineBlock_Exception + * @Route("/authentication/feedback/received-invalid-response", name="authentication_feedback_verification_failed", methods={"GET"}) */ public function receivedInvalidResponseAction() { @@ -377,8 +415,11 @@ public function receivedInvalidResponseAction() } /** - * @return Response - * @throws \EngineBlock_Exception + * @Route( + * "/authentication/feedback/unknown_requesterid_in_authnrequest", + * name="authentication_feedback_unknown_requesterid_in_authnrequest", + * methods={"GET"} + * ) */ public function unknownRequesterIdInAuthnRequestAction() { @@ -388,9 +429,13 @@ public function unknownRequesterIdInAuthnRequestAction() ); } + /** - * @param Request $request - * @return Response + * @Route( + * "/authentication/feedback/authorization-policy-violation", + * name="authentication_feedback_pep_violation", + * methods={"GET"} + * ) */ public function authorizationPolicyViolationAction(Request $request) { @@ -425,8 +470,11 @@ public function authorizationPolicyViolationAction(Request $request) } /** - * @param Request $request - * @return Response + * @Route( + * "/authentication/feedback/unknown-preselected-idp", + * name="authentication_feedback_unknown_preselected_idp", + * methods={"GET"} + * ) */ public function unknownPreselectedIdpAction(Request $request) { @@ -442,6 +490,9 @@ public function unknownPreselectedIdpAction(Request $request) ); } + /** + * @Route("/authentication/feedback/unknown-keyid", name="authentication_feedback_unknown_keyid", methods={"GET"}) + */ public function unknownKeyIdAction(Request $request): Response { // Add feedback info from url @@ -457,7 +508,7 @@ public function unknownKeyIdAction(Request $request): Response } /** - * @return Response + * @Route("/authentication/feedback/stuck-in-authentication-loop", name="authentication_feedback_stuck_in_authentication_loop", methods={"GET"}) */ public function stuckInAuthenticationLoopAction() { @@ -467,6 +518,13 @@ public function stuckInAuthenticationLoopAction() ); } + /** + * @Route( + * "/authentication/feedback/authentication-limit-exceeded", + * name="authentication_feedback_authentication_limit_exceeded", + * methods={"GET"} + * ) + */ public function authenticationLimitExceededAction() { return new Response( @@ -476,7 +534,11 @@ public function authenticationLimitExceededAction() } /** - * @return Response + * @Route( + * "/authentication/feedback/invalid-request-method-on-sso", + * name="authentication_feedback_no_authentication_request_received", + * methods={"GET"} + * ) */ public function noAuthenticationRequestReceivedAction(Request $request) { @@ -503,7 +565,7 @@ public function noAuthenticationRequestReceivedAction(Request $request) } /** - * @return Response + * @Route("/authentication/feedback/clock-issue", name="authentication_feedback_response_clock_issue", methods={"GET"}) */ public function clockIssueAction() { @@ -514,7 +576,7 @@ public function clockIssueAction() } /** - * @return Response + * @Route("/authentication/feedback/stepup-callout-user-cancelled", name="authentication_feedback_stepup_callout_user_cancelled", methods={"GET"}) */ public function stepupCalloutUserCancelledAction(Request $request) { @@ -525,7 +587,7 @@ public function stepupCalloutUserCancelledAction(Request $request) } /** - * @return Response + * @Route("/authentication/feedback/stepup-callout-unmet-loa", name="authentication_feedback_stepup_callout_unmet_loa", methods={"GET"}) */ public function stepupCalloutUnmetLoaAction(Request $request) { @@ -536,7 +598,7 @@ public function stepupCalloutUnmetLoaAction(Request $request) } /** - * @return Response + * @Route("/authentication/feedback/stepup-callout-unknown", name="authentication_feedback_stepup_callout_unknown", methods={"GET"}) */ public function stepupCalloutUnknownAction(Request $request) { diff --git a/src/OpenConext/EngineBlockBundle/Controller/IdentityProviderController.php b/src/OpenConext/EngineBlockBundle/Controller/IdentityProviderController.php index 5ca07895e..70f169931 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/IdentityProviderController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/IdentityProviderController.php @@ -29,7 +29,8 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Twig_Environment; +use Symfony\Component\Routing\Annotation\Route; +use Twig\Environment; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) Due to the compatibility requirements @@ -42,7 +43,7 @@ class IdentityProviderController implements AuthenticationLoopThrottlingControll private $engineBlockApplicationSingleton; /** - * @var Twig_Environment + * @var Environment */ private $twig; @@ -83,7 +84,7 @@ class IdentityProviderController implements AuthenticationLoopThrottlingControll public function __construct( EngineBlock_ApplicationSingleton $engineBlockApplicationSingleton, - Twig_Environment $twig, + Environment $twig, LoggerInterface $loggerInterface, RequestAccessMailer $requestAccessMailer, RequestValidator $requestValidator, @@ -106,19 +107,37 @@ public function __construct( /** * The SSO action * - * Currently supported request method / binding combinations for SSO are: + * Currently supported request method / binding combinations for SSO are: * - * | SAML Binding | Request method | Parameter name | - * | ---------------- | -------------- | -------------- | - * | HttpRedirect | GET | SAMLRequest | - * | HTTPPost | POST | SAMLRequest | + * | SAML Binding | Request method | Parameter name | + * |--------------|----------------|----------------| + * | HttpRedirect | GET | SAMLRequest | + * | HTTPPost | POST | SAMLRequest | * - * @param Request $request - * @param null|string $keyId - * @param null|string $idpHash * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response + * + * @Route( + * "/authentication/idp/single-sign-on", + * name="authentication_idp_sso", + * methods={"GET", "POST"} + * ) + * @Route( + * "/authentication/idp/single-sign-on/key:{keyId}/{idpHash}", + * name="authentication_idp_sso_keyid_idphash", + * methods={"GET", "POST"} + * ) + * @Route( + * "/authentication/idp/single-sign-on/key:{keyId}", + * name="authentication_idp_sso_keyid", + * methods={"GET", "POST"} + * ) + * @Route( + * "/authentication/idp/single-sign-on/{idpHash}", + * name="authentication_idp_sso_idphash", + * methods={"GET", "POST"} + * ) */ - public function singleSignOnAction(Request $request, $keyId = null, $idpHash = null) + public function singleSignOnAction(Request $request, string $keyId = null, string $idpHash = null) { $this->requestValidator->isValid($request); $this->bindingValidator->isValid($request); @@ -135,13 +154,32 @@ public function singleSignOnAction(Request $request, $keyId = null, $idpHash = n } /** - * @param Request $request - * @param null|string $keyId - * @param null|string $idpHash * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response * @throws NotFoundHttpException If the IdP-initiated flow has been disabled by config + * + * @Route( + * "/authentication/idp/unsolicited-single-sign-on", + * name="authentication_idp_unsolicited_sso", + * methods={"GET"} + * ) + * @Route( + * "/authentication/idp/unsolicited-single-sign-on/key:{keyId}/{idpHash}", + * name="authentication_idp_unsolicited_sso_keyid_idphash", + * methods={"GET"} + * ) + * @Route( + * "/authentication/idp/unsolicited-single-sign-on/key:{keyId}", + * name="authentication_idp_unsolicited_sso_keyid", + * methods={"GET"} + * ) + * @Route( + * "/authentication/idp/unsolicited-single-sign-on/{idpHash}", + * name="authentication_idp_unsolicited_sso_idphash", + * methods={"GET"} + * ) */ - public function unsolicitedSingleSignOnAction(Request $request, $keyId = null, $idpHash = null) + + public function unsolicitedSingleSignOnAction(Request $request, string $keyId = null, string $idpHash = null) { if (!$this->featureConfiguration->isEnabled('eb.feature_enable_idp_initiated_flow')) { throw new NotFoundHttpException(); @@ -162,6 +200,8 @@ public function unsolicitedSingleSignOnAction(Request $request, $keyId = null, $ /** * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response + * + * @Route("/authentication/idp/process-consent", name="authentication_idp_process_consent", methods={"POST"}) */ public function processConsentAction() { @@ -175,6 +215,8 @@ public function processConsentAction() * @param Request $request * @return Response * @throws \EngineBlock_Exception + * + * @Route("/authentication/idp/requestAccess", name="authentication_idp_request_access", methods={"GET"}) */ public function requestAccessAction(Request $request) { @@ -190,6 +232,8 @@ public function requestAccessAction(Request $request) * @param Request $request * @return Response * @throws \EngineBlock_Exception + * + * @Route("/authentication/idp/performRequestAccess", name="authentication_idp_perform_request_access_two", methods={"POST"}) */ public function performRequestAccessAction(Request $request) { diff --git a/src/OpenConext/EngineBlockBundle/Controller/IndexController.php b/src/OpenConext/EngineBlockBundle/Controller/IndexController.php index 91b7c2e64..b3bcbaed5 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/IndexController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/IndexController.php @@ -19,10 +19,12 @@ namespace OpenConext\EngineBlockBundle\Controller; use OpenConext\EngineBlock\Metadata\X509\KeyPairFactory; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Annotation\Route; use Twig\Environment; -class IndexController +class IndexController extends AbstractController { /** * @var Environment @@ -41,7 +43,7 @@ public function __construct(Environment $twig, array $keyPairs) } /** - * @return Response + * @Route("/", name="open_conext_engine_block_authentication_homepage") */ public function indexAction() { diff --git a/src/OpenConext/EngineBlockBundle/Controller/LogoutController.php b/src/OpenConext/EngineBlockBundle/Controller/LogoutController.php index b956d26a0..32c202698 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/LogoutController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/LogoutController.php @@ -21,7 +21,8 @@ use OpenConext\EngineBlock\Service\SsoSessionService; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Twig_Environment; +use Symfony\Component\Routing\Annotation\Route; +use Twig\Environment; /** * @SuppressWarnings(PHPMD.Superglobals) see docblock at logoutAction @@ -29,7 +30,7 @@ class LogoutController { /** - * @var Twig_Environment + * @var Environment */ private $twig; @@ -38,7 +39,7 @@ class LogoutController */ private $ssoSessionService; - public function __construct(Twig_Environment $twig, SsoSessionService $ssoSessionService) + public function __construct(Environment $twig, SsoSessionService $ssoSessionService) { $this->twig = $twig; $this->ssoSessionService = $ssoSessionService; @@ -49,8 +50,7 @@ public function __construct(Twig_Environment $twig, SsoSessionService $ssoSessio * manages the sessions (for now). Therefore we destroy these the same way * as is being done in EB4 * - * @param Request $request - * @return Response + * @Route("/logout", name="authentication_logout", methods={"GET", "POST"}) */ public function logoutAction(Request $request) { diff --git a/src/OpenConext/EngineBlockBundle/Controller/MetadataController.php b/src/OpenConext/EngineBlockBundle/Controller/MetadataController.php index d84a8e32e..5136b4896 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/MetadataController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/MetadataController.php @@ -25,6 +25,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Routing\RouterInterface; use OpenConext\EngineBlock\Metadata\Factory\ValueObject\EngineBlockConfiguration; @@ -49,6 +50,10 @@ public function __construct( $this->engineBlockConfiguration = $engineBlockConfiguration; } + /** + * @Route("/authentication/idp/metadata", name="metadata_idp", methods={"GET"}) + * @Route("/authentication/idp/metadata/key:{keyId}", name="metadata_idp_key", methods={"GET"}) + */ public function idpMetadataAction(string $keyId = null): Response { $metadataXml = $this->metadataService->metadataForIdp($keyId); @@ -59,7 +64,11 @@ public function idpMetadataAction(string $keyId = null): Response return $response; } - public function spMetadataAction(string $keyId): Response + /** + * @Route("/authentication/sp/metadata", name="metadata_sp", methods={"GET"}) + * @Route("/authentication/sp/metadata/key:{keyId}", name="metadata_sp_key", methods={"GET"}) + */ + public function spMetadataAction(string $keyId = ''): Response { if (empty($keyId)) { $keyId = KeyPairFactory::DEFAULT_KEY_PAIR_IDENTIFIER; @@ -73,6 +82,10 @@ public function spMetadataAction(string $keyId): Response return $response; } + /** + * @Route("/authentication/proxy/idps-metadata", name="metadata_all_idps", methods={"GET"}) + * @Route("/authentication/proxy/idps-metadata/key:{keyId}", name="metadata_all_idps_key", methods={"GET"}) + */ public function allIdpsMetadataAction(Request $request, string $keyId = null): Response { $spEntityId = $request->query->get('sp-entity-id', null); @@ -86,6 +99,10 @@ public function allIdpsMetadataAction(Request $request, string $keyId = null): R return $response; } + /** + * @Route("/authentication/stepup/metadata", name="metadata_stepup", methods={"GET"}) + * @Route("/authentication/stepup/metadata/key:{keyId}", name="metadata_stepup_key", methods={"GET"}) + */ public function stepupMetadataAction(string $keyId = null): Response { if (empty($keyId)) { @@ -100,6 +117,13 @@ public function stepupMetadataAction(string $keyId = null): Response return $response; } + /** + * TODO: SYMFONY 4.4 UPGRADE - Is it correct that both SP and IDP point to the same? It was like this in the previous config + * @Route("/authentication/idp/certificate", name="certificate_idp", methods={"GET"}) + * @Route("/authentication/idp/certificate/key:{keyId}", name="certificate_idp_key", methods={"GET"}) + * @Route("/authentication/sp/certificate", name="certificate_sp", methods={"GET"}) + * @Route("/authentication/sp/certificate/key:{keyId}", name="certificate_sp_key", methods={"GET"}) + */ public function signingCertificateAction(string $keyId = null): Response { if (empty($keyId)) { diff --git a/src/OpenConext/EngineBlockBundle/Controller/ProxyController.php b/src/OpenConext/EngineBlockBundle/Controller/ProxyController.php index d51afc5b9..358460290 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/ProxyController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/ProxyController.php @@ -21,6 +21,7 @@ use EngineBlock_ApplicationSingleton; use EngineBlock_Corto_Adapter; use OpenConext\EngineBlockBridge\ResponseFactory; +use Symfony\Component\Routing\Annotation\Route; class ProxyController { @@ -39,6 +40,8 @@ public function __construct(EngineBlock_ApplicationSingleton $engineBlockApplica /** * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response + * + * @Route("/authentication/proxy/processed-assertion", name="authentication_proxy_processed_assertion", methods={"GET","POST"}) */ public function processedAssertionAction() { diff --git a/src/OpenConext/EngineBlockBundle/Controller/ServiceProviderController.php b/src/OpenConext/EngineBlockBundle/Controller/ServiceProviderController.php index be0702c3f..229e3bf6b 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/ServiceProviderController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/ServiceProviderController.php @@ -24,6 +24,7 @@ use OpenConext\EngineBlockBridge\ResponseFactory; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Session\Session; +use Symfony\Component\Routing\Annotation\Route; class ServiceProviderController implements AuthenticationLoopThrottlingController { @@ -69,6 +70,8 @@ public function __construct( /** * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response + * + * @Route("/authentication/sp/consume-assertion", name="authentication_sp_consume_assertion", methods={"POST"}) */ public function consumeAssertionAction(Request $request) { @@ -84,6 +87,8 @@ public function consumeAssertionAction(Request $request) /** * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response + * + * @Route("/authentication/sp/process-consent", name="authentication_sp_process_consent", methods={"GET","POST"}) */ public function processConsentAction() { diff --git a/src/OpenConext/EngineBlockBundle/Controller/StepupController.php b/src/OpenConext/EngineBlockBundle/Controller/StepupController.php index bf44f8a7a..6838dd982 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/StepupController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/StepupController.php @@ -24,6 +24,7 @@ use OpenConext\EngineBlockBridge\ResponseFactory; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Session\Session; +use Symfony\Component\Routing\Annotation\Route; class StepupController implements AuthenticationLoopThrottlingController { @@ -69,6 +70,8 @@ public function __construct( /** * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response + * + * @Route("/authentication/stepup/consume-assertion", name="authentication_stepup_consume_assertion", methods={"POST"}) */ public function consumeAssertionAction(Request $request) { diff --git a/src/OpenConext/EngineBlockBundle/Controller/WayfController.php b/src/OpenConext/EngineBlockBundle/Controller/WayfController.php index 07ce836ab..589c9e279 100644 --- a/src/OpenConext/EngineBlockBundle/Controller/WayfController.php +++ b/src/OpenConext/EngineBlockBundle/Controller/WayfController.php @@ -28,7 +28,8 @@ use Psr\Log\LogLevel; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Request; -use Twig_Environment; +use Symfony\Component\Routing\Annotation\Route; +use Twig\Environment; class WayfController { @@ -37,7 +38,7 @@ class WayfController */ private $engineBlockApplicationSingleton; /** - * @var Twig_Environment + * @var Environment */ private $twig; /** @@ -56,12 +57,12 @@ class WayfController /** * @param EngineBlock_ApplicationSingleton $engineBlockApplicationSingleton - * @param Twig_Environment $twig + * @param Environment $twig * @param SsoSessionService $sessionService */ public function __construct( EngineBlock_ApplicationSingleton $engineBlockApplicationSingleton, - Twig_Environment $twig, + Environment $twig, SsoSessionService $sessionService, DiscoverySelectionService $discoverySelectionService, LoggerInterface $logger @@ -74,7 +75,7 @@ public function __construct( } /** - * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response + * @Route("/authentication/idp/process-wayf", name="authentication_wayf_process_wayf", methods={"GET", "POST"}) */ public function processWayfAction(Request $request) { @@ -101,10 +102,7 @@ public function processWayfAction(Request $request) } /** - * This method is not used in the skeune theme - * - * @return Response - * @throws \EngineBlock_Exception + * @Route("/authentication/idp/help-discover", name="authentication_wayf_help_discover", methods={"GET"}) */ public function helpDiscoverAction() { @@ -124,8 +122,7 @@ private function getCookies(): array } /** - * @return Response - * @throws \EngineBlock_Exception + * @Route("/authentication/idp/remove-cookies", name="authentication_wayf_remove_cookie", methods={"GET", "POST"}) */ public function cookieAction(Request $request) { diff --git a/src/OpenConext/EngineBlockBundle/DependencyInjection/Configuration.php b/src/OpenConext/EngineBlockBundle/DependencyInjection/Configuration.php deleted file mode 100644 index 02f5676cb..000000000 --- a/src/OpenConext/EngineBlockBundle/DependencyInjection/Configuration.php +++ /dev/null @@ -1,88 +0,0 @@ -root('open_conext_engine_block'); - - $this->appendFeatureConfiguration($root); - $this->appendErrorFeedbackConfiguration($root); - - return $treeBuilder; - } - - public function appendFeatureConfiguration(ArrayNodeDefinition $rootNode) - { - $rootNode - ->children() - ->arrayNode('features') - ->prototype('boolean') - ->example('some.feature.key: true') - ->info('Allows configuring a feature, identified by the feature key as enabled or disabled') - ->end() - ->end() - ->end(); - } - - private function appendErrorFeedbackConfiguration(ArrayNodeDefinition $rootNode) - { - $rootNode - ->children() - ->arrayNode('error_feedback') - ->children() - ->arrayNode('wiki_links') - ->children() - ->arrayNode('fallback') - ->isRequired() - ->info('Provide a fallback wiki link that is used when a language/page combination cannot be found.') - ->scalarPrototype() - ->info('Provide a URI to the default/fallback wiki page for this specific error page language combination. - Please review the example in parameter.yml.dist') - ->end() - ->end() - ->arrayNode('specified') - ->arrayPrototype() - ->info('Please specify an array of i18n language abbreviation keys, mapped to wiki links matching - that language. Example: [en => https://wiki.example.com/page1, pt => https://wiki.example.pt/page1].') - ->scalarPrototype() - ->info('Provide a URI to the wiki page for this specific error page language combination. - Please review the example in parameter.yml.dist') - ->end() - ->end() - ->end() - ->end() - ->end() - ->arrayNode('idp_contact') - ->scalarPrototype() - ->info('Specify page identifiers to show the IdP mailto link on.') - ->end() - ->end() - ->end() - ->end() - ->end(); - } -} diff --git a/src/OpenConext/EngineBlockBundle/DependencyInjection/OpenConextEngineBlockExtension.php b/src/OpenConext/EngineBlockBundle/DependencyInjection/OpenConextEngineBlockExtension.php deleted file mode 100644 index cf8aea060..000000000 --- a/src/OpenConext/EngineBlockBundle/DependencyInjection/OpenConextEngineBlockExtension.php +++ /dev/null @@ -1,90 +0,0 @@ -processConfiguration(new Configuration(), $configs); - - $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); - $loader->load('controllers.yml'); - $loader->load('event_listeners.yml'); - $loader->load('repositories.yml'); - $loader->load('services.yml'); - $loader->load('logging.yml'); - - $loader->load('bridge.yml'); - $loader->load('bridge_event_listeners.yml'); - $loader->load('compat.yml'); - - $this->overwriteDefaultLogger($container); - $this->setUrlParameterBasedOnEnv($container); - $this->setFeatureConfiguration($container, $configuration['features']); - } - - /** - * @param ContainerBuilder $container - */ - private function overwriteDefaultLogger(ContainerBuilder $container) - { - $container->removeAlias('logger'); - $container->setAlias('logger', 'monolog.logger.'.$container->getParameter('logger.channel')); - } - - /** - * @param ContainerBuilder $container - */ - private function setUrlParameterBasedOnEnv(ContainerBuilder $container) - { - if (in_array($container->getParameter('kernel.environment'), ['dev', 'test', 'ci'])) { - $container->setParameter( - 'engineblock_url', - sprintf('https://engine.%s', $container->getParameter('domain')) - ); - } - } - - /** - * Loads the feature configuration in a manner that can be dumped in the container cache - * - * @param ContainerBuilder $container - * @param array $featureConfiguration - */ - private function setFeatureConfiguration(ContainerBuilder $container, array $featureConfiguration) - { - // do note that duplicates cannot exist since the feature keys are keys in the configuration, which are - // enforced to be unique by the config component. - $features = []; - foreach ($featureConfiguration as $feature => $onOrOff) { - $features[$feature] = new Definition(Feature::class, [$feature, $onOrOff]); - } - - $featureConfigurationService = $container->getDefinition('engineblock.features'); - $featureConfigurationService->replaceArgument(0, $features); - } -} diff --git a/src/OpenConext/EngineBlockBundle/Doctrine/Type/CollabPersonIdType.php b/src/OpenConext/EngineBlockBundle/Doctrine/Type/CollabPersonIdType.php index febc11a6f..33c0a1840 100644 --- a/src/OpenConext/EngineBlockBundle/Doctrine/Type/CollabPersonIdType.php +++ b/src/OpenConext/EngineBlockBundle/Doctrine/Type/CollabPersonIdType.php @@ -81,4 +81,12 @@ public function getName() { return self::NAME; } + + /** + * @see https://github.com/doctrine/DoctrineBundle/issues/977#issuecomment-497215968 + */ + public function requiresSQLCommentHint(AbstractPlatform $platform) : bool + { + return true; + } } diff --git a/src/OpenConext/EngineBlockBundle/Doctrine/Type/CollabPersonUuidType.php b/src/OpenConext/EngineBlockBundle/Doctrine/Type/CollabPersonUuidType.php index 95c2a536a..d73c832e4 100644 --- a/src/OpenConext/EngineBlockBundle/Doctrine/Type/CollabPersonUuidType.php +++ b/src/OpenConext/EngineBlockBundle/Doctrine/Type/CollabPersonUuidType.php @@ -78,4 +78,12 @@ public function getName() { return self:: NAME; } + + /** + * @see https://github.com/doctrine/DoctrineBundle/issues/977#issuecomment-497215968 + */ + public function requiresSQLCommentHint(AbstractPlatform $platform) : bool + { + return true; + } } diff --git a/src/OpenConext/EngineBlockBundle/Doctrine/Type/MetadataCoinType.php b/src/OpenConext/EngineBlockBundle/Doctrine/Type/MetadataCoinType.php index a7d13b305..c26646cdb 100644 --- a/src/OpenConext/EngineBlockBundle/Doctrine/Type/MetadataCoinType.php +++ b/src/OpenConext/EngineBlockBundle/Doctrine/Type/MetadataCoinType.php @@ -86,4 +86,12 @@ public function getName() { return self::NAME; } + + /** + * @see https://github.com/doctrine/DoctrineBundle/issues/977#issuecomment-497215968 + */ + public function requiresSQLCommentHint(AbstractPlatform $platform) : bool + { + return true; + } } diff --git a/src/OpenConext/EngineBlockBundle/Doctrine/Type/MetadataMduiType.php b/src/OpenConext/EngineBlockBundle/Doctrine/Type/MetadataMduiType.php index 312378ad6..7e66ee1a1 100644 --- a/src/OpenConext/EngineBlockBundle/Doctrine/Type/MetadataMduiType.php +++ b/src/OpenConext/EngineBlockBundle/Doctrine/Type/MetadataMduiType.php @@ -81,4 +81,12 @@ public function getName() { return self::NAME; } + + /** + * @see https://github.com/doctrine/DoctrineBundle/issues/977#issuecomment-497215968 + */ + public function requiresSQLCommentHint(AbstractPlatform $platform) : bool + { + return true; + } } diff --git a/src/OpenConext/EngineBlockBundle/EventListener/ApiHttpExceptionListener.php b/src/OpenConext/EngineBlockBundle/EventListener/ApiHttpExceptionListener.php index 4691e7ae8..b09103296 100644 --- a/src/OpenConext/EngineBlockBundle/EventListener/ApiHttpExceptionListener.php +++ b/src/OpenConext/EngineBlockBundle/EventListener/ApiHttpExceptionListener.php @@ -22,7 +22,7 @@ use OpenConext\EngineBlockBridge\ErrorReporter; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\JsonResponse; -use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; class ApiHttpExceptionListener { @@ -46,7 +46,7 @@ public function __construct(LoggerInterface $logger, ErrorReporter $errorReporte $this->errorReporter = $errorReporter; } - public function onKernelException(GetResponseForExceptionEvent $event) + public function onKernelException(ExceptionEvent $event) { $exception = $event->getException(); diff --git a/src/OpenConext/EngineBlockBundle/EventListener/ExecutionTimePaddingListener.php b/src/OpenConext/EngineBlockBundle/EventListener/ExecutionTimePaddingListener.php index 702b8aaf2..3a37eaae4 100644 --- a/src/OpenConext/EngineBlockBundle/EventListener/ExecutionTimePaddingListener.php +++ b/src/OpenConext/EngineBlockBundle/EventListener/ExecutionTimePaddingListener.php @@ -23,7 +23,7 @@ use OpenConext\EngineBlockBundle\Value\ExecutionTime; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\RedirectResponse; -use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; final class ExecutionTimePaddingListener @@ -67,7 +67,7 @@ public function __construct( $this->minimumExecutionTime = $minimumExecutionTime; } - public function onKernelException(GetResponseForExceptionEvent $event) + public function onKernelException(ExceptionEvent $event) { $exception = $event->getException(); diff --git a/src/OpenConext/EngineBlockBundle/EventListener/FallbackExceptionListener.php b/src/OpenConext/EngineBlockBundle/EventListener/FallbackExceptionListener.php index 8fbc46f40..a166052c6 100644 --- a/src/OpenConext/EngineBlockBundle/EventListener/FallbackExceptionListener.php +++ b/src/OpenConext/EngineBlockBundle/EventListener/FallbackExceptionListener.php @@ -22,7 +22,7 @@ use OpenConext\EngineBlockBridge\ErrorReporter; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\RedirectResponse; -use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; /** @@ -66,7 +66,7 @@ public function __construct( $this->urlGenerator = $urlGenerator; } - public function onKernelException(GetResponseForExceptionEvent $event) + public function onKernelException(ExceptionEvent $event) { $exception = $event->getException(); diff --git a/src/OpenConext/EngineBlockBundle/EventListener/MethodNotAllowedHttpExceptionListener.php b/src/OpenConext/EngineBlockBundle/EventListener/MethodNotAllowedHttpExceptionListener.php index e92c4ad46..121d47ac7 100644 --- a/src/OpenConext/EngineBlockBundle/EventListener/MethodNotAllowedHttpExceptionListener.php +++ b/src/OpenConext/EngineBlockBundle/EventListener/MethodNotAllowedHttpExceptionListener.php @@ -21,14 +21,14 @@ use EngineBlock_ApplicationSingleton; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException; -use Twig_Environment; +use Twig\Environment; final class MethodNotAllowedHttpExceptionListener { /** - * @var Twig_Environment + * @var Environment */ private $twig; /** @@ -38,18 +38,18 @@ final class MethodNotAllowedHttpExceptionListener /** * @param EngineBlock_ApplicationSingleton $engineBlockApplicationSingleton - * @param Twig_Environment $twig + * @param Environment $twig * @param LoggerInterface $logger */ public function __construct( - Twig_Environment $twig, + Environment $twig, LoggerInterface $logger ) { $this->twig = $twig; $this->logger = $logger; } - public function onKernelException(GetResponseForExceptionEvent $event) + public function onKernelException(ExceptionEvent $event) { $exception = $event->getException(); if (!$exception instanceof MethodNotAllowedHttpException) { diff --git a/src/OpenConext/EngineBlockBundle/EventListener/NotFoundHttpExceptionListener.php b/src/OpenConext/EngineBlockBundle/EventListener/NotFoundHttpExceptionListener.php index 4760477e6..3fa349587 100644 --- a/src/OpenConext/EngineBlockBundle/EventListener/NotFoundHttpExceptionListener.php +++ b/src/OpenConext/EngineBlockBundle/EventListener/NotFoundHttpExceptionListener.php @@ -22,9 +22,9 @@ use OpenConext\EngineBlockBundle\Http\Exception\ApiHttpException; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Twig_Environment; +use Twig\Environment; /** * When there was nothing to dispatch to, the dispatcher invoked a 404 page. This mimics that behaviour. When @@ -34,7 +34,7 @@ class NotFoundHttpExceptionListener { /** - * @var Twig_Environment + * @var Environment */ private $twig; /** @@ -48,12 +48,12 @@ class NotFoundHttpExceptionListener /** * @param EngineBlock_ApplicationSingleton $engineBlockApplicationSingleton - * @param Twig_Environment $twig + * @param Environment $twig * @param LoggerInterface $logger */ public function __construct( EngineBlock_ApplicationSingleton $engineBlockApplicationSingleton, - Twig_Environment $twig, + Environment $twig, LoggerInterface $logger ) { $this->engineBlockApplicationSingleton = $engineBlockApplicationSingleton; @@ -61,7 +61,7 @@ public function __construct( $this->logger = $logger; } - public function onKernelException(GetResponseForExceptionEvent $event) + public function onKernelException(ExceptionEvent $event) { $exception = $event->getException(); if (!$exception instanceof NotFoundHttpException) { diff --git a/src/OpenConext/EngineBlockBundle/EventListener/RedirectToFeedbackPageExceptionListener.php b/src/OpenConext/EngineBlockBundle/EventListener/RedirectToFeedbackPageExceptionListener.php index fd332aee1..da8b28dc2 100644 --- a/src/OpenConext/EngineBlockBundle/EventListener/RedirectToFeedbackPageExceptionListener.php +++ b/src/OpenConext/EngineBlockBundle/EventListener/RedirectToFeedbackPageExceptionListener.php @@ -54,6 +54,7 @@ use OpenConext\EngineBlockBundle\Exception\UnknownKeyIdException; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\RedirectResponse; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; @@ -102,7 +103,7 @@ public function __construct( * * @SuppressWarnings(PHPMD.ExcessiveMethodLength) - See comment in class doc block */ - public function onKernelException(GetResponseForExceptionEvent $event) + public function onKernelException(ExceptionEvent $event) { $exception = $event->getException(); diff --git a/src/OpenConext/EngineBlockBundle/OpenConextEngineBlockBundle.php b/src/OpenConext/EngineBlockBundle/OpenConextEngineBlockBundle.php index 7fc184edd..272282623 100644 --- a/src/OpenConext/EngineBlockBundle/OpenConextEngineBlockBundle.php +++ b/src/OpenConext/EngineBlockBundle/OpenConextEngineBlockBundle.php @@ -28,8 +28,8 @@ public function boot() $engineBlockApplicationSingleton = EngineBlock_ApplicationSingleton::getInstance(); $engineBlockApplicationSingleton->bootstrap( $this->container->get('monolog.logger.public'), - $this->container->get('engineblock.logger.manual_or_error_activation_strategy'), - $this->container->get('engineblock.request.request_id'), + $this->container->get('OpenConext\EngineBlock\Logger\Handler\FingersCrossed\ManualOrDecoratedActivationStrategy'), + $this->container->get('OpenConext\EngineBlock\Request\RequestId'), $this->container ); } diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/bridge.yml b/src/OpenConext/EngineBlockBundle/Resources/config/bridge.yml deleted file mode 100644 index 4847baeb1..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/bridge.yml +++ /dev/null @@ -1,18 +0,0 @@ -services: - engineblock.bridge.error_reporter: - class: OpenConext\EngineBlockBridge\ErrorReporter - arguments: - - "@engineblock.compat.application" - - "@logger" - - "@session" - - engineblock.bridge.authentication_logger_adapter: - class: OpenConext\EngineBlockBridge\Logger\AuthenticationLoggerAdapter - arguments: - - "@engineblock.logger.authentication" - - engineblock.bridge.authentication.user_directory: - class: OpenConext\EngineBlockBridge\Authentication\Repository\UserDirectoryAdapter - arguments: - - "@engineblock.authentication.user_directory" - - "@logger" diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/controllers.yml b/src/OpenConext/EngineBlockBundle/Resources/config/controllers.yml deleted file mode 100644 index 842c4fc63..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/controllers.yml +++ /dev/null @@ -1,3 +0,0 @@ -imports: - - { resource: controllers/authentication.yml } - - { resource: controllers/api.yml } diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/controllers/api.yml b/src/OpenConext/EngineBlockBundle/Resources/config/controllers/api.yml deleted file mode 100644 index 03527e694..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/controllers/api.yml +++ /dev/null @@ -1,41 +0,0 @@ -services: - engineblock.controller.api.connections: - class: OpenConext\EngineBlockBundle\Controller\Api\ConnectionsController - arguments: - - "@engineblock.metadata.push_metadata_assembler" - - "@security.authorization_checker" - - "@engineblock.features" - - "@engineblock.metadata_push.repository.doctrine" - - "%engineblock.metadata_push_memory_limit%" - - engineblock.controller.api.consent: - class: OpenConext\EngineBlockBundle\Controller\Api\ConsentController - arguments: - - "@security.authorization_checker" - - "@engineblock.features" - - "@engineblock.service.consent" - - engineblock.controller.api.deprovision: - class: OpenConext\EngineBlockBundle\Controller\Api\DeprovisionController - arguments: - - "@security.authorization_checker" - - "@engineblock.features" - - "@engineblock.service.deprovision" - - 'EngineBlock' - - engineblock.controller.api.heartbeat: - class: OpenConext\EngineBlockBundle\Controller\Api\HeartbeatController - - engineblock.controller.api.metadata: - class: OpenConext\EngineBlockBundle\Controller\Api\MetadataController - arguments: - - "@security.authorization_checker" - - "@engineblock.features" - - "@engineblock.service.metadata" - - engineblock.controller.api.attribute_release_policy: - class: OpenConext\EngineBlockBundle\Controller\Api\AttributeReleasePolicyController - arguments: - - "@security.authorization_checker" - - "@engineblock.service.metadata" - - "@engineblock.compat.attribute_release_policy_enforcer" diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/controllers/authentication.yml b/src/OpenConext/EngineBlockBundle/Resources/config/controllers/authentication.yml deleted file mode 100644 index 69c9a3930..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/controllers/authentication.yml +++ /dev/null @@ -1,90 +0,0 @@ -services: - _defaults: - autowire: true - - engineblock.controller.authentication.service_provider: - class: OpenConext\EngineBlockBundle\Controller\ServiceProviderController - arguments: - - "@engineblock.compat.application" - - "@session" - - "@engineblock.validator.acs_request_validator" - - "@engineblock.validator.saml_binding_validator" - - "@engineblock.validator.saml_response_validator" - - engineblock.controller.authentication.identity_provider: - class: OpenConext\EngineBlockBundle\Controller\IdentityProviderController - arguments: - - "@engineblock.compat.application" - - "@twig" - - "@engineblock.compat.logger" - - "@engineblock.service.request_access_mailer" - - "@engineblock.validator.sso_request_validator" - - "@engineblock.validator.saml_binding_validator" - - "@engineblock.validator.unsolicited_sso_request_validator" - - "@engineblock.service.authentication_state_helper" - - "@engineblock.features" - - engineblock.controller.authentication.index: - class: OpenConext\EngineBlockBundle\Controller\IndexController - arguments: - - "@twig" - - "%encryption_keys%" - - engineblock.controller.authentication.feedback: - class: OpenConext\EngineBlockBundle\Controller\FeedbackController - arguments: - - "@translator" - - "@twig" - - "@engineblock.compat.logger" - - engineblock.controller.authentication.metadata: - class: OpenConext\EngineBlockBundle\Controller\MetadataController - arguments: - - '@OpenConext\EngineBlock\Xml\MetadataProvider' - - '@OpenConext\EngineBlock\Metadata\Factory\ValueObject\EngineBlockConfiguration' - - engineblock.controller.authentication.certificate: - class: OpenConext\EngineBlockBundle\Controller\CertificateController - arguments: - - "@engineblock.compat.application" - - engineblock.controller.authentication.debug: - class: OpenConext\EngineBlockBundle\Controller\DebugController - arguments: - - "@engineblock.compat.application" - - "@session" - - engineblock.controller.authentication.wayf: - class: OpenConext\EngineBlockBundle\Controller\WayfController - arguments: - - "@engineblock.compat.application" - - "@twig" - - "@engineblock.service.sso_session" - - "@engineblock.service.discovery_selection_service" - - "@engineblock.compat.logger" - - engineblock.controller.authentication.proxy: - class: OpenConext\EngineBlockBundle\Controller\ProxyController - arguments: - - "@engineblock.compat.application" - - engineblock.controller.authentication.stepup: - class: OpenConext\EngineBlockBundle\Controller\StepupController - arguments: - - "@engineblock.compat.application" - - "@session" - - "@engineblock.validator.acs_request_validator" - - "@engineblock.validator.saml_binding_validator" - - "@engineblock.validator.saml_response_validator" - - engineblock.controller.authentication.logout: - class: OpenConext\EngineBlockBundle\Controller\LogoutController - arguments: - - "@twig" - - "@engineblock.service.sso_session" - - engineblock.service.request_access_mailer: - class: OpenConext\EngineBlock\Service\RequestAccessMailer - arguments: - - "@mailer" - - "%email_request_access_address%" diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/event_listeners.yml b/src/OpenConext/EngineBlockBundle/Resources/config/event_listeners.yml deleted file mode 100644 index 3fa42e328..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/event_listeners.yml +++ /dev/null @@ -1,79 +0,0 @@ -# also see bridge_event_listeners.yml for event listeners that provide bridge functionality -services: - engineblock.listener.execution_time_tracker: - class: OpenConext\EngineBlockBundle\EventListener\ExecutionTimeTracker - arguments: - - "@debug.stopwatch" - tags: - - { name: kernel.event_listener, event: kernel.request, method: startTracking, priority: 1000 } - - engineblock.listener.error_response_time_padding: - class: OpenConext\EngineBlockBundle\EventListener\ExecutionTimePaddingListener - arguments: - - "@engineblock.listener.execution_time_tracker" - - "@router" - - "@engineblock.compat.logger" - - "@engineblock.bridge.error_reporter" - - "@engineblock.minimum_execution_time_on_invalid_received_response" - tags: - - { name: kernel.event_listener, event: kernel.exception, method: onKernelException, priority: 1000 } - - engineblock.listener.redirect_to_feedback_page_exception: - class: OpenConext\EngineBlockBundle\EventListener\RedirectToFeedbackPageExceptionListener - arguments: - - "@engineblock.compat.application" - - "@router" - - "@engineblock.bridge.error_reporter" - - "@engineblock.compat.logger" - tags: - - { name: kernel.event_listener, event: kernel.exception, method: onKernelException } - - engineblock.listener.api_http_exception_listener: - class: OpenConext\EngineBlockBundle\EventListener\ApiHttpExceptionListener - arguments: - - "@engineblock.compat.logger" - - "@engineblock.bridge.error_reporter" - tags: - - { name: kernel.event_listener, event: kernel.exception, method: onKernelException } - - engineblock.listener.not_found_http_exception: - class: OpenConext\EngineBlockBundle\EventListener\NotFoundHttpExceptionListener - arguments: - - "@engineblock.compat.application" - - "@twig" - - "@engineblock.compat.logger" - tags: - - { name: kernel.event_listener, event: kernel.exception, method: onKernelException, priority: 25 } - - engineblock.listener.method_not_allowed_http_exception: - class: OpenConext\EngineBlockBundle\EventListener\MethodNotAllowedHttpExceptionListener - arguments: - - "@twig" - - "@engineblock.compat.logger" - tags: - - { name: kernel.event_listener, event: kernel.exception, method: onKernelException, priority: 25 } - - engineblock.listener.fallback_exception: - class: OpenConext\EngineBlockBundle\EventListener\FallbackExceptionListener - arguments: - - "@engineblock.compat.logger" - - "@engineblock.bridge.error_reporter" - - "@router" - tags: - - { name: kernel.event_listener, event: kernel.exception, method: onKernelException, priority: -200 } - - engineblock.listener.authentication_state_initializer: - class: OpenConext\EngineBlockBundle\EventListener\AuthenticationStateInitializer - arguments: - - "@session" - tags: - - { name: kernel.event_listener, event: kernel.controller, method: onKernelController, priority: 10 } - - engineblock.listener.locale: - class: OpenConext\EngineBlockBundle\EventListener\LocaleListener - arguments: - - '@engineblock.locale_provider' - - '@engineblock.locale.cookie_factory' - tags: - - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 15 } - - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse, priority: 15 } diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/logging.yml b/src/OpenConext/EngineBlockBundle/Resources/config/logging.yml deleted file mode 100644 index 720d371c3..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/logging.yml +++ /dev/null @@ -1,45 +0,0 @@ -services: - - # Aliased the monolog logger for OpenConextEngineBlockBundle who boots the ApplicationSingleton without use of DI. - # Remove this once ApplicationSingleton is removed, or uses DI. - monolog.logger.public: - alias: 'monolog.logger' - public: true - - engineblock.logger.additional_info_formatter: - class: OpenConext\EngineBlock\Logger\Formatter\AdditionalInfoFormatter - arguments: - - "@engineblock.logger.line_formatter" - - engineblock.logger.line_formatter: - public: false - class: Monolog\Formatter\LineFormatter - arguments: - - "%logger.line_format%" - - engineblock.logger.manual_or_error_activation_strategy: - class: OpenConext\EngineBlock\Logger\Handler\FingersCrossed\ManualOrDecoratedActivationStrategy - factory: [OpenConext\EngineBlock\Logger\Handler\FingersCrossed\ManualOrErrorLevelActivationStrategyFactory, createActivationStrategy] - arguments: - - { action_level: "%logger.fingers_crossed.action_level%" } - public: true - - engineblock.logger.processor.request_id_processor: - class: OpenConext\EngineBlock\Logger\Processor\RequestIdProcessor - arguments: - - "@engineblock.request.request_id" - tags: - - { name: monolog.processor, method: processRecord } - - engineblock.logger.processor.session_id_processor: - class: OpenConext\EngineBlock\Logger\Processor\SessionIdProcessor - tags: - - { name: monolog.processor, method: processRecord } - - engineblock.logger.formatter.syslog_json: - class: OpenConext\EngineBlockBundle\Monolog\Formatter\SyslogJsonFormatter - - engineblock.logger.authentication: - class: OpenConext\EngineBlock\Logger\AuthenticationLogger - arguments: - - "@monolog.logger.authentication" diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/repositories.yml b/src/OpenConext/EngineBlockBundle/Resources/config/repositories.yml deleted file mode 100644 index ee2b295bd..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/repositories.yml +++ /dev/null @@ -1,43 +0,0 @@ -services: - engineblock.repository.consent: - public: false - class: OpenConext\EngineBlockBundle\Authentication\Repository\DbalConsentRepository - arguments: - - "@engineblock.compat.doctrine.dbal_connection" - - "@logger" - - engineblock.repository.user: - public: false - class: OpenConext\EngineBlockBundle\Authentication\Repository\UserRepository - factory: ["@doctrine.orm.entity_manager", getRepository] - arguments: - - 'OpenConext\EngineBlockBundle\Authentication\Entity\User' - - engineblock.repository.saml_persistent_id: - public: false - class: OpenConext\EngineBlockBundle\Authentication\Repository\SamlPersistentIdRepository - factory: ["@doctrine.orm.entity_manager", getRepository] - arguments: - - 'OpenConext\EngineBlockBundle\Authentication\Entity\SamlPersistentId' - - - engineblock.repository.service_provider_uuid: - public: false - class: OpenConext\EngineBlockBundle\Authentication\Repository\ServiceProviderUuidRepository - factory: ["@doctrine.orm.entity_manager", getRepository] - arguments: - - 'OpenConext\EngineBlockBundle\Authentication\Entity\ServiceProviderUuid' - - engineblock.repository.service_provider: - public: false - class: Doctrine\ORM\EntityRepository - factory: ["@doctrine.orm.entity_manager", getRepository] - arguments: - - 'OpenConext\EngineBlock\Metadata\Entity\ServiceProvider' - - engineblock.repository.identity_provider: - public: false - class: Doctrine\ORM\EntityRepository - factory: ["@doctrine.orm.entity_manager", getRepository] - arguments: - - 'OpenConext\EngineBlock\Metadata\Entity\IdentityProvider' diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/routing.yml b/src/OpenConext/EngineBlockBundle/Resources/config/routing.yml deleted file mode 100644 index 51be6ad67..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/routing.yml +++ /dev/null @@ -1,33 +0,0 @@ -open_conext_engine_block_authentication_homepage: - path: / - defaults: { _controller: engineblock.controller.authentication.index:indexAction } - -authentication_sp_debug: - path: /authentication/sp/debug - methods: [GET,POST] - defaults: - _controller: engineblock.controller.authentication.debug:debugSpConnectionAction - -authentication_proxy_processed_assertion: - path: /authentication/proxy/processed-assertion - methods: [GET,POST] - defaults: - _controller: engineblock.controller.authentication.proxy:processedAssertionAction - -identity_provider: - resource: routing/identity_provider.yml - -service_provider: - resource: routing/service_provider.yml - -metadata: - resource: routing/metadata.yml - -feedback: - resource: routing/feedback.yml - -wayf: - resource: routing/wayf.yml - -logout: - resource: routing/logout.yml diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/routing/feedback.yml b/src/OpenConext/EngineBlockBundle/Resources/config/routing/feedback.yml deleted file mode 100644 index 2f8017d97..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/routing/feedback.yml +++ /dev/null @@ -1,159 +0,0 @@ -feedback_unknown_error: - path: '/feedback/unknown-error' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:unknownErrorAction } - -authentication_feedback_unable_to_receive_message: - path: '/authentication/feedback/unable-to-receive-message' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:unableToReceiveMessageAction } - -authentication_feedback_session_lost: - path: '/authentication/feedback/session-lost' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:sessionLostAction } - -authentication_feedback_session_not_started: - path: '/authentication/feedback/session-not-started' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:sessionNotStartedAction } - -authentication_feedback_no_idps: - path: '/authentication/feedback/no-idps' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:noIdpsAction } - -authentication_feedback_invalid_acs_location: - path: '/authentication/feedback/invalidAcsLocation' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:invalidAcsLocationAction } - -authentication_feedback_unsupported_signature_method: - path: '/authentication/feedback/unsupportedSignatureMethod' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:unsupportedSignatureMethodAction } - -authentication_feedback_unsupported_acs_location_uri_scheme: - path: '/authentication/feedback/unsupported-acs-location-scheme' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:unsupportedAcsLocationSchemeAction } - -authentication_feedback_unknown_service_provider: - path: '/authentication/feedback/unknown-service-provider' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:unknownServiceProviderAction } - -authentication_feedback_unknown_identity_provider: - path: '/authentication/feedback/unknown-identity-provider' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:unknownIdentityProviderAction } - -authentication_feedback_unknown_signing_key: - path: '/authentication/feedback/unknown-signing-key' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:unknownSigningKeyAction } - -authentication_feedback_missing_required_fields: - path: '/authentication/feedback/missing-required-fields' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:missingRequiredFieldsAction } - -authentication_authn_context_class_ref_blacklisted: - path: '/authentication/feedback/authn-context-class-ref-blacklisted' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:authnContextClassRefBlacklistedAction } - -authentication_invalid_mfa_authn_context_class_ref: - path: '/authentication/feedback/invalid-mfa-authn-context-class-ref' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:invalidMfAuthnContextClassRefAction } - -authentication_feedback_invalid_attribute_value: - path: '/authentication/feedback/invalid-attribute-value' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:invalidAttributeValueAction } - -authentication_feedback_custom: - path: '/authentication/feedback/custom' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:customAction } - -authentication_feedback_invalid_acs_binding: - path: '/authentication/feedback/invalid-acs-binding' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:invalidAcsBindingAction } - -authentication_feedback_received_error_status_code: - path: '/authentication/feedback/received-error-status-code' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:receivedErrorStatusCodeAction } - -authentication_feedback_signature_verification_failed: - path: '/authentication/feedback/received-invalid-signed-response' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:signatureVerificationFailedAction } - -authentication_feedback_verification_failed: - path: '/authentication/feedback/received-invalid-response' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:receivedInvalidResponseAction } - -authentication_feedback_unknown_requesterid_in_authnrequest: - path: '/authentication/feedback/unknown_requesterid_in_authnrequest' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:unknownRequesterIdInAuthnRequestAction } - -authentication_feedback_pep_violation: - path: '/authentication/feedback/authorization-policy-violation' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:authorizationPolicyViolationAction } - -authentication_feedback_unknown_keyid: - path: '/authentication/feedback/unknown-keyid' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:unknownKeyIdAction } - -authentication_feedback_unknown_preselected_idp: - path: '/authentication/feedback/unknown-preselected-idp' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:unknownPreselectedIdpAction } - -authentication_feedback_stuck_in_authentication_loop: - path: '/authentication/feedback/stuck-in-authentication-loop' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:stuckInAuthenticationLoopAction } - -authentication_feedback_authentication_limit_exceeded: - path: '/authentication/feedback/authentication-limit-exceeded' - methods: [ GET ] - defaults: { _controller: engineblock.controller.authentication.feedback:authenticationLimitExceededAction } - -authentication_feedback_no_authentication_request_received: - path: '/authentication/feedback/invalid-request-method-on-sso' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:noAuthenticationRequestReceivedAction } - -authentication_feedback_response_clock_issue: - path: '/authentication/feedback/clock-issue' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:clockIssueAction } - -authentication_feedback_stepup_callout_user_cancelled: - path: '/authentication/feedback/stepup-callout-user-cancelled' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:stepupCalloutUserCancelledAction } - -authentication_feedback_stepup_callout_unmet_loa: - path: '/authentication/feedback/stepup-callout-unmet-loa' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:stepupCalloutUnmetLoaAction } - -authentication_feedback_stepup_callout_unknown: - path: '/authentication/feedback/stepup-callout-unknown' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:stepupCalloutUnknownAction } - -authentication_feedback_metadata_entity_not_found: - path: '/authentication/feedback/metadata-entity-not-found' - methods: [GET] - defaults: { _controller: engineblock.controller.authentication.feedback:metadataEntityNotFoundAction } diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/routing/identity_provider.yml b/src/OpenConext/EngineBlockBundle/Resources/config/routing/identity_provider.yml deleted file mode 100644 index 14691039c..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/routing/identity_provider.yml +++ /dev/null @@ -1,93 +0,0 @@ -# see https://github.com/OpenConext/OpenConext-engineblock/blob/cd83052a9da183ae057ba7ba3436195961a75c0c/theme/material/javascripts/application.js#L336 -authentication_idp_request_access: - path: '/authentication/idp/requestAccess' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.identity_provider:requestAccessAction - -# see https://github.com/OpenConext/OpenConext-engineblock/blob/cd83052a9da183ae057ba7ba3436195961a75c0c/theme/material/javascripts/application.js#L231 -authentication_idp_perform_request_access_two: - path: '/authentication/idp/performRequestAccess' - methods: [POST] - defaults: - _controller: engineblock.controller.authentication.identity_provider:performRequestAccessAction - -authentication_idp_process_consent: - path: '/authentication/idp/process-consent' - methods: [POST] - defaults: - _controller: engineblock.controller.authentication.identity_provider:processConsentAction - -### Sollicited - -authentication_idp_sso: - path: '/authentication/idp/single-sign-on' - methods: [GET,POST] - defaults: - _controller: engineblock.controller.authentication.identity_provider:singleSignOnAction - idpHash: ~ - keyId: ~ - -authentication_idp_sso_keyid: - path: '/authentication/idp/single-sign-on/key:{keyId}' - methods: [GET,POST] - defaults: - _controller: engineblock.controller.authentication.identity_provider:singleSignOnAction - idpHash: ~ - requirements: - idpHash: .+ - -authentication_idp_sso_keyid_idphash: - path: '/authentication/idp/single-sign-on/key:{keyId}/{idpHash}' - methods: [GET,POST] - defaults: - _controller: engineblock.controller.authentication.identity_provider:singleSignOnAction - requirements: - keyId: .+ - idpHash: .+ - -authentication_idp_sso_idphash: - path: '/authentication/idp/single-sign-on/{idpHash}' - methods: [GET,POST] - defaults: - _controller: engineblock.controller.authentication.identity_provider:singleSignOnAction - keyId: ~ - requirements: - idpHash: .+ - -### Unsollicited - -authentication_idp_unsolicited_sso: - path: '/authentication/idp/unsolicited-single-sign-on' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.identity_provider:unsolicitedSingleSignOnAction - idpHash: ~ - keyId: ~ - -authentication_idp_unsolicited_sso_keyid: - path: '/authentication/idp/unsolicited-single-sign-on/key:{keyId}' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.identity_provider:unsolicitedSingleSignOnAction - idpHash: ~ - requirements: - idpHash: .+ - -authentication_idp_unsolicited_sso_keyid_idphash: - path: '/authentication/idp/unsolicited-single-sign-on/key:{keyId}/{idpHash}' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.identity_provider:unsolicitedSingleSignOnAction - requirements: - keyId: .+ - idpHash: .+ - -authentication_idp_unsolicited_sso_idphash: - path: '/authentication/idp/unsolicited-single-sign-on/{idpHash}' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.identity_provider:unsolicitedSingleSignOnAction - keyId: ~ - requirements: - idpHash: .+ diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/routing/logout.yml b/src/OpenConext/EngineBlockBundle/Resources/config/routing/logout.yml deleted file mode 100644 index d07b9cee8..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/routing/logout.yml +++ /dev/null @@ -1,5 +0,0 @@ -authentication_logout: - path: /logout - methods: [GET,POST] # verify POST? - defaults: - _controller: engineblock.controller.authentication.logout:logoutAction diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/routing/metadata.yml b/src/OpenConext/EngineBlockBundle/Resources/config/routing/metadata.yml deleted file mode 100644 index bc33c4fa0..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/routing/metadata.yml +++ /dev/null @@ -1,99 +0,0 @@ -### Idp - -metadata_idp: - path: '/authentication/idp/metadata' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.metadata:idpMetadataAction - keyId: ~ - -metadata_idp_key: - path: '/authentication/idp/metadata/key:{keyId}' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.metadata:idpMetadataAction - requirements: - keyId: .+ - -### Sp - -metadata_sp: - path: '/authentication/sp/metadata' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.metadata:spMetadataAction - keyId: '' - -metadata_sp_key: - path: '/authentication/sp/metadata/key:{keyId}' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.metadata:spMetadataAction - requirements: - keyId: .+ - -### IdPs -metadata_all_idps: - path: '/authentication/proxy/idps-metadata' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.metadata:allIdpsMetadataAction - keyId: ~ - -metadata_all_idps_key: - path: '/authentication/proxy/idps-metadata/key:{keyId}' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.metadata:allIdpsMetadataAction - requirements: - keyId: .+ - -### Stepup -metadata_stepup: - path: '/authentication/stepup/metadata' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.metadata:stepupMetadataAction - keyId: ~ - -metadata_stepup_key: - path: '/authentication/stepup/metadata/key:{keyId}' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.metadata:stepupMetadataAction - requirements: - keyId: .+ - -### Certificate: IdP - -certificate_idp: - path: '/authentication/idp/certificate' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.metadata:signingCertificateAction - keyId: ~ - -certificate_idp_key: - path: '/authentication/idp/certificate/key:{keyId}' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.metadata:signingCertificateAction - requirements: - keyId: .+ - -## Certificate: Sp - -certificate_sp: - path: '/authentication/sp/certificate' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.metadata:signingCertificateAction - keyId: ~ - -certificate_sp_key: - path: '/authentication/sp/certificate/key:{keyId}' - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.metadata:signingCertificateAction - requirements: - keyId: .+ diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/routing/service_provider.yml b/src/OpenConext/EngineBlockBundle/Resources/config/routing/service_provider.yml deleted file mode 100644 index f6f50410a..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/routing/service_provider.yml +++ /dev/null @@ -1,18 +0,0 @@ -authentication_sp_consume_assertion: - path: /authentication/sp/consume-assertion - methods: [POST] - defaults: - _controller: engineblock.controller.authentication.service_provider:consumeAssertionAction - -authentication_sp_process_consent: - path: /authentication/sp/process-consent - methods: [GET,POST] - defaults: - _controller: engineblock.controller.authentication.service_provider:processConsentAction - -# Stepup authentication -authentication_stepup_consume_assertion: - path: /authentication/stepup/consume-assertion - methods: [POST] - defaults: - _controller: engineblock.controller.authentication.stepup:consumeAssertionAction diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/routing/wayf.yml b/src/OpenConext/EngineBlockBundle/Resources/config/routing/wayf.yml deleted file mode 100644 index fbe7946fe..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/routing/wayf.yml +++ /dev/null @@ -1,17 +0,0 @@ -authentication_wayf_process_wayf: - path: /authentication/idp/process-wayf - methods: [GET,POST] # verify GET? - defaults: - _controller: engineblock.controller.authentication.wayf:processWayfAction - -authentication_wayf_help_discover: - path: /authentication/idp/help-discover - methods: [GET] - defaults: - _controller: engineblock.controller.authentication.wayf:helpDiscoverAction - -authentication_wayf_remove_cookie: - path: /authentication/idp/remove-cookies - methods: [GET,POST] - defaults: - _controller: engineblock.controller.authentication.wayf:cookieAction diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/routing_api.yml b/src/OpenConext/EngineBlockBundle/Resources/config/routing_api.yml deleted file mode 100644 index 2ee35a9f2..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/routing_api.yml +++ /dev/null @@ -1,63 +0,0 @@ -# This routing file is separated due to being hosted on a different sub-domain -# see app/config/routing.yml -# Allowed methods are registered in the controllers so API specific exceptions are thrown - -api_heartbeat: - path: / - defaults: - _controller: engineblock.controller.api.heartbeat:itWorksAction - _format: json - -api_connections: - path: /api/connections - defaults: - _controller: engineblock.controller.api.connections:pushConnectionsAction - _format: json - -api_consent_user: - path: /consent/{userId} - requirements: - userId: .+ - defaults: - _controller: engineblock.controller.api.consent:userAction - _format: json - -api_remove_consent_user: - path: /remove-consent - defaults: - _controller: engineblock.controller.api.consent:removeAction - _format: json - -api_deprovision_delete_user_data_dry_run: - path: /deprovision/{collabPersonId}/dry-run - requirements: - collabPersonId: .+ - defaults: - _controller: engineblock.controller.api.deprovision:dryRunAction - _format: json - -api_deprovision_get_user_data: - path: /deprovision/{collabPersonId} - requirements: - collabPersonId: .+ - defaults: - _controller: engineblock.controller.api.deprovision:userDataAction - _format: json - -api_metadata_idp: - path: /metadata/idp - defaults: - _controller: engineblock.controller.api.metadata:idpAction - _format: json - -api_apply_attribute_release_policy: - path: /arp - defaults: - _controller: engineblock.controller.api.attribute_release_policy:applyArpAction - _format: json - -api_read_attribute_release_policy: - path: /read-arp - defaults: - _controller: engineblock.controller.api.attribute_release_policy:readArpAction - _format: json diff --git a/src/OpenConext/EngineBlockBundle/Resources/config/services.yml b/src/OpenConext/EngineBlockBundle/Resources/config/services.yml deleted file mode 100644 index df8b1b863..000000000 --- a/src/OpenConext/EngineBlockBundle/Resources/config/services.yml +++ /dev/null @@ -1,383 +0,0 @@ -services: - OpenConext\EngineBlock\Xml\: - resource: '../../../EngineBlock/Xml' - exclude: '../../../EngineBlock/Xml/ValueObjects' - autowire: true - autoconfigure: true - - openconext.monitor.database_health_check: - class: OpenConext\EngineBlockBundle\HealthCheck\DoctrineConnectionHealthCheck - arguments: - - "%monitor_database_health_check_query%" - calls: - - [ setEntityManager, ['@?doctrine.orm.entity_manager']] - tags: - - { name: openconext.monitor.health_check } - - engineblock.minimum_execution_time_on_invalid_received_response: - class: OpenConext\EngineBlockBundle\Value\ExecutionTime - factory: [ OpenConext\EngineBlockBundle\Value\ExecutionTime, "of" ] - arguments: - - "%minimum_execution_time_on_invalid_received_response%" - - engineblock.configuration.stepup.endpoint: - class: OpenConext\EngineBlock\Stepup\StepupEndpoint - arguments: - - "%stepup.gateway.sfo.entity_id%" - - "%stepup.gateway.sfo.sso_location%" - - "%stepup.gateway.sfo.key_file%" - - engineblock.configuration.stepup.loa_repository: - class: OpenConext\EngineBlock\Metadata\LoaRepository - arguments: - - "%stepup.loa.mapping%" - - engineblock.configuration.stepup.gateway_loa_mapping: - class: OpenConext\EngineBlock\Stepup\StepupGatewayLoaMapping - arguments: - - "%stepup.loa.mapping%" - - "%stepup.loa.loa1%" - - "@engineblock.configuration.stepup.loa_repository" - - engineblock.request.request_id_generator: - public: false - class: OpenConext\EngineBlock\Request\UniqidGenerator - - engineblock.request.request_id: - class: OpenConext\EngineBlock\Request\RequestId - arguments: - - "@engineblock.request.request_id_generator" - public: true - - engineblock.security.http_basic_entry_point: - class: OpenConext\EngineBlockBundle\Security\Http\EntryPoint\JsonBasicAuthenticationEntryPoint - arguments: - - "engine-api.%domain%" - - engineblock.service.authentication_state_helper: - class: OpenConext\EngineBlock\Service\AuthenticationStateHelper - arguments: - - "@session" - - engineblock.service.processing_state_helper: - class: OpenConext\EngineBlock\Service\ProcessingStateHelper - arguments: - - "@session" - - engineblock.service.stepup.gateway_callout_helper: - class: OpenConext\EngineBlock\Stepup\StepupGatewayCallOutHelper - arguments: - - "@engineblock.configuration.stepup.gateway_loa_mapping" - - "@engineblock.configuration.stepup.loa_repository" - - "@logger" - - engineblock.service.consent: - class: OpenConext\EngineBlock\Service\ConsentService - arguments: - - "@engineblock.repository.consent" - - "@engineblock.service.metadata" - - "@engineblock.compat.logger" - - engineblock.service.deprovision: - class: OpenConext\EngineBlock\Service\DeprovisionService - arguments: - - "@engineblock.repository.consent" - - "@engineblock.authentication.user_directory" - - "@engineblock.repository.saml_persistent_id" - - "@engineblock.repository.service_provider_uuid" - - engineblock.service.metadata: - class: OpenConext\EngineBlock\Service\MetadataService - arguments: - - "@engineblock.compat.repository.metadata" - - "@engineblock.compat.logger" - - engineblock.service.mfa_helper: - class: OpenConext\EngineBlock\Service\MfaHelper - arguments: - - "@engineblock.compat.logger" - - "@engineblock.metadata.repository.cached_doctrine" - - engineblock.service.time_provider: - class: OpenConext\EngineBlock\Service\TimeProvider\TimeProvider - - engineblock.service.sso_notification: - class: OpenConext\EngineBlock\Service\SsoNotificationService - arguments: - - "%sso_notification_encryption_key%" - - "%sso_notification_encryption_key_salt%" - - "%sso_notification_encryption_algorithm%" - - "@engineblock.compat.logger" - - engineblock.service.sso_session: - class: OpenConext\EngineBlock\Service\SsoSessionService - arguments: - - "%sso_session_cookie_max_age%" - - "%cookie.locale.domain%" - - "%cookie.path%" - - "@engineblock.service.cookie" - - "@engineblock.compat.logger" - - engineblock.service.cookie: - class: OpenConext\EngineBlock\Service\CookieService - - engineblock.factory.service_provider_factory: - class: OpenConext\EngineBlock\Metadata\Factory\Factory\ServiceProviderFactory - arguments: - - '@engineblock.compat.metadata.definitions' - - '@OpenConext\EngineBlock\Metadata\X509\KeyPairFactory' - - '@OpenConext\EngineBlock\Metadata\Factory\ValueObject\EngineBlockConfiguration' - - '@engineblock.url_provider' - - '@engineblock.features' - - '%stepup.sfo.override_engine_entityid%' - - OpenConext\EngineBlock\Metadata\Factory\ValueObject\EngineBlockConfiguration: - public: false - arguments: - - '@translator' - - '%email_request_access_address%' - - '%view_default_header%' - - '%hostname%' - - '%view_default_logo%' - - '%view_default_logo_width%' - - '%view_default_logo_height%' - - engineblock.factory.identity_provider_factory: - class: OpenConext\EngineBlock\Metadata\Factory\Factory\IdentityProviderFactory - arguments: - - '@OpenConext\EngineBlock\Metadata\X509\KeyPairFactory' - - '@OpenConext\EngineBlock\Metadata\Factory\ValueObject\EngineBlockConfiguration' - - '@engineblock.url_provider' - - OpenConext\EngineBlock\Xml\MetadataRenderer: - arguments: - - "@engineblock.language_support_provider" - - "@twig" - - "@engineblock.compat.saml2_id_generator" - - "@OpenConext\\EngineBlock\\Metadata\\X509\\KeyPairFactory" - - "@OpenConext\\EngineBlock\\Xml\\DocumentSigner" - - "@engineblock.service.time_provider" - - "%metadata_add_requested_attributes%" - - OpenConext\EngineBlock\Xml\MetadataProvider: - arguments: - - '@OpenConext\EngineBlock\Xml\MetadataRenderer' - - '@engineblock.factory.service_provider_factory' - - '@engineblock.factory.identity_provider_factory' - - '@OpenConext\EngineBlock\Metadata\X509\KeyPairFactory' - - '@engineblock.metadata.repository.idps_metadata' - - engineblock.authentication.user_directory: - class: OpenConext\EngineBlockBundle\Authentication\Service\UserService - arguments: - - "@engineblock.repository.user" - - engineblock.features: - class: OpenConext\EngineBlockBundle\Configuration\FeatureConfiguration - arguments: - - # replaced in the extension - - engineblock.error_feedback: - class: OpenConext\EngineBlockBundle\Configuration\ErrorFeedbackConfiguration - arguments: - - "@translator" - - engineblock.pdp.pdp_client: - class: OpenConext\EngineBlockBundle\Pdp\PdpClient - arguments: - - "@engineblock.pdp.http_client" - - "%pdp.policy_decision_point_path%" - - engineblock.pdp.http_client: - class: OpenConext\EngineBlock\Http\HttpClient - arguments: - - "@engineblock.pdp.guzzle_http_client" - - engineblock.pdp.guzzle_http_client: - class: GuzzleHttp\Client - arguments: - - base_uri: "%pdp.host%" - auth: ["%pdp.username%", "%pdp.password%", "Basic"] - # Verify CAs for certificates for prod, but not for other environments - # as we are working with self signed signatures - verify: "@=service('kernel').getEnvironment() === 'prod'" - timeout: "%http_client.timeout%" - - engineblock.authentication.authentication_loop_guard: - class: OpenConext\EngineBlockBundle\Authentication\AuthenticationLoopGuard - arguments: - - "%maximum_authentication_procedures_allowed%" - - "%time_frame_for_authentication_loop_in_seconds%" - - "%maximum_authentications_per_session%" - - engineblock.language_support_provider: - class: OpenConext\EngineBlockBundle\Localization\LanguageSupportProvider - arguments: - - ['en', 'nl', 'pt'] - - '%enabled_languages%' - - engineblock.locale_provider: - class: OpenConext\EngineBlockBundle\Localization\LocaleProvider - arguments: - - '@engineblock.language_support_provider' - - '%kernel.default_locale%' - - engineblock.url_provider: - class: OpenConext\EngineBlockBundle\Url\UrlProvider - arguments: - - '@Symfony\Component\Routing\Generator\UrlGeneratorInterface' - - engineblock.locale.cookie_factory: - class: OpenConext\EngineBlockBundle\Http\Cookies\CookieFactory - arguments: - - 'lang' - - '%cookie.locale.domain%' - - '%cookie.locale.expiry%' - - '%cookie.locale.http_only%' - - '%cookie.locale.secure%' - - OpenConext\EngineBlock\Service\ReleaseAsEnforcer: - class: OpenConext\EngineBlock\Service\ReleaseAsEnforcer - arguments: - - "@logger" - - engineblock.attribute_aggregation.client: - class: OpenConext\EngineBlockBundle\AttributeAggregation\AttributeAggregationClient - arguments: - - "@engineblock.attribute_aggregation.http_client" - - "%attribute_aggregation.base_url%" - - engineblock.attribute_aggregation.http_client: - class: OpenConext\EngineBlock\Http\HttpClient - arguments: - - "@engineblock.attribute_aggregation.guzzle_http_client" - - engineblock.attribute_aggregation.guzzle_http_client: - class: GuzzleHttp\Client - arguments: - - auth: ["%attribute_aggregation.username%", "%attribute_aggregation.password%", "Basic"] - timeout: "%http_client.timeout%" - - engineblock.metadata.repository.cached_doctrine: - class: OpenConext\EngineBlock\Metadata\MetadataRepository\CachedDoctrineMetadataRepository - arguments: - - "@engineblock.metadata.repository.doctrine" - - engineblock.metadata.repository.idps_metadata: - class: OpenConext\EngineBlock\Metadata\MetadataRepository\IdpsMetadataRepository - arguments: - - "@engineblock.metadata.repository.cached_doctrine" - - "@engineblock.factory.identity_provider_factory" - - "@engineblock.url_provider" - - OpenConext\EngineBlock\Metadata\MetadataRepository\MetadataRepositoryInterface: '@engineblock.metadata.repository.cached_doctrine' - - engineblock.metadata.repository.doctrine: - public: false - class: OpenConext\EngineBlock\Metadata\MetadataRepository\DoctrineMetadataRepository - arguments: - - "@doctrine.orm.entity_manager" - - "@engineblock.repository.service_provider" - - "@engineblock.repository.identity_provider" - - engineblock.metadata_push.repository.doctrine: - public: false - class: OpenConext\EngineBlock\Metadata\MetadataRepository\DoctrineMetadataPushRepository - arguments: - - "@doctrine.orm.entity_manager" - - engineblock.metadata.push_metadata_assembler: - public: false - class: OpenConext\EngineBlock\Metadata\Entity\Assembler\PushMetadataAssembler - arguments: - - "@engineblock.validator.allowed_scheme_validator" - - "@engineblock.language_support_provider" - - "@engineblock.compat.logger" - - OpenConext\EngineBlock\Metadata\X509\KeyPairFactory: - arguments: - - '%encryption_keys%' - - engineblock.validator.allowed_scheme_validator: - class: OpenConext\EngineBlock\Validator\AllowedSchemeValidator - arguments: - - "%allowed_acs_location_schemes%" - - engineblock.validator.saml_binding_validator: - class: OpenConext\EngineBlock\Validator\SamlBindingValidator - - engineblock.validator.acs_request_validator: - class: OpenConext\EngineBlock\Validator\AcsRequestValidator - - engineblock.validator.sso_request_validator: - class: OpenConext\EngineBlock\Validator\SsoRequestValidator - - engineblock.validator.unsolicited_sso_request_validator: - class: OpenConext\EngineBlock\Validator\UnsolicitedSsoRequestValidator - - engineblock.validator.saml_response_validator: - class: OpenConext\EngineBlock\Validator\SamlResponseValidator - - OpenConext\EngineBlockBundle\Authentication\Service\SamlResponseHelper: - class: OpenConext\EngineBlockBundle\Authentication\Service\SamlResponseHelper - arguments: - - "@engineblock.metadata.repository.cached_doctrine" - - engineblock.twig.extension.debug: - class: OpenConext\EngineBlockBundle\Twig\Extensions\Extension\Debug - tags: - - { name: 'twig.extension' } - - engineblock.twig.extension.feedback: - class: OpenConext\EngineBlockBundle\Twig\Extensions\Extension\Feedback - arguments: - - "@engineblock.compat.application" - - "@engineblock.error_feedback" - - "@engineblock.compat.repository.metadata" - - "@OpenConext\\EngineBlockBundle\\Authentication\\Service\\SamlResponseHelper" - tags: - - { name: 'twig.extension' } - - engineblock.twig.extension.global_site_notice: - class: OpenConext\EngineBlockBundle\Twig\Extensions\Extension\GlobalSiteNotice - arguments: - - "%global.site_notice.show%" - - "%global.site_notice.allowed.tags%" - - "@translator" - tags: - - { name: 'twig.extension' } - - engineblock.twig.extension.i18n: - class: OpenConext\EngineBlockBundle\Twig\Extensions\Extension\I18n - arguments: - - "@translator" - tags: - - { name: 'twig.extension' } - - engineblock.twig.extension.locale: - class: OpenConext\EngineBlockBundle\Twig\Extensions\Extension\Locale - arguments: - - "@request_stack" - - "@engineblock.language_support_provider" - - "%locale%" - tags: - - { name: 'twig.extension' } - - engineblock.twig.extension.metadata: - class: OpenConext\EngineBlockBundle\Twig\Extensions\Extension\Metadata - arguments: - - "@engineblock.compat.metadata.definitions" - - "@translator" - tags: - - { name: 'twig.extension' } - - engineblock.twig.extension.wayf: - class: OpenConext\EngineBlockBundle\Twig\Extensions\Extension\Wayf - arguments: - - "@request_stack" - - "@translator" - tags: - - { name: 'twig.extension' } - - engineblock.service.discovery_selection_service: - class: OpenConext\EngineBlockBundle\Service\DiscoverySelectionService diff --git a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Debug.php b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Debug.php index ec6648e3b..4ac430409 100644 --- a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Debug.php +++ b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Debug.php @@ -18,13 +18,13 @@ namespace OpenConext\EngineBlockBundle\Twig\Extensions\Extension; +use Twig\Extension\AbstractExtension; use Twig\TwigFunction; -use Twig_Extension; /** * The debug extension is used to provide var_dump, var_export and print_r functions for usage in Twig templates. */ -class Debug extends Twig_Extension +class Debug extends AbstractExtension { public function getFunctions() { diff --git a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Feedback.php b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Feedback.php index 761740848..73c958c76 100644 --- a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Feedback.php +++ b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Feedback.php @@ -28,10 +28,10 @@ use OpenConext\EngineBlockBundle\Value\FeedbackInformation; use OpenConext\EngineBlockBundle\Value\FeedbackInformationMap; use SAML2\XML\saml\Issuer; +use Twig\Extension\AbstractExtension; use Twig\TwigFunction; -use Twig_Extension; -class Feedback extends Twig_Extension +class Feedback extends AbstractExtension { /** * @var EngineBlock_ApplicationSingleton diff --git a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/FunctionalTestingGlobalSiteNotice.php b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/FunctionalTestingGlobalSiteNotice.php index 85f137e28..093f5e8cf 100644 --- a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/FunctionalTestingGlobalSiteNotice.php +++ b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/FunctionalTestingGlobalSiteNotice.php @@ -19,10 +19,10 @@ namespace OpenConext\EngineBlockBundle\Twig\Extensions\Extension; use Symfony\Component\HttpFoundation\RequestStack; +use Twig\Extension\AbstractExtension; use Twig\TwigFunction; -use Twig_Extension; -class FunctionalTestingGlobalSiteNotice extends Twig_Extension implements GlobalSiteNoticeInterface +class FunctionalTestingGlobalSiteNotice extends AbstractExtension implements GlobalSiteNoticeInterface { private $request; diff --git a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/GlobalSiteNotice.php b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/GlobalSiteNotice.php index ea783e336..c13bb9bab 100644 --- a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/GlobalSiteNotice.php +++ b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/GlobalSiteNotice.php @@ -19,10 +19,10 @@ namespace OpenConext\EngineBlockBundle\Twig\Extensions\Extension; use Symfony\Component\Translation\TranslatorInterface; +use Twig\Extension\AbstractExtension; use Twig\TwigFunction; -use Twig_Extension; -class GlobalSiteNotice extends Twig_Extension +class GlobalSiteNotice extends AbstractExtension { /** * @var bool diff --git a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/I18n.php b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/I18n.php index 5eb5444b5..e555800fb 100644 --- a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/I18n.php +++ b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/I18n.php @@ -18,13 +18,12 @@ namespace OpenConext\EngineBlockBundle\Twig\Extensions\Extension; -use Twig_Extensions_Extension_I18n; -use Symfony\Component\Translation\TranslatorInterface; -use Twig_SimpleFilter; +use Twig\Extension\AbstractExtension; +use Twig\TwigFilter; +use Symfony\Contracts\Translation\TranslatorInterface; -class I18n extends Twig_Extensions_Extension_I18n +class I18n extends AbstractExtension { - /** * @var TranslatorInterface */ @@ -35,55 +34,35 @@ public function __construct(TranslatorInterface $translator) $this->translator = $translator; } - /** - * Returns a list of filters to add to the existing list. - * - * @return array An array of filters - */ public function getFilters() { - return array( - new Twig_SimpleFilter('trans', array($this, 'translateSingular')), - new Twig_SimpleFilter('transchoice', array($this, 'translatePlural')), - ); + return [ + new TwigFilter('trans', [$this, 'translateSingular']), + new TwigFilter('transchoice', [$this, 'translatePlural']), + ]; } - /** - * @return string - */ - public function translateSingular() + public function translateSingular($id, array $parameters = [], $domain = null, $locale = null) { - $args = func_get_args(); - return call_user_func_array( - [$this->translator, 'trans'], - $this->prepareDefaultPlaceholders($args) - ); + $parameters = $this->addDefaultPlaceholders($parameters); + return $this->translator->trans($id, $parameters, $domain, $locale); } - /** - * @return string - */ - public function translatePlural() + public function translatePlural($id, $count, array $parameters = [], $domain = null, $locale = null) { - $args = func_get_args(); - return call_user_func_array( - [$this->translator, 'transChoice'], - $this->prepareDefaultPlaceholders($args) - ); + $parameters = $this->addDefaultPlaceholders($parameters); + $parameters['%count%'] = $count; + return $this->translator->trans($id, $parameters, $domain, $locale); } - /** - * @param array $args - * @return array - */ - private function prepareDefaultPlaceholders(array $args) + private function addDefaultPlaceholders(array $parameters) { - $args[1]['%suiteName%'] = $this->translator->trans('suite_name'); - $args[1]['%supportUrl%'] = $this->translator->trans('openconext_support_url'); - $args[1]['%organisationNoun%'] = $this->translator->trans('organisation_noun'); - $args[1]['%organisationNounPlural%'] = $this->translator->trans('organisation_noun_plural'); - $args[1]['%accountNoun%'] = $this->translator->trans('account_noun'); + $parameters['%suiteName%'] = $this->translator->trans('suite_name'); + $parameters['%supportUrl%'] = $this->translator->trans('openconext_support_url'); + $parameters['%organisationNoun%'] = $this->translator->trans('organisation_noun'); + $parameters['%organisationNounPlural%'] = $this->translator->trans('organisation_noun_plural'); + $parameters['%accountNoun%'] = $this->translator->trans('account_noun'); - return $args; + return $parameters; } } diff --git a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Locale.php b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Locale.php index c616c8c4c..944b13b7c 100644 --- a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Locale.php +++ b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Locale.php @@ -21,14 +21,14 @@ use OpenConext\EngineBlockBundle\Localization\LanguageSupportProvider; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; +use Twig\Extension\AbstractExtension; use Twig\TwigFunction; -use Twig_Extension; /** * The Locale extension can be used to retrieve the currently active locale. By default returns the locale that * can be found in the RequestStack. If none can be found in the request stack, the default locale is returned. */ -class Locale extends Twig_Extension +class Locale extends AbstractExtension { /** * @var string diff --git a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Metadata.php b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Metadata.php index 5ff5b490f..0a62ecb3f 100644 --- a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Metadata.php +++ b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Metadata.php @@ -22,14 +22,14 @@ use OpenConext\Value\Saml\NameIdFormat; use SAML2\XML\saml\NameID; use Symfony\Component\Translation\TranslatorInterface; +use Twig\Extension\AbstractExtension; use Twig\TwigFunction; -use Twig_Extension; /** * Used to perform certain view related operations on metadata. For example this extension provides a function that * can sort metadata by display order. */ -class Metadata extends Twig_Extension +class Metadata extends AbstractExtension { /** * @var string diff --git a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Wayf.php b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Wayf.php index 586de6097..038679013 100644 --- a/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Wayf.php +++ b/src/OpenConext/EngineBlockBundle/Twig/Extensions/Extension/Wayf.php @@ -22,10 +22,10 @@ use OpenConext\EngineBlockBundle\Service\IdpHistoryService; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Translation\TranslatorInterface; +use Twig\Extension\AbstractExtension; use Twig\TwigFunction; -use Twig_Extension; -class Wayf extends Twig_Extension +class Wayf extends AbstractExtension { const PREVIOUS_SELECTION_COOKIE_NAME = 'selectedidps'; const REMEMBER_CHOICE_COOKIE_NAME = 'rememberchoice'; diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/ConsentController.php b/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/ConsentController.php index 4e6bf19b6..94bea032e 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/ConsentController.php +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/ConsentController.php @@ -23,19 +23,22 @@ use SAML2\XML\saml\NameID; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Twig_Environment; +use Twig\Environment; +use Twig\Error\LoaderError; +use Twig\Error\RuntimeError; +use Twig\Error\SyntaxError; use function base64_encode; class ConsentController { /** - * @var Twig_Environment + * @var Environment */ private $twig; public function __construct( - Twig_Environment $twig + Environment $twig ) { $this->twig = $twig; } @@ -56,9 +59,9 @@ public function sendAction() /** * @param Request $request * @return Response - * @throws \Twig\Error\LoaderError - * @throws \Twig\Error\RuntimeError - * @throws \Twig\Error\SyntaxError + * @throws LoaderError + * @throws RuntimeError + * @throws SyntaxError */ public function consentAction(Request $request) { diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/FeedbackController.php b/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/FeedbackController.php index 85e639499..e813f01b9 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/FeedbackController.php +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/FeedbackController.php @@ -19,17 +19,17 @@ namespace OpenConext\EngineBlockFunctionalTestingBundle\Controllers; use Psr\Log\LoggerInterface; -use Symfony\Bundle\FrameworkBundle\Controller\Controller; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Translation\TranslatorInterface; -use Twig_Environment; +use Symfony\Contracts\Translation\TranslatorInterface; +use Twig\Environment; /** * @package OpenConext\EngineBlockFunctionalTestingBundle\Controllers * @SuppressWarnings("PMD") */ -class FeedbackController extends Controller +class FeedbackController extends AbstractController { /** * @var TranslatorInterface @@ -37,7 +37,7 @@ class FeedbackController extends Controller private $translator; /** - * @var Twig_Environment + * @var Environment */ private $twig; @@ -48,7 +48,7 @@ class FeedbackController extends Controller public function __construct( TranslatorInterface $translator, - Twig_Environment $twig, + Environment $twig, LoggerInterface $logger ) { $this->translator = $translator; diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/StepupMockController.php b/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/StepupMockController.php index 87b8a55dd..30dd32c0e 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/StepupMockController.php +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/StepupMockController.php @@ -26,7 +26,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; -use Twig_Environment; +use Twig\Environment; class StepupMockController extends Controller { @@ -35,11 +35,11 @@ class StepupMockController extends Controller */ private $mockStepupGateway; /** - * @var Twig_Environment + * @var Environment */ private $twig; - public function __construct(MockStepupGateway $mockStepupGateway, Twig_Environment $twig) + public function __construct(MockStepupGateway $mockStepupGateway, Environment $twig) { $this->mockStepupGateway = $mockStepupGateway; $this->twig = $twig; diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/WayfController.php b/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/WayfController.php index 349ed7cc3..2bfe3bc18 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/WayfController.php +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Controllers/WayfController.php @@ -23,7 +23,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Security\Core\Exception\AccessDeniedException; -use Twig_Environment; +use Twig\Environment; /** * @package OpenConext\EngineBlockFunctionalTestingBundle\Controllers @@ -33,7 +33,7 @@ class WayfController extends Controller { private $twig; - public function __construct(Twig_Environment $twig) + public function __construct(Environment $twig) { $this->twig = $twig; } diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/DependencyInjection/OpenConextEngineBlockFunctionalTestingExtension.php b/src/OpenConext/EngineBlockFunctionalTestingBundle/DependencyInjection/OpenConextEngineBlockFunctionalTestingExtension.php deleted file mode 100644 index 0d8504acd..000000000 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/DependencyInjection/OpenConextEngineBlockFunctionalTestingExtension.php +++ /dev/null @@ -1,35 +0,0 @@ -load('services.yml'); - $loader->load('mocks.yml'); - $loader->load('controllers.yml'); - } -} diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/AttributeManipulation.feature b/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/AttributeManipulation.feature index 7286403e2..6317c301c 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/AttributeManipulation.feature +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/AttributeManipulation.feature @@ -192,7 +192,7 @@ Feature: When I give my consent And I pass through EngineBlock Then the url should match "functional-testing/SP-with-Attribute-Manipulations/acs" - And the response should match xpath '/samlp:Response/saml:Assertion/saml:AttributeStatement/saml:Attribute[@Name="urn:mace:dir:attribute-def:uid"]/saml:AttributeValue[text()="https://engine.dev.openconext.local/authentication/idp/single-sign-on"]' + And the response should match xpath '/samlp:Response/saml:Assertion/saml:AttributeStatement/saml:Attribute[@Name="urn:mace:dir:attribute-def:uid"]/saml:AttributeValue[text()="/authentication/idp/single-sign-on"]' Scenario: The manipulation reduces a multivalued attribute to a single value Given the IdP "Dummy-IdP" sends attribute "urn:mace:dir:attribute-def:eduPersonAffiliation" with values "student,faculty,guest,member" and xsi:type is "xs:string" diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/Context/MinkContext.php b/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/Context/MinkContext.php index 97c7b7097..49c536378 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/Context/MinkContext.php +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/Context/MinkContext.php @@ -44,7 +44,7 @@ class MinkContext extends BaseMinkContext */ public function putDebugCookie() { - $driver = $this->getSession()->getDriver(); + $driver = $this->getSession(); $driver->setCookie('XDEBUG_SESSION', 'PHPSTORM'); } @@ -235,6 +235,9 @@ public function iShouldNotSeeUrl($url) */ public function iOpenTwoBrowserTabsIdentifiedBy($numberOfTabs, $tabNames) { + $this->getMink()->getSession()->restart(); + $this->windows = []; // Reset the windows array to avoid confusion with previous tests + $tabs = explode(',', $tabNames); if (count($tabs) != $numberOfTabs) { throw new RuntimeException( @@ -243,17 +246,23 @@ public function iOpenTwoBrowserTabsIdentifiedBy($numberOfTabs, $tabNames) } foreach ($tabs as $tab) { + $windowsNames = $this->getMink()->getSession()->getWindowNames(); + if (!$windowsNames) { + throw new RuntimeException('The windows where not opened correctly.'); + } + $this->getMink() ->getSession() - ->executeScript("window.open('/','_blank');"); + ->executeScript("window.open('about:blank','_blank');"); - $windowsNames = $this->getSession()->getWindowNames(); + $newWindows = array_diff($this->getMink()->getSession()->getWindowNames(), $windowsNames); - if (!$windowsNames) { - throw new RuntimeException('The windows where not opened correctly.'); + if (count($newWindows) != 1) { + throw new RuntimeException('The new windows where not opened correctly.'); } + // Grab the window name (which is the last one added to the window list) - $windowName = array_pop($windowsNames); + $windowName = array_pop($newWindows); // Keep track of the opened windows in order allow switching between them $this->windows[trim($tab)] = $windowName; } diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/MultipleSingleSignOn.feature b/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/MultipleSingleSignOn.feature index 8af069603..cfbcd2906 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/MultipleSingleSignOn.feature +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/MultipleSingleSignOn.feature @@ -1,4 +1,4 @@ -@selenium +@functional Feature: In order to offer a stable and user friendly service As EngineBlock @@ -11,10 +11,10 @@ Feature: And an Identity Provider named "SSO-IdP" And a Service Provider named "SSO-SP" And a Service Provider named "SSO-Two" - And I open 2 browser tabs identified by "Browser tab 1, Browser tab 2" Scenario: Two solicited authentication requests sequential - When I switch to "Browser tab 1" + When I open 2 browser tabs identified by "Browser tab 1, Browser tab 2" + And I switch to "Browser tab 1" And I log in at "SSO-SP" And I pass through the SP And I give my consent @@ -26,7 +26,8 @@ Feature: Then the url should match "functional-testing/SSO-Two/acs" Scenario: Two solicited authentication requests mixed - When I switch to "Browser tab 1" + When I open 2 browser tabs identified by "Browser tab 1, Browser tab 2" + And I switch to "Browser tab 1" And I log in at "SSO-SP" And I pass through the SP And I switch to "Browser tab 2" @@ -39,7 +40,8 @@ Feature: Then the url should match "functional-testing/SSO-SP/acs" Scenario: One solicited and one unsolicited authentication requests - When I switch to "Browser tab 1" + When I open 2 browser tabs identified by "Browser tab 1, Browser tab 2" + And I switch to "Browser tab 1" And I log in at "SSO-SP" And I pass through the SP And I switch to "Browser tab 2" diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/StepupKeyRollover.feature b/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/StepupKeyRollover.feature index 84b0e7122..a2d476ea5 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/StepupKeyRollover.feature +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Features/StepupKeyRollover.feature @@ -23,7 +23,6 @@ Feature: Scenario: When stepup.sfo.override_engine_entityid is configured with a valid EntityId, stepup/metadata should show that EntityId Given feature "eb.stepup.sfo.override_engine_entityid" is enabled When I go to Engineblock URL "/authentication/stepup/metadata" - Then print last response Then the response should match xpath '//md:EntityDescriptor[@entityID="https://engine.dev.openconext.local/new/stepup/metadata"]' # Note that we can not ascertain programatically if the Issuer is updated as this is an internal diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Fixtures/FunctionalTestingFeatureConfiguration.php b/src/OpenConext/EngineBlockFunctionalTestingBundle/Fixtures/FunctionalTestingFeatureConfiguration.php index 819558f56..80c3f5cbd 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Fixtures/FunctionalTestingFeatureConfiguration.php +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Fixtures/FunctionalTestingFeatureConfiguration.php @@ -28,7 +28,7 @@ final class FunctionalTestingFeatureConfiguration implements FeatureConfigurationInterface { /** - * @var FeatureConfiguration + * @var TestFeatureConfiguration */ private $featureConfiguration; @@ -42,7 +42,7 @@ final class FunctionalTestingFeatureConfiguration implements FeatureConfiguratio */ private $dataStore; - public function __construct(FeatureConfigurationInterface $featureConfiguration, AbstractDataStore $dataStore) + public function __construct(TestFeatureConfiguration $featureConfiguration, AbstractDataStore $dataStore) { $this->featureConfiguration = $featureConfiguration; $this->dataStore = $dataStore; diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Mock/FakeUserDirectory.php b/src/OpenConext/EngineBlockFunctionalTestingBundle/Mock/FakeUserDirectory.php index 4b59aa41a..8919b0e8d 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Mock/FakeUserDirectory.php +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Mock/FakeUserDirectory.php @@ -70,7 +70,7 @@ public function __construct(Filesystem $filesystem) } $users = json_decode($content, true); - array_walk($users, function (&$user) { + array_walk($users, function (&$user): void { $user = new User( new CollabPersonId($user['collab_person_id']), new CollabPersonUuid($user['collab_person_uuid']) @@ -165,7 +165,7 @@ private function saveToDisk() $filePath = self::$directory . self::$fileName; $users = $this->users; - array_walk($users, function (&$user) { + array_walk($users, function (&$user): void { $user = [ 'collab_person_id' => $user->getCollabPersonId()->getCollabPersonId(), 'collab_person_uuid' => $user->getCollabPersonUuid()->getUuid() diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Mock/MockStepupGateway.php b/src/OpenConext/EngineBlockFunctionalTestingBundle/Mock/MockStepupGateway.php index 21ea574f6..58b0f14ab 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Mock/MockStepupGateway.php +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Mock/MockStepupGateway.php @@ -188,7 +188,7 @@ private function parseRequest(Request $request, $fullRequestUri) // Catch any errors gzinflate triggers $errorNo = $errorMessage = null; - set_error_handler(function ($number, $message) use (&$errorNo, &$errorMessage) { + set_error_handler(function ($number, $message) use (&$errorNo, &$errorMessage): void { $errorNo = $number; $errorMessage = $message; }); diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Mock/MockTranslator.php b/src/OpenConext/EngineBlockFunctionalTestingBundle/Mock/MockTranslator.php index b670cf36d..d0aa8e986 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Mock/MockTranslator.php +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Mock/MockTranslator.php @@ -20,7 +20,7 @@ use OpenConext\EngineBlockFunctionalTestingBundle\Fixtures\DataStore\AbstractDataStore; use Symfony\Component\Translation\DataCollectorTranslator; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; final class MockTranslator implements TranslatorInterface { diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Resources/config/controllers.yml b/src/OpenConext/EngineBlockFunctionalTestingBundle/Resources/config/controllers.yml deleted file mode 100644 index 109fbf965..000000000 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Resources/config/controllers.yml +++ /dev/null @@ -1,48 +0,0 @@ -services: - engineblock.functional_test.controller.identity_provider: - class: OpenConext\EngineBlockFunctionalTestingBundle\Controllers\IdentityProviderController - arguments: - - "@engineblock.mock_entities.idp_registry" - - "@engineblock.mock_entities.saml_response_factory" - - engineblock.functional_test.controller.service_provider: - class: OpenConext\EngineBlockFunctionalTestingBundle\Controllers\ServiceProviderController - arguments: - - "@engineblock.mock_entities.sp_registry" - - "@engineblock.functional_testing.service.engine_block" - - engineblock.functional_test.controller.wayf: - class: OpenConext\EngineBlockFunctionalTestingBundle\Controllers\WayfController - arguments: - - "@twig" - - engineblock.functional_test.controller.feedback: - class: OpenConext\EngineBlockFunctionalTestingBundle\Controllers\FeedbackController - arguments: - - "@translator" - - "@twig" - - "@engineblock.compat.logger" - - engineblock.functional_test.controller.consent: - class: OpenConext\EngineBlockFunctionalTestingBundle\Controllers\ConsentController - arguments: - - "@twig" - - engineblock.functional_test.controller.stepup_mock: - class: OpenConext\EngineBlockFunctionalTestingBundle\Controllers\StepupMockController - arguments: - - "@engineblock.mock_clients.mock_stepup_gateway" - - "@twig" - - engineblock.controller.authentication.identity_provider: - class: OpenConext\EngineBlockBundle\Controller\IdentityProviderController - arguments: - - "@engineblock.compat.application" - - "@twig" - - "@engineblock.compat.logger" - - "@engineblock.service.request_access_mailer" - - "@engineblock.validator.sso_request_validator" - - "@engineblock.validator.saml_binding_validator" - - "@engineblock.validator.unsolicited_sso_request_validator" - - "@engineblock.service.authentication_state_helper" - - "@engineblock.functional_testing.fixture.features" diff --git a/src/OpenConext/EngineBlockFunctionalTestingBundle/Service/EngineBlock.php b/src/OpenConext/EngineBlockFunctionalTestingBundle/Service/EngineBlock.php index 4a946a563..946e9b207 100644 --- a/src/OpenConext/EngineBlockFunctionalTestingBundle/Service/EngineBlock.php +++ b/src/OpenConext/EngineBlockFunctionalTestingBundle/Service/EngineBlock.php @@ -31,19 +31,13 @@ class EngineBlock const UNSOLICITED_SSO_START_PATH = '/authentication/idp/unsolicited-single-sign-on/%s'; const LOGOUT = '/logout'; - protected $baseUrl; - - /** - * @param $baseUrl - */ - public function __construct($baseUrl) + public function __construct() { - $this->baseUrl = $baseUrl; } public function idpEntityId() { - return $this->baseUrl . self::IDP_METADATA_PATH; + return self::IDP_METADATA_PATH; } public function transparentSsoLocation($idpEntityId) @@ -53,7 +47,7 @@ public function transparentSsoLocation($idpEntityId) public function singleSignOnLocation() { - return $this->baseUrl . self::SINGLE_SIGN_ON_PATH; + return self::SINGLE_SIGN_ON_PATH; } public function unsolicitedLocation($identityProviderEntityId, $serviceProviderEntityId, $keyId = false) @@ -62,30 +56,28 @@ public function unsolicitedLocation($identityProviderEntityId, $serviceProviderE if ($keyId) { $keyParameter = sprintf('key:%s/', $keyId); } - return $this->baseUrl - . sprintf(self::UNSOLICITED_SSO_START_PATH, $keyParameter . md5($identityProviderEntityId)) + return sprintf(self::UNSOLICITED_SSO_START_PATH, $keyParameter . md5($identityProviderEntityId)) . '?sp-entity-id=' . urlencode($serviceProviderEntityId); } public function unsolicitedLocationInvalidParam($identityProviderEntityId, $serviceProviderEntityId) { - return $this->baseUrl - . sprintf(self::UNSOLICITED_SSO_START_PATH, md5($identityProviderEntityId)) + return sprintf(self::UNSOLICITED_SSO_START_PATH, md5($identityProviderEntityId)) . '?wrong-parameter=' . urlencode($serviceProviderEntityId); } public function spEntityId() { - return $this->baseUrl . self::SP_METADATA_PATH; + return self::SP_METADATA_PATH; } public function assertionConsumerLocation() { - return $this->baseUrl . self::ASSERTION_CONSUMER_PATH; + return self::ASSERTION_CONSUMER_PATH; } public function logoutLocation() { - return $this->baseUrl . self::LOGOUT; + return self::LOGOUT; } } diff --git a/tests/behat-ci.yml b/tests/behat-ci.yml deleted file mode 100644 index 551a4c081..000000000 --- a/tests/behat-ci.yml +++ /dev/null @@ -1,91 +0,0 @@ -default: - autoload: - - '%paths.base%/../src/OpenConext/EngineBlockFunctionalTestingBundle/Features/Context' - - suites: - default: - paths: - - '%paths.base%/../src/OpenConext/EngineBlockFunctionalTestingBundle/Features' - formatter: - name: progress - filters: - tags: "~@WIP&&~@SKIP&&~@selenium" - contexts: &defaultContexts - - OpenConext\EngineBlockFunctionalTestingBundle\Features\Context\EngineBlockContext: - serviceRegistry: '@engineblock.functional_testing.fixture.service_registry' - engineBlock: '@engineblock.functional_testing.service.engine_block' - mockSpRegistry: '@engineblock.mock_entities.sp_registry' - mockIdpRegistry: '@engineblock.mock_entities.idp_registry' - features: '@engineblock.functional_testing.fixture.features' - pdpClient: '@engineblock.functional_testing.fixture.pdp_client' - authenticationLoopGuard: '@engineblock.functional_testing.fixture.authentication_loop_guard' - attributeAggregationClient: '@engineblock.functional_testing.fixture.attribute_aggregation_client' - - OpenConext\EngineBlockFunctionalTestingBundle\Features\Context\MockIdpContext: - serviceRegistryFixture: '@engineblock.functional_testing.fixture.service_registry' - engineBlock: '@engineblock.functional_testing.service.engine_block' - idpFactory: '@engineblock.mock_entities.idp_factory' - mockIdpRegistry: '@engineblock.mock_entities.idp_registry' - mockSpRegistry: '@engineblock.mock_entities.sp_registry' - - OpenConext\EngineBlockFunctionalTestingBundle\Features\Context\MockSpContext: - serviceRegistryFixture: '@engineblock.functional_testing.fixture.service_registry' - engineBlock: '@engineblock.functional_testing.service.engine_block' - mockSpFactory: '@engineblock.mock_entities.sp_factory' - mockSpRegistry: '@engineblock.mock_entities.sp_registry' - mockIdpRegistry: '@engineblock.mock_entities.idp_registry' - - OpenConext\EngineBlockFunctionalTestingBundle\Features\Context\StepupContext: - mockSpRegistry: '@engineblock.mock_entities.sp_registry' - mockIdpRegistry: '@engineblock.mock_entities.idp_registry' - gatewayMockConfiguration: '@engineblock.functional_testing.fixture.stepup_gateway_mock' - serviceRegistryFixture: '@engineblock.functional_testing.fixture.service_registry' - - OpenConext\EngineBlockFunctionalTestingBundle\Features\Context\MfaEntitiesContext: - mockSpRegistry: '@engineblock.mock_entities.sp_registry' - mockIdpRegistry: '@engineblock.mock_entities.idp_registry' - serviceRegistryFixture: '@engineblock.functional_testing.fixture.service_registry' - - OpenConext\EngineBlockFunctionalTestingBundle\Features\Context\TranslationContext: - mockTranslator: '@engineblock.functional_testing.mock.translator' - - OpenConext\EngineBlockFunctionalTestingBundle\Features\Context\MinkContext - selenium: - mink_session: chrome - mink_javascript_session: chrome - paths: - - '%paths.base%/../src/OpenConext/EngineBlockFunctionalTestingBundle/Features' - formatter: - name: progress - filters: - tags: "@selenium&&~@SKIP&&~@WIP" - contexts: *defaultContexts - wip: - paths: - - '%paths.base%/../src/OpenConext/EngineBlockFunctionalTestingBundle/Features' - formatter: - name: pretty - parameters: - verbose: true - filters: - tags: "@WIP&&~@SKIP&&~@selenium" - contexts: *defaultContexts - - extensions: - Behat\MinkExtension: - base_url: https://engine.dev.openconext.local/ - goutte: ~ - sessions: - default: - goutte: - guzzle_parameters: - verify: false - chrome: - selenium2: - browser: chrome - wd_host: http://selenium.dev.openconext.local:4444/wd/hub - capabilities: - chrome: - switches: - - "--headless" - - "--disable-gpu" - - "--window-size=1920,1080" - - "--no-sandbox" - Behat\Symfony2Extension: - kernel: - env: ci - debug: true diff --git a/tests/behat.yml b/tests/behat.yml index cfa9d6fc8..b5c33a808 100644 --- a/tests/behat.yml +++ b/tests/behat.yml @@ -1,7 +1,6 @@ default: - autoload: - - '%paths.base%/../src/OpenConext/EngineBlockFunctionalTestingBundle/Features/Context' - +# autoload: +# - '%paths.base%/../src/OpenConext/EngineBlockFunctionalTestingBundle/Features/Context' suites: default: paths: @@ -9,7 +8,7 @@ default: formatter: name: progress filters: - tags: "~@WIP&&~@SKIP&&~@selenium" + tags: "~@WIP&&~@SKIP&&~@functional" contexts: &defaultContexts - OpenConext\EngineBlockFunctionalTestingBundle\Features\Context\EngineBlockContext: serviceRegistry: '@engineblock.functional_testing.fixture.service_registry' @@ -44,7 +43,7 @@ default: - OpenConext\EngineBlockFunctionalTestingBundle\Features\Context\TranslationContext: mockTranslator: '@engineblock.functional_testing.mock.translator' - OpenConext\EngineBlockFunctionalTestingBundle\Features\Context\MinkContext - selenium: + functional: mink_session: chrome mink_javascript_session: chrome paths: @@ -52,7 +51,7 @@ default: formatter: name: progress filters: - tags: "@selenium&&~@SKIP&&~@WIP" + tags: "@functional&&~@SKIP&&~@WIP" contexts: *defaultContexts wip: paths: @@ -62,11 +61,13 @@ default: parameters: verbose: true filters: - tags: "@WIP&&~@SKIP&&~@selenium" + tags: "@WIP&&~@SKIP&&~@functional" contexts: *defaultContexts extensions: + DMore\ChromeExtension\Behat\ServiceContainer\ChromeExtension: ~ Behat\MinkExtension: + browser_name: chrome base_url: https://engine.dev.openconext.local/ goutte: ~ sessions: @@ -75,19 +76,10 @@ default: guzzle_parameters: verify: false chrome: - selenium2: - browser: chrome - wd_host: http://127.0.0.1:4444/wd/hub - capabilities: - chrome: - switches: - - "--headless" - - "--disable-gpu" - - "--window-size=1920,1080" - - "--no-sandbox" - - "--disable-dev-shm-usage" - Behat\Symfony2Extension: + chrome: + api_url: http://chrome.dev.openconext.local:9222 + + FriendsOfBehat\SymfonyExtension: kernel: - env: ci + environment: ci debug: true - diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 2ed28ce79..5ada1266f 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -18,9 +18,8 @@ define('TEST_RESOURCES_DIR', dirname(__FILE__) . '/resources'); -require_once realpath(__DIR__) . '/../app/autoload.php'; -require_once realpath(__DIR__) . '/../app/AppKernel.php'; +require_once realpath(__DIR__) . '/../vendor/autoload.php'; +require_once realpath(__DIR__) . '/../src/Kernel.php'; -$kernel = new AppKernel('test', true); -$kernel->loadClassCache(); +$kernel = new \App\Kernel('test', true); $kernel->boot(); diff --git a/tests/e2e/cypress.config.js b/tests/e2e/cypress.config.js index c3d1079b7..265e940c1 100644 --- a/tests/e2e/cypress.config.js +++ b/tests/e2e/cypress.config.js @@ -1,55 +1,44 @@ const { defineConfig } = require("cypress"); +const htmlvalidate = require("cypress-html-validate/plugin"); module.exports = defineConfig({ - - e2e: { - excludeSpecPattern: [ - "**/__snapshots__/*", - "**/__image_snapshots__/*", - "**/unit-tests/**" - ], - screenshotOnRunFailure: false, - setupNodeEvents: function (on, config) { - const htmlvalidate = require('cypress-html-validate/plugin'); - - htmlvalidate.install(on, { - "rules": { - "prefer-button": "off", - "prefer-native-element": ["error", { - "exclude": ["button"], - }], - "require-sri": ["error", { - "target": "crossorigin", - }], - }, - }); - - module.exports = (on, config) => { - - // debug a11y in ci - on('task', { - log(message) { - console.log(message); - - return null; - }, - table(message) { - console.table(message); - - return null; - }, - 'htmlvalidate:options'(opts) { - console.log(opts); - return null; - - } - }); - - return config; - }; - - }, - specPattern: "./cypress/integration/**/*.spec.js", - "video": false - }, + e2e: { + excludeSpecPattern: [ + "**/__snapshots__/*", + "**/__image_snapshots__/*", + "**/unit-tests/**" + ], + specPattern: "./cypress/integration/**/*.spec.js", + screenshotOnRunFailure: false, + video: false, + + setupNodeEvents(on, config) { + // 🧪 Install htmlvalidate plugin + htmlvalidate.install(on, { + rules: { + "prefer-button": "off", + "prefer-native-element": ["error", { + exclude: ["button"] + }], + "require-sri": ["error", { + target: "crossorigin" + }] + } + }); + + // Custom logging tasks + on("task", { + log(message) { + console.log(message); + return null; + }, + table(message) { + console.table(message); + return null; + } + }); + + return config; + } + } }); diff --git a/tests/e2e/cypress/integration/openconext/wayf/WayfMouseBehaviour.spec.js b/tests/e2e/cypress/integration/openconext/wayf/WayfMouseBehaviour.spec.js index f662ea4b2..11a0f92fa 100644 --- a/tests/e2e/cypress/integration/openconext/wayf/WayfMouseBehaviour.spec.js +++ b/tests/e2e/cypress/integration/openconext/wayf/WayfMouseBehaviour.spec.js @@ -24,7 +24,7 @@ context('WayfMouseBehaviour', () => { cy.get('a.result.active.access:nth-child(1)').click({force:true}); // We visit the fake IdP, verify the right redirect is performed cy.location().should((loc) => { - expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https%3A//example.com/entityId/1'); + expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https://example.com/entityId/1'); }); // Go back to the WAYF cy.visit('https://engine.dev.openconext.local/functional-testing/wayf?connectedIdps=10&displayUnconnectedIdpsWayf=true&unconnectedIdps=5'); @@ -32,7 +32,7 @@ context('WayfMouseBehaviour', () => { cy.get('a.result.active.access:nth-child(2)').click({force:true}); // We visit the fake IdP, verify the right redirect is performed cy.location().should((loc) => { - expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https%3A//example.com/entityId/2'); + expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https://example.com/entityId/2'); }); // Go back to the WAYF cy.visit('https://engine.dev.openconext.local/functional-testing/wayf?connectedIdps=10&displayUnconnectedIdpsWayf=true&unconnectedIdps=5'); diff --git a/tests/e2e/cypress/integration/shared/cookieRemoval.a11y.spec.js b/tests/e2e/cypress/integration/shared/cookieRemoval.a11y.spec.js index 11d84e6a0..636b92f07 100644 --- a/tests/e2e/cypress/integration/shared/cookieRemoval.a11y.spec.js +++ b/tests/e2e/cypress/integration/shared/cookieRemoval.a11y.spec.js @@ -1,5 +1,5 @@ /** - * This doesn't run in CI, which is why it's skipped. You can run it locally by setting the wayf.remember_choice flag to true in parameters.yml. + * This doesn't run in CI, which is why it's skipped. You can run it locally by setting the wayf.remember_choice flag to true in parameters.yaml. */ context.skip('Cookie removal page verify a11y', () => { beforeEach(() => { diff --git a/tests/e2e/cypress/integration/skeune/wayf/wayf.keyboard.spec.js b/tests/e2e/cypress/integration/skeune/wayf/wayf.keyboard.spec.js index a09e3b404..e0da11ad3 100644 --- a/tests/e2e/cypress/integration/skeune/wayf/wayf.keyboard.spec.js +++ b/tests/e2e/cypress/integration/skeune/wayf/wayf.keyboard.spec.js @@ -35,7 +35,7 @@ context('WAYF when using the keyboard', () => { .focus() .type('{enter}'); cy.location().should((loc) => { - expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https%3A//example.com/entityId/2'); + expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https://example.com/entityId/2'); }); cy.visit('https://engine.dev.openconext.local/functional-testing/wayf'); }); @@ -45,7 +45,7 @@ context('WAYF when using the keyboard', () => { cy.get(searchFieldSelector) .type('{enter}'); cy.location().should((loc) => { - expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https%3A//example.com/entityId/1'); + expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https://example.com/entityId/1'); }); }); @@ -55,7 +55,7 @@ context('WAYF when using the keyboard', () => { .type('2') .type('{enter}'); cy.location().should((loc) => { - expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https%3A//example.com/entityId/2'); + expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https://example.com/entityId/2'); }); }); }); @@ -219,12 +219,16 @@ context('WAYF when using the keyboard', () => { cy.addOnePreviouslySelectedIdp(); cy.selectFirstIdp(false, selectedIdpDataIndex1); cy.location().should((loc) => { - expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https%3A//example.com/entityId/1'); + expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https://example.com/entityId/1'); }); }); it('Test if the count was raised on the selected idp', () => { cy.addOnePreviouslySelectedIdp(); + cy.get(selectedIdpDataIndex1).should('have.attr', 'data-count', '1'); + cy.selectFirstIdp(false, selectedIdpDataIndex1); + cy.loadWayf(); + cy.get(selectedIdpDataIndex1).should('have.attr', 'data-count', '2'); cy.selectFirstIdp(false, selectedIdpDataIndex1); cy.loadWayf(); cy.get(selectedIdpDataIndex1).should('have.attr', 'data-count', '3'); diff --git a/tests/e2e/cypress/integration/skeune/wayf/wayf.mouse.spec.js b/tests/e2e/cypress/integration/skeune/wayf/wayf.mouse.spec.js index 43d79e03d..bb018989d 100644 --- a/tests/e2e/cypress/integration/skeune/wayf/wayf.mouse.spec.js +++ b/tests/e2e/cypress/integration/skeune/wayf/wayf.mouse.spec.js @@ -12,7 +12,7 @@ context('WAYF when using the mouse', () => { .eq(1) .click({force: true}); cy.location().should((loc) => { - expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https%3A//example.com/entityId/2'); + expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https://example.com/entityId/2'); }); cy.visit('https://engine.dev.openconext.local/functional-testing/wayf'); }); @@ -123,7 +123,7 @@ context('WAYF when using the mouse', () => { cy.addOnePreviouslySelectedIdp(false); cy.selectFirstIdp(true, selectedIdpDataIndex1); cy.location().should((loc) => { - expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https%3A//example.com/entityId/1'); + expect(loc.href).to.eq('https://engine.dev.openconext.local/?idp=https://example.com/entityId/1'); }); }); diff --git a/tests/e2e/cypress/support/commands.js b/tests/e2e/cypress/support/commands.js index 89a22e3a6..9d979c842 100644 --- a/tests/e2e/cypress/support/commands.js +++ b/tests/e2e/cypress/support/commands.js @@ -77,7 +77,7 @@ Cypress.Commands.add('selectFirstIdp', (click = true, firstElementSelector = '.w return; } - cy.get(firstElementSelector).type('{enter}', {force: true}); + cy.get(firstElementSelector).focus().type('{enter}', {force: true}); }); Cypress.Commands.add('selectFirstIdpAndReturn', (click = true, url = 'https://engine.dev.openconext.local/functional-testing/wayf') => { diff --git a/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/AttributeReleasePolicyControllerApiTest.php b/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/AttributeReleasePolicyControllerApiTest.php index 11f585f16..0e47a8111 100644 --- a/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/AttributeReleasePolicyControllerApiTest.php +++ b/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/AttributeReleasePolicyControllerApiTest.php @@ -473,7 +473,7 @@ private function createServiceProviderWithArp($entityId, AttributeReleasePolicy private function addServiceProviderFixture(ServiceProvider $serviceProvider) { - $em = $this->getContainer()->get('doctrine')->getEntityManager(); + $em = $this->getContainer()->get('doctrine')->getManager(); $em->persist($serviceProvider); $em->flush(); } diff --git a/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/ConnectionsControllerTest.php b/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/ConnectionsControllerTest.php index 304e2f4b8..b07366276 100644 --- a/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/ConnectionsControllerTest.php +++ b/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/ConnectionsControllerTest.php @@ -21,7 +21,6 @@ use OpenConext\EngineBlock\Metadata\Entity\IdentityProvider; use OpenConext\EngineBlock\Metadata\Entity\ServiceProvider; use OpenConext\EngineBlock\Metadata\StepupConnections; -use OpenConext\EngineBlockBundle\Configuration\Feature; use OpenConext\EngineBlockBundle\Configuration\FeatureConfiguration; use Symfony\Bundle\FrameworkBundle\Client; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; @@ -424,10 +423,10 @@ private function getContainer() : ContainerInterface private function disableMetadataPushApiFeatureFor(Client $client) { - $featureToggles = new FeatureConfiguration([ - 'api.metadata_push' => new Feature('api.metadata_push', false) + $mock = new FeatureConfiguration([ + 'api.metadata_push' => false, ]); - $client->getContainer()->set('engineblock.features', $featureToggles); + $client->getContainer()->set('OpenConext\\EngineBlockBundle\\Configuration\\FeatureConfiguration', $mock); } private function clearMetadataFixtures() diff --git a/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/ConsentControllerTest.php b/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/ConsentControllerTest.php index 66e03cb55..ffb653abe 100644 --- a/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/ConsentControllerTest.php +++ b/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/ConsentControllerTest.php @@ -408,11 +408,11 @@ public function cannot_access_the_remove_consent_api_if_the_feature_has_been_dis */ private function disableRemoveConsentApiFeatureFor(Client $client) { - $featureToggles = new FeatureConfiguration([ - 'api.consent_remove' => new Feature('api.consent_remove', false), - 'eb.feature_enable_consent' => new Feature('eb.feature_enable_consent', true), + $mock = new FeatureConfiguration([ + 'api.consent_remove' => false, + 'eb.feature_enable_consent' => true, ]); - $client->getContainer()->set('engineblock.features', $featureToggles); + $client->getContainer()->set('OpenConext\\EngineBlockBundle\\Configuration\\FeatureConfiguration', $mock); } /** @@ -502,21 +502,22 @@ private function getContainer() : ContainerInterface private function disableConsentApiFeatureFor(Client $client) { - $featureToggles = new FeatureConfiguration([ - 'api.consent_listing' => new Feature('api.consent_listing', false), - 'eb.feature_enable_consent' => new Feature('eb.feature_enable_consent', false), + $mock = new FeatureConfiguration([ + 'api.consent_listing' => false, + 'eb.feature_enable_consent' => false, ]); - $container = $client->getContainer(); - $container->set('engineblock.features', $featureToggles); + //$client->disableReboot(); + $client->getContainer()->set('OpenConext\\EngineBlockBundle\\Configuration\\FeatureConfiguration', $mock); } private function disableEngineConsentFeatureFor(Client $client) { - $featureToggles = new FeatureConfiguration([ - 'eb.feature_enable_consent' => new Feature('eb.feature_enable_consent', false) + $mock = new FeatureConfiguration([ + 'eb.feature_enable_consent' => false ]); - $container = $client->getContainer(); - $container->set('engineblock.features', $featureToggles); + //$client->disableReboot(); + $client->getContainer()->set('OpenConext\\EngineBlockBundle\\Configuration\\FeatureConfiguration', $mock); + } /** @@ -613,7 +614,7 @@ private function findConsentByUserIdAndSPEntityId(string $collabPersonId, string private function addServiceProviderFixture(ServiceProvider $serviceProvider) { - $em = $this->getContainer()->get('doctrine')->getEntityManager(); + $em = $this->getContainer()->get('doctrine')->getManager(); $em->persist($serviceProvider); $em->flush(); } diff --git a/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/DeprovisionControllerTest.php b/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/DeprovisionControllerTest.php index 50d912270..0d871c0c2 100644 --- a/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/DeprovisionControllerTest.php +++ b/tests/functional/OpenConext/EngineBlockBundle/Controller/Api/DeprovisionControllerTest.php @@ -19,7 +19,6 @@ namespace OpenConext\EngineBlockBundle\Tests; use DateTime; -use OpenConext\EngineBlockBundle\Configuration\Feature; use OpenConext\EngineBlockBundle\Configuration\FeatureConfiguration; use Symfony\Bundle\FrameworkBundle\Client; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; @@ -312,10 +311,10 @@ private function getContainer() : ContainerInterface */ private function disableDeprovisionApiFeatureFor(Client $client) { - $featureToggles = new FeatureConfiguration([ - 'api.deprovision' => new Feature('api.deprovision', false) + $mock = new FeatureConfiguration([ + 'api.deprovision' => false ]); - $client->getContainer()->set('engineblock.features', $featureToggles); + $client->getContainer()->set('OpenConext\\EngineBlockBundle\\Configuration\\FeatureConfiguration', $mock); } /** diff --git a/tests/integration/OpenConext/EngineBlockBundle/ExecutionTimeTrackerTest.php b/tests/integration/OpenConext/EngineBlockBundle/ExecutionTimeTrackerTest.php index ea2b467c4..e61adc1a0 100644 --- a/tests/integration/OpenConext/EngineBlockBundle/ExecutionTimeTrackerTest.php +++ b/tests/integration/OpenConext/EngineBlockBundle/ExecutionTimeTrackerTest.php @@ -24,9 +24,6 @@ use Symfony\Bridge\PhpUnit\ClockMock; use Symfony\Component\Stopwatch\Stopwatch; -// in order to be in control of time during our tests with the Stopwatch, we use the Symfony's ClockMock -require_once ENGINEBLOCK_FOLDER_VENDOR . '/symfony/symfony/src/Symfony/Bridge/PhpUnit/ClockMock.php'; - class ExecutionTimeTrackerTest extends TestCase { public static function setUpBeforeClass(): void diff --git a/tests/library/EngineBlock/Test/Corto/Module/Service/ProcessConsentTest.php b/tests/library/EngineBlock/Test/Corto/Module/Service/ProcessConsentTest.php index 0bb4976f8..0bfaa0bc8 100644 --- a/tests/library/EngineBlock/Test/Corto/Module/Service/ProcessConsentTest.php +++ b/tests/library/EngineBlock/Test/Corto/Module/Service/ProcessConsentTest.php @@ -32,6 +32,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; +use Twig\Environment; class EngineBlock_Test_Corto_Module_Service_ProcessConsentTest extends TestCase { @@ -167,7 +168,7 @@ public function testResponseIsSent() { private function mockProxyServer() { // Mock twig, a dependency of proxy server - $twigMock = Phake::mock(Twig_Environment::class); + $twigMock = Phake::mock(Environment::class); // Mock proxy server $_SERVER['HTTP_HOST'] = 'test-host'; diff --git a/tests/library/EngineBlock/Test/Corto/Module/Service/ProvideConsentTest.php b/tests/library/EngineBlock/Test/Corto/Module/Service/ProvideConsentTest.php index 5696c4886..827cec55e 100644 --- a/tests/library/EngineBlock/Test/Corto/Module/Service/ProvideConsentTest.php +++ b/tests/library/EngineBlock/Test/Corto/Module/Service/ProvideConsentTest.php @@ -38,6 +38,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; +use Twig\Environment; class EngineBlock_Test_Corto_Module_Service_ProvideConsentTest extends TestCase { @@ -58,7 +59,7 @@ class EngineBlock_Test_Corto_Module_Service_ProvideConsentTest extends TestCase /** @var EngineBlock_Corto_ProxyServer */ private $proxyServerMock; - /** @var Twig_Environment */ + /** @var Environment */ private $twig; /** @var AuthenticationStateHelperInterface|Mock */ @@ -171,7 +172,7 @@ public function testConsentIsSkippedWhenDisabledPerSp() private function mockProxyServer() { // Mock twig, a dependency of proxy server - $twigMock = Phake::mock(Twig_Environment::class); + $twigMock = Phake::mock(Environment::class); // Mock proxy server /** @var EngineBlock_Corto_ProxyServer $proxyServerMock */ $proxyServerMock = Phake::partialMock('EngineBlock_Corto_ProxyServer', $twigMock); @@ -314,7 +315,7 @@ private function mockAuthStateHelper() private function mockTwig() { - $mock = Phake::mock(\Twig\Environment::class); + $mock = Phake::mock(Environment::class); Phake::when($mock) ->render(Phake::anyParameters()) ->thenReturn(''); diff --git a/tests/library/EngineBlock/Test/Corto/ProxyServerTest.php b/tests/library/EngineBlock/Test/Corto/ProxyServerTest.php index 49750aa48..e20dcd7ac 100644 --- a/tests/library/EngineBlock/Test/Corto/ProxyServerTest.php +++ b/tests/library/EngineBlock/Test/Corto/ProxyServerTest.php @@ -22,6 +22,7 @@ use PHPUnit\Framework\TestCase; use SAML2\AuthnRequest; use Surfnet\SamlBundle\Signing\KeyPair; +use Twig\Environment; /** * Note: this Test only tests setting of NameIDFormat, add other tests if required @@ -30,7 +31,7 @@ class EngineBlock_Test_Corto_ProxyServerTest extends TestCase { use MockeryPHPUnitIntegration; - public function testNameIDFormatIsNotSetByDefault() + public function testDefaultNameIDPolicy() { $proxyServer = $this->factoryProxyServer(); @@ -44,40 +45,7 @@ public function testNameIDFormatIsNotSetByDefault() ); $nameIdPolicy = $enhancedRequest->getNameIdPolicy(); - - $this->assertNotContains( - 'Format', - array_keys($nameIdPolicy), - 'The NameIDPolicy should not contain the key "Format"', - false, - true, - true - ); - } - - public function testAllowCreateIsSet() - { - $proxyServer = $this->factoryProxyServer(); - - $originalRequest = $this->factoryOriginalRequest(); - $identityProvider = $proxyServer->getRepository()->fetchIdentityProviderByEntityId('testIdp'); - /** @var AuthnRequest $enhancedRequest */ - $enhancedRequest = EngineBlock_Saml2_AuthnRequestFactory::createFromRequest( - $originalRequest, - $identityProvider, - $proxyServer - ); - - $nameIdPolicy = $enhancedRequest->getNameIdPolicy(); - - $this->assertContains( - 'AllowCreate', - array_keys($nameIdPolicy), - 'The NameIDPolicy should contain the key "AllowCreate"', - false, - true, - true - ); + $this->assertSame(['AllowCreate' => true], $nameIdPolicy); } public function testNameIDFormatIsSetFromRemoteMetaData() @@ -150,7 +118,7 @@ private function factoryOriginalRequest() private function factoryProxyServer() { - $twig = Mockery::mock(Twig_Environment::class); + $twig = Mockery::mock(Environment::class); $proxyServer = new EngineBlock_Corto_ProxyServer($twig); $proxyServer->setRepository(new InMemoryMetadataRepository( diff --git a/tests/phpunit.xml b/tests/phpunit.xml index dba0abea9..dcc1a840d 100644 --- a/tests/phpunit.xml +++ b/tests/phpunit.xml @@ -29,7 +29,7 @@ - + diff --git a/tests/unit/OpenConext/EngineBlock/Service/SsoNotificationServiceTest.php b/tests/unit/OpenConext/EngineBlock/Service/SsoNotificationServiceTest.php index edc88dd0a..3b3b5b469 100644 --- a/tests/unit/OpenConext/EngineBlock/Service/SsoNotificationServiceTest.php +++ b/tests/unit/OpenConext/EngineBlock/Service/SsoNotificationServiceTest.php @@ -24,8 +24,8 @@ use OpenConext\EngineBlock\Metadata\MetadataRepository\InMemoryMetadataRepository; use Phake; use PHPUnit\Framework\TestCase; +use Symfony\Bridge\Monolog\Logger; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpKernel\Tests\Logger; class SsoNotificationServiceTest extends TestCase { diff --git a/tests/unit/OpenConext/EngineBlock/Service/SsoSessionServiceTest.php b/tests/unit/OpenConext/EngineBlock/Service/SsoSessionServiceTest.php index 9b61942ce..293c1d414 100644 --- a/tests/unit/OpenConext/EngineBlock/Service/SsoSessionServiceTest.php +++ b/tests/unit/OpenConext/EngineBlock/Service/SsoSessionServiceTest.php @@ -20,8 +20,8 @@ use Phake; use PHPUnit\Framework\TestCase; +use Symfony\Bridge\Monolog\Logger; use Symfony\Component\HttpFoundation\ParameterBag; -use Symfony\Component\HttpKernel\Tests\Logger; class SsoSessionServiceTest extends TestCase { diff --git a/tests/unit/OpenConext/EngineBlock/Xml/MetadataRendererTest.php b/tests/unit/OpenConext/EngineBlock/Xml/MetadataRendererTest.php index 77a82bcd8..b33ec2944 100644 --- a/tests/unit/OpenConext/EngineBlock/Xml/MetadataRendererTest.php +++ b/tests/unit/OpenConext/EngineBlock/Xml/MetadataRendererTest.php @@ -49,6 +49,7 @@ use Symfony\Bridge\Twig\Extension\TranslationExtension; use Symfony\Component\Translation\TranslatorInterface; use Twig\Environment; +use Twig\Loader\FilesystemLoader; class MetadataRendererTest extends TestCase { @@ -314,7 +315,7 @@ private function buildMetadataRenderer(string $addRequestedAttributes) $samlIdGenerator->method('generate') ->willReturn('EB_metadata'); - $twigLoader = new \Twig_Loader_Filesystem(); + $twigLoader = new FilesystemLoader(); $twigLoader->addPath($basePath . '/theme/openconext/templates/modules', 'theme'); $environment = new Environment($twigLoader); diff --git a/tests/unit/OpenConext/EngineBlockBundle/Configuration/ErrorFeedbackConfigurationTest.php b/tests/unit/OpenConext/EngineBlockBundle/Configuration/ErrorFeedbackConfigurationTest.php index 606756af1..97859bcd2 100644 --- a/tests/unit/OpenConext/EngineBlockBundle/Configuration/ErrorFeedbackConfigurationTest.php +++ b/tests/unit/OpenConext/EngineBlockBundle/Configuration/ErrorFeedbackConfigurationTest.php @@ -21,7 +21,7 @@ use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use PHPUnit\Framework\TestCase; use Mockery as m; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class ErrorFeedbackConfigurationTest extends TestCase { diff --git a/tests/unit/OpenConext/EngineBlockBundle/Configuration/FeatureConfigurationTest.php b/tests/unit/OpenConext/EngineBlockBundle/Configuration/FeatureConfigurationTest.php index a68f9b5bf..a12ea9377 100644 --- a/tests/unit/OpenConext/EngineBlockBundle/Configuration/FeatureConfigurationTest.php +++ b/tests/unit/OpenConext/EngineBlockBundle/Configuration/FeatureConfigurationTest.php @@ -36,8 +36,8 @@ class FeatureConfigurationTest extends TestCase public function all_features_must_be_an_instance_of_feature() { $features = [ - 'some.feature' => new Feature('some.feature', true), - 'other.feature' => new Feature('other.feature', false), + 'some.feature' => true, + 'other.feature' => false, 'foo' => new stdClass() ]; @@ -54,8 +54,8 @@ public function all_features_must_be_an_instance_of_feature() public function all_features_must_have_a_string_key() { $features = [ - 'some.feature' => new Feature('some.feature', true), - 1 => new Feature('other.feature', false), + 'some.feature' => true, + 1 => false, ]; $this->expectException(InvalidArgumentException::class); @@ -71,8 +71,8 @@ public function all_features_must_have_a_string_key() public function a_feature_can_be_queried_for_presence() { $features = [ - 'some.feature' => new Feature('some.feature', true), - 'other.feature' => new Feature('other.feature', false) + 'some.feature' => true, + 'other.feature' => false ]; $featureConfiguration = new FeatureConfiguration($features); @@ -90,8 +90,8 @@ public function a_feature_can_be_queried_for_presence() public function a_feature_is_correctly_reported_to_be_enabled() { $features = [ - 'some.feature' => new Feature('some.feature', true), - 'disabled.feature' => new Feature('disabled.feature', false) + 'some.feature' => true, + 'disabled.feature' => false ]; $featureConfiguration = new FeatureConfiguration($features); @@ -108,8 +108,8 @@ public function a_feature_is_correctly_reported_to_be_enabled() public function querying_whether_a_not_configured_feature_is_enabled_causes_an_exception_to_be_thrown() { $features = [ - 'some.feature' => new Feature('some.feature', true), - 'other.feature' => new Feature('other.feature', false) + 'some.feature' => true, + 'other.feature' => false ]; $featureConfiguration = new FeatureConfiguration($features); diff --git a/theme/base/templates/layouts/scripts/default.html.twig b/theme/base/templates/layouts/scripts/default.html.twig index 440c63c0f..d9847d2a3 100644 --- a/theme/base/templates/layouts/scripts/default.html.twig +++ b/theme/base/templates/layouts/scripts/default.html.twig @@ -12,13 +12,13 @@ {% block title %}{{ defaultTitle }}{% endblock %} - {% block stylesheets %}{% spaceless %} + {% block stylesheets %}{% apply spaceless %} - {% endspaceless %}{% endblock %} + {% endapply %}{% endblock %} {% block nojs %}{% endblock %} diff --git a/theme/base/templates/layouts/scripts/language-switcher.html.twig b/theme/base/templates/layouts/scripts/language-switcher.html.twig index e58fa2e12..6260b9b2e 100644 --- a/theme/base/templates/layouts/scripts/language-switcher.html.twig +++ b/theme/base/templates/layouts/scripts/language-switcher.html.twig @@ -15,11 +15,11 @@ {% else %}
    - {% for locale in supportedLocales() %}{% spaceless %} + {% for locale in supportedLocales() %}{% apply spaceless %}
  • {{ locale | upper}}
  • - {% endspaceless %}{% endfor %} + {% endapply %}{% endfor %}
{% endif %} {% endmacro form %} diff --git a/theme/base/templates/layouts/scripts/notConverted.twig b/theme/base/templates/layouts/scripts/notConverted.twig index 959522099..a408c4064 100644 --- a/theme/base/templates/layouts/scripts/notConverted.twig +++ b/theme/base/templates/layouts/scripts/notConverted.twig @@ -3,9 +3,9 @@ {% block title %}{{ parent() }}{% if pageTitle is defined %} - {{ pageTitle }} {% endif %}{% endblock %} {% block containerClasses %}l-container wide{% endblock %} -{% block stylesheets %}{% spaceless %} +{% block stylesheets %}{% apply spaceless %} -{% endspaceless %}{% endblock %} +{% endapply %}{% endblock %} {% block header %} {% include '@theme/Default/Partials/notConverted/header.html.twig' %} diff --git a/theme/base/templates/modules/Authentication/View/Metadata/idp.xml.twig b/theme/base/templates/modules/Authentication/View/Metadata/idp.xml.twig index 1aae7a165..1640ab71e 100644 --- a/theme/base/templates/modules/Authentication/View/Metadata/idp.xml.twig +++ b/theme/base/templates/modules/Authentication/View/Metadata/idp.xml.twig @@ -1,4 +1,4 @@ -{% spaceless %} +{% apply spaceless %} @@ -30,4 +30,4 @@ {% endif %} -{% endspaceless %} +{% endapply %} diff --git a/theme/base/templates/modules/Authentication/View/Metadata/idps.xml.twig b/theme/base/templates/modules/Authentication/View/Metadata/idps.xml.twig index c2bef6b5f..7cc000ed0 100644 --- a/theme/base/templates/modules/Authentication/View/Metadata/idps.xml.twig +++ b/theme/base/templates/modules/Authentication/View/Metadata/idps.xml.twig @@ -1,4 +1,4 @@ -{% spaceless %} +{% apply spaceless %} {% for metadata in metadataCollection %} @@ -33,4 +33,4 @@ {% endfor %} -{% endspaceless %} +{% endapply %} diff --git a/theme/base/templates/modules/Authentication/View/Proxy/Partials/Consent/Attributes/tooltip.html.twig b/theme/base/templates/modules/Authentication/View/Proxy/Partials/Consent/Attributes/tooltip.html.twig index 759b670c3..fd5039678 100644 --- a/theme/base/templates/modules/Authentication/View/Proxy/Partials/Consent/Attributes/tooltip.html.twig +++ b/theme/base/templates/modules/Authentication/View/Proxy/Partials/Consent/Attributes/tooltip.html.twig @@ -13,7 +13,7 @@ } %} - {% spaceless %} + {% apply spaceless %} - {% endspaceless %} + {% endapply %} {% endif %} diff --git a/theme/base/templates/modules/Authentication/View/Proxy/Partials/WAYF/idp/idpList.html.twig b/theme/base/templates/modules/Authentication/View/Proxy/Partials/WAYF/idp/idpList.html.twig index e7eb6da33..b21ba191a 100644 --- a/theme/base/templates/modules/Authentication/View/Proxy/Partials/WAYF/idp/idpList.html.twig +++ b/theme/base/templates/modules/Authentication/View/Proxy/Partials/WAYF/idp/idpList.html.twig @@ -1,12 +1,12 @@ {% set cutoffMet = cutoffPointForShowingUnfilteredIdps < idpList|length %} -{% spaceless %} +{% apply spaceless %}
    -{% endspaceless %} +{% endapply %} {# First show all connected Idps #} {% for idp in idpList %} {% if idp['connected'] is defined and idp['connected'] %} diff --git a/theme/base/templates/modules/Authentication/View/Proxy/Partials/WAYF/preselection.html.twig b/theme/base/templates/modules/Authentication/View/Proxy/Partials/WAYF/preselection.html.twig index 42f965b1a..f8489a313 100644 --- a/theme/base/templates/modules/Authentication/View/Proxy/Partials/WAYF/preselection.html.twig +++ b/theme/base/templates/modules/Authentication/View/Proxy/Partials/WAYF/preselection.html.twig @@ -4,14 +4,14 @@ {{ 'wayf_your_accounts'|trans }} - {% spaceless %} + {% apply spaceless %}
    - {% endspaceless %} + {% endapply %} diff --git a/theme/base/templates/modules/Authentication/View/Proxy/form.html.twig b/theme/base/templates/modules/Authentication/View/Proxy/form.html.twig index 333c87801..0f27f48b2 100644 --- a/theme/base/templates/modules/Authentication/View/Proxy/form.html.twig +++ b/theme/base/templates/modules/Authentication/View/Proxy/form.html.twig @@ -13,9 +13,9 @@ - {% block stylesheets %}{% spaceless %} + {% block stylesheets %}{% apply spaceless %} - {% endspaceless %}{% endblock %} + {% endapply %}{% endblock %}
    diff --git a/theme/base/templates/modules/Default/View/Error/error.html.twig b/theme/base/templates/modules/Default/View/Error/error.html.twig index 04ee1f09b..f2a657674 100644 --- a/theme/base/templates/modules/Default/View/Error/error.html.twig +++ b/theme/base/templates/modules/Default/View/Error/error.html.twig @@ -1,9 +1,9 @@ {% extends '@themeLayouts/scripts/notConverted.twig' %} {% import "@themeLayouts/scripts/language-switcher.html.twig" as languageSwitcher %} -{% block stylesheets %}{% spaceless %} +{% block stylesheets %}{% apply spaceless %} -{% endspaceless %}{% endblock %} +{% endapply %}{% endblock %} {% set feedbackInfoMap = feedbackInfo().data %} {% set hideHeader = true %} @@ -77,7 +77,7 @@

    {{ 'error_help_desc'|trans }}

    - {% spaceless %}{% include "@theme/Default/View/Error/partial/footer.html.twig" %}{% endspaceless %} + {% apply spaceless %}{% include "@theme/Default/View/Error/partial/footer.html.twig" %}{% endapply %} {% endblock %} diff --git a/theme/base/templates/modules/Default/View/Error/method-not-allowed.html.twig b/theme/base/templates/modules/Default/View/Error/method-not-allowed.html.twig index 8df5637b0..2f50ab069 100644 --- a/theme/base/templates/modules/Default/View/Error/method-not-allowed.html.twig +++ b/theme/base/templates/modules/Default/View/Error/method-not-allowed.html.twig @@ -15,7 +15,7 @@ {{ 'error_405_desc'|trans({'%requestMethod%': requestMethod, '%uri%': uri,'%allowedMethods%': allowedMethods}) }} - {% spaceless %}{% include "@theme/Default/View/Error/partial/footer.html.twig" %}{% endspaceless %} + {% apply spaceless %}{% include "@theme/Default/View/Error/partial/footer.html.twig" %}{% endapply %} {% endblock %} diff --git a/theme/base/templates/modules/Default/View/Error/not-found.html.twig b/theme/base/templates/modules/Default/View/Error/not-found.html.twig index 67373a8d4..1f7e8d40e 100644 --- a/theme/base/templates/modules/Default/View/Error/not-found.html.twig +++ b/theme/base/templates/modules/Default/View/Error/not-found.html.twig @@ -15,7 +15,7 @@ {{ 'error_404_desc'|trans }} - {% spaceless %}{% include "@theme/Default/View/Error/partial/footer.html.twig" %}{% endspaceless %} + {% apply spaceless %}{% include "@theme/Default/View/Error/partial/footer.html.twig" %}{% endapply %} {% endblock %} diff --git a/theme/openconext/templates/layouts/scripts/default.html.twig b/theme/openconext/templates/layouts/scripts/default.html.twig index d83d0edae..a1d87c818 100644 --- a/theme/openconext/templates/layouts/scripts/default.html.twig +++ b/theme/openconext/templates/layouts/scripts/default.html.twig @@ -10,9 +10,9 @@ - {% block stylesheets %}{% spaceless %} + {% block stylesheets %}{% apply spaceless %} - {% endspaceless %}{% endblock %} + {% endapply %}{% endblock %}