From 27785c4667232569d047b7d67cbd5a88e1b0450f Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 01/56] Revert "fix: Deploy Name" This reverts commit 707843a53eb291eb0e2391b60d385fd215475949. --- .github/workflows/deploy_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_build.yml b/.github/workflows/deploy_build.yml index 1bb88d73..0853194f 100644 --- a/.github/workflows/deploy_build.yml +++ b/.github/workflows/deploy_build.yml @@ -1,4 +1,4 @@ -name: Deployment on Build +name: Deployment on Development on: push: branches: [ "master" ] From 0a5e943f08653ca45f562f3e9e6d39e46377b6ea Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 02/56] Revert "add build deployment" This reverts commit d3d484ab050dc9758f82d33829014ca9e52001c4. --- .github/workflows/deploy_build.yml | 121 ----------------------------- 1 file changed, 121 deletions(-) delete mode 100644 .github/workflows/deploy_build.yml diff --git a/.github/workflows/deploy_build.yml b/.github/workflows/deploy_build.yml deleted file mode 100644 index 0853194f..00000000 --- a/.github/workflows/deploy_build.yml +++ /dev/null @@ -1,121 +0,0 @@ -name: Deployment on Development -on: - push: - branches: [ "master" ] - workflow_dispatch: - -jobs: - # 1. Statische Analyse (Zusammengefasst, da sie keine DB brauchen) - static-analysis: - name: PHP Quality Checks - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6.0.2 - - - name: Setup Environment - uses: ./.github/actions/setup-php-composer - - - name: Validate Composer - run: composer validate --strict - - - name: Run Checks - run: | - composer run-script phplint - composer run-script phpstan - composer run-script phpcs - - - name: Notify Failure - if: failure() - uses: rjstone/discord-webhook-notify@v1.0.4 - with: - severity: error - details: Static Analysis (Lint/Stan/CS) failed. - webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} - - # 2. Tests (Unit & Functional getrennt, da Functional DB braucht) - tests: - name: PHP Tests - needs: static-analysis - runs-on: ubuntu-latest - services: - mariadb: - image: mariadb:latest - env: - MYSQL_ROOT_PASSWORD: root - MYSQL_DATABASE: db - MYSQL_USER: dev - MYSQL_PASSWORD: dev - ports: ["3306:3306"] - options: --health-cmd="healthcheck.sh --connect --innodb_initialized" --health-interval=10s --health-timeout=5s --health-retries=3 - env: - DB_DATABASE: db - DB_USERNAME: dev - DB_PASSWORD: dev - DB_HOST: 127.0.0.1 - APP_ENV: action - steps: - - uses: actions/checkout@v6.0.2 - - name: Setup Environment - uses: ./.github/actions/setup-php-composer - - - name: Run Unit Tests - run: composer run-script unittest - - - name: Run Functional Tests - run: composer run-script functionaltest - - - name: Notify Failure - if: failure() - uses: rjstone/discord-webhook-notify@v1.0.4 - with: - severity: error - details: PHP Tests failed. - webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} - - # 3. Deployment - deploy: - name: Deploy to Dev - needs: tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6.0.2 - - - name: Setup Environment (No Dev) - uses: ./.github/actions/setup-php-composer - with: - install-flags: '--prefer-dist --no-progress --no-dev' - - - name: Build OpenAPI - run: composer run-script openapi - - - name: Deploy via rsync - uses: burnett01/rsync-deployments@8.0.3 - with: - switches: -avz --no-o --no-g --no-perms --no-t --omit-dir-times --delete --exclude-from='.rsync-exclude' - remote_path: ${{ secrets.DEPLOY_PATH_API_BUILD }} - remote_host: ${{ secrets.DEPLOY_HOST }} - remote_port: ${{ secrets.DEPLOY_PORT }} - remote_user: ${{ secrets.DEPLOY_USER }} - remote_key: ${{ secrets.DEPLOY_KEY }} - remote_key_pass: ${{ secrets.DEPLOY_KEY_PASS }} - - - name: Clear Cache - uses: appleboy/ssh-action@v1.2.2 - with: - host: ${{ secrets.DEPLOY_HOST }} - username: ${{ secrets.DEPLOY_USER }} - key: ${{ secrets.DEPLOY_KEY }} - passphrase: ${{ secrets.DEPLOY_KEY_PASS }} - script: rm -rf ${{ secrets.DEPLOY_PATH_API_BUILD }}/data/cache/* - - - name: Deployment Notification - if: always() - uses: rjstone/discord-webhook-notify@v1.0.4 - with: - severity: ${{ job.status == 'success' && 'info' || 'error' }} - details: >- - ${{ job.status == 'success' - && '[🚀 Successful deployment to build!](https://build.ownhackathon.de/api/docs)' - || format('[❌ Deployment failed! View Logs](https://github.com/{0}/actions/runs/{1})', github.repository, github.run_id) - }} - webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} From 17c90e87e00adf4e2aaa90dd07a2511b17cb1bba Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 03/56] Revert "refactor: change namespace" This reverts commit 4f7296af9f463a43e948a2224ce5f8fc47950f97. --- composer.json | 8 +-- config/autoload/dependencies.action.php | 16 ++--- config/autoload/dependencies.global.php | 15 ++--- config/autoload/dependencies.testing.php | 17 ++---- config/autoload/project.global.php | 7 +-- config/config.php | 4 +- config/pipeline.php | 10 ++-- config/routes.php | 3 +- src/App/ConfigProvider.php | 58 +++++++++---------- .../DTO/Account/AccountAuthenticationData.php | 4 +- src/App/DTO/Account/AccountPassword.php | 4 +- src/App/DTO/Account/AccountRegistration.php | 4 +- src/App/DTO/Client/ClientIdentification.php | 2 +- .../DTO/Client/ClientIdentificationData.php | 2 +- src/App/DTO/EMail/EMail.php | 4 +- .../DTO/Response/AuthenticationResponse.php | 8 +-- src/App/DTO/Response/HttpResponseMessage.php | 6 +- src/App/DTO/Token/AccessToken.php | 4 +- src/App/DTO/Token/AccountPasswordToken.php | 4 +- src/App/DTO/Token/JwtTokenConfig.php | 2 +- src/App/DTO/Token/RefreshToken.php | 4 +- src/App/DTO/Token/Token.php | 4 +- src/App/Entity/Account/Account.php | 10 ++-- src/App/Entity/Account/AccountAccessAuth.php | 8 +-- .../Account/AccountAccessAuthCollection.php | 8 +-- src/App/Entity/Account/AccountActivation.php | 10 ++-- .../Account/AccountActivationCollection.php | 8 +-- src/App/Entity/Account/AccountCollection.php | 8 +-- src/App/Entity/Token/Token.php | 10 ++-- src/App/Entity/Token/TokenCollection.php | 8 +-- .../Handler/Account/AccessTokenHandler.php | 8 +-- .../Account/AccountActivationHandler.php | 8 +-- .../AccountPasswordForgottenHandler.php | 6 +- .../Account/AccountPasswordHandler.php | 8 +-- .../Account/AccountRegisterHandler.php | 8 +-- .../Handler/Account/AuthenticationHandler.php | 14 ++--- src/App/Handler/Account/LogoutHandler.php | 8 +-- src/App/Handler/PingHandler.php | 6 +- src/App/Handler/SwaggerUIHandler.php | 2 +- .../Hydrator/AccountAccessAuthHydrator.php | 12 ++-- .../AccountAccessAuthHydratorInterface.php | 8 +-- .../Hydrator/AccountActivationHydrator.php | 14 ++--- .../AccountActivationHydratorInterface.php | 8 +-- src/App/Hydrator/AccountHydrator.php | 14 ++--- src/App/Hydrator/AccountHydratorInterface.php | 8 +-- src/App/Hydrator/TokenHydrator.php | 14 ++--- src/App/Hydrator/TokenHydratorInterface.php | 8 +-- .../Account/ActivationMiddleware.php | 24 ++++---- .../Account/LastAktivityUpdaterMiddleware.php | 6 +- .../AuthenticationConditionsMiddleware.php | 8 +-- .../AuthenticationMiddleware.php | 16 ++--- .../AuthenticationValidationMiddleware.php | 10 ++-- .../PersistAuthenticationMiddleware.php | 22 +++---- .../Middleware/Account/LogoutMiddleware.php | 16 ++--- .../Account/PasswordChangeMiddleware.php | 20 +++---- .../Account/PasswordForgottenMiddleware.php | 12 ++-- .../Middleware/Account/RegisterMiddleware.php | 16 ++--- .../RequestAuthenticationMiddleware.php | 16 ++--- .../ActivationInputValidatorMiddleware.php | 12 ++-- .../EmailInputValidatorMiddleware.php | 14 ++--- .../PasswordInputValidatorMiddleware.php | 10 ++-- .../ClientIdentificationMiddleware.php | 8 +-- .../Token/AccessTokenValidationMiddleware.php | 10 ++-- .../Token/GenerateAccessTokenMiddleware.php | 8 +-- .../Token/GenerateRefreshTokenMiddleware.php | 8 +-- .../Token/RefreshTokenAccountMiddleware.php | 16 ++--- ...efreshTokenDatabaseExistenceMiddleware.php | 14 ++--- ...kenMatchClientIdentificationMiddleware.php | 14 ++--- .../RefreshTokenValidationMiddleware.php | 12 ++-- .../AccountAccessAuthRepository.php | 10 ++-- .../AccountActivationRepository.php | 12 ++-- src/App/Repository/AccountRepository.php | 12 ++-- src/App/Repository/TokenRepository.php | 10 ++-- src/App/Service/Account/AccountService.php | 18 +++--- .../Authentication/AuthenticationService.php | 2 +- .../ClientIdentificationService.php | 4 +- src/App/Service/Token/AccessTokenService.php | 4 +- .../Token/AccessTokenServiceFactory.php | 4 +- .../Service/Token/ActivationTokenService.php | 4 +- src/App/Service/Token/JwtTokenTrait.php | 2 +- .../Service/Token/PasswordTokenService.php | 6 +- src/App/Service/Token/RefreshTokenService.php | 6 +- .../Token/RefreshTokenServiceFactory.php | 4 +- src/App/Table/AbstractTable.php | 4 +- src/App/Table/AccountAccessAuthTable.php | 12 ++-- src/App/Table/AccountActivationTable.php | 14 ++--- src/App/Table/AccountTable.php | 14 ++--- src/App/Table/TokenTable.php | 12 ++-- .../Validator/AccountActivationValidator.php | 6 +- src/App/Validator/AuthenticationValidator.php | 6 +- src/App/Validator/DateLessNow.php | 2 +- src/App/Validator/EMailValidator.php | 4 +- src/App/Validator/Input/AccountNameInput.php | 2 +- src/App/Validator/Input/EmailInput.php | 2 +- src/App/Validator/Input/PasswordInput.php | 2 +- src/App/Validator/PasswordValidator.php | 4 +- src/Core/ConfigProvider.php | 8 ++- .../AccountAccessAuthCollectionInterface.php | 6 +- .../Account/AccountAccessAuthInterface.php | 2 +- .../AccountActivationCollectionInterface.php | 6 +- .../Account/AccountActivationInterface.php | 4 +- .../Account/AccountCollectionInterface.php | 6 +- src/Core/Entity/Account/AccountInterface.php | 4 +- .../Entity/Token/TokenCollectionInterface.php | 6 +- src/Core/Entity/Token/TokenInterface.php | 4 +- src/Core/Enum/AccountRoles.php | 2 +- src/Core/Enum/AccountVisibleStatus.php | 2 +- src/Core/Enum/DataType.php | 2 +- src/Core/Enum/DateTimeFormat.php | 2 +- src/Core/Enum/Message/LogMessage.php | 2 +- src/Core/Enum/Message/StatusMessage.php | 2 +- src/Core/Enum/Router/RouteIdent.php | 2 +- src/Core/Enum/TokenType.php | 2 +- .../Exception/DuplicateEntryException.php | 2 +- src/Core/Exception/EmptyResultException.php | 2 +- .../Exception/HttpDuplicateEntryException.php | 6 +- src/Core/Exception/HttpException.php | 6 +- ...ndledInvalidArgumentAsSuccessException.php | 6 +- .../HttpInvalidArgumentException.php | 6 +- .../Exception/HttpUnauthorizedException.php | 6 +- .../Exception/UndefinedOffsetException.php | 2 +- src/Core/Factory/DatabaseFactory.php | 2 +- src/Core/Factory/ErrorResponseFactory.php | 8 +-- src/Core/Factory/MailFactory.php | 2 +- src/Core/Factory/QueryFactory.php | 2 +- src/Core/Factory/UuidFactory.php | 6 +- src/Core/Hydrator/HydratorInterface.php | 2 +- src/Core/Logger/LoggerFactory.php | 2 +- src/Core/Logger/MetaDataProcessor.php | 2 +- .../Middleware/ApiErrorHandlerMiddleware.php | 4 +- .../Middleware/RouteNotFoundMiddleware.php | 2 +- .../AccountAccessAuthRepositoryInterface.php | 6 +- .../AccountActivationRepositoryInterface.php | 8 +-- .../Repository/AccountRepositoryInterface.php | 8 +-- src/Core/Repository/RepositoryInterface.php | 2 +- .../Repository/TokenRepositoryInterface.php | 6 +- .../Store/AccountAccessAuthStoreInterface.php | 6 +- .../Store/AccountActivationStoreInterface.php | 8 +-- src/Core/Store/AccountStoreInterface.php | 8 +-- src/Core/Store/StoreInterface.php | 2 +- src/Core/Store/TokenStoreInterface.php | 6 +- src/Core/Trait/CloneReadonlyClassWith.php | 2 +- src/Core/Type/Email.php | 8 +-- src/Core/Type/TypeInterface.php | 2 +- src/Core/Utils/Collectible.php | 2 +- src/Core/Utils/Collection.php | 4 +- src/Core/Utils/CollectionInterface.php | 2 +- src/Core/Utils/UuidFactory.php | 2 +- src/Core/Utils/UuidFactoryInterface.php | 2 +- tests/FunctionalTest/AbstractFunctional.php | 2 +- tests/FunctionalTest/Mock/NullLogger.php | 2 +- .../FunctionalTest/Mock/NullLoggerFactory.php | 2 +- tests/FunctionalTest/Mock/NullMailer.php | 2 +- .../FunctionalTest/Mock/NullMailerFactory.php | 2 +- .../Root/Account/AccessTokenHandlerTest.php | 26 ++++----- .../Account/AccountActivationHandlerTest.php | 18 +++--- .../AccountPasswordForgottenHandlerTest.php | 12 ++-- .../Account/AccountPasswordHandlerTest.php | 20 +++---- .../Account/AccountRegisterHandlerTest.php | 22 +++---- .../Account/AuthenticationHandlerTest.php | 20 +++---- .../InvalidEMailAddressProviderTrait.php | 6 +- tests/FunctionalTest/Root/PingHandlerTest.php | 4 +- .../AppTest/Handler/AbstractTestHandler.php | 6 +- .../Handler/AuthenticationHandlerTest.php | 10 ++-- .../AppTest/Handler/PingHandlerTest.php | 4 +- .../AccountAccessAuthHydratorTest.php | 10 ++-- .../AppTest/Hydrator/AccountHydratorTest.php | 14 ++--- .../Middleware/AbstractTestMiddleware.php | 8 +-- ...AccountAccessAuthPersistMiddlewareTest.php | 28 ++++----- .../AccountAuthenticationMiddlewareTest.php | 28 ++++----- ...AuthenticationConditionsMiddlewareTest.php | 6 +- .../AuthenticationMiddlewareTest.php | 12 ++-- ...AuthenticationValidationMiddlewareTest.php | 10 ++-- .../ClientIdentificationMiddlewareTest.php | 6 +- .../GenerateAccessTokenMiddlewareTest.php | 10 ++-- .../GenerateRefreshTokenMiddlewareTest.php | 10 ++-- .../AccountAccessAuthRepositoryTest.php | 24 ++++---- .../Repository/AccountRepositoryTest.php | 26 ++++----- .../Service/AccessTokenServiceTest.php | 12 ++-- .../Service/AuthenticationServiceTest.php | 6 +- .../Service/RefreshTokenServiceTest.php | 12 ++-- .../Table/AccountAccessAuthTableTest.php | 24 ++++---- .../AppTest/Table/AccountTableTest.php | 26 ++++----- .../CoreTest/Factory/DatabaseFactoryTest.php | 6 +- .../CoreTest/Factory/QueryFactoryTest.php | 8 +-- tests/UnitTest/JsonRequestHelper.php | 2 +- tests/UnitTest/Mock/Constants/Account.php | 2 +- .../Mock/Constants/AccountAccessAuth.php | 2 +- tests/UnitTest/Mock/Constants/Token.php | 2 +- tests/UnitTest/Mock/Database/MockDelete.php | 2 +- .../Mock/Database/MockDeleteFailed.php | 2 +- tests/UnitTest/Mock/Database/MockInsert.php | 2 +- .../Mock/Database/MockInsertFailed.php | 2 +- tests/UnitTest/Mock/Database/MockPDO.php | 2 +- tests/UnitTest/Mock/Database/MockQuery.php | 2 +- .../Mock/Database/MockQueryFailed.php | 2 +- tests/UnitTest/Mock/Database/MockSelect.php | 6 +- .../Mock/Database/MockSelectFailed.php | 2 +- tests/UnitTest/Mock/Database/MockUpdate.php | 2 +- .../Mock/Database/MockUpdateFailed.php | 2 +- tests/UnitTest/Mock/Entity/MockAccount.php | 8 +-- ...AuthenticationMiddlewareRequestHandler.php | 4 +- tests/UnitTest/Mock/MockContainer.php | 2 +- tests/UnitTest/Mock/MockRequestHandler.php | 2 +- tests/UnitTest/Mock/MockResponse.php | 2 +- tests/UnitTest/Mock/MockServerRequest.php | 2 +- .../MockAccountAccessAuthRepository.php | 6 +- .../Mock/Repository/MockAccountRepository.php | 6 +- ...ntAuthenticationMiddlewareInvalidToken.php | 6 +- .../Mock/Service/MockAccessTokenService.php | 6 +- .../MockAccessTokenServiceWithoutDuration.php | 6 +- .../Service/MockAuthenticationService.php | 6 +- .../MockClientIdentificationService.php | 4 +- .../Mock/Service/MockRefreshTokenService.php | 8 +-- .../Mock/Table/MockAccountAccessAuthTable.php | 20 +++---- .../MockAccountAccessAuthTableFailed.php | 12 ++-- .../UnitTest/Mock/Table/MockAccountTable.php | 22 +++---- ...ntAuthenticationMiddlewareInvalidToken.php | 22 +++---- .../Mock/Table/MockAccountTableFailed.php | 14 ++--- .../Validator/MockAuthenticationValidator.php | 8 +-- .../MockAuthenticationValidatorFailed.php | 8 +-- 221 files changed, 874 insertions(+), 880 deletions(-) diff --git a/composer.json b/composer.json index 27380e7a..52325517 100644 --- a/composer.json +++ b/composer.json @@ -78,14 +78,14 @@ }, "autoload": { "psr-4": { - "App\\": "src/App/", - "Core\\": "src/Core/" + "ownHackathon\\App\\": "src/App/", + "ownHackathon\\Core\\": "src/Core/" } }, "autoload-dev": { "psr-4": { - "FunctionalTest\\": "tests/FunctionalTest/", - "UnitTest\\": "tests/UnitTest/" + "ownHackathon\\FunctionalTest\\": "tests/FunctionalTest/", + "ownHackathon\\UnitTest\\": "tests/UnitTest/" } }, "scripts": { diff --git a/config/autoload/dependencies.action.php b/config/autoload/dependencies.action.php index 955817c8..9ab17fbb 100644 --- a/config/autoload/dependencies.action.php +++ b/config/autoload/dependencies.action.php @@ -1,28 +1,24 @@ [ 'aliases' => [ PDO::class => 'database', Envms\FluentPDO\Query::class => 'query', - UuidFactoryInterface::class => 'uuid', + ownHackathon\Core\Utils\UuidFactoryInterface::class => 'uuid', Psr\Log\LoggerInterface::class => 'logger', Symfony\Component\Mailer\MailerInterface::class => 'mailer', ], 'invokables' => [ ], 'factories' => [ - 'database' => DatabaseFactory::class, - 'query' => QueryFactory::class, + 'database' => ownHackathon\Core\Factory\DatabaseFactory::class, + 'query' => ownHackathon\Core\Factory\QueryFactory::class, 'logger' => LoggerFactory::class, - 'uuid' => UuidFactory::class, + 'uuid' => ownHackathon\Core\Factory\UuidFactory::class, 'mailer' => NullMailerFactory::class, ], ], diff --git a/config/autoload/dependencies.global.php b/config/autoload/dependencies.global.php index 2a172689..c043e2f9 100644 --- a/config/autoload/dependencies.global.php +++ b/config/autoload/dependencies.global.php @@ -2,12 +2,13 @@ declare(strict_types=1); -use Core\Utils\UuidFactoryInterface; -use Core\Factory\DatabaseFactory; -use Core\Factory\MailFactory; -use Core\Factory\QueryFactory; -use Core\Factory\UuidFactory; -use Core\Logger\LoggerFactory; +use Laminas\Stratigility\Middleware\ErrorHandler; +use ownHackathon\Core\Factory\DatabaseFactory; +use ownHackathon\Core\Factory\MailFactory; +use ownHackathon\Core\Factory\QueryFactory; +use ownHackathon\Core\Factory\UuidFactory; +use ownHackathon\Core\Listener\LoggingErrorListenerDelegatorFactory; +use ownHackathon\Core\Logger\LoggerFactory; return [ // Provides application-wide services. @@ -20,7 +21,7 @@ PDO::class => 'database', Envms\FluentPDO\Query::class => 'query', Psr\Log\LoggerInterface::class => 'logger', - UuidFactoryInterface::class => 'uuid', + ownHackathon\Core\Utils\UuidFactoryInterface::class => 'uuid', Symfony\Component\Mailer\MailerInterface::class => 'mailer', ], // Use 'invokables' for constructor-less services, or services that do diff --git a/config/autoload/dependencies.testing.php b/config/autoload/dependencies.testing.php index 955817c8..cd7486b8 100644 --- a/config/autoload/dependencies.testing.php +++ b/config/autoload/dependencies.testing.php @@ -1,29 +1,24 @@ [ 'aliases' => [ PDO::class => 'database', Envms\FluentPDO\Query::class => 'query', - UuidFactoryInterface::class => 'uuid', + ownHackathon\Core\Utils\UuidFactoryInterface::class => 'uuid', Psr\Log\LoggerInterface::class => 'logger', Symfony\Component\Mailer\MailerInterface::class => 'mailer', ], 'invokables' => [ ], 'factories' => [ - 'database' => DatabaseFactory::class, - 'query' => QueryFactory::class, + 'database' => ownHackathon\Core\Factory\DatabaseFactory::class, + 'query' => ownHackathon\Core\Factory\QueryFactory::class, 'logger' => LoggerFactory::class, - 'uuid' => UuidFactory::class, - 'mailer' => NullMailerFactory::class, + 'uuid' => ownHackathon\Core\Factory\UuidFactory::class, + 'mailer' => ownHackathon\FunctionalTest\Mock\NullMailerFactory::class, ], ], ]; diff --git a/config/autoload/project.global.php b/config/autoload/project.global.php index 7ef504b6..b99c1907 100644 --- a/config/autoload/project.global.php +++ b/config/autoload/project.global.php @@ -2,15 +2,14 @@ return [ 'project' => [ - 'uri' => 'dev.ownhackathon.de', + 'uri' => 'build.hackathon.exdrals.de', ], 'api' => [ 'access' => [ 'domain' => [ 'whitelist' => [ - 'build.ownhackathon.de', - 'dev.ownhackathon.de', - 'ownhackathon.de', + 'build.hackathon.exdrals.de', + 'hackathon.exdrals.de', ], ], ], diff --git a/config/config.php b/config/config.php index 49142d81..d3c582bc 100644 --- a/config/config.php +++ b/config/config.php @@ -33,8 +33,8 @@ class_exists(\Mezzio\Swoole\ConfigProvider::class) return []; }, // Default App module config - \Core\ConfigProvider::class, - \App\ConfigProvider::class, + ownHackathon\Core\ConfigProvider::class, + ownHackathon\App\ConfigProvider::class, // Load application config in a pre-defined order in such a way that local settings // overwrite global settings. (Loaded as first to last): // - `global.php` diff --git a/config/pipeline.php b/config/pipeline.php index df8f068c..9be99a9c 100644 --- a/config/pipeline.php +++ b/config/pipeline.php @@ -14,11 +14,11 @@ use Mezzio\Router\Middleware\ImplicitOptionsMiddleware; use Mezzio\Router\Middleware\MethodNotAllowedMiddleware; use Mezzio\Router\Middleware\RouteMiddleware; -use App\Middleware\Account\LastAktivityUpdaterMiddleware; -use App\Middleware\Account\RequestAuthenticationMiddleware; -use App\Middleware\ClientIdentification\ClientIdentificationMiddleware; -use Core\Middleware\ApiErrorHandlerMiddleware; -use Core\Middleware\RouteNotFoundMiddleware; +use ownHackathon\App\Middleware\Account\LastAktivityUpdaterMiddleware; +use ownHackathon\App\Middleware\Account\RequestAuthenticationMiddleware; +use ownHackathon\App\Middleware\ClientIdentification\ClientIdentificationMiddleware; +use ownHackathon\Core\Middleware\ApiErrorHandlerMiddleware; +use ownHackathon\Core\Middleware\RouteNotFoundMiddleware; use Psr\Container\ContainerInterface; /** diff --git a/config/routes.php b/config/routes.php index 6299cde2..462b451f 100644 --- a/config/routes.php +++ b/config/routes.php @@ -2,7 +2,8 @@ use Mezzio\Application; use Mezzio\MiddlewareFactory; -use Core\Enum\Router\RouteIdent; +use ownHackathon\App; +use ownHackathon\Core\Enum\Router\RouteIdent; use Psr\Container\ContainerInterface; return static function (Application $app, MiddlewareFactory $factory, ContainerInterface $container): void { diff --git a/src/App/ConfigProvider.php b/src/App/ConfigProvider.php index 407a94f0..5f622ce8 100644 --- a/src/App/ConfigProvider.php +++ b/src/App/ConfigProvider.php @@ -1,38 +1,38 @@ container->get(UuidFactoryInterface::class); - $account = new \App\Entity\Account\Account( + $account = new \ownHackathon\App\Entity\Account\Account( null, $uuid->uuid7(), 'I see your Token', diff --git a/tests/FunctionalTest/Root/Account/InvalidEMailAddressProviderTrait.php b/tests/FunctionalTest/Root/Account/InvalidEMailAddressProviderTrait.php index 36bb2927..6baef9c0 100644 --- a/tests/FunctionalTest/Root/Account/InvalidEMailAddressProviderTrait.php +++ b/tests/FunctionalTest/Root/Account/InvalidEMailAddressProviderTrait.php @@ -1,11 +1,11 @@ Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 04/56] Revert "fix: code quali" This reverts commit faecf4c84c30d586a64f37cf039ac36174d0766a. --- .../LoginAuthentication/PersistAuthenticationMiddleware.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php b/src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php index 912af315..a720ef0d 100644 --- a/src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php +++ b/src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php @@ -53,7 +53,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $accountAccessAuth = new AccountAccessAuth( 1, - $account->id, + $account->id , 'default', $refreshToken->refreshToken, $clientIdent->clientIdentificationData->userAgent, From a4c93db7169c10c8bc679dbbda3fbaadfca4d5d5 Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 05/56] Revert "refactor: change for php 8.4" This reverts commit 021071cefac870222b0f318c50bf875772462c0b. --- .../PersistAuthenticationMiddleware.php | 6 +++--- src/App/Middleware/Account/RegisterMiddleware.php | 3 +-- src/App/Service/Token/ActivationTokenService.php | 2 +- src/App/Service/Token/PasswordTokenService.php | 2 +- src/App/Table/AbstractTable.php | 2 +- src/Core/Logger/LoggerFactory.php | 8 ++++---- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php b/src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php index a720ef0d..6bc5883a 100644 --- a/src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php +++ b/src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php @@ -43,9 +43,9 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface StatusMessage::INVALID_DATA, [ // @phpstan-ignore-next-line - 'Account:' => $account?->email, + 'Account:' => isset($account) ? $account->email : null, // @phpstan-ignore-next-line - 'Client ID:' => $clientIdent?->identificationHash, + 'Client ID:' => $clientIdent ? $clientIdent->identificationHash : null, 'Refresh Token:' => $refreshToken ? 'placed' : null, ] ); @@ -53,7 +53,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $accountAccessAuth = new AccountAccessAuth( 1, - $account->id , + $account->id, 'default', $refreshToken->refreshToken, $clientIdent->clientIdentificationData->userAgent, diff --git a/src/App/Middleware/Account/RegisterMiddleware.php b/src/App/Middleware/Account/RegisterMiddleware.php index aa8da13f..31746924 100644 --- a/src/App/Middleware/Account/RegisterMiddleware.php +++ b/src/App/Middleware/Account/RegisterMiddleware.php @@ -6,7 +6,6 @@ use ownHackathon\App\Entity\Account\AccountActivation; use ownHackathon\App\Service\Account\AccountService; use ownHackathon\App\Service\Token\ActivationTokenService; -use ownHackathon\Core\Enum\Message\LogMessage; use ownHackathon\Core\Repository\AccountActivationRepositoryInterface; use ownHackathon\Core\Type\Email; use ownHackathon\Core\Utils\UuidFactoryInterface; @@ -33,7 +32,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $email = $request->getAttribute(Email::class); if (!$this->accountService->isEmailAvailable($email)) { - $this->logger->warning(LogMessage::ACCOUNT_ALREADY_EXISTS->value, [ + $this->logger->warning('An account with the same email address already exists.', [ 'email:' => $email->toString(), ]); diff --git a/src/App/Service/Token/ActivationTokenService.php b/src/App/Service/Token/ActivationTokenService.php index 4218a298..8ef7940d 100644 --- a/src/App/Service/Token/ActivationTokenService.php +++ b/src/App/Service/Token/ActivationTokenService.php @@ -19,7 +19,7 @@ public function sendEmail(AccountActivationInterface $activation): void { $text = sprintf('Your token to activate your Account: %s', $activation->token->getHex()->toString()); - $email = new Email() + $email = (new Email()) ->from('no-reply@stormannsgal.de') ->to($activation->email->toString()) ->subject('Account Activation Code') diff --git a/src/App/Service/Token/PasswordTokenService.php b/src/App/Service/Token/PasswordTokenService.php index b758529d..7cb148a2 100644 --- a/src/App/Service/Token/PasswordTokenService.php +++ b/src/App/Service/Token/PasswordTokenService.php @@ -20,7 +20,7 @@ public function sendEmail(EmailType $email, TokenInterface $token): void { $text = sprintf('Your token to reset your password: %s', $token->token->getHex()->toString()); - $email = new Email() + $email = (new Email()) ->from('no-reply@stormannsgal.de') ->to($email->toString()) ->subject('Password Forgotten Code') diff --git a/src/App/Table/AbstractTable.php b/src/App/Table/AbstractTable.php index 4d7930a2..94d20be9 100644 --- a/src/App/Table/AbstractTable.php +++ b/src/App/Table/AbstractTable.php @@ -17,7 +17,7 @@ class AbstractTable implements StoreInterface public function __construct(Query $query) { - $this->table = substr(new ReflectionClass($this)->getShortName(), 0, -5); + $this->table = substr((new ReflectionClass($this))->getShortName(), 0, -5); $this->query = $query; } diff --git a/src/Core/Logger/LoggerFactory.php b/src/Core/Logger/LoggerFactory.php index 3074c835..885843f0 100644 --- a/src/Core/Logger/LoggerFactory.php +++ b/src/Core/Logger/LoggerFactory.php @@ -37,20 +37,20 @@ public function __invoke(ContainerInterface $container): LoggerInterface $logger = new Logger('log'); - $logger->pushHandler(new StreamHandler($path . 'default.log')->setFormatter($formatter)); + $logger->pushHandler((new StreamHandler($path . 'default.log'))->setFormatter($formatter)); - $errorHandler = new StreamHandler($path . 'error.log', Level::Error)->setFormatter($formatter); + $errorHandler = (new StreamHandler($path . 'error.log', Level::Error))->setFormatter($formatter); $errorHandler = new FilterHandler($errorHandler, Level::Error, Level::Error); $logger->pushHandler($errorHandler); - $errorHandler = new StreamHandler($path . 'warning.log', Level::Warning)->setFormatter($formatter); + $errorHandler = (new StreamHandler($path . 'warning.log', Level::Warning))->setFormatter($formatter); $errorHandler = new FilterHandler($errorHandler, Level::Error, Level::Error); $logger->pushHandler($errorHandler); $logger->pushHandler( - new StreamHandler($path . 'critical.log', Level::Critical)->setFormatter($stackTraceFormater) + (new StreamHandler($path . 'critical.log', Level::Critical))->setFormatter($stackTraceFormater) ); $logger->pushProcessor(new PsrLogMessageProcessor()); $logger->pushProcessor( From 2990478a828c849e9c5344a3e6e6f65fcc200935 Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 06/56] Revert "refactor: finalize management CLI, fix volume detection and preserve .gitkeep files" This reverts commit 8385f97bd10a4165e588294e1c9a073569fca6a0. --- bin/hackathon | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/bin/hackathon b/bin/hackathon index 523b6ccf..321a8e7b 100755 --- a/bin/hackathon +++ b/bin/hackathon @@ -52,6 +52,8 @@ check_initialization() { fi # 2. Check for database volumes + # We look for volumes that are labeled by Docker Compose for this project and the service 'database' + # This avoids guessing the exact string name (hackathonapi_db vs hackathon-api_db) local volume_exists=$(docker volume ls -q --filter "label=com.docker.compose.project" --filter "label=com.docker.compose.volume=db") if [ -z "$volume_exists" ]; then @@ -107,26 +109,19 @@ cleanup_docker() { } cleanup_app() { - log "Cleaning application files and caches (preserving .gitkeep)..." - - # 1. Remove entire directories + log "Cleaning application files and caches..." local dirs=(".phplint.cache" ".phpunit.cache" ".phpunit.functional.cache" "vendor") for dir in "${dirs[@]}"; do if [ -d "$dir" ]; then rm -rf "$dir" && log "-> $dir/ removed" fi done - - # 2. Clear contents of directories, but EXCLUDE .gitkeep local content_dirs=("data/cache" "data/log") for c_dir in "${content_dirs[@]}"; do if [ -d "$c_dir" ]; then - # find: mindepth 1 (only contents), ! -name (not .gitkeep), -delete (remove) - find "$c_dir" -mindepth 1 ! -name ".gitkeep" -delete && log "-> contents of $c_dir/ cleared (except .gitkeep)" + find "$c_dir" -mindepth 1 -delete && log "-> contents of $c_dir/ cleared" fi done - - # 3. Remove specific files if [ -f ".phpcs-cache" ]; then rm ".phpcs-cache" && log "-> .phpcs-cache removed" fi @@ -229,7 +224,7 @@ case $1 in echo "" echo "Options:" echo -e " ${GREEN}docker${NC} - Remove all project containers, networks, volumes and ALL images" - echo -e " ${GREEN}app${NC} - Remove vendor/ folder, all cache directories and clear logs (preserves .gitkeep)" + echo -e " ${GREEN}app${NC} - Remove vendor/ folder, all cache directories and clear logs" echo -e " ${GREEN}all${NC} - Full cleanup (Combines both docker and app cleanup)" exit 1 ;; From f635885960fb5bf313059861a7e22508dbc199f9 Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 07/56] Revert "add required gitkeep" This reverts commit d773e8617edc05bec7c0cd1fb857150ebdbed26e. --- data/cache/.gitkeep | 0 data/log/.gitkeep | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 data/cache/.gitkeep delete mode 100644 data/log/.gitkeep diff --git a/data/cache/.gitkeep b/data/cache/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/data/log/.gitkeep b/data/log/.gitkeep deleted file mode 100644 index e69de29b..00000000 From 975a3d562957459f7f945d000f76e8c96a5376b2 Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 08/56] Revert "bumps" This reverts commit c2566c1e6cb2903bb386947a085741a538bc7cff. --- composer.json | 4 +-- composer.lock | 77 +++++++++++++++++++++++++-------------------------- 2 files changed, 39 insertions(+), 42 deletions(-) diff --git a/composer.json b/composer.json index 52325517..b208349a 100644 --- a/composer.json +++ b/composer.json @@ -101,7 +101,7 @@ "development-status": "laminas-development-mode status", "doctrine": "php ./bin/migrations.php", "enable-codestandard": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin::run", - "functionaltest": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --colors=always --display-phpunit-deprecations --configuration phpunit_functionaltest.xml", + "functionaltest": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --colors=always --configuration phpunit_functionaltest.xml", "mezzio": "laminas --ansi", "openapi": "php ./vendor/bin/openapi ./src -f json -o ./public/api/docs/swagger.json", "phpcbf": "phpcbf --standard=phpcs.xml -p", @@ -115,6 +115,6 @@ "@unittest", "@functionaltest" ], - "unittest": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --colors=always --display-phpunit-deprecations --configuration phpunit_unittest.xml" + "unittest": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --colors=always --configuration phpunit_unittest.xml" } } diff --git a/composer.lock b/composer.lock index 346de3ae..a958a88d 100644 --- a/composer.lock +++ b/composer.lock @@ -2679,22 +2679,22 @@ }, { "name": "radebatz/type-info-extras", - "version": "1.0.4", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/DerManoMann/type-info-extras.git", - "reference": "23b74c4690fb3d147a1b34c4dc090a9ddc6dc31a" + "reference": "fd0ca63919cac600e837200431a0567810386ef2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DerManoMann/type-info-extras/zipball/23b74c4690fb3d147a1b34c4dc090a9ddc6dc31a", - "reference": "23b74c4690fb3d147a1b34c4dc090a9ddc6dc31a", + "url": "https://api.github.com/repos/DerManoMann/type-info-extras/zipball/fd0ca63919cac600e837200431a0567810386ef2", + "reference": "fd0ca63919cac600e837200431a0567810386ef2", "shasum": "" }, "require": { "php": ">=8.2", "phpstan/phpdoc-parser": "^2.0", - "symfony/type-info": "^7.3.8 || ^7.4.1 || ^8.0" + "symfony/type-info": "^7.3.8 || 7.4.1 || ^8.0.x-dev" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.70", @@ -2735,9 +2735,9 @@ ], "support": { "issues": "https://github.com/DerManoMann/type-info-extras/issues", - "source": "https://github.com/DerManoMann/type-info-extras/tree/1.0.4" + "source": "https://github.com/DerManoMann/type-info-extras/tree/1.0.3" }, - "time": "2026-01-12T21:15:50+00:00" + "time": "2025-12-07T20:06:36+00:00" }, { "name": "ramsey/collection", @@ -4119,21 +4119,22 @@ }, { "name": "symfony/type-info", - "version": "v8.0.1", + "version": "v7.4.1", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "bb091cec1f70383538c7d000699781813f8d1a6a" + "reference": "ac5ab66b21c758df71b7210cf1033d1ac807f202" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/bb091cec1f70383538c7d000699781813f8d1a6a", - "reference": "bb091cec1f70383538c7d000699781813f8d1a6a", + "url": "https://api.github.com/repos/symfony/type-info/zipball/ac5ab66b21c758df71b7210cf1033d1ac807f202", + "reference": "ac5ab66b21c758df71b7210cf1033d1ac807f202", "shasum": "" }, "require": { - "php": ">=8.4", - "psr/container": "^1.1|^2.0" + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "phpstan/phpdoc-parser": "<1.30" @@ -4177,7 +4178,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v8.0.1" + "source": "https://github.com/symfony/type-info/tree/v7.4.1" }, "funding": [ { @@ -4197,7 +4198,7 @@ "type": "tidelift" } ], - "time": "2025-12-05T14:08:45+00:00" + "time": "2025-12-05T14:04:53+00:00" }, { "name": "symfony/yaml", @@ -4394,16 +4395,16 @@ }, { "name": "zircote/swagger-php", - "version": "6.0.1", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/zircote/swagger-php.git", - "reference": "cf332956e6603fe4c8da6223a98b7ba65e20231e" + "reference": "283514048b9b20f7ea96d3697e78a09797c6885b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/cf332956e6603fe4c8da6223a98b7ba65e20231e", - "reference": "cf332956e6603fe4c8da6223a98b7ba65e20231e", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/283514048b9b20f7ea96d3697e78a09797c6885b", + "reference": "283514048b9b20f7ea96d3697e78a09797c6885b", "shasum": "" }, "require": { @@ -4425,8 +4426,8 @@ "doctrine/annotations": "^2.0", "friendsofphp/php-cs-fixer": "^3.62.0", "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^11.5", - "rector/rector": "^2.3.1" + "phpunit/phpunit": "^10.5", + "rector/rector": "2.2.14" }, "bin": [ "bin/openapi" @@ -4472,7 +4473,7 @@ ], "support": { "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/6.0.1" + "source": "https://github.com/zircote/swagger-php/tree/6.0.0" }, "funding": [ { @@ -4480,7 +4481,7 @@ "type": "github" } ], - "time": "2026-01-15T19:54:20+00:00" + "time": "2026-01-12T00:15:20+00:00" } ], "packages-dev": [ @@ -6038,12 +6039,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "95fda149b750941a5d7bd292e712107ca3227a04" + "reference": "ccfd723dc03e9864008d011603c412910180d7a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/95fda149b750941a5d7bd292e712107ca3227a04", - "reference": "95fda149b750941a5d7bd292e712107ca3227a04", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/ccfd723dc03e9864008d011603c412910180d7a6", + "reference": "ccfd723dc03e9864008d011603c412910180d7a6", "shasum": "" }, "conflict": { @@ -6058,14 +6059,12 @@ "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", - "aimeos/aimeos-laravel": "==2021.10", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", "airesvsg/acf-to-rest-api": "<=3.1", "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", - "alextselegidis/easyappointments": "<=1.5.2", + "alextselegidis/easyappointments": "<1.5.2.0-beta1", "alexusmai/laravel-file-manager": "<=3.3.1", - "algolia/algoliasearch-magento-2": "<=3.16.1|>=3.17.0.0-beta1,<=3.17.1", "alt-design/alt-redirect": "<1.6.4", "altcha-org/altcha": "<1.3.1", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", @@ -6638,15 +6637,14 @@ "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<=1.7.15|>=2.0.0.0-RC1-dev,<=2.2.2", + "pimcore/admin-ui-classic-bundle": "<1.7.6", "pimcore/customer-management-framework-bundle": "<4.2.1", "pimcore/data-hub": "<1.2.4", "pimcore/data-importer": "<1.8.9|>=1.9,<1.9.3", "pimcore/demo": "<10.3", "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<=11.5.13|>=12.0.0.0-RC1-dev,<12.3.1", - "pimcore/web2print-tools-bundle": "<=5.2.1|>=6.0.0.0-RC1-dev,<=6.1", + "pimcore/pimcore": "<11.5.4", "piwik/piwik": "<1.11", "pixelfed/pixelfed": "<0.12.5", "plotly/plotly.js": "<2.25.2", @@ -6710,10 +6708,10 @@ "setasign/fpdi": "<2.6.4", "sfroemken/url_redirect": "<=1.2.1", "sheng/yiicms": "<1.2.1", - "shopware/core": "<6.6.10.9-dev|>=6.7,<6.7.6.1-dev", + "shopware/core": "<6.6.10.9-dev|>=6.7,<6.7.4.1-dev", "shopware/platform": "<6.6.10.7-dev|>=6.7,<6.7.3.1-dev", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.6.1-dev", + "shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.5.1-dev", "shopware/storefront": "<6.6.10.10-dev|>=6.7,<6.7.5.1-dev", "shopxo/shopxo": "<=6.4", "showdoc/showdoc": "<2.10.4", @@ -6758,7 +6756,7 @@ "snipe/snipe-it": "<=8.3.4", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", - "solspace/craft-freeform": "<4.1.29|>=5,<5.10.16", + "solspace/craft-freeform": ">=5,<5.10.16", "soosyze/soosyze": "<=2", "spatie/browsershot": "<5.0.5", "spatie/image-optimizer": "<1.7.3", @@ -6866,10 +6864,10 @@ "twbs/bootstrap": "<3.4.1|>=4,<4.3.1", "twig/twig": "<3.11.2|>=3.12,<3.14.1|>=3.16,<3.19", "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", + "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/cms-belog": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", "typo3/cms-beuser": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", - "typo3/cms-core": "<=8.7.56|>=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", + "typo3/cms-core": "<=8.7.56|>=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/cms-dashboard": ">=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", "typo3/cms-extensionmanager": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", @@ -6881,8 +6879,7 @@ "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8|==13.4.2", "typo3/cms-lowlevel": ">=11,<=11.5.41", "typo3/cms-recordlist": ">=11,<11.5.48", - "typo3/cms-recycler": ">=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", - "typo3/cms-redirects": ">=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", + "typo3/cms-recycler": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", "typo3/cms-scheduler": ">=11,<=11.5.41", "typo3/cms-setup": ">=9,<=9.5.50|>=10,<=10.4.49|>=11,<=11.5.43|>=12,<=12.4.30|>=13,<=13.4.11", @@ -7041,7 +7038,7 @@ "type": "tidelift" } ], - "time": "2026-01-15T23:06:28+00:00" + "time": "2026-01-09T19:06:26+00:00" }, { "name": "sebastian/cli-parser", From 582b9f9d633ef61760946ba097848e00d3c9fe8a Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 09/56] Revert "refactor magic string" This reverts commit 1e49315cb0090965ba35c9c55f18a98eab7f80ba. --- tests/FunctionalTest/Root/Account/AccessTokenHandlerTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/FunctionalTest/Root/Account/AccessTokenHandlerTest.php b/tests/FunctionalTest/Root/Account/AccessTokenHandlerTest.php index c41d270e..950c7964 100644 --- a/tests/FunctionalTest/Root/Account/AccessTokenHandlerTest.php +++ b/tests/FunctionalTest/Root/Account/AccessTokenHandlerTest.php @@ -74,7 +74,7 @@ public function testReturnANewAccessToken(): void { $userAccount = $this->accountRepository->findByName('User'); $accountAccessAuth = new AccountAccessAuth( - null, + 1, $userAccount->id, 'Testing', $this->refreshToken, From fe38904438dd9eb2c33dcf560dc64cb3b9392ba9 Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 10/56] Revert "refactor magic string" This reverts commit 1e161269f7751bc836decbd9c4320123d405a8f2. --- README.md | 60 ++-- bin/hackathon | 312 +++++------------- data/cache/.gitkeep | 0 data/log/.gitkeep | 0 docker-compose.yml | 4 +- phpcs.xml | 1 + public/api/docs/swagger.json | 84 +++-- src/App/DTO/Response/HttpResponseMessage.php | 8 +- src/App/Entity/Account/AccountAccessAuth.php | 2 +- .../Handler/Account/AccessTokenHandler.php | 6 +- .../Account/AccountActivationHandler.php | 6 +- .../AccountPasswordForgottenHandler.php | 4 +- .../Account/AccountPasswordHandler.php | 6 +- .../Account/AccountRegisterHandler.php | 12 +- .../Handler/Account/AuthenticationHandler.php | 8 +- src/App/Handler/Account/LogoutHandler.php | 9 +- src/App/Handler/PingHandler.php | 6 +- .../Account/ActivationMiddleware.php | 15 +- .../AuthenticationConditionsMiddleware.php | 7 +- .../AuthenticationMiddleware.php | 15 +- .../AuthenticationValidationMiddleware.php | 7 +- .../PersistAuthenticationMiddleware.php | 11 +- .../Middleware/Account/LogoutMiddleware.php | 10 +- .../Account/PasswordChangeMiddleware.php | 13 +- .../Account/PasswordForgottenMiddleware.php | 7 +- .../RequestAuthenticationMiddleware.php | 11 +- .../ActivationInputValidatorMiddleware.php | 7 +- .../EmailInputValidatorMiddleware.php | 9 +- .../PasswordInputValidatorMiddleware.php | 7 +- .../Token/AccessTokenValidationMiddleware.php | 11 +- .../Token/RefreshTokenAccountMiddleware.php | 7 +- ...efreshTokenDatabaseExistenceMiddleware.php | 7 +- ...kenMatchClientIdentificationMiddleware.php | 7 +- .../RefreshTokenValidationMiddleware.php | 7 +- .../Account/AccountAccessAuthInterface.php | 2 +- src/Core/Enum/Message/LogMessage.php | 49 --- src/Core/Enum/Message/StatusMessage.php | 28 -- .../Exception/HttpDuplicateEntryException.php | 6 +- src/Core/Exception/HttpException.php | 12 +- ...ndledInvalidArgumentAsSuccessException.php | 6 +- .../HttpInvalidArgumentException.php | 6 +- .../Exception/HttpUnauthorizedException.php | 6 +- src/Core/Factory/ErrorResponseFactory.php | 8 +- src/Core/Message/OAMessage.php | 14 + src/Core/Message/ResponseMessage.php | 26 ++ src/Core/Type/Email.php | 7 +- .../Root/Account/AccessTokenHandlerTest.php | 14 +- .../Account/AccountActivationHandlerTest.php | 8 +- .../Account/AccountRegisterHandlerTest.php | 6 +- .../InvalidEMailAddressProviderTrait.php | 6 +- 50 files changed, 330 insertions(+), 560 deletions(-) create mode 100644 data/cache/.gitkeep create mode 100644 data/log/.gitkeep delete mode 100644 src/Core/Enum/Message/LogMessage.php delete mode 100644 src/Core/Enum/Message/StatusMessage.php create mode 100644 src/Core/Message/OAMessage.php create mode 100644 src/Core/Message/ResponseMessage.php diff --git a/README.md b/README.md index 384ea0da..3e58d7dc 100644 --- a/README.md +++ b/README.md @@ -19,18 +19,19 @@ Copy the environment template and adjust it: ```bash cp .env.dist .env ``` -Open the `.env` file and set your `USERMAP_UID` and `USERMAP_GID`. This ensures correct file permissions within the container. You can find your IDs by running: +Open the `.env` file and set your `USER_ID` and `GROUP_ID`. This ensures correct file permissions within the container. You can find your IDs by running: ```bash id -u && id -g ``` ### 4. Application Configuration (Optional) -Check the configuration files in `config/autoload/`. If changes are needed, copy the desired `.dist` file, remove the extension, and adjust the settings. +Check the configuration files in `config/autoload/`. If changes are needed: +1. Copy the desired `.dist` file. +2. Remove the `.dist` extension from the copy. +3. Adjust the settings within the new file. ### 5. Quick Setup (Recommended) -We provide a management script to automate the entire process (infrastructure start, dependency installation, database migrations, and documentation generation). - -**Once finished, the script automatically displays a table with all service URLs, ports, and database credentials.** +We provide a management script to automate the infrastructure start, dependency installation, and database migrations. > [!CAUTION] > **NOTE:** This script is provided **as-is and unsupported**. Use it at your own risk. @@ -58,9 +59,14 @@ docker-compose exec php composer run openapi --- +**Done!** You can now access the API documentation at: +👉 **[http://localhost/api/docs/](http://localhost/api/docs/)** + +--- + ## Unsupported Management CLI via `./bin/hackathon` -The management script consolidates all essential developer commands into a single tool. +The management script consolidates all essential developer commands. ### Usage Run the script from the project root directory: @@ -69,35 +75,29 @@ Run the script from the project root directory: ``` #### Infrastructure Commands -* **`start`**: Starts the containers. **Note:** It checks for initialization (vendor/ and volumes) and prevents start if the project isn't set up. -* **`stop`** / **`down`**: Pauses containers or stops/removes containers and networks. -* **`setup`**: Complete initial setup (Start, Install, Migrate, OpenAPI, Info). -* **`services`**: Lists all available service names used in this project. -* **`logs [svc]`**: Tails logs for all or a specific service (e.g., `./bin/hackathon logs php`). -* **`info`**: Displays connectivity info (URLs, Ports, and DB Credentials) for running services. +* **`start`**: Starts the Docker containers in the background. +* **`stop`**: Pauses the containers (state is preserved). +* **`down`**: Stops and removes containers and networks. +* **`setup`**: Complete initial setup (Start, Install, Migrate, OpenAPI). * **`openapi`**: Regenerates the API documentation. -#### Cleanup & Reset -* **`clean {docker|app|all}`**: - * `docker`: Removes containers, volumes, and **all** project images. - * `app`: Removes `vendor/` and all cache files (`.phplint`, `.phpunit`, etc.). - * `all`: Performs both docker and app cleanup. -* **`reset {database|vendor|all}`**: - * `database`: Wipes database volumes and re-runs migrations. - * `vendor`: Wipes and reinstalls the `vendor/` folder (Database remains untouched). - * `all`: Wipes database, vendor, and all caches, followed by a fresh `setup`. - -#### Development & Utility Commands -* **`composer [...]`**: Run Composer commands in the PHP container. -* **`php [...]`**: Run PHP commands in the PHP container. -* **`test [...]`**: Shortcut to run PHPUnit tests (passes arguments to PHPUnit). -* **`bash`**: Direct interactive shell access to the PHP container. -* **`mysql`**: Direct access to the MariaDB database console. -* **`indocker [service] [command]`**: Access any specific container (`php`, `apache`, `database`, `database-testing`, `mailhog`). +#### Reset Functions (Destruction & Rebuild) +* **`reset`**: Deletes only the database volumes and re-runs migrations. +* **`reset vendor`**: Deletes both the database **and** the `vendor/` folder for a clean re-installation. +* **`reset all`**: Deletes everything: database, `vendor/` folder, and local Docker images. + +#### Development Utilities (Proxy Commands) +These commands are executed directly inside the running PHP container: +* **`composer [...]`**: Passes commands through to Composer. +* *Example:* `./bin/hackathon composer update` +* **`php [...]`**: Executes PHP commands (automatically prefixes `php`). +* *Example:* `./bin/hackathon php bin/console debug:router` +* **`indocker [...]`**: Runs any system command inside the container. +* *Example:* `./bin/hackathon indocker ls -la` --- ### 💡 Pro-Tip You can create an alias in your `.bashrc` or `.zshrc` to work even faster: -`alias h='./bin/hackathon'` -> Then simply use `h setup`, `h info`, `h bash` or `h test`. +`alias h='./bin/hackathon'` -> Then simply use `h setup`. ``` diff --git a/bin/hackathon b/bin/hackathon index 321a8e7b..42920502 100755 --- a/bin/hackathon +++ b/bin/hackathon @@ -1,315 +1,155 @@ #!/usr/bin/env bash -# --- Configuration --- +# --- Konfiguration --- CONTAINER_PHP="php" DOCKER_COMPOSE="docker compose" -# Get project name (directory name, lowercase) -PROJECT_NAME=$(basename "$PWD" | tr '[:upper:]' '[:lower:]') +# --- Hilfsfunktionen (Provisioning) --- -# Colors -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -RED='\033[0;31m' -NC='\033[0m' # No Color - -# Load environment variables from .env if present -if [ -f .env ]; then - export $(grep -v '^#' .env | xargs) -fi - -# --- Helper Functions --- - -log() { echo -e "${GREEN}[INFO]${NC} $1"; } -warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } -error() { echo -e "${RED}[ERROR]${NC} $1"; } - -# Check if a specific container is running -is_running() { - [ "$(docker inspect -f '{{.State.Running}}' "$1" 2>/dev/null)" == "true" ] -} - -# List all valid service names defined in this project -list_services() { - log "Available services in this project:" - echo "-----------------------------------------------------------" - echo -e " ${GREEN}php${NC} - PHP Application Container" - echo -e " ${GREEN}apache${NC} - Web Server (Apache)" - echo -e " ${GREEN}database${NC} - MariaDB Main Instance" - echo -e " ${GREEN}database-testing${NC} - MariaDB Testing Instance" - echo -e " ${GREEN}mailhog${NC} - Mail Testing Service" - echo "-----------------------------------------------------------" -} - -# Robust check for initialization -check_initialization() { - local initialized=true - - # 1. Check for vendor directory - if [ ! -d "vendor" ]; then - warn "Dependency check failed: directory 'vendor/' is missing." - initialized=false - fi - - # 2. Check for database volumes - # We look for volumes that are labeled by Docker Compose for this project and the service 'database' - # This avoids guessing the exact string name (hackathonapi_db vs hackathon-api_db) - local volume_exists=$(docker volume ls -q --filter "label=com.docker.compose.project" --filter "label=com.docker.compose.volume=db") - - if [ -z "$volume_exists" ]; then - warn "Infrastructure check failed: Database volume 'db' not found." - initialized=false - fi - - if [ "$initialized" = false ]; then - error "Project is not fully initialized." - echo -e "Please run ${GREEN}./bin/hackathon setup${NC} to initialize the environment." - exit 1 - fi -} - -show_info() { - echo "" - log "Service Connectivity Information:" - echo "-----------------------------------------------------------" - if is_running "hackathon-apache"; then - echo -e "Web Interface: http://localhost:${HTTP_PORT:-80}" - echo -e "API Documentation: http://localhost:${HTTP_PORT:-80}/api/docs/" - fi - if is_running "hackathon-mailhog"; then - echo -e "Mailhog Web-UI: http://localhost:${MAILHOG_WEBUI_PORT:-8025}" - echo -e "Mailhog SMTP Port: localhost:${MAILHOG_SMTP_PORT:-1025}" - fi - if is_running "hackathon-mariadb"; then - echo -e "Database (App): localhost:${MYSQL_PUBLIC_PORT:-3306}" - echo -e " User: ${MYSQL_USER:-dev} | Pass: ${MYSQL_PASSWORD:-dev}" - fi - if is_running "hackathon-mariadb-testing"; then - echo -e "Database (Test): localhost:${MYSQL_TESTING_PORT:-3307}" - echo -e " User: ${MYSQL_USER:-dev} | Pass: ${MYSQL_PASSWORD:-dev}" - fi - echo "-----------------------------------------------------------" - echo "" -} +log() { echo -e "\033[0;32m[INFO]\033[0m $1"; } +# 1. Startet die Container up() { - log "Starting containers..." + log "Starte Container..." $DOCKER_COMPOSE up -d } +# 2. Beendet und entfernt Container & Netzwerke (behält Volumes) down() { - log "Stopping containers and removing networks..." + log "Fahre Container herunter und entferne Netzwerke..." $DOCKER_COMPOSE down } -cleanup_docker() { - log "Starting full Docker cleanup (containers, volumes, images)..." - $DOCKER_COMPOSE down -v --rmi all --remove-orphans - log "All Docker resources have been removed." -} - -cleanup_app() { - log "Cleaning application files and caches..." - local dirs=(".phplint.cache" ".phpunit.cache" ".phpunit.functional.cache" "vendor") - for dir in "${dirs[@]}"; do - if [ -d "$dir" ]; then - rm -rf "$dir" && log "-> $dir/ removed" - fi - done - local content_dirs=("data/cache" "data/log") - for c_dir in "${content_dirs[@]}"; do - if [ -d "$c_dir" ]; then - find "$c_dir" -mindepth 1 -delete && log "-> contents of $c_dir/ cleared" - fi - done - if [ -f ".phpcs-cache" ]; then - rm ".phpcs-cache" && log "-> .phpcs-cache removed" - fi -} - +# 3. Installiert Abhängigkeiten (nur wenn nötig oder erzwungen) install_deps() { if [ ! -d "./vendor" ] || [ "$1" == "--force" ]; then - log "Installing PHP dependencies..." + log "Installiere PHP-Abhängigkeiten..." $DOCKER_COMPOSE exec $CONTAINER_PHP composer install fi } +# 4. Bereitet die Datenbank vor (Warten + Migrationen) migrate_db() { - log "Waiting for database readiness..." + log "Warte auf Datenbank..." $DOCKER_COMPOSE exec $CONTAINER_PHP php -r " \$start = time(); while (true) { try { - new PDO('mysql:host=database;port=3306', 'root', '${MYSQL_ROOT_PASSWORD:-root}'); + new PDO('mysql:host=db;port=3306', 'root', 'root'); break; } catch (Exception \$e) { if (time() - \$start > 30) { echo 'Timeout!'; exit(1); } echo '.'; sleep(1); } }" - echo "" - log "Running migrations..." + + log "Führe Migrationen aus..." $DOCKER_COMPOSE exec $CONTAINER_PHP composer run doctrine migrations:sync-metadata-storage -- --no-interaction $DOCKER_COMPOSE exec $CONTAINER_PHP composer run doctrine migrations:migrate -- --no-interaction } generate_openapi() { - log "Generating OpenAPI documentation..." + log "Generiere OpenAPI Dokumentation..." $DOCKER_COMPOSE exec $CONTAINER_PHP composer run openapi } + +# Bau-Kette build_stack() { up install_deps "$1" migrate_db generate_openapi - show_info } # --- Command Handler --- case $1 in "start") - check_initialization up - show_info ;; + "stop") - log "Pausing containers..." + log "Stoppe Container (Pause)..." $DOCKER_COMPOSE stop ;; + "down") down ;; + "setup") build_stack ;; - "openapi") - generate_openapi - ;; - "info") - show_info - ;; - "services") - list_services - ;; - "logs") - if [ -z "$2" ]; then - $DOCKER_COMPOSE logs -f - else - case $2 in - php|apache|database|database-testing|mailhog) $DOCKER_COMPOSE logs -f "$2" ;; - *) list_services; echo -e "Usage: $0 logs {${GREEN}svc${NC}}"; exit 1 ;; - esac - fi - ;; - "test") - $DOCKER_COMPOSE exec $CONTAINER_PHP vendor/bin/phpunit "${@:2}" - ;; - "mysql") - log "Connecting to Database Console..." - $DOCKER_COMPOSE exec database mariadb -u "${MYSQL_USER:-dev}" -p"${MYSQL_PASSWORD:-dev}" "${MYSQL_DATABASE:-db}" - ;; - "bash") - log "Entering PHP container..." - $DOCKER_COMPOSE exec $CONTAINER_PHP sh -c "which bash > /dev/null && bash || sh" - ;; - "clean") - case $2 in - "docker") cleanup_docker ;; - "app") cleanup_app ;; - "all") cleanup_docker; cleanup_app ;; - *) - echo -e "Usage: $0 clean {${GREEN}docker${NC}|${GREEN}app${NC}|${GREEN}all${NC}}" - echo "" - echo "Options:" - echo -e " ${GREEN}docker${NC} - Remove all project containers, networks, volumes and ALL images" - echo -e " ${GREEN}app${NC} - Remove vendor/ folder, all cache directories and clear logs" - echo -e " ${GREEN}all${NC} - Full cleanup (Combines both docker and app cleanup)" - exit 1 - ;; - esac - ;; + + "openapi") + generate_openapi + ;; + "reset") + log "Reset-Vorgang gestartet..." + case $2 in - "database") - log "Resetting database..." - $DOCKER_COMPOSE down -v - build_stack + "all") + log "Modus: Alles (Volumes, Images, Vendor)" + $DOCKER_COMPOSE down -v --rmi local + [ -d "./vendor" ] && rm -rf "./vendor" + FORCE_FLAG="--force" ;; "vendor") - log "Resetting vendor folder..." - [ -d "vendor" ] && rm -rf "vendor" - up - install_deps "--force" - show_info - ;; - "all") - log "Resetting entire application stack..." + log "Modus: Datenbank + Vendor" $DOCKER_COMPOSE down -v - cleanup_app - build_stack "--force" + [ -d "./vendor" ] && rm -rf "./vendor" + FORCE_FLAG="--force" ;; *) - echo -e "Usage: $0 reset {${GREEN}database${NC}|${GREEN}vendor${NC}|${GREEN}all${NC}}" - echo "" - echo "Options:" - echo -e " ${GREEN}database${NC} - Wipe database volumes and re-run migrations (restarts containers)" - echo -e " ${GREEN}vendor${NC} - Wipe vendor/ folder and reinstall dependencies (DB stays untouched)" - echo -e " ${GREEN}all${NC} - Wipe database, vendor/ and ALL caches, then perform fresh setup" - exit 1 + log "Modus: Nur Datenbank (Standard)" + $DOCKER_COMPOSE down -v + FORCE_FLAG="" ;; esac + + build_stack $FORCE_FLAG + log "Reset erfolgreich abgeschlossen." ;; + "composer") $DOCKER_COMPOSE exec $CONTAINER_PHP composer "${@:2}" ;; + "php") - $DOCKER_COMPOSE exec $CONTAINER_PHP php "${@:2}" - ;; + # Hier wird 'php' automatisch vorangestellt + $DOCKER_COMPOSE exec $CONTAINER_PHP php "${@:2}" + ;; + "indocker") - case $2 in - php|apache|database|database-testing|mailhog) - SERVICE=$2 - COMMAND=${@:3} - if [ -z "$COMMAND" ]; then - log "Entering $SERVICE container..." - $DOCKER_COMPOSE exec "$SERVICE" sh -c "which bash > /dev/null && bash || sh" - else - $DOCKER_COMPOSE exec "$SERVICE" $COMMAND - fi - ;; - *) - list_services - echo -e "Usage: $0 indocker {${GREEN}svc${NC}} [command]" - exit 1 - ;; - esac - ;; + # Hier wird der Befehl 1:1 durchgereicht + $DOCKER_COMPOSE exec $CONTAINER_PHP "${@:2}" + ;; + *) - echo -e "Usage: $0 {${GREEN}start${NC}|${GREEN}stop${NC}|${GREEN}down${NC}|${GREEN}setup${NC}|${GREEN}reset${NC}|${GREEN}openapi${NC}|${GREEN}info${NC}|${GREEN}clean${NC}|${GREEN}composer${NC}|${GREEN}php${NC}|${GREEN}indocker${NC}}" - echo "" - echo "Infrastructure Commands:" - echo -e " ${GREEN}start${NC} - Start containers (checks for initialization first)" - echo -e " ${GREEN}stop${NC} - Pause containers (preserves state)" - echo -e " ${GREEN}down${NC} - Stop and remove containers and networks" - echo -e " ${GREEN}setup${NC} - Full initial installation (Start, Install, Migrate, OpenAPI)" - echo -e " ${GREEN}info${NC} - Show connectivity info (URLs, Ports, Credentials)" - echo -e " ${GREEN}services${NC} - List all available service names" - echo -e " ${GREEN}openapi${NC} - Regenerate the OpenAPI documentation" - echo "" - echo "Maintenance Commands:" - echo -e " ${GREEN}clean [...]${NC} - Delete resources (run without args for options)" - echo -e " ${GREEN}reset [...]${NC} - Restart with fresh data (run without args for options)" - echo "" - echo "Utility & Development:" - echo -e " ${GREEN}composer [...]${NC} - Execute Composer commands" - echo -e " ${GREEN}php [...]${NC} - Execute PHP scripts" - echo -e " ${GREEN}test [...]${NC} - Run PHPUnit tests" - echo -e " ${GREEN}logs [svc]${NC} - Tail logs for all or a specific service" - echo -e " ${GREEN}bash${NC} - Shortcut to enter PHP container" - echo -e " ${GREEN}mysql${NC} - Shortcut to enter Database CLI" - echo -e " ${GREEN}indocker [svc]${NC} - Access a specific container" - exit 1 - ;; + echo "Usage: $0 {start|stop|down|setup|reset|openapi|composer|php|indocker}" + echo "" + echo "Commands:" + echo " start - Start containers" + echo " stop - Stop containers (pause)" + echo " down - Remove containers & networks" + echo " setup - Prepare project (install, migrate & generate openapi)" + echo " openapi - Regenerate API documentation" + echo "" + echo "Reset Options:" + echo " reset - Delete database only" + echo " reset vendor - Delete database & vendor/ folder" + echo " reset all - Delete everything (volumes, local images, vendor/)" + echo "" + echo "Utility Commands (inside PHP container):" + echo " composer [...] - Execute Composer commands" + echo " Ex: $0 composer install" + echo " php [...] - Execute PHP scripts/commands (prefixes 'php')" + echo " Ex: $0 php bin/console cache:clear" + echo " Ex: $0 php -v" + echo " indocker [...] - Execute any system command in the container" + echo " Ex: $0 indocker ls -la" + exit 1 + ;; esac diff --git a/data/cache/.gitkeep b/data/cache/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/data/log/.gitkeep b/data/log/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/docker-compose.yml b/docker-compose.yml index 13d8053d..af55b61b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -53,8 +53,8 @@ services: logging: driver: 'none' # disable saving logs ports: - - "${MAILHOG_SMTP_PORT:-1025}:1025" # smtp server - - "${MAILHOG_WEBUI_PORT:-8025}:8025" # web ui + - "1025:1025" # smtp server + - "8025:8025" # web ui volumes: db: diff --git a/phpcs.xml b/phpcs.xml index 09590230..d00b3555 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -15,6 +15,7 @@ src/ + tests/ */vendor/* diff --git a/public/api/docs/swagger.json b/public/api/docs/swagger.json index 328503d2..480eab04 100644 --- a/public/api/docs/swagger.json +++ b/public/api/docs/swagger.json @@ -65,7 +65,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccountRegistration" + "$ref": "#/components/schemas/AccountRegistrationDTO" } } } @@ -75,7 +75,7 @@ "description": "Success" }, "400": { - "description": "Bad request", + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -100,7 +100,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EMail" + "$ref": "#/components/schemas/EMailDTO" } } } @@ -136,7 +136,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccountPassword" + "$ref": "#/components/schemas/AccountPasswordDTO" } } } @@ -146,7 +146,7 @@ "description": "Success" }, "400": { - "description": "Bad request", + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -163,16 +163,16 @@ "tags": [ "Account" ], - "summary": "Endpoint to register a new user account.", - "description": "Create Account", + "summary": "Create new Account", + "description": "Create new Account", "operationId": "8a212b9a005ff2dd5aeea1756d25bd05", "requestBody": { - "description": "The email address for the new account", + "description": "E-Mail for register Account", "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EMail" + "$ref": "#/components/schemas/EMailDTO" } } } @@ -182,7 +182,7 @@ "description": "Success" }, "400": { - "description": "Bad request", + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -234,7 +234,7 @@ } }, "403": { - "description": "Access denied", + "description": "Access not permitted", "content": { "application/json": { "schema": { @@ -307,6 +307,15 @@ }, "components": { "schemas": { + "AccessToken": { + "properties": { + "accessToken": { + "description": "The Token for authorized access", + "type": "string" + } + }, + "type": "object" + }, "AccountAuthenticationData": { "required": [ "email", @@ -324,7 +333,7 @@ }, "type": "object" }, - "AccountPassword": { + "AccountPasswordDTO": { "properties": { "password": { "description": "The Password", @@ -333,7 +342,16 @@ }, "type": "object" }, - "AccountRegistration": { + "AccountPasswordTokenDTO": { + "properties": { + "accountPasswordToken": { + "description": "Token to set a new password", + "type": "string" + } + }, + "type": "object" + }, + "AccountRegistrationDTO": { "required": [ "accountName", "password" @@ -350,15 +368,6 @@ }, "type": "object" }, - "EMail": { - "properties": { - "email": { - "description": "The E-Mail", - "type": "string" - } - }, - "type": "object" - }, "AuthenticationResponse": { "properties": { "accessToken": { @@ -372,34 +381,23 @@ }, "type": "object" }, - "HttpResponseMessage": { - "properties": { - "statusCode": { - "description": "The Http Status Code", - "type": "integer", - "example": 400 - }, - "message": { - "description": "The Message", - "type": "string", - "example": "Bad request" - } - }, - "type": "object" - }, - "AccessToken": { + "EMailDTO": { "properties": { - "accessToken": { - "description": "The Token for authorized access", + "email": { + "description": "The E-Mail", "type": "string" } }, "type": "object" }, - "AccountPasswordToken": { + "HttpResponseMessage": { "properties": { - "accountPasswordToken": { - "description": "Token to set a new password", + "statusCode": { + "description": "The Http Status Code", + "type": "integer" + }, + "message": { + "description": "The Message", "type": "string" } }, diff --git a/src/App/DTO/Response/HttpResponseMessage.php b/src/App/DTO/Response/HttpResponseMessage.php index d40fe3e8..0a6e0b6d 100644 --- a/src/App/DTO/Response/HttpResponseMessage.php +++ b/src/App/DTO/Response/HttpResponseMessage.php @@ -2,9 +2,7 @@ namespace ownHackathon\App\DTO\Response; -use Fig\Http\Message\StatusCodeInterface as Http; use OpenApi\Attributes as OA; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Enum\DataType; #[OA\Schema()] @@ -14,19 +12,17 @@ public function __construct( #[OA\Property( description: 'The Http Status Code', type: DataType::INTEGER->value, - example: HTTP::STATUS_BAD_REQUEST )] public int $statusCode, #[OA\Property( description: 'The Message', type: DataType::STRING->value, - example: StatusMessage::BAD_REQUEST->value )] - public StatusMessage $message, + public string $message, ) { } - public static function create(int $statusCode, StatusMessage $message): self + public static function create(int $statusCode, string $message): self { return new self($statusCode, $message); } diff --git a/src/App/Entity/Account/AccountAccessAuth.php b/src/App/Entity/Account/AccountAccessAuth.php index faa61357..f0842669 100644 --- a/src/App/Entity/Account/AccountAccessAuth.php +++ b/src/App/Entity/Account/AccountAccessAuth.php @@ -12,7 +12,7 @@ use CloneReadonlyClassWith; public function __construct( - public ?int $id, + public int $id, public int $accountId, public string $label, public string $refreshToken, diff --git a/src/App/Handler/Account/AccessTokenHandler.php b/src/App/Handler/Account/AccessTokenHandler.php index 6fec3518..eb981c77 100644 --- a/src/App/Handler/Account/AccessTokenHandler.php +++ b/src/App/Handler/Account/AccessTokenHandler.php @@ -7,7 +7,7 @@ use OpenApi\Attributes as OA; use ownHackathon\App\DTO\Response\HttpResponseMessage; use ownHackathon\App\DTO\Token\AccessToken; -use ownHackathon\Core\Enum\Message\StatusMessage; +use ownHackathon\Core\Message\OAMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -21,12 +21,12 @@ )] #[OA\Response( response: HTTP::STATUS_OK, - description: StatusMessage::SUCCESS->value, + description: OAMessage::SUCCESS, content: [new OA\JsonContent(ref: AccessToken::class)] )] #[OA\Response( response: HTTP::STATUS_UNAUTHORIZED, - description: StatusMessage::UNAUTHORIZED_ACCESS->value, + description: OAMessage::UNAUTHORIZED_ACCESS, content: [new OA\JsonContent(ref: HttpResponseMessage::class)] )] public function handle(ServerRequestInterface $request): ResponseInterface diff --git a/src/App/Handler/Account/AccountActivationHandler.php b/src/App/Handler/Account/AccountActivationHandler.php index 3de5dfc7..c08e70ce 100644 --- a/src/App/Handler/Account/AccountActivationHandler.php +++ b/src/App/Handler/Account/AccountActivationHandler.php @@ -7,7 +7,7 @@ use OpenApi\Attributes as OA; use ownHackathon\App\DTO\Account\AccountRegistration; use ownHackathon\App\DTO\Response\HttpResponseMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; +use ownHackathon\Core\Message\OAMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -35,11 +35,11 @@ class AccountActivationHandler implements RequestHandlerInterface )] #[OA\Response( response: HTTP::STATUS_OK, - description: StatusMessage::SUCCESS->value, + description: OAMessage::SUCCESS, )] #[OA\Response( response: HTTP::STATUS_BAD_REQUEST, - description: StatusMessage::BAD_REQUEST->value, + description: OAMessage::BAD_REQUEST, content: [new OA\JsonContent(ref: HttpResponseMessage::class)] )] public function handle(ServerRequestInterface $request): ResponseInterface diff --git a/src/App/Handler/Account/AccountPasswordForgottenHandler.php b/src/App/Handler/Account/AccountPasswordForgottenHandler.php index c89f3370..4dea030b 100644 --- a/src/App/Handler/Account/AccountPasswordForgottenHandler.php +++ b/src/App/Handler/Account/AccountPasswordForgottenHandler.php @@ -6,7 +6,7 @@ use Laminas\Diactoros\Response\JsonResponse; use OpenApi\Attributes as OA; use ownHackathon\App\DTO\EMail\EMail; -use ownHackathon\Core\Enum\Message\StatusMessage; +use ownHackathon\Core\Message\OAMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -25,7 +25,7 @@ class AccountPasswordForgottenHandler implements RequestHandlerInterface )] #[OA\Response( response: HTTP::STATUS_OK, - description: StatusMessage::SUCCESS->value, + description: OAMessage::SUCCESS, )] public function handle(ServerRequestInterface $request): ResponseInterface { diff --git a/src/App/Handler/Account/AccountPasswordHandler.php b/src/App/Handler/Account/AccountPasswordHandler.php index 53bf175c..d6bf70e1 100644 --- a/src/App/Handler/Account/AccountPasswordHandler.php +++ b/src/App/Handler/Account/AccountPasswordHandler.php @@ -7,7 +7,7 @@ use OpenApi\Attributes as OA; use ownHackathon\App\DTO\Account\AccountPassword; use ownHackathon\App\DTO\Response\HttpResponseMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; +use ownHackathon\Core\Message\OAMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -35,11 +35,11 @@ class AccountPasswordHandler implements RequestHandlerInterface )] #[OA\Response( response: HTTP::STATUS_OK, - description: StatusMessage::SUCCESS->value, + description: OAMessage::SUCCESS, )] #[OA\Response( response: HTTP::STATUS_BAD_REQUEST, - description: StatusMessage::BAD_REQUEST->value, + description: OAMessage::BAD_REQUEST, content: [new OA\JsonContent(ref: HttpResponseMessage::class)] )] public function handle(ServerRequestInterface $request): ResponseInterface diff --git a/src/App/Handler/Account/AccountRegisterHandler.php b/src/App/Handler/Account/AccountRegisterHandler.php index a2ddb4cc..19ca8281 100644 --- a/src/App/Handler/Account/AccountRegisterHandler.php +++ b/src/App/Handler/Account/AccountRegisterHandler.php @@ -7,7 +7,7 @@ use OpenApi\Attributes as OA; use ownHackathon\App\DTO\EMail\EMail; use ownHackathon\App\DTO\Response\HttpResponseMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; +use ownHackathon\Core\Message\OAMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -16,22 +16,22 @@ { #[OA\Post( path: '/account', - description: 'Create Account', - summary: 'Endpoint to register a new user account.', + description: 'Create new Account', + summary: 'Create new Account', tags: ['Account'], )] #[OA\RequestBody( - description: 'The email address for the new account', + description: 'E-Mail for register Account', required: true, content: new OA\JsonContent(ref: EMail::class) )] #[OA\Response( response: HTTP::STATUS_OK, - description: StatusMessage::SUCCESS->value, + description: OAMessage::SUCCESS, )] #[OA\Response( response: HTTP::STATUS_BAD_REQUEST, - description: StatusMessage::BAD_REQUEST->value, + description: OAMessage::BAD_REQUEST, content: [new OA\JsonContent(ref: HttpResponseMessage::class)] )] public function handle(ServerRequestInterface $request): ResponseInterface diff --git a/src/App/Handler/Account/AuthenticationHandler.php b/src/App/Handler/Account/AuthenticationHandler.php index f70033c4..b6881c3b 100644 --- a/src/App/Handler/Account/AuthenticationHandler.php +++ b/src/App/Handler/Account/AuthenticationHandler.php @@ -10,7 +10,7 @@ use ownHackathon\App\DTO\Response\HttpResponseMessage; use ownHackathon\App\DTO\Token\AccessToken; use ownHackathon\App\DTO\Token\RefreshToken; -use ownHackathon\Core\Enum\Message\StatusMessage; +use ownHackathon\Core\Message\OAMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -29,17 +29,17 @@ )] #[OA\Response( response: HTTP::STATUS_OK, - description: StatusMessage::SUCCESS->value, + description: OAMessage::SUCCESS, content: [new OA\JsonContent(ref: AuthenticationResponse::class)] )] #[OA\Response( response: HTTP::STATUS_UNAUTHORIZED, - description: StatusMessage::UNAUTHORIZED_ACCESS->value, + description: OAMessage::UNAUTHORIZED_ACCESS, content: [new OA\JsonContent(ref: HttpResponseMessage::class)] )] #[OA\Response( response: HTTP::STATUS_FORBIDDEN, - description: StatusMessage::FORBIDDEN->value, + description: OAMessage::FORBIDDEN, content: [new OA\JsonContent(ref: HttpResponseMessage::class)] )] public function handle(ServerRequestInterface $request): ResponseInterface diff --git a/src/App/Handler/Account/LogoutHandler.php b/src/App/Handler/Account/LogoutHandler.php index 83bc19e9..1ab96dfe 100644 --- a/src/App/Handler/Account/LogoutHandler.php +++ b/src/App/Handler/Account/LogoutHandler.php @@ -7,7 +7,8 @@ use OpenApi\Attributes as OA; use ownHackathon\App\DTO\Response\AuthenticationResponse; use ownHackathon\App\DTO\Response\HttpResponseMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; +use ownHackathon\Core\Message\OAMessage; +use ownHackathon\Core\Message\ResponseMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -21,17 +22,17 @@ class LogoutHandler implements RequestHandlerInterface )] #[OA\Response( response: HTTP::STATUS_OK, - description: StatusMessage::SUCCESS->value, + description: OAMessage::SUCCESS, content: [new OA\JsonContent(ref: AuthenticationResponse::class)] )] #[OA\Response( response: HTTP::STATUS_UNAUTHORIZED, - description: StatusMessage::UNAUTHORIZED_ACCESS->value, + description: OAMessage::UNAUTHORIZED_ACCESS, content: [new OA\JsonContent(ref: HttpResponseMessage::class)] )] public function handle(ServerRequestInterface $request): ResponseInterface { - $response = HttpResponseMessage::create(HTTP::STATUS_OK, StatusMessage::SUCCESS); + $response = HttpResponseMessage::create(HTTP::STATUS_OK, ResponseMessage::SUCCESS); return new JsonResponse($response, $response->statusCode); } diff --git a/src/App/Handler/PingHandler.php b/src/App/Handler/PingHandler.php index 89f799b5..65440e8f 100644 --- a/src/App/Handler/PingHandler.php +++ b/src/App/Handler/PingHandler.php @@ -5,11 +5,11 @@ use Fig\Http\Message\StatusCodeInterface as HTTP; use Laminas\Diactoros\Response\JsonResponse; use OpenApi\Attributes as OA; -use ownHackathon\Core\Enum\Message\StatusMessage; -use ownHackathon\Core\Enum\DataType; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; +use ownHackathon\Core\Enum\DataType; +use ownHackathon\Core\Message\OAMessage; use function time; @@ -22,7 +22,7 @@ responses: [ new OA\Response( response: HTTP::STATUS_OK, - description: StatusMessage::SUCCESS->value, + description: OAMessage::SUCCESS, content: [ new OA\JsonContent( properties: [ diff --git a/src/App/Middleware/Account/ActivationMiddleware.php b/src/App/Middleware/Account/ActivationMiddleware.php index a7a27b59..eb69c6ed 100644 --- a/src/App/Middleware/Account/ActivationMiddleware.php +++ b/src/App/Middleware/Account/ActivationMiddleware.php @@ -6,11 +6,10 @@ use ownHackathon\App\DTO\Account\AccountRegistration; use ownHackathon\App\Entity\Account\Account; use ownHackathon\Core\Entity\Account\AccountActivationInterface; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\DuplicateEntryException; use ownHackathon\Core\Exception\HttpDuplicateEntryException; use ownHackathon\Core\Exception\HttpInvalidArgumentException; +use ownHackathon\Core\Message\ResponseMessage; use ownHackathon\Core\Repository\AccountActivationRepositoryInterface; use ownHackathon\Core\Repository\AccountRepositoryInterface; use ownHackathon\Core\Utils\UuidFactoryInterface; @@ -41,8 +40,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if ($activationToken === null) { throw new HttpInvalidArgumentException( - LogMessage::ACTIVATION_TOKEN_MISSING, - StatusMessage::TOKEN_INVALID, + 'No activation token was passed.', + ResponseMessage::TOKEN_INVALID, [ 'Token:' => $activationToken, ] @@ -54,8 +53,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if ($persistActivationToken === null) { throw new HttpInvalidArgumentException( - LogMessage::ACTIVATION_TOKEN_MISSING, - StatusMessage::TOKEN_INVALID, + 'Transferred activation key is invalid.', + ResponseMessage::TOKEN_INVALID, [ 'Invalid activation token:' => $activationToken, ] @@ -76,8 +75,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $this->accountRepository->insert($account); } catch (DuplicateEntryException $e) { throw new HttpDuplicateEntryException( - LogMessage::ACCOUNT_ALREADY_EXISTS, - StatusMessage::INVALID_DATA, + 'Account has already been created.', + ResponseMessage::DATA_INVALID, [ 'E-Mail' => $account->email->toString(), 'Exception Message:' => $e->getMessage(), diff --git a/src/App/Middleware/Account/LoginAuthentication/AuthenticationConditionsMiddleware.php b/src/App/Middleware/Account/LoginAuthentication/AuthenticationConditionsMiddleware.php index 6995396c..82034938 100644 --- a/src/App/Middleware/Account/LoginAuthentication/AuthenticationConditionsMiddleware.php +++ b/src/App/Middleware/Account/LoginAuthentication/AuthenticationConditionsMiddleware.php @@ -2,9 +2,8 @@ namespace ownHackathon\App\Middleware\Account\LoginAuthentication; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpUnauthorizedException; +use ownHackathon\Core\Message\ResponseMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; @@ -16,8 +15,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface { if ($request->hasHeader('Authentication') || $request->hasHeader('Authorization')) { throw new HttpUnauthorizedException( - LogMessage::LOGIN_DENIED_AUTH_HEADER_ALREADY_PRESENT, - StatusMessage::ACCOUNT_ALREADY_AUTHENTICATED, + 'Login failed because the authentication or authorization header is already set.', + ResponseMessage::ACCOUNT_ALREADY_AUTHENTICATED, [ 'uri' => (string)$request->getUri(), 'ip' => $request->getServerParams()['REMOTE_ADDR'] ?? 'unknown', diff --git a/src/App/Middleware/Account/LoginAuthentication/AuthenticationMiddleware.php b/src/App/Middleware/Account/LoginAuthentication/AuthenticationMiddleware.php index a32968d8..24a48212 100644 --- a/src/App/Middleware/Account/LoginAuthentication/AuthenticationMiddleware.php +++ b/src/App/Middleware/Account/LoginAuthentication/AuthenticationMiddleware.php @@ -6,9 +6,8 @@ use Monolog\Level; use ownHackathon\App\Service\Authentication\AuthenticationService; use ownHackathon\Core\Entity\Account\AccountInterface; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpUnauthorizedException; +use ownHackathon\Core\Message\ResponseMessage; use ownHackathon\Core\Repository\AccountRepositoryInterface; use ownHackathon\Core\Type\Email; use Psr\Http\Message\ResponseInterface; @@ -32,8 +31,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (!array_key_exists('email', $data)) { throw new HttpUnauthorizedException( - LogMessage::REQUIRED_EMAIL_MISSING, - StatusMessage::INVALID_DATA + 'Required argument was not passed to the route. Argument => email', + ResponseMessage::DATA_INVALID ); } @@ -43,8 +42,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (!($account instanceof AccountInterface)) { throw new HttpUnauthorizedException( - LogMessage::ACCOUNT_NOT_FOUND, - StatusMessage::INVALID_DATA, + 'An account with the specified email address was not found.', + ResponseMessage::DATA_INVALID, [ 'E-Mail:' => $email->toString(), ], @@ -54,8 +53,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (!$this->service->isPasswordMatch($data['password'], $account->password)) { throw new HttpUnauthorizedException( - LogMessage::PASSWORD_INCORRECT, - StatusMessage::INVALID_DATA, + 'Incorrect password', + ResponseMessage::DATA_INVALID, [ 'E-Mail:' => $email->toString(), ], diff --git a/src/App/Middleware/Account/LoginAuthentication/AuthenticationValidationMiddleware.php b/src/App/Middleware/Account/LoginAuthentication/AuthenticationValidationMiddleware.php index 3281782b..10e47d1b 100644 --- a/src/App/Middleware/Account/LoginAuthentication/AuthenticationValidationMiddleware.php +++ b/src/App/Middleware/Account/LoginAuthentication/AuthenticationValidationMiddleware.php @@ -3,9 +3,8 @@ namespace ownHackathon\App\Middleware\Account\LoginAuthentication; use ownHackathon\App\Validator\AuthenticationValidator; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpUnauthorizedException; +use ownHackathon\Core\Message\ResponseMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; @@ -26,8 +25,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (!$this->validator->isValid()) { throw new HttpUnauthorizedException( - LogMessage::EMAIL_INVALID, - StatusMessage::INVALID_DATA, + 'Email and/or password are not valid', + ResponseMessage::DATA_INVALID, [ 'E-Mail:' => $data['email'] ?? null, 'Validator-Message:' => $this->validator->getMessages(), diff --git a/src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php b/src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php index 6bc5883a..14e96264 100644 --- a/src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php +++ b/src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php @@ -7,11 +7,10 @@ use ownHackathon\App\DTO\Token\RefreshToken; use ownHackathon\App\Entity\Account\AccountAccessAuth; use ownHackathon\Core\Entity\Account\AccountInterface; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\DuplicateEntryException; use ownHackathon\Core\Exception\HttpDuplicateEntryException; use ownHackathon\Core\Exception\HttpUnauthorizedException; +use ownHackathon\Core\Message\ResponseMessage; use ownHackathon\Core\Repository\AccountAccessAuthRepositoryInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -39,8 +38,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface // @phpstan-ignore-next-line if ($account === null || $clientIdent === null || $refreshToken === null) { throw new HttpUnauthorizedException( - LogMessage::AUTHENTICATION_PERSISTENCE_ERROR, - StatusMessage::INVALID_DATA, + 'Authentication could not be permanently stored due to missing data.', + ResponseMessage::DATA_INVALID, [ // @phpstan-ignore-next-line 'Account:' => isset($account) ? $account->email : null, @@ -64,8 +63,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $this->repository->insert($accountAccessAuth); } catch (DuplicateEntryException $e) { throw new HttpDuplicateEntryException( - LogMessage::DUPLICATE_SOURCE_LOGIN, - StatusMessage::INVALID_DATA, + 'Login is not possible due to a duplicate login from the same source.', + ResponseMessage::DATA_INVALID, [ 'Account' => $account->name, 'ClientID' => $clientIdent->identificationHash, diff --git a/src/App/Middleware/Account/LogoutMiddleware.php b/src/App/Middleware/Account/LogoutMiddleware.php index 9a63e2f5..ccb572e1 100644 --- a/src/App/Middleware/Account/LogoutMiddleware.php +++ b/src/App/Middleware/Account/LogoutMiddleware.php @@ -6,8 +6,6 @@ use ownHackathon\App\DTO\Client\ClientIdentification; use ownHackathon\Core\Entity\Account\AccountAccessAuthInterface; use ownHackathon\Core\Entity\Account\AccountInterface; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpUnauthorizedException; use ownHackathon\Core\Repository\AccountAccessAuthRepositoryInterface; use Psr\Http\Message\ResponseInterface; @@ -29,8 +27,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (!($account instanceof AccountInterface)) { throw new HttpUnauthorizedException( - LogMessage::LOGOUT_REQUIRES_AUTHENTICATION, - StatusMessage::UNAUTHORIZED_ACCESS, + 'Unauthorized access', + 'Unauthorized access', [], Level::Warning ); @@ -46,8 +44,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (!($accountAccessAuth instanceof AccountAccessAuthInterface)) { throw new HttpUnauthorizedException( - LogMessage::LOGOUT_CLIENT_IDENTITY_MISMATCH, - StatusMessage::UNAUTHORIZED_ACCESS, + 'Unauthorized access', + 'Unauthorized access', [ 'accountId' => $account->id, 'clientIdentificationHash' => $clientId->identificationHash, diff --git a/src/App/Middleware/Account/PasswordChangeMiddleware.php b/src/App/Middleware/Account/PasswordChangeMiddleware.php index 9cbddf8d..60f859fc 100644 --- a/src/App/Middleware/Account/PasswordChangeMiddleware.php +++ b/src/App/Middleware/Account/PasswordChangeMiddleware.php @@ -5,10 +5,9 @@ use ownHackathon\App\Entity\Account\Account; use ownHackathon\App\Service\Account\AccountService; use ownHackathon\Core\Entity\Token\TokenInterface; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Enum\TokenType; use ownHackathon\Core\Exception\HttpInvalidArgumentException; +use ownHackathon\Core\Message\ResponseMessage; use ownHackathon\Core\Repository\AccountRepositoryInterface; use ownHackathon\Core\Repository\TokenRepositoryInterface; use Psr\Http\Message\ResponseInterface; @@ -31,19 +30,19 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $password = $request->getParsedBody()['password']; if ($token === null) { - return $this->errorResponse(LogMessage::PASSWORD_CHANGE_TOKEN_MISSING, $token); + return $this->errorResponse('No token was passed.', $token); } $persistedToken = $this->tokenRepository->findByToken($token); if (!($persistedToken instanceof TokenInterface) || $persistedToken->tokenType !== TokenType::EMail) { - return $this->errorResponse(LogMessage::PASSWORD_CHANGE_TOKEN_INVALID, $token); + return $this->errorResponse('Invalid token was passed.', $token); } $account = $this->accountRepository->findById($persistedToken->accountId); if (!($account instanceof Account)) { - return $this->errorResponse(LogMessage::PASSWORD_CHANGE_TOKEN_ACCOUNT_NOT_FOUND, $token); + return $this->errorResponse('Invalid token was passed.', $token); } $hashedPassword = $this->accountService->cryptPassword($password); @@ -55,11 +54,11 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface return $handler->handle($request); } - private function errorResponse(LogMessage $logMessage, ?string $token): ResponseInterface + private function errorResponse(string $logMessage, ?string $token): ResponseInterface { throw new HttpInvalidArgumentException( $logMessage, - StatusMessage::TOKEN_INVALID, + ResponseMessage::TOKEN_INVALID, [ 'Token:' => $token, ] diff --git a/src/App/Middleware/Account/PasswordForgottenMiddleware.php b/src/App/Middleware/Account/PasswordForgottenMiddleware.php index 89cd9dbb..2e6a9eff 100644 --- a/src/App/Middleware/Account/PasswordForgottenMiddleware.php +++ b/src/App/Middleware/Account/PasswordForgottenMiddleware.php @@ -4,9 +4,8 @@ use Monolog\Level; use ownHackathon\App\Service\Account\AccountService; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpHandledInvalidArgumentAsSuccessException; +use ownHackathon\Core\Message\ResponseMessage; use ownHackathon\Core\Type\Email; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -31,8 +30,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface } throw new HttpHandledInvalidArgumentAsSuccessException( - LogMessage::PASSWORD_REQUEST_MISSING_ACCOUNT, - StatusMessage::INVALID_DATA, + 'New password requested for non-existent account', + ResponseMessage::DATA_INVALID, [ 'email:' => $email->toString(), ], diff --git a/src/App/Middleware/Account/RequestAuthenticationMiddleware.php b/src/App/Middleware/Account/RequestAuthenticationMiddleware.php index 6c5a4860..64becf03 100644 --- a/src/App/Middleware/Account/RequestAuthenticationMiddleware.php +++ b/src/App/Middleware/Account/RequestAuthenticationMiddleware.php @@ -5,9 +5,8 @@ use Monolog\Level; use ownHackathon\App\Service\Token\AccessTokenService; use ownHackathon\Core\Entity\Account\AccountInterface; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpUnauthorizedException; +use ownHackathon\Core\Message\ResponseMessage; use ownHackathon\Core\Repository\AccountRepositoryInterface; use ownHackathon\Core\Utils\UuidFactoryInterface; use Psr\Http\Message\ResponseInterface; @@ -42,8 +41,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (!$this->accessTokenService->isValid($authorization)) { throw new HttpUnauthorizedException( - LogMessage::ACCESS_TOKEN_EXPIRED, - StatusMessage::TOKEN_EXPIRED, + 'Request with expired Access Token received.', + ResponseMessage::TOKEN_EXPIRED, [ 'uri' => (string)$request->getUri(), 'ip' => $request->getServerParams()['REMOTE_ADDR'] ?? 'unknown', @@ -56,8 +55,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $account = $this->accountRepository->findByUuid($uuid); if (!($account instanceof AccountInterface)) { throw new HttpUnauthorizedException( - LogMessage::ACCESS_TOKEN_ACCOUNT_NOT_FOUND, - StatusMessage::TOKEN_INVALID, + 'Request with invalid Access Token received (Account not found).', + ResponseMessage::TOKEN_INVALID, [ 'uri' => (string)$request->getUri(), 'uuid' => $authorization->uuid, diff --git a/src/App/Middleware/Account/Validation/ActivationInputValidatorMiddleware.php b/src/App/Middleware/Account/Validation/ActivationInputValidatorMiddleware.php index 3b01601e..80c689d7 100644 --- a/src/App/Middleware/Account/Validation/ActivationInputValidatorMiddleware.php +++ b/src/App/Middleware/Account/Validation/ActivationInputValidatorMiddleware.php @@ -4,9 +4,8 @@ use ownHackathon\App\DTO\Account\AccountRegistration; use ownHackathon\App\Validator\AccountActivationValidator; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpInvalidArgumentException; +use ownHackathon\Core\Message\ResponseMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; @@ -27,8 +26,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (!$this->validator->isValid()) { throw new HttpInvalidArgumentException( - LogMessage::ACCOUNT_NAME_INVALID, - StatusMessage::INVALID_DATA, + 'Name for Account and/or password are not valid', + ResponseMessage::DATA_INVALID, [ 'Account Name:' => $data['accountName'] ?? null, 'Validator-Message:' => $this->validator->getMessages(), diff --git a/src/App/Middleware/Account/Validation/EmailInputValidatorMiddleware.php b/src/App/Middleware/Account/Validation/EmailInputValidatorMiddleware.php index 61f7e599..2c6ee113 100644 --- a/src/App/Middleware/Account/Validation/EmailInputValidatorMiddleware.php +++ b/src/App/Middleware/Account/Validation/EmailInputValidatorMiddleware.php @@ -5,9 +5,8 @@ use Fig\Http\Message\StatusCodeInterface as HTTP; use ownHackathon\App\DTO\Response\HttpResponseMessage; use ownHackathon\App\Validator\EMailValidator; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpInvalidArgumentException; +use ownHackathon\Core\Message\ResponseMessage; use ownHackathon\Core\Type\Email; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -23,7 +22,7 @@ public function __construct( public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { - $message = HttpResponseMessage::create(HTTP::STATUS_BAD_REQUEST, StatusMessage::EMAIL_INVALID); + $message = HttpResponseMessage::create(HTTP::STATUS_BAD_REQUEST, ResponseMessage::EMAIL_INVALID); $data = $request->getParsedBody(); @@ -31,8 +30,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (!$this->mailValidator->isValid()) { throw new HttpInvalidArgumentException( - LogMessage::EMAIL_INVALID, - StatusMessage::INVALID_DATA, + 'Invalid E-Mail', + ResponseMessage::DATA_INVALID, [ 'E-Mail:' => $data['email'] ?? null, 'Validator Message:' => $this->mailValidator->getMessages(), diff --git a/src/App/Middleware/Account/Validation/PasswordInputValidatorMiddleware.php b/src/App/Middleware/Account/Validation/PasswordInputValidatorMiddleware.php index 249e6e03..668f75c4 100644 --- a/src/App/Middleware/Account/Validation/PasswordInputValidatorMiddleware.php +++ b/src/App/Middleware/Account/Validation/PasswordInputValidatorMiddleware.php @@ -3,9 +3,8 @@ namespace ownHackathon\App\Middleware\Account\Validation; use ownHackathon\App\Validator\PasswordValidator; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpInvalidArgumentException; +use ownHackathon\Core\Message\ResponseMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; @@ -26,8 +25,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (!$this->validator->isValid()) { throw new HttpInvalidArgumentException( - LogMessage::PASSWORD_INVALID, - StatusMessage::INVALID_DATA, + 'Invalid Password', + ResponseMessage::DATA_INVALID, [ 'Validator Message:' => $this->validator->getMessages(), ] diff --git a/src/App/Middleware/Token/AccessTokenValidationMiddleware.php b/src/App/Middleware/Token/AccessTokenValidationMiddleware.php index 0ba84584..3957992f 100644 --- a/src/App/Middleware/Token/AccessTokenValidationMiddleware.php +++ b/src/App/Middleware/Token/AccessTokenValidationMiddleware.php @@ -4,9 +4,8 @@ use Monolog\Level; use ownHackathon\App\Service\Token\AccessTokenService; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpUnauthorizedException; +use ownHackathon\Core\Message\ResponseMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; @@ -25,8 +24,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (empty($accessToken)) { throw new HttpUnauthorizedException( - LogMessage::ACCESS_TOKEN_MISSING, - StatusMessage::ACCOUNT_UNAUTHORIZED, + 'No AccessToken provided.', + ResponseMessage::ACCOUNT_UNAUTHORIZED, [], Level::Warning ); @@ -34,8 +33,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (!$this->tokenService->isValid($accessToken)) { throw new HttpUnauthorizedException( - LogMessage::ACCESS_TOKEN_EXPIRED, - StatusMessage::TOKEN_EXPIRED, + 'Expired access token.', + ResponseMessage::TOKEN_EXPIRED, [ 'Access Token:' => $accessToken, ], diff --git a/src/App/Middleware/Token/RefreshTokenAccountMiddleware.php b/src/App/Middleware/Token/RefreshTokenAccountMiddleware.php index a105b964..d8373242 100644 --- a/src/App/Middleware/Token/RefreshTokenAccountMiddleware.php +++ b/src/App/Middleware/Token/RefreshTokenAccountMiddleware.php @@ -6,9 +6,8 @@ use ownHackathon\App\Entity\Account\AccountAccessAuth; use ownHackathon\Core\Entity\Account\AccountAccessAuthInterface; use ownHackathon\Core\Entity\Account\AccountInterface; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpUnauthorizedException; +use ownHackathon\Core\Message\ResponseMessage; use ownHackathon\Core\Repository\AccountRepositoryInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -32,8 +31,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if ($account === null) { throw new HttpUnauthorizedException( - LogMessage::REFRESH_TOKEN_ACCOUNT_NOT_FOUND, - StatusMessage::TOKEN_INVALID, + 'Account does not exist in the transmitted token', + ResponseMessage::TOKEN_INVALID, [ 'AccessAuth ID:' => $accountAccessAuth->id, 'Account ID:' => $accountAccessAuth->accountId, diff --git a/src/App/Middleware/Token/RefreshTokenDatabaseExistenceMiddleware.php b/src/App/Middleware/Token/RefreshTokenDatabaseExistenceMiddleware.php index 187e0644..4c64c3ba 100644 --- a/src/App/Middleware/Token/RefreshTokenDatabaseExistenceMiddleware.php +++ b/src/App/Middleware/Token/RefreshTokenDatabaseExistenceMiddleware.php @@ -5,9 +5,8 @@ use Monolog\Level; use ownHackathon\App\DTO\Token\RefreshToken; use ownHackathon\Core\Entity\Account\AccountAccessAuthInterface; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpUnauthorizedException; +use ownHackathon\Core\Message\ResponseMessage; use ownHackathon\Core\Repository\AccountAccessAuthRepositoryInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -29,8 +28,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $persistToken = $this->accessAuthRepository->findByRefreshToken($refreshToken->refreshToken); if (!($persistToken instanceof AccountAccessAuthInterface)) { throw new HttpUnauthorizedException( - LogMessage::REFRESH_TOKEN_NOT_FOUND, - StatusMessage::TOKEN_NOT_PERSISTENT, + 'Refresh token not recognized by the system.', + ResponseMessage::TOKEN_NOT_PERSISTENT, [ 'Refresh Token:' => $refreshToken, ], diff --git a/src/App/Middleware/Token/RefreshTokenMatchClientIdentificationMiddleware.php b/src/App/Middleware/Token/RefreshTokenMatchClientIdentificationMiddleware.php index 0fd5db99..19227c17 100644 --- a/src/App/Middleware/Token/RefreshTokenMatchClientIdentificationMiddleware.php +++ b/src/App/Middleware/Token/RefreshTokenMatchClientIdentificationMiddleware.php @@ -6,9 +6,8 @@ use ownHackathon\App\DTO\Client\ClientIdentification; use ownHackathon\App\Entity\Account\AccountAccessAuth; use ownHackathon\Core\Entity\Account\AccountAccessAuthInterface; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpUnauthorizedException; +use ownHackathon\Core\Message\ResponseMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; @@ -26,8 +25,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if ($accountAccessAuth->clientIdentHash !== $clientIdentification->identificationHash) { throw new HttpUnauthorizedException( - LogMessage::REFRESH_TOKEN_CLIENT_MISMATCH, - StatusMessage::CLIENT_UNEXPECTED, + 'Client does not match expected client.', + ResponseMessage::CLIENT_UNEXPECTED, [ 'expected:' => $accountAccessAuth->clientIdentHash, 'expected UserAgent' => $accountAccessAuth->userAgent, diff --git a/src/App/Middleware/Token/RefreshTokenValidationMiddleware.php b/src/App/Middleware/Token/RefreshTokenValidationMiddleware.php index 0576b827..83ca35f1 100644 --- a/src/App/Middleware/Token/RefreshTokenValidationMiddleware.php +++ b/src/App/Middleware/Token/RefreshTokenValidationMiddleware.php @@ -4,9 +4,8 @@ use ownHackathon\App\DTO\Token\RefreshToken; use ownHackathon\App\Service\Token\RefreshTokenService; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpUnauthorizedException; +use ownHackathon\Core\Message\ResponseMessage; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; @@ -25,8 +24,8 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface if (!$this->tokenService->isValid($refreshToken)) { throw new HttpUnauthorizedException( - LogMessage::REFRESH_TOKEN_INVALID, - StatusMessage::TOKEN_INVALID, + 'Invalid refresh token.', + ResponseMessage::TOKEN_INVALID, [ 'Refresh Token:' => $refreshToken, ], diff --git a/src/Core/Entity/Account/AccountAccessAuthInterface.php b/src/Core/Entity/Account/AccountAccessAuthInterface.php index 56cf51ef..4be485d9 100644 --- a/src/Core/Entity/Account/AccountAccessAuthInterface.php +++ b/src/Core/Entity/Account/AccountAccessAuthInterface.php @@ -6,7 +6,7 @@ interface AccountAccessAuthInterface { - public ?int $id { get; } + public int $id { get; } public int $accountId { get; } diff --git a/src/Core/Enum/Message/LogMessage.php b/src/Core/Enum/Message/LogMessage.php deleted file mode 100644 index 0792735a..00000000 --- a/src/Core/Enum/Message/LogMessage.php +++ /dev/null @@ -1,49 +0,0 @@ -value, $this->getHttpStatusCode(), $previous); + parent::__construct($logMessage, $this->getHttpStatusCode(), $previous); $this->context = $context; $this->responseMessage = $responseMessage; $this->logLevel = $loglevel; @@ -34,7 +32,7 @@ public function getContext(): array return $this->context; } - public function getResponseMessage(): StatusMessage + public function getResponseMessage(): string { return $this->responseMessage; } diff --git a/src/Core/Exception/HttpHandledInvalidArgumentAsSuccessException.php b/src/Core/Exception/HttpHandledInvalidArgumentAsSuccessException.php index 3d5166c9..0ba9ea97 100644 --- a/src/Core/Exception/HttpHandledInvalidArgumentAsSuccessException.php +++ b/src/Core/Exception/HttpHandledInvalidArgumentAsSuccessException.php @@ -4,15 +4,13 @@ use Fig\Http\Message\StatusCodeInterface; use Monolog\Level; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use Throwable; final class HttpHandledInvalidArgumentAsSuccessException extends HttpException { public function __construct( - LogMessage $logMessage, - StatusMessage $responseMessage, + string $logMessage, + string $responseMessage = '', array $context = [], Level $loglevel = Level::Notice, ?Throwable $previous = null diff --git a/src/Core/Exception/HttpInvalidArgumentException.php b/src/Core/Exception/HttpInvalidArgumentException.php index 38b12076..2a8ea590 100644 --- a/src/Core/Exception/HttpInvalidArgumentException.php +++ b/src/Core/Exception/HttpInvalidArgumentException.php @@ -4,15 +4,13 @@ use Fig\Http\Message\StatusCodeInterface; use Monolog\Level; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use Throwable; final class HttpInvalidArgumentException extends HttpException { public function __construct( - LogMessage $logMessage, - StatusMessage $responseMessage, + string $logMessage, + string $responseMessage = '', array $context = [], Level $loglevel = Level::Notice, ?Throwable $previous = null diff --git a/src/Core/Exception/HttpUnauthorizedException.php b/src/Core/Exception/HttpUnauthorizedException.php index 38942cc3..a0858ffd 100644 --- a/src/Core/Exception/HttpUnauthorizedException.php +++ b/src/Core/Exception/HttpUnauthorizedException.php @@ -4,15 +4,13 @@ use Fig\Http\Message\StatusCodeInterface; use Monolog\Level; -use ownHackathon\Core\Enum\Message\LogMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use Throwable; final class HttpUnauthorizedException extends HttpException { public function __construct( - LogMessage $logMessage, - StatusMessage $responseMessage, + string $logMessage, + string $responseMessage = '', array $context = [], Level $loglevel = Level::Notice, ?Throwable $previous = null diff --git a/src/Core/Factory/ErrorResponseFactory.php b/src/Core/Factory/ErrorResponseFactory.php index 8839369a..5727246b 100644 --- a/src/Core/Factory/ErrorResponseFactory.php +++ b/src/Core/Factory/ErrorResponseFactory.php @@ -6,7 +6,6 @@ use Laminas\Diactoros\Response\JsonResponse; use Monolog\Level; use ownHackathon\App\DTO\Response\HttpResponseMessage; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Exception\HttpException; use Psr\Log\LoggerInterface; use Throwable; @@ -22,9 +21,8 @@ public function __construct( public function createFromThrowable(Throwable $e): JsonResponse { - $statusCode = StatusCodeInterface::STATUS_INTERNAL_SERVER_ERROR; - $responseMessage = StatusMessage::INTERNAL_SERVER_ERROR; - + $statusCode = 0; + $responseMessage = ''; if ($e instanceof HttpException) { $statusCode = $e->getHttpStatusCode(); @@ -38,6 +36,8 @@ public function createFromThrowable(Throwable $e): JsonResponse $logContext ); } else { + $statusCode = StatusCodeInterface::STATUS_INTERNAL_SERVER_ERROR; + $responseMessage = 'Internal Server Error'; $this->logger->log( Level::Critical, sprintf('[%d] Unhandled exception %s', $statusCode, $e->getMessage()), diff --git a/src/Core/Message/OAMessage.php b/src/Core/Message/OAMessage.php new file mode 100644 index 00000000..cbb9e9a0 --- /dev/null +++ b/src/Core/Message/OAMessage.php @@ -0,0 +1,14 @@ + $value, ] diff --git a/tests/FunctionalTest/Root/Account/AccessTokenHandlerTest.php b/tests/FunctionalTest/Root/Account/AccessTokenHandlerTest.php index 950c7964..4a1cfa76 100644 --- a/tests/FunctionalTest/Root/Account/AccessTokenHandlerTest.php +++ b/tests/FunctionalTest/Root/Account/AccessTokenHandlerTest.php @@ -14,7 +14,7 @@ use ownHackathon\App\Service\ClientIdentification\ClientIdentificationService; use ownHackathon\App\Service\Token\AccessTokenService; use ownHackathon\App\Service\Token\RefreshTokenService; -use ownHackathon\Core\Enum\Message\StatusMessage; +use ownHackathon\Core\Message\ResponseMessage; use ownHackathon\Core\Repository\AccountRepositoryInterface; use ownHackathon\FunctionalTest\AbstractFunctional; use ownHackathon\UnitTest\JsonRequestHelper; @@ -114,7 +114,7 @@ public function testGivenRefreshTokenIsInvalid(): void { $userAccount = $this->accountRepository->findByName('User'); $accountAccessAuth = new AccountAccessAuth( - null, + 1, $userAccount->id, 'Testing', $this->refreshToken, @@ -139,7 +139,7 @@ public function testGivenRefreshTokenIsInvalid(): void $content = $this->getContentAsJson($response); $this->assertSame(HTTP::STATUS_UNAUTHORIZED, $response->getStatusCode()); - $this->assertSame(StatusMessage::TOKEN_INVALID->value, $content['message']); + $this->assertSame(ResponseMessage::TOKEN_INVALID, $content['message']); $this->accountAccessAuthRepository->deleteById($accountAccessAuthId); } @@ -173,7 +173,7 @@ public function testGivenRefreshTokenIsExpired(): void $content = $this->getContentAsJson($response); $this->assertSame(HTTP::STATUS_UNAUTHORIZED, $response->getStatusCode()); - $this->assertSame(StatusMessage::TOKEN_INVALID->value, $content['message']); + $this->assertSame(ResponseMessage::TOKEN_INVALID, $content['message']); $this->accountAccessAuthRepository->deleteById($accountAccessAuthId); } @@ -194,7 +194,7 @@ public function testGivenRefreshTokenIsNotPersistenInDatabase(): void $content = $this->getContentAsJson($response); $this->assertSame(HTTP::STATUS_UNAUTHORIZED, $response->getStatusCode()); - $this->assertSame(StatusMessage::TOKEN_NOT_PERSISTENT->value, $content['message']); + $this->assertSame(ResponseMessage::TOKEN_NOT_PERSISTENT, $content['message']); } public function testUnexpectedClientIdentification(): void @@ -226,7 +226,7 @@ public function testUnexpectedClientIdentification(): void $content = $this->getContentAsJson($response); $this->assertSame(HTTP::STATUS_UNAUTHORIZED, $response->getStatusCode()); - $this->assertSame(StatusMessage::CLIENT_UNEXPECTED->value, $content['message']); + $this->assertSame(ResponseMessage::CLIENT_UNEXPECTED, $content['message']); $this->accountAccessAuthRepository->deleteById($accountAccessAuthId); } @@ -260,7 +260,7 @@ public function testUnexpectedUserAgent(): void $content = $this->getContentAsJson($response); $this->assertSame(HTTP::STATUS_UNAUTHORIZED, $response->getStatusCode()); - $this->assertSame(StatusMessage::CLIENT_UNEXPECTED->value, $content['message']); + $this->assertSame(ResponseMessage::CLIENT_UNEXPECTED, $content['message']); $this->accountAccessAuthRepository->deleteById($accountAccessAuthId); } diff --git a/tests/FunctionalTest/Root/Account/AccountActivationHandlerTest.php b/tests/FunctionalTest/Root/Account/AccountActivationHandlerTest.php index b3c47db9..cd59228d 100644 --- a/tests/FunctionalTest/Root/Account/AccountActivationHandlerTest.php +++ b/tests/FunctionalTest/Root/Account/AccountActivationHandlerTest.php @@ -6,8 +6,8 @@ use Fig\Http\Message\StatusCodeInterface as HTTP; use Laminas\Diactoros\ServerRequest; use ownHackathon\App\Entity\Account\AccountActivation; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Enum\DataType; +use ownHackathon\Core\Message\ResponseMessage; use ownHackathon\Core\Repository\AccountActivationRepositoryInterface; use ownHackathon\Core\Type\Email; use ownHackathon\Core\Utils\UuidFactoryInterface; @@ -73,7 +73,7 @@ public function testTokenNotGiven(): void 'message' => Assert::isType(DataType::STRING->value), ])); $this->assertSame(HTTP::STATUS_BAD_REQUEST, $response->getStatusCode()); - $this->assertSame(StatusMessage::TOKEN_INVALID->value, $content['message']); + $this->assertSame(ResponseMessage::TOKEN_INVALID, $content['message']); } public function testBodyIsInvalid(): void @@ -92,7 +92,7 @@ public function testBodyIsInvalid(): void 'message' => Assert::isType(DataType::STRING->value), ])); $this->assertSame(HTTP::STATUS_BAD_REQUEST, $response->getStatusCode()); - $this->assertSame(StatusMessage::INVALID_DATA->value, $content['message']); + $this->assertSame(ResponseMessage::DATA_INVALID, $content['message']); } public function testTokenIsInvalidOrNotPersistent(): void @@ -114,6 +114,6 @@ public function testTokenIsInvalidOrNotPersistent(): void 'message' => Assert::isType(DataType::STRING->value), ])); $this->assertSame(HTTP::STATUS_BAD_REQUEST, $response->getStatusCode()); - $this->assertSame(StatusMessage::TOKEN_INVALID->value, $content['message']); + $this->assertSame(ResponseMessage::TOKEN_INVALID, $content['message']); } } diff --git a/tests/FunctionalTest/Root/Account/AccountRegisterHandlerTest.php b/tests/FunctionalTest/Root/Account/AccountRegisterHandlerTest.php index 841e0bbc..38a2df0a 100644 --- a/tests/FunctionalTest/Root/Account/AccountRegisterHandlerTest.php +++ b/tests/FunctionalTest/Root/Account/AccountRegisterHandlerTest.php @@ -6,8 +6,8 @@ use Laminas\Diactoros\ServerRequest; use ownHackathon\Core\Entity\Account\AccountActivationInterface; use ownHackathon\Core\Entity\Token\TokenInterface; -use ownHackathon\Core\Enum\Message\StatusMessage; use ownHackathon\Core\Enum\DataType; +use ownHackathon\Core\Message\ResponseMessage; use ownHackathon\Core\Repository\AccountActivationRepositoryInterface; use ownHackathon\Core\Repository\AccountRepositoryInterface; use ownHackathon\Core\Repository\TokenRepositoryInterface; @@ -37,7 +37,7 @@ public function testBodyIsEmpty(): void 'message' => Assert::isType(DataType::STRING->value), ])); $this->assertSame(HTTP::STATUS_BAD_REQUEST, $response->getStatusCode()); - $this->assertSame(StatusMessage::INVALID_DATA->value, $content['message']); + $this->assertSame(ResponseMessage::DATA_INVALID, $content['message']); } public function testBodyHasInvalidParameter(): void @@ -57,7 +57,7 @@ public function testBodyHasInvalidParameter(): void 'message' => Assert::isType(DataType::STRING->value), ])); $this->assertSame(HTTP::STATUS_BAD_REQUEST, $response->getStatusCode()); - $this->assertSame(StatusMessage::INVALID_DATA->value, $content['message']); + $this->assertSame(ResponseMessage::DATA_INVALID, $content['message']); } public function testActivationDataSetWasCreated(): void diff --git a/tests/FunctionalTest/Root/Account/InvalidEMailAddressProviderTrait.php b/tests/FunctionalTest/Root/Account/InvalidEMailAddressProviderTrait.php index 6baef9c0..afc2a9da 100644 --- a/tests/FunctionalTest/Root/Account/InvalidEMailAddressProviderTrait.php +++ b/tests/FunctionalTest/Root/Account/InvalidEMailAddressProviderTrait.php @@ -4,10 +4,10 @@ use Fig\Http\Message\StatusCodeInterface as HTTP; use Laminas\Diactoros\ServerRequest; -use ownHackathon\Core\Enum\Message\StatusMessage; -use ownHackathon\Core\Enum\DataType; use PHPUnit\Framework\Assert; use PHPUnit\Framework\Attributes\DataProvider; +use ownHackathon\Core\Enum\DataType; +use ownHackathon\Core\Message\ResponseMessage; trait InvalidEMailAddressProviderTrait { @@ -28,7 +28,7 @@ public function testEMailValidationInvalid(string $email): void 'message' => Assert::isType(DataType::STRING->value), ])); $this->assertSame(HTTP::STATUS_BAD_REQUEST, $response->getStatusCode()); - $this->assertSame(StatusMessage::INVALID_DATA->value, $content['message']); + $this->assertSame(ResponseMessage::DATA_INVALID, $content['message']); } public static function invalidEMailAddressProvider(): array From a0dfb6b06b832862033a586a31429539e50cb4dc Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 11/56] Revert "refactor" This reverts commit a2591401457d3589dcf5ab199d52334aa3a6d5d8. --- composer.json | 6 +- composer.lock | 322 +++++------------- config/routes.php | 18 +- public/api/docs/index.html | 6 +- src/App/DTO/{Token => }/AccessToken.php | 6 +- .../AccountAuthenticationData.php | 8 +- ...untPassword.php => AccountPasswordDTO.php} | 8 +- ...dToken.php => AccountPasswordTokenDTO.php} | 8 +- ...tration.php => AccountRegistrationDTO.php} | 10 +- .../{Response => }/AuthenticationResponse.php | 10 +- .../DTO/{Client => }/ClientIdentification.php | 2 +- .../{Client => }/ClientIdentificationData.php | 2 +- src/App/DTO/{EMail/EMail.php => EMailDTO.php} | 8 +- .../{Response => }/HttpResponseMessage.php | 8 +- src/App/DTO/{Token => }/JwtTokenConfig.php | 2 +- src/App/DTO/{Token => }/RefreshToken.php | 6 +- src/App/DTO/{Token => }/Token.php | 6 +- src/App/Entity/{Account => }/Account.php | 4 +- .../{Account => }/AccountAccessAuth.php | 2 +- .../AccountAccessAuthCollection.php | 2 +- .../{Account => }/AccountActivation.php | 2 +- .../AccountActivationCollection.php | 2 +- .../{Account => }/AccountCollection.php | 2 +- src/App/Entity/{Token => }/Token.php | 4 +- .../Entity/{Token => }/TokenCollection.php | 6 +- .../Handler/Account/AccessTokenHandler.php | 6 +- .../Account/AccountActivationHandler.php | 8 +- .../AccountPasswordForgottenHandler.php | 6 +- .../Account/AccountPasswordHandler.php | 8 +- .../Account/AccountRegisterHandler.php | 8 +- .../Handler/Account/AuthenticationHandler.php | 12 +- src/App/Handler/Account/LogoutHandler.php | 4 +- src/App/Handler/PingHandler.php | 4 +- .../Hydrator/AccountAccessAuthHydrator.php | 4 +- .../Hydrator/AccountActivationHydrator.php | 6 +- src/App/Hydrator/AccountHydrator.php | 6 +- src/App/Hydrator/TokenHydrator.php | 8 +- src/App/Hydrator/TokenHydratorInterface.php | 4 +- .../Account/ActivationMiddleware.php | 8 +- .../PersistAuthenticationMiddleware.php | 6 +- .../Middleware/Account/LogoutMiddleware.php | 2 +- .../Account/PasswordChangeMiddleware.php | 4 +- .../Middleware/Account/RegisterMiddleware.php | 2 +- .../ActivationInputValidatorMiddleware.php | 6 +- .../EmailInputValidatorMiddleware.php | 2 +- .../ClientIdentificationMiddleware.php | 6 +- .../Token/GenerateAccessTokenMiddleware.php | 6 +- .../Token/GenerateRefreshTokenMiddleware.php | 6 +- .../Token/RefreshTokenAccountMiddleware.php | 2 +- ...efreshTokenDatabaseExistenceMiddleware.php | 2 +- ...kenMatchClientIdentificationMiddleware.php | 4 +- .../RefreshTokenValidationMiddleware.php | 2 +- src/App/Repository/TokenRepository.php | 4 +- src/App/Service/Account/AccountService.php | 4 +- .../ClientIdentificationService.php | 2 +- src/App/Service/Token/AccessTokenService.php | 2 +- .../Token/AccessTokenServiceFactory.php | 2 +- .../Service/Token/PasswordTokenService.php | 2 +- src/App/Service/Token/RefreshTokenService.php | 4 +- .../Token/RefreshTokenServiceFactory.php | 2 +- src/App/Table/TokenTable.php | 6 +- .../AccountAccessAuthCollectionInterface.php | 2 +- .../AccountActivationCollectionInterface.php | 2 +- .../Account/AccountCollectionInterface.php | 2 +- .../{Token => }/TokenCollectionInterface.php | 4 +- .../Entity/{Token => }/TokenInterface.php | 2 +- src/Core/Enum/DataType.php | 19 -- src/Core/Enum/Router/RouteIdent.php | 16 - src/Core/Enum/TokenType.php | 4 +- src/Core/Factory/ErrorResponseFactory.php | 2 +- src/Core/Message/DataType.php | 24 ++ src/Core/Message/OADataType.php | 18 + src/Core/Message/RouteName.php | 24 ++ .../Repository/TokenRepositoryInterface.php | 4 +- src/Core/Store/TokenStoreInterface.php | 4 +- .../Root/Account/AccessTokenHandlerTest.php | 10 +- .../Account/AccountActivationHandlerTest.php | 18 +- .../Account/AccountPasswordHandlerTest.php | 4 +- .../Account/AccountRegisterHandlerTest.php | 14 +- .../Account/AuthenticationHandlerTest.php | 2 +- .../InvalidEMailAddressProviderTrait.php | 6 +- .../Handler/AuthenticationHandlerTest.php | 4 +- ...AccountAccessAuthPersistMiddlewareTest.php | 6 +- .../GenerateRefreshTokenMiddlewareTest.php | 8 +- .../AccountAccessAuthRepositoryTest.php | 4 +- .../Service/AccessTokenServiceTest.php | 4 +- .../Service/RefreshTokenServiceTest.php | 8 +- .../Table/AccountAccessAuthTableTest.php | 4 +- .../Mock/Service/MockAccessTokenService.php | 4 +- .../MockAccessTokenServiceWithoutDuration.php | 4 +- .../Mock/Service/MockRefreshTokenService.php | 4 +- .../UnitTest/Mock/Table/MockAccountTable.php | 4 +- ...ntAuthenticationMiddlewareInvalidToken.php | 4 +- .../Mock/Table/MockAccountTableFailed.php | 2 +- 94 files changed, 375 insertions(+), 496 deletions(-) rename src/App/DTO/{Token => }/AccessToken.php (76%) rename src/App/DTO/{Account => }/AccountAuthenticationData.php (76%) rename src/App/DTO/{Account/AccountPassword.php => AccountPasswordDTO.php} (69%) rename src/App/DTO/{Token/AccountPasswordToken.php => AccountPasswordTokenDTO.php} (72%) rename src/App/DTO/{Account/AccountRegistration.php => AccountRegistrationDTO.php} (73%) rename src/App/DTO/{Response => }/AuthenticationResponse.php (71%) rename src/App/DTO/{Client => }/ClientIdentification.php (91%) rename src/App/DTO/{Client => }/ClientIdentificationData.php (91%) rename src/App/DTO/{EMail/EMail.php => EMailDTO.php} (70%) rename src/App/DTO/{Response => }/HttpResponseMessage.php (75%) rename src/App/DTO/{Token => }/JwtTokenConfig.php (93%) rename src/App/DTO/{Token => }/RefreshToken.php (76%) rename src/App/DTO/{Token => }/Token.php (75%) rename src/App/Entity/{Account => }/Account.php (93%) rename src/App/Entity/{Account => }/AccountAccessAuth.php (93%) rename src/App/Entity/{Account => }/AccountAccessAuthCollection.php (95%) rename src/App/Entity/{Account => }/AccountActivation.php (93%) rename src/App/Entity/{Account => }/AccountActivationCollection.php (95%) rename src/App/Entity/{Account => }/AccountCollection.php (95%) rename src/App/Entity/{Token => }/Token.php (85%) rename src/App/Entity/{Token => }/TokenCollection.php (82%) rename src/Core/Entity/{Token => }/TokenCollectionInterface.php (76%) rename src/Core/Entity/{Token => }/TokenInterface.php (90%) delete mode 100644 src/Core/Enum/DataType.php delete mode 100644 src/Core/Enum/Router/RouteIdent.php create mode 100644 src/Core/Message/DataType.php create mode 100644 src/Core/Message/OADataType.php create mode 100644 src/Core/Message/RouteName.php diff --git a/composer.json b/composer.json index b208349a..09f7a5a9 100644 --- a/composer.json +++ b/composer.json @@ -51,14 +51,14 @@ "laminas/laminas-component-installer": "^2.6 || ^3.0", "laminas/laminas-development-mode": "^3.3.0", "mezzio/mezzio-tooling": "^2.12", - "mezzio/mezzio": "^3", + "mezzio/mezzio": "^3.7", "mezzio/mezzio-cors": "^1.13", "mezzio/mezzio-fastroute": "^3.0.3", "mezzio/mezzio-helpers": "^5.7", "monolog/monolog": "^3.9.0", "ramsey/uuid": "^4.7", - "symfony/mailer": "^8", - "zircote/swagger-php": "^6", + "symfony/mailer": "^7.3", + "zircote/swagger-php": "^4.7", "jetbrains/phpstorm-attributes": "^1.0" }, "require-dev": { diff --git a/composer.lock b/composer.lock index a958a88d..2e60d944 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": "1a6899dfb7acc2c2a218b4d63c4136ec", + "content-hash": "083a1b5bcfe6edff72c74fd2b2736983", "packages": [ { "name": "brick/math", @@ -2261,53 +2261,6 @@ }, "time": "2025-12-06T11:56:16+00:00" }, - { - "name": "phpstan/phpdoc-parser", - "version": "2.3.1", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "16dbf9937da8d4528ceb2145c9c7c0bd29e26374" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/16dbf9937da8d4528ceb2145c9c7c0bd29e26374", - "reference": "16dbf9937da8d4528ceb2145c9c7c0bd29e26374", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^5.3.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.1" - }, - "time": "2026-01-12T11:33:04+00:00" - }, { "name": "psr/container", "version": "1.1.2", @@ -2677,68 +2630,6 @@ }, "time": "2024-09-11T13:17:53+00:00" }, - { - "name": "radebatz/type-info-extras", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/DerManoMann/type-info-extras.git", - "reference": "fd0ca63919cac600e837200431a0567810386ef2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/DerManoMann/type-info-extras/zipball/fd0ca63919cac600e837200431a0567810386ef2", - "reference": "fd0ca63919cac600e837200431a0567810386ef2", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "phpstan/phpdoc-parser": "^2.0", - "symfony/type-info": "^7.3.8 || 7.4.1 || ^8.0.x-dev" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.70", - "phpstan/phpstan": "^2.1", - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Radebatz\\TypeInfoExtras\\": "src" - }, - "exclude-from-classmap": [ - "/tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Martin Rademacher", - "email": "mano@radebatz.org" - } - ], - "description": "Extras for symfony/type-info", - "homepage": "http://radebatz.net/mano/", - "keywords": [ - "component", - "symfony", - "type-info", - "types" - ], - "support": { - "issues": "https://github.com/DerManoMann/type-info-extras/issues", - "source": "https://github.com/DerManoMann/type-info-extras/tree/1.0.3" - }, - "time": "2025-12-07T20:06:36+00:00" - }, { "name": "ramsey/collection", "version": "2.1.1", @@ -3289,35 +3180,39 @@ }, { "name": "symfony/mailer", - "version": "v8.0.3", + "version": "v7.4.3", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "02e033db6e00a42c66b8b8992e4e565ea7464a28" + "reference": "e472d35e230108231ccb7f51eb6b2100cac02ee4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/02e033db6e00a42c66b8b8992e4e565ea7464a28", - "reference": "02e033db6e00a42c66b8b8992e4e565ea7464a28", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e472d35e230108231ccb7f51eb6b2100cac02ee4", + "reference": "e472d35e230108231ccb7f51eb6b2100cac02ee4", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.4", + "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^7.4|^8.0", - "symfony/mime": "^7.4|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/mime": "^7.2|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/http-client-contracts": "<2.5" + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/console": "^7.4|^8.0", - "symfony/http-client": "^7.4|^8.0", - "symfony/messenger": "^7.4|^8.0", - "symfony/twig-bridge": "^7.4|^8.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -3345,7 +3240,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v8.0.3" + "source": "https://github.com/symfony/mailer/tree/v7.4.3" }, "funding": [ { @@ -3365,7 +3260,7 @@ "type": "tidelift" } ], - "time": "2025-12-16T08:10:18+00:00" + "time": "2025-12-16T08:02:06+00:00" }, { "name": "symfony/mime", @@ -4117,89 +4012,6 @@ ], "time": "2025-12-01T09:13:36+00:00" }, - { - "name": "symfony/type-info", - "version": "v7.4.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/type-info.git", - "reference": "ac5ab66b21c758df71b7210cf1033d1ac807f202" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/ac5ab66b21c758df71b7210cf1033d1ac807f202", - "reference": "ac5ab66b21c758df71b7210cf1033d1ac807f202", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "phpstan/phpdoc-parser": "<1.30" - }, - "require-dev": { - "phpstan/phpdoc-parser": "^1.30|^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\TypeInfo\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mathias Arlaud", - "email": "mathias.arlaud@gmail.com" - }, - { - "name": "Baptiste LEDUC", - "email": "baptiste.leduc@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Extracts PHP types information.", - "homepage": "https://symfony.com", - "keywords": [ - "PHPStan", - "phpdoc", - "symfony", - "type" - ], - "support": { - "source": "https://github.com/symfony/type-info/tree/v7.4.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-12-05T14:04:53+00:00" - }, { "name": "symfony/yaml", "version": "v7.4.1", @@ -4395,39 +4207,36 @@ }, { "name": "zircote/swagger-php", - "version": "6.0.0", + "version": "4.11.1", "source": { "type": "git", "url": "https://github.com/zircote/swagger-php.git", - "reference": "283514048b9b20f7ea96d3697e78a09797c6885b" + "reference": "7df10e8ec47db07c031db317a25bef962b4e5de1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/283514048b9b20f7ea96d3697e78a09797c6885b", - "reference": "283514048b9b20f7ea96d3697e78a09797c6885b", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/7df10e8ec47db07c031db317a25bef962b4e5de1", + "reference": "7df10e8ec47db07c031db317a25bef962b4e5de1", "shasum": "" }, "require": { "ext-json": "*", - "nikic/php-parser": "^4.19 || ^5.0", - "php": ">=8.2", - "phpstan/phpdoc-parser": "^2.0", + "php": ">=7.2", "psr/log": "^1.1 || ^2.0 || ^3.0", - "radebatz/type-info-extras": "^1.0.2", "symfony/deprecation-contracts": "^2 || ^3", - "symfony/finder": "^5.0 || ^6.0 || ^7.0 || ^8.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0" - }, - "conflict": { - "symfony/process": ">=6, <6.4.14" + "symfony/finder": ">=2.2", + "symfony/yaml": ">=3.3" }, "require-dev": { "composer/package-versions-deprecated": "^1.11", - "doctrine/annotations": "^2.0", - "friendsofphp/php-cs-fixer": "^3.62.0", - "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^10.5", - "rector/rector": "2.2.14" + "doctrine/annotations": "^1.7 || ^2.0", + "friendsofphp/php-cs-fixer": "^2.17 || 3.62.0", + "phpstan/phpstan": "^1.6", + "phpunit/phpunit": ">=8", + "vimeo/psalm": "^4.23" + }, + "suggest": { + "doctrine/annotations": "^1.7 || ^2.0" }, "bin": [ "bin/openapi" @@ -4435,7 +4244,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.x-dev" + "dev-master": "4.x-dev" } }, "autoload": { @@ -4463,8 +4272,8 @@ "homepage": "https://radebatz.net" } ], - "description": "Generate interactive documentation for your RESTful API using PHP attributes (preferred) or PHPDoc annotations", - "homepage": "https://github.com/zircote/swagger-php", + "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", + "homepage": "https://github.com/zircote/swagger-php/", "keywords": [ "api", "json", @@ -4473,15 +4282,9 @@ ], "support": { "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/6.0.0" + "source": "https://github.com/zircote/swagger-php/tree/4.11.1" }, - "funding": [ - { - "url": "https://github.com/zircote", - "type": "github" - } - ], - "time": "2026-01-12T00:15:20+00:00" + "time": "2024-10-15T19:20:02+00:00" } ], "packages-dev": [ @@ -5454,6 +5257,53 @@ }, "time": "2022-02-21T01:04:05+00:00" }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.3.1", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "16dbf9937da8d4528ceb2145c9c7c0bd29e26374" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/16dbf9937da8d4528ceb2145c9c7c0bd29e26374", + "reference": "16dbf9937da8d4528ceb2145c9c7c0bd29e26374", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.1" + }, + "time": "2026-01-12T11:33:04+00:00" + }, { "name": "phpstan/phpstan", "version": "2.1.33", diff --git a/config/routes.php b/config/routes.php index 462b451f..ec775138 100644 --- a/config/routes.php +++ b/config/routes.php @@ -3,7 +3,7 @@ use Mezzio\Application; use Mezzio\MiddlewareFactory; use ownHackathon\App; -use ownHackathon\Core\Enum\Router\RouteIdent; +use ownHackathon\Core\Message\RouteName; use Psr\Container\ContainerInterface; return static function (Application $app, MiddlewareFactory $factory, ContainerInterface $container): void { @@ -12,7 +12,7 @@ middleware: [ App\Handler\PingHandler::class, ], - name: RouteIdent::PING->value + name: RouteName::PING ); $app->get( path: '/api/token/refresh[/]', @@ -24,7 +24,7 @@ App\Middleware\Token\GenerateAccessTokenMiddleware::class, App\Handler\Account\AccessTokenHandler::class, ], - name: RouteIdent::ACCESS_TOKEN_REFRESH->value + name: RouteName::ACCESS_TOKEN_REFRESH ); $app->post( path: '/api/account/authentication[/]', @@ -37,7 +37,7 @@ App\Middleware\Account\LoginAuthentication\PersistAuthenticationMiddleware::class, App\Handler\Account\AuthenticationHandler::class, ], - name: RouteIdent::ACCOUNT_AUTHENTICATE->value + name: RouteName::ACCOUNT_AUTHENTICATE ); $app->post( @@ -47,7 +47,7 @@ App\Middleware\Account\RegisterMiddleware::class, App\Handler\Account\AccountRegisterHandler::class, ], - name: RouteIdent::ACCOUNT_CREATE->value + name: RouteName::ACCOUNT_CREATE ); $app->post( @@ -57,7 +57,7 @@ App\Middleware\Account\ActivationMiddleware::class, App\Handler\Account\AccountActivationHandler::class, ], - name: RouteIdent::ACCOUNT_ACTIVATION->value + name: RouteName::ACCOUNT_ACTIVATION ); $app->post( @@ -67,7 +67,7 @@ App\Middleware\Account\PasswordForgottenMiddleware::class, App\Handler\Account\AccountPasswordForgottenHandler::class, ], - name: RouteIdent::ACCOUNT_PASSWORD_FORGOTTEN->value + name: RouteName::ACCOUNT_PASSWORD_FORGOTTEN ); $app->patch( @@ -77,7 +77,7 @@ App\Middleware\Account\PasswordChangeMiddleware::class, App\Handler\Account\AccountPasswordHandler::class, ], - name: RouteIdent::ACCOUNT_PASSWORD_SET->value + name: RouteName::ACCOUNT_PASSWORD_SET ); $app->get( @@ -87,6 +87,6 @@ App\Middleware\Account\LogoutMiddleware::class, App\Handler\Account\LogoutHandler::class, ], - name: RouteIdent::ACCOUNT_LOGOUT->value + name: RouteName::ACCOUNT_LOGOUT ); }; diff --git a/public/api/docs/index.html b/public/api/docs/index.html index da994d3e..a112f17c 100644 --- a/public/api/docs/index.html +++ b/public/api/docs/index.html @@ -8,7 +8,7 @@ content="SwaggerUI" /> ownHackathon - SwaggerUI - + diff --git a/public/api/docs/swagger.json b/public/api/docs/swagger.json index eac3806e..80d72332 100644 --- a/public/api/docs/swagger.json +++ b/public/api/docs/swagger.json @@ -402,7 +402,7 @@ "name": "Authentication", "in": "header" }, - "Client-Identification-String": { + "Client Identification Number": { "type": "apiKey", "name": "x-ident", "in": "header" @@ -414,7 +414,7 @@ "accessToken": [] }, { - "Client-Identification-String": [] + "Client Identification Number": [] }, { "refreshToken": [] diff --git a/src/App/Handler/SwaggerUIHandler.php b/src/App/Handler/SwaggerUIHandler.php index 02ef7393..62516f5a 100644 --- a/src/App/Handler/SwaggerUIHandler.php +++ b/src/App/Handler/SwaggerUIHandler.php @@ -29,7 +29,7 @@ ) ] #[OA\SecurityScheme( - securityScheme: 'Client-Identification-String', + securityScheme: 'Client Identification Number', type: 'apiKey', name: 'x-ident', in: 'header', @@ -40,7 +40,7 @@ url: '/api' ), ], - security: [['accessToken' => []], ['Client-Identification-String' => []], ['refreshToken' => []]] + security: [['accessToken' => []], ['Client Identification Number' => []], ['refreshToken' => []]] )] readonly class SwaggerUIHandler implements RequestHandlerInterface { From 76bd8e1f8efe76ef2a8ccd384d023cbb5017ebb9 Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 49/56] Revert "downgrad notify" This reverts commit dd0a9b67c0c50734216a2519ac01a576ffabd79a. --- .github/workflows/codestyle-and-unittest.yml | 12 ++++++------ .github/workflows/deploy_dev.yml | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/codestyle-and-unittest.yml b/.github/workflows/codestyle-and-unittest.yml index e7810862..db37bd00 100644 --- a/.github/workflows/codestyle-and-unittest.yml +++ b/.github/workflows/codestyle-and-unittest.yml @@ -35,7 +35,7 @@ jobs: run: composer run-script phplint - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: error details: PHP Lint failed. @@ -68,7 +68,7 @@ jobs: run: composer run-script phpstan - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: error details: PHP Stan failed. @@ -101,7 +101,7 @@ jobs: run: composer run-script phpcs - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: error details: CodeSniffer failed. @@ -201,7 +201,7 @@ jobs: run: composer run-script functionaltest - name: Test Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: error details: Functional Test failed. @@ -218,7 +218,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Info Success - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: info details: Checks successfully executed on API. @@ -226,7 +226,7 @@ jobs: if: success() - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: error details: Incorrect checks during the API check. diff --git a/.github/workflows/deploy_dev.yml b/.github/workflows/deploy_dev.yml index 4702186f..89cc4282 100644 --- a/.github/workflows/deploy_dev.yml +++ b/.github/workflows/deploy_dev.yml @@ -31,7 +31,7 @@ jobs: run: composer run-script phplint - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: error details: PHP Lint failed. @@ -64,7 +64,7 @@ jobs: run: composer run-script phpstan - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: error details: PHP Stan failed. @@ -97,7 +97,7 @@ jobs: run: composer run-script phpcs - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: error details: CodeSniffer failed. @@ -134,7 +134,7 @@ jobs: run: composer run-script unittest - name: Test Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: error details: PHP Unit Test failed. @@ -197,7 +197,7 @@ jobs: run: composer run-script functionaltest - name: Test Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: error details: Functional Test failed. @@ -245,7 +245,7 @@ jobs: script: rm -rf ${{ secrets.DEPLOY_PATH_API_DEV }}/data/cache/* - name: Deploay Info Success - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: info details: Successful deployment on build https://dev.hackathon.exdrals.de/api/docs @@ -253,7 +253,7 @@ jobs: if: success() - name: Deplay Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: error details: Failure deployment on develope. From ef443c3abd48e2803d012c8decde4f5594a09405 Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 50/56] Revert "-" This reverts commit 89e601702fe7cd05cfd3884f81612fbb4318c86a. --- .github/workflows/deploy_dev.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/deploy_dev.yml b/.github/workflows/deploy_dev.yml index 89cc4282..4239a906 100644 --- a/.github/workflows/deploy_dev.yml +++ b/.github/workflows/deploy_dev.yml @@ -241,7 +241,6 @@ jobs: host: ${{ secrets.DEPLOY_HOST }} username: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_KEY }} - passphrase: ${{ secrets.DEPLOY_KEY_PASS }} script: rm -rf ${{ secrets.DEPLOY_PATH_API_DEV }}/data/cache/* - name: Deploay Info Success From 68078e1a312390242d24f2c2b4a67876c259f170 Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 51/56] Revert "-" This reverts commit 4c559b338b3f950ed418636a9050ed40ae54b982. --- .github/workflows/deploy_dev.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/workflows/deploy_dev.yml b/.github/workflows/deploy_dev.yml index 4239a906..1f5df3ee 100644 --- a/.github/workflows/deploy_dev.yml +++ b/.github/workflows/deploy_dev.yml @@ -235,14 +235,6 @@ jobs: remote_key: ${{ secrets.DEPLOY_KEY }} remote_key_pass: ${{ secrets.DEPLOY_KEY_PASS }} - - name: Clear remote cache folder - uses: appleboy/ssh-action@v1.2.2 - with: - host: ${{ secrets.DEPLOY_HOST }} - username: ${{ secrets.DEPLOY_USER }} - key: ${{ secrets.DEPLOY_KEY }} - script: rm -rf ${{ secrets.DEPLOY_PATH_API_DEV }}/data/cache/* - - name: Deploay Info Success uses: rjstone/discord-webhook-notify@v2.2.1 with: From a2fe94f93cfe29773028ab49bef152474e74d7e3 Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 52/56] Revert "-" This reverts commit 9bdc2b0bccc2b59e963dfd6cf7098167461382c8. --- .github/workflows/deploy_dev.yml | 2 +- public/api/docs/swagger.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy_dev.yml b/.github/workflows/deploy_dev.yml index 1f5df3ee..b0642433 100644 --- a/.github/workflows/deploy_dev.yml +++ b/.github/workflows/deploy_dev.yml @@ -239,7 +239,7 @@ jobs: uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: info - details: Successful deployment on build https://dev.hackathon.exdrals.de/api/docs + details: Successful deployment on build https://dev.hackathon.exdrals.de webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} if: success() diff --git a/public/api/docs/swagger.json b/public/api/docs/swagger.json index 80d72332..5fb37234 100644 --- a/public/api/docs/swagger.json +++ b/public/api/docs/swagger.json @@ -155,7 +155,8 @@ } } } - } + }, + "deprecated": true } }, "/account": { From 5e07870045b453d8a9f58edb2322d59181369e39 Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 53/56] Revert "-" This reverts commit 776ccbdffadb292f44ee174e5661766d099edd2a. --- public/api/docs/index.html | 12 ------------ src/App/Handler/Account/AccountPasswordHandler.php | 1 + 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/public/api/docs/index.html b/public/api/docs/index.html index df00ee9f..cad62401 100644 --- a/public/api/docs/index.html +++ b/public/api/docs/index.html @@ -9,14 +9,6 @@ /> SwaggerUI -
@@ -32,12 +24,8 @@ SwaggerUIStandalonePreset ], layout: "StandaloneLayout", - deepLinking: false, }); - }; - document.querySelectorAll('link').forEach((element) => { - element.style.display = 'none'}); diff --git a/src/App/Handler/Account/AccountPasswordHandler.php b/src/App/Handler/Account/AccountPasswordHandler.php index b571c096..e46ff830 100644 --- a/src/App/Handler/Account/AccountPasswordHandler.php +++ b/src/App/Handler/Account/AccountPasswordHandler.php @@ -27,6 +27,7 @@ class AccountPasswordHandler implements RequestHandlerInterface schema: new OA\Schema(type: 'string') ), ], + deprecated: true, )] #[OA\RequestBody( description: 'Set Password for a Account', From 72b91babcd29a5b87092a6e6c876c21523976d4b Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 54/56] Revert "-" This reverts commit 57a4df9680ef71b065221c50e10a5c39bcad5609. --- .github/workflows/deploy_dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_dev.yml b/.github/workflows/deploy_dev.yml index b0642433..48a031b8 100644 --- a/.github/workflows/deploy_dev.yml +++ b/.github/workflows/deploy_dev.yml @@ -239,7 +239,7 @@ jobs: uses: rjstone/discord-webhook-notify@v2.2.1 with: severity: info - details: Successful deployment on build https://dev.hackathon.exdrals.de + details: Successful deployment on build https://dev.stormannsgal.de webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} if: success() From c6c47cb9cd3e2d8e32a5eb2051d7cc3db159365a Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 55/56] Revert "bump github actions" This reverts commit 05ef51d73f1480450f4d695e8950a8e29e36cdcd. --- .github/workflows/codestyle-and-unittest.yml | 24 +++++++++--------- .github/workflows/deploy_dev.yml | 26 ++++++++++---------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/workflows/codestyle-and-unittest.yml b/.github/workflows/codestyle-and-unittest.yml index db37bd00..ae528968 100644 --- a/.github/workflows/codestyle-and-unittest.yml +++ b/.github/workflows/codestyle-and-unittest.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v4.2.2 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -35,7 +35,7 @@ jobs: run: composer run-script phplint - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: error details: PHP Lint failed. @@ -47,7 +47,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v4.2.2 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -68,7 +68,7 @@ jobs: run: composer run-script phpstan - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: error details: PHP Stan failed. @@ -80,7 +80,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v4.2.2 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -101,7 +101,7 @@ jobs: run: composer run-script phpcs - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: error details: CodeSniffer failed. @@ -117,7 +117,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v4.2.2 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -138,7 +138,7 @@ jobs: run: composer run-script unittest - name: Test Info Failure - uses: rjstone/discord-webhook-notify@v2 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: error details: PHP Unit Test failed. @@ -175,7 +175,7 @@ jobs: - 3306:3306 options: --health-cmd="healthcheck.sh --connect --innodb_initialized" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v4.2.2 - name: Install PHP with extensions. uses: shivammathur/setup-php@v2 with: @@ -201,7 +201,7 @@ jobs: run: composer run-script functionaltest - name: Test Info Failure - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: error details: Functional Test failed. @@ -218,7 +218,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Info Success - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: info details: Checks successfully executed on API. @@ -226,7 +226,7 @@ jobs: if: success() - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: error details: Incorrect checks during the API check. diff --git a/.github/workflows/deploy_dev.yml b/.github/workflows/deploy_dev.yml index 48a031b8..e49ed94c 100644 --- a/.github/workflows/deploy_dev.yml +++ b/.github/workflows/deploy_dev.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v4.2.2 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -31,7 +31,7 @@ jobs: run: composer run-script phplint - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: error details: PHP Lint failed. @@ -43,7 +43,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v4.2.2 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -64,7 +64,7 @@ jobs: run: composer run-script phpstan - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: error details: PHP Stan failed. @@ -76,7 +76,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v4.2.2 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -97,7 +97,7 @@ jobs: run: composer run-script phpcs - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: error details: CodeSniffer failed. @@ -113,7 +113,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v4.2.2 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -134,7 +134,7 @@ jobs: run: composer run-script unittest - name: Test Info Failure - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: error details: PHP Unit Test failed. @@ -171,7 +171,7 @@ jobs: - 3306:3306 options: --health-cmd="healthcheck.sh --connect --innodb_initialized" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v4.2.2 - name: Install PHP with extensions. uses: shivammathur/setup-php@v2 with: @@ -197,7 +197,7 @@ jobs: run: composer run-script functionaltest - name: Test Info Failure - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: error details: Functional Test failed. @@ -215,7 +215,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Get latest code - uses: actions/checkout@v5 + uses: actions/checkout@v4.1.1 - name: Install Composer Dependencies run: composer install --prefer-dist --no-progress --no-dev @@ -236,7 +236,7 @@ jobs: remote_key_pass: ${{ secrets.DEPLOY_KEY_PASS }} - name: Deploay Info Success - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: info details: Successful deployment on build https://dev.stormannsgal.de @@ -244,7 +244,7 @@ jobs: if: success() - name: Deplay Info Failure - uses: rjstone/discord-webhook-notify@v2.2.1 + uses: rjstone/discord-webhook-notify@v1.0.4 with: severity: error details: Failure deployment on develope. From 18edc1ed99c5338d6f80aeebb55460dc83385169 Mon Sep 17 00:00:00 2001 From: BibaltiK Date: Fri, 16 Jan 2026 23:57:09 +0100 Subject: [PATCH 56/56] Revert "initial with Auth" This reverts commit 321a71c26b718cfc9bb49c49648cd40ebc7f53fd. --- .env.dist | 14 - .github/workflows/codestyle-and-unittest.yml | 106 +- .../{deploy_dev.yml => deployment_build.yml} | 92 +- .github/workflows/deployment_production.yml | 51 + .gitignore | 10 +- .laminas-ci/pre-run.sh | 5 - .phplint.yml | 9 - .rsync-exclude | 33 - CHANGELOG.md | 35 + bin/hackathon | 26 +- bin/migrations.php | 71 - composer.json | 120 - composer.lock | 8516 ----------------- config/.gitignore | 1 + config/autoload/.gitignore | 4 +- config/autoload/cors.develope.php | 13 - config/autoload/cors.global.php | 13 - config/autoload/database.action.php | 20 - config/autoload/database.develope.php | 20 - config/autoload/database.global.php.dist | 20 - config/autoload/database.testing.php | 20 - config/autoload/dependencies.action.php | 25 - config/autoload/dependencies.global.php | 46 - config/autoload/dependencies.testing.php | 24 - config/autoload/development.local.php.dist | 35 - config/autoload/local.php.dist | 13 - config/autoload/logger.global.php | 7 - config/autoload/mail.develope.php | 8 - config/autoload/mail.testing.php | 8 - config/autoload/mezzio.global.php | 24 - config/autoload/migrations.action.php | 23 - config/autoload/migrations.develope.php | 22 - config/autoload/migrations.global.php | 22 - config/autoload/migrations.testing.php | 23 - config/autoload/routes.global.php | 29 - config/autoload/token.action.php | 20 - config/autoload/token.develope.php | 20 - config/autoload/token.global.php.dist | 20 - config/autoload/token.testing.php | 20 - config/config.php | 54 - config/container.php | 14 - config/development.config.php.dist | 31 - config/migrations.template.tpl | 19 - config/pipeline.php | 50 - config/routes.php | 82 - database/.gitignore | 1 - ...rsion20231103223745_CreateAccountTable.php | 33 - ...103224045_CreateAccountAccessAuthTable.php | 32 - ...103224046_CreateAccountActivationTable.php | 28 - ...Version20231103224047_CreateTokenTable.php | 29 - docker-compose.yml | 1 - docker/php/php-ini-overrides.ini | 1 - phpcs.xml | 160 - phpstan.neon | 17 - phpunit_functionaltest.xml | 21 - phpunit_unittest.xml | 38 - public/api/{docs => doc}/index.html | 8 +- public/api/docs/swagger.json | 434 - src/App/ConfigProvider.php | 266 - src/App/DTO/AccessToken.php | 24 - src/App/DTO/AccountAuthenticationData.php | 28 - src/App/DTO/AccountPasswordDTO.php | 24 - src/App/DTO/AccountPasswordTokenDTO.php | 24 - src/App/DTO/AccountRegistrationDTO.php | 29 - src/App/DTO/AuthenticationResponse.php | 29 - src/App/DTO/ClientIdentification.php | 17 - src/App/DTO/ClientIdentificationData.php | 20 - src/App/DTO/EMailDTO.php | 24 - src/App/DTO/HttpFailureMessage.php | 29 - src/App/DTO/JwtTokenConfig.php | 26 - src/App/DTO/RefreshToken.php | 24 - src/App/DTO/Token.php | 24 - src/App/Entity/Account.php | 61 - src/App/Entity/AccountAccessAuth.php | 59 - .../Entity/AccountAccessAuthCollection.php | 31 - src/App/Entity/AccountActivation.php | 43 - .../Entity/AccountActivationCollection.php | 31 - src/App/Entity/AccountCollection.php | 31 - src/App/Entity/Token.php | 49 - src/App/Entity/TokenCollection.php | 31 - src/App/Enum/TokenType.php | 9 - .../Handler/Account/AccessTokenHandler.php | 38 - .../Account/AccountActivationHandler.php | 49 - .../AccountPasswordForgottenHandler.php | 34 - .../Account/AccountPasswordHandler.php | 50 - .../Account/AccountRegisterHandler.php | 41 - .../Handler/Account/AuthenticationHandler.php | 54 - src/App/Handler/PingHandler.php | 44 - src/App/Handler/SwaggerUIHandler.php | 57 - .../Hydrator/AccountAccessAuthHydrator.php | 68 - .../AccountAccessAuthHydratorInterface.php | 14 - .../Hydrator/AccountActivationHydrator.php | 62 - .../AccountActivationHydratorInterface.php | 14 - src/App/Hydrator/AccountHydrator.php | 75 - src/App/Hydrator/AccountHydratorInterface.php | 14 - src/App/Hydrator/TokenHydrator.php | 64 - src/App/Hydrator/TokenHydratorInterface.php | 14 - .../Account/ActivationMiddleware.php | 94 - .../AuthenticationConditionsMiddleware.php | 42 - .../AuthenticationMiddleware.php | 58 - .../AuthenticationValidationMiddleware.php | 43 - .../PersistAuthenticationMiddleware.php | 81 - .../Account/PasswordChangeMiddleware.php | 71 - .../Account/PasswordForgottenMiddleware.php | 31 - .../Middleware/Account/RegisterMiddleware.php | 50 - .../RequestAuthenticationMiddleware.php | 73 - .../ActivationInputValidatorMiddleware.php | 48 - .../EmailInputValidatorMiddleware.php | 56 - .../PasswordInputValidatorMiddleware.php | 40 - .../ClientIdentificationMiddleware.php | 31 - .../Token/GenerateAccessTokenMiddleware.php | 31 - .../Token/GenerateRefreshTokenMiddleware.php | 30 - .../Token/RefreshTokenAccountMiddleware.php | 40 - ...efreshTokenDatabaseExistenceMiddleware.php | 40 - ...kenMatchClientIdentificationMiddleware.php | 35 - .../RefreshTokenValidationMiddleware.php | 38 - .../AccountAccessAuthRepository.php | 66 - .../AccountActivationRepository.php | 57 - src/App/Repository/AccountRepository.php | 58 - src/App/Repository/TokenRepository.php | 56 - src/App/Service/Account/AccountService.php | 55 - .../Authentication/AuthenticationService.php | 11 - .../ClientIdentificationService.php | 21 - src/App/Service/Token/AccessTokenService.php | 34 - .../Token/AccessTokenServiceFactory.php | 17 - .../Service/Token/ActivationTokenService.php | 30 - src/App/Service/Token/JwtTokenTrait.php | 42 - .../Service/Token/PasswordTokenService.php | 31 - src/App/Service/Token/RefreshTokenService.php | 34 - .../Token/RefreshTokenServiceFactory.php | 17 - src/App/Table/AbstractTable.php | 44 - src/App/Table/AccountAccessAuthTable.php | 133 - src/App/Table/AccountActivationTable.php | 105 - src/App/Table/AccountTable.php | 105 - src/App/Table/TokenTable.php | 104 - .../Validator/AccountActivationValidator.php | 18 - src/App/Validator/AuthenticationValidator.php | 18 - src/App/Validator/DateLessNow.php | 37 - src/App/Validator/EMailValidator.php | 15 - src/App/Validator/Input/AccountNameInput.php | 26 - src/App/Validator/Input/EmailInput.php | 26 - src/App/Validator/Input/PasswordInput.php | 26 - src/App/Validator/PasswordValidator.php | 15 - src/Core/ConfigProvider.php | 46 - .../AccountAccessAuthCollectionInterface.php | 16 - .../Account/AccountAccessAuthInterface.php | 22 - .../AccountActivationCollectionInterface.php | 16 - .../Account/AccountActivationInterface.php | 18 - .../Account/AccountCollectionInterface.php | 16 - src/Core/Entity/Account/AccountInterface.php | 26 - src/Core/Entity/TokenCollectionInterface.php | 16 - src/Core/Entity/TokenInterface.php | 20 - src/Core/Enum/App/AccountVisibleStatus.php | 23 - src/Core/Enum/App/DateTimeFormat.php | 8 - .../Exception/DuplicateEntryException.php | 18 - src/Core/Exception/EmptyResultException.php | 9 - .../Exception/UndefinedOffsetException.php | 9 - src/Core/Factory/DatabaseFactory.php | 33 - src/Core/Factory/MailFactory.php | 19 - src/Core/Factory/QueryFactory.php | 21 - src/Core/Factory/UuidFactory.php | 13 - src/Core/Hydrator/HydratorInterface.php | 10 - src/Core/Listener/LoggingErrorListener.php | 37 - .../LoggingErrorListenerDelegatorFactory.php | 17 - .../Listener/LoggingErrorListenerFactory.php | 16 - src/Core/Logger/LoggerFactory.php | 68 - src/Core/Logger/MetaDataProcessor.php | 29 - src/Core/Message/DataType.php | 24 - src/Core/Message/OADataType.php | 18 - src/Core/Message/OAMessage.php | 14 - src/Core/Message/ResponseMessage.php | 24 - src/Core/Message/RouteName.php | 22 - .../Middleware/RouteNotFoundMiddleware.php | 24 - .../AccountAccessAuthRepositoryInterface.php | 27 - .../AccountActivationRepositoryInterface.php | 24 - .../Repository/AccountRepositoryInterface.php | 25 - src/Core/Repository/RepositoryInterface.php | 8 - .../Repository/TokenRepositoryInterface.php | 23 - .../Store/AccountAccessAuthStoreInterface.php | 27 - .../Store/AccountActivationStoreInterface.php | 24 - src/Core/Store/AccountStoreInterface.php | 25 - src/Core/Store/StoreInterface.php | 10 - src/Core/Store/TokenStoreInterface.php | 23 - src/Core/Trait/CloneReadonlyClassWith.php | 44 - src/Core/Type/Email.php | 70 - src/Core/Type/TypeInterface.php | 13 - src/Core/Utils/Collectible.php | 7 - src/Core/Utils/Collection.php | 113 - src/Core/Utils/CollectionInterface.php | 12 - src/Core/Utils/UuidFactory.php | 7 - src/Core/Utils/UuidFactoryInterface.php | 12 - tests/FunctionalTest/AbstractFunctional.php | 83 - tests/FunctionalTest/Mock/NullLogger.php | 73 - .../FunctionalTest/Mock/NullLoggerFactory.php | 14 - tests/FunctionalTest/Mock/NullMailer.php | 15 - .../FunctionalTest/Mock/NullMailerFactory.php | 14 - .../Root/Account/AccessTokenHandlerTest.php | 267 - .../Account/AccountActivationHandlerTest.php | 119 - .../AccountPasswordForgottenHandlerTest.php | 61 - .../Account/AccountPasswordHandlerTest.php | 134 - .../Account/AccountRegisterHandlerTest.php | 104 - .../Account/AuthenticationHandlerTest.php | 180 - .../InvalidEMailAddressProviderTrait.php | 54 - tests/FunctionalTest/Root/PingHandlerTest.php | 29 - tests/FunctionalTest/bootstrap.php | 10 - ...on20990921210156_InsertAccountTestData.php | 32 - .../AppTest/Handler/AbstractTestHandler.php | 24 - .../Handler/AuthenticationHandlerTest.php | 35 - .../AppTest/Handler/PingHandlerTest.php | 29 - .../AccountAccessAuthHydratorTest.php | 55 - .../AppTest/Hydrator/AccountHydratorTest.php | 65 - .../Middleware/AbstractTestMiddleware.php | 28 - ...AccountAccessAuthPersistMiddlewareTest.php | 141 - .../AccountAuthenticationMiddlewareTest.php | 124 - ...AuthenticationConditionsMiddlewareTest.php | 58 - .../AuthenticationMiddlewareTest.php | 81 - ...AuthenticationValidationMiddlewareTest.php | 45 - .../ClientIdentificationMiddlewareTest.php | 36 - .../GenerateAccessTokenMiddlewareTest.php | 34 - .../GenerateRefreshTokenMiddlewareTest.php | 39 - .../AccountAccessAuthRepositoryTest.php | 194 - .../Repository/AccountRepositoryTest.php | 161 - .../Service/AccessTokenServiceTest.php | 48 - .../Service/AuthenticationServiceTest.php | 31 - .../Service/RefreshTokenServiceTest.php | 51 - .../Table/AccountAccessAuthTableTest.php | 220 - .../AppTest/Table/AccountTableTest.php | 189 - .../CoreTest/Factory/DatabaseFactoryTest.php | 43 - .../CoreTest/Factory/QueryFactoryTest.php | 29 - tests/UnitTest/GameTest/.gitkeep | 0 tests/UnitTest/JsonRequestHelper.php | 15 - tests/UnitTest/Mock/Constants/Account.php | 60 - .../Mock/Constants/AccountAccessAuth.php | 54 - tests/UnitTest/Mock/Constants/Token.php | 21 - tests/UnitTest/Mock/Database/MockDelete.php | 27 - .../Mock/Database/MockDeleteFailed.php | 24 - tests/UnitTest/Mock/Database/MockInsert.php | 27 - .../Mock/Database/MockInsertFailed.php | 25 - tests/UnitTest/Mock/Database/MockPDO.php | 18 - tests/UnitTest/Mock/Database/MockQuery.php | 37 - .../Mock/Database/MockQueryFailed.php | 37 - tests/UnitTest/Mock/Database/MockSelect.php | 96 - .../Mock/Database/MockSelectFailed.php | 36 - tests/UnitTest/Mock/Database/MockUpdate.php | 22 - .../Mock/Database/MockUpdateFailed.php | 19 - tests/UnitTest/Mock/Entity/MockAccount.php | 48 - ...AuthenticationMiddlewareRequestHandler.php | 24 - tests/UnitTest/Mock/MockContainer.php | 32 - tests/UnitTest/Mock/MockRequestHandler.php | 15 - tests/UnitTest/Mock/MockResponse.php | 83 - tests/UnitTest/Mock/MockServerRequest.php | 187 - .../MockAccountAccessAuthRepository.php | 14 - .../Mock/Repository/MockAccountRepository.php | 14 - ...ntAuthenticationMiddlewareInvalidToken.php | 14 - .../Mock/Service/MockAccessTokenService.php | 35 - .../MockAccessTokenServiceWithoutDuration.php | 35 - .../Service/MockAuthenticationService.php | 14 - .../MockClientIdentificationService.php | 9 - .../Mock/Service/MockRefreshTokenService.php | 22 - .../Mock/Table/MockAccountAccessAuthTable.php | 108 - .../MockAccountAccessAuthTableFailed.php | 25 - .../UnitTest/Mock/Table/MockAccountTable.php | 84 - ...ntAuthenticationMiddlewareInvalidToken.php | 84 - .../Mock/Table/MockAccountTableFailed.php | 26 - .../Validator/MockAuthenticationValidator.php | 20 - .../MockAuthenticationValidatorFailed.php | 20 - 266 files changed, 156 insertions(+), 19769 deletions(-) delete mode 100644 .env.dist rename .github/workflows/{deploy_dev.yml => deployment_build.yml} (71%) create mode 100644 .github/workflows/deployment_production.yml delete mode 100755 .laminas-ci/pre-run.sh delete mode 100644 .phplint.yml delete mode 100644 .rsync-exclude create mode 100644 CHANGELOG.md delete mode 100755 bin/migrations.php delete mode 100644 composer.json delete mode 100644 composer.lock delete mode 100644 config/autoload/cors.develope.php delete mode 100644 config/autoload/cors.global.php delete mode 100644 config/autoload/database.action.php delete mode 100644 config/autoload/database.develope.php delete mode 100644 config/autoload/database.global.php.dist delete mode 100644 config/autoload/database.testing.php delete mode 100644 config/autoload/dependencies.action.php delete mode 100644 config/autoload/dependencies.global.php delete mode 100644 config/autoload/dependencies.testing.php delete mode 100644 config/autoload/development.local.php.dist delete mode 100644 config/autoload/local.php.dist delete mode 100644 config/autoload/logger.global.php delete mode 100644 config/autoload/mail.develope.php delete mode 100644 config/autoload/mail.testing.php delete mode 100644 config/autoload/mezzio.global.php delete mode 100644 config/autoload/migrations.action.php delete mode 100644 config/autoload/migrations.develope.php delete mode 100644 config/autoload/migrations.global.php delete mode 100644 config/autoload/migrations.testing.php delete mode 100644 config/autoload/routes.global.php delete mode 100644 config/autoload/token.action.php delete mode 100644 config/autoload/token.develope.php delete mode 100644 config/autoload/token.global.php.dist delete mode 100644 config/autoload/token.testing.php delete mode 100644 config/config.php delete mode 100644 config/container.php delete mode 100644 config/development.config.php.dist delete mode 100644 config/migrations.template.tpl delete mode 100644 config/pipeline.php delete mode 100644 config/routes.php delete mode 100644 database/migrations/Version20231103223745_CreateAccountTable.php delete mode 100644 database/migrations/Version20231103224045_CreateAccountAccessAuthTable.php delete mode 100644 database/migrations/Version20231103224046_CreateAccountActivationTable.php delete mode 100644 database/migrations/Version20231103224047_CreateTokenTable.php delete mode 100644 phpcs.xml delete mode 100644 phpstan.neon delete mode 100644 phpunit_functionaltest.xml delete mode 100644 phpunit_unittest.xml rename public/api/{docs => doc}/index.html (78%) delete mode 100644 public/api/docs/swagger.json delete mode 100644 src/App/ConfigProvider.php delete mode 100644 src/App/DTO/AccessToken.php delete mode 100644 src/App/DTO/AccountAuthenticationData.php delete mode 100644 src/App/DTO/AccountPasswordDTO.php delete mode 100644 src/App/DTO/AccountPasswordTokenDTO.php delete mode 100644 src/App/DTO/AccountRegistrationDTO.php delete mode 100644 src/App/DTO/AuthenticationResponse.php delete mode 100644 src/App/DTO/ClientIdentification.php delete mode 100644 src/App/DTO/ClientIdentificationData.php delete mode 100644 src/App/DTO/EMailDTO.php delete mode 100644 src/App/DTO/HttpFailureMessage.php delete mode 100644 src/App/DTO/JwtTokenConfig.php delete mode 100644 src/App/DTO/RefreshToken.php delete mode 100644 src/App/DTO/Token.php delete mode 100644 src/App/Entity/Account.php delete mode 100644 src/App/Entity/AccountAccessAuth.php delete mode 100644 src/App/Entity/AccountAccessAuthCollection.php delete mode 100644 src/App/Entity/AccountActivation.php delete mode 100644 src/App/Entity/AccountActivationCollection.php delete mode 100644 src/App/Entity/AccountCollection.php delete mode 100644 src/App/Entity/Token.php delete mode 100644 src/App/Entity/TokenCollection.php delete mode 100644 src/App/Enum/TokenType.php delete mode 100644 src/App/Handler/Account/AccessTokenHandler.php delete mode 100644 src/App/Handler/Account/AccountActivationHandler.php delete mode 100644 src/App/Handler/Account/AccountPasswordForgottenHandler.php delete mode 100644 src/App/Handler/Account/AccountPasswordHandler.php delete mode 100644 src/App/Handler/Account/AccountRegisterHandler.php delete mode 100644 src/App/Handler/Account/AuthenticationHandler.php delete mode 100644 src/App/Handler/PingHandler.php delete mode 100644 src/App/Handler/SwaggerUIHandler.php delete mode 100644 src/App/Hydrator/AccountAccessAuthHydrator.php delete mode 100644 src/App/Hydrator/AccountAccessAuthHydratorInterface.php delete mode 100644 src/App/Hydrator/AccountActivationHydrator.php delete mode 100644 src/App/Hydrator/AccountActivationHydratorInterface.php delete mode 100644 src/App/Hydrator/AccountHydrator.php delete mode 100644 src/App/Hydrator/AccountHydratorInterface.php delete mode 100644 src/App/Hydrator/TokenHydrator.php delete mode 100644 src/App/Hydrator/TokenHydratorInterface.php delete mode 100644 src/App/Middleware/Account/ActivationMiddleware.php delete mode 100644 src/App/Middleware/Account/LoginAuthentication/AuthenticationConditionsMiddleware.php delete mode 100644 src/App/Middleware/Account/LoginAuthentication/AuthenticationMiddleware.php delete mode 100644 src/App/Middleware/Account/LoginAuthentication/AuthenticationValidationMiddleware.php delete mode 100644 src/App/Middleware/Account/LoginAuthentication/PersistAuthenticationMiddleware.php delete mode 100644 src/App/Middleware/Account/PasswordChangeMiddleware.php delete mode 100644 src/App/Middleware/Account/PasswordForgottenMiddleware.php delete mode 100644 src/App/Middleware/Account/RegisterMiddleware.php delete mode 100644 src/App/Middleware/Account/RequestAuthenticationMiddleware.php delete mode 100644 src/App/Middleware/Account/Validation/ActivationInputValidatorMiddleware.php delete mode 100644 src/App/Middleware/Account/Validation/EmailInputValidatorMiddleware.php delete mode 100644 src/App/Middleware/Account/Validation/PasswordInputValidatorMiddleware.php delete mode 100644 src/App/Middleware/ClientIdentification/ClientIdentificationMiddleware.php delete mode 100644 src/App/Middleware/Token/GenerateAccessTokenMiddleware.php delete mode 100644 src/App/Middleware/Token/GenerateRefreshTokenMiddleware.php delete mode 100644 src/App/Middleware/Token/RefreshTokenAccountMiddleware.php delete mode 100644 src/App/Middleware/Token/RefreshTokenDatabaseExistenceMiddleware.php delete mode 100644 src/App/Middleware/Token/RefreshTokenMatchClientIdentificationMiddleware.php delete mode 100644 src/App/Middleware/Token/RefreshTokenValidationMiddleware.php delete mode 100644 src/App/Repository/AccountAccessAuthRepository.php delete mode 100644 src/App/Repository/AccountActivationRepository.php delete mode 100644 src/App/Repository/AccountRepository.php delete mode 100644 src/App/Repository/TokenRepository.php delete mode 100644 src/App/Service/Account/AccountService.php delete mode 100644 src/App/Service/Authentication/AuthenticationService.php delete mode 100644 src/App/Service/ClientIdentification/ClientIdentificationService.php delete mode 100644 src/App/Service/Token/AccessTokenService.php delete mode 100644 src/App/Service/Token/AccessTokenServiceFactory.php delete mode 100644 src/App/Service/Token/ActivationTokenService.php delete mode 100644 src/App/Service/Token/JwtTokenTrait.php delete mode 100644 src/App/Service/Token/PasswordTokenService.php delete mode 100644 src/App/Service/Token/RefreshTokenService.php delete mode 100644 src/App/Service/Token/RefreshTokenServiceFactory.php delete mode 100644 src/App/Table/AbstractTable.php delete mode 100644 src/App/Table/AccountAccessAuthTable.php delete mode 100644 src/App/Table/AccountActivationTable.php delete mode 100644 src/App/Table/AccountTable.php delete mode 100644 src/App/Table/TokenTable.php delete mode 100644 src/App/Validator/AccountActivationValidator.php delete mode 100644 src/App/Validator/AuthenticationValidator.php delete mode 100644 src/App/Validator/DateLessNow.php delete mode 100644 src/App/Validator/EMailValidator.php delete mode 100644 src/App/Validator/Input/AccountNameInput.php delete mode 100644 src/App/Validator/Input/EmailInput.php delete mode 100644 src/App/Validator/Input/PasswordInput.php delete mode 100644 src/App/Validator/PasswordValidator.php delete mode 100644 src/Core/ConfigProvider.php delete mode 100644 src/Core/Entity/Account/AccountAccessAuthCollectionInterface.php delete mode 100644 src/Core/Entity/Account/AccountAccessAuthInterface.php delete mode 100644 src/Core/Entity/Account/AccountActivationCollectionInterface.php delete mode 100644 src/Core/Entity/Account/AccountActivationInterface.php delete mode 100644 src/Core/Entity/Account/AccountCollectionInterface.php delete mode 100644 src/Core/Entity/Account/AccountInterface.php delete mode 100644 src/Core/Entity/TokenCollectionInterface.php delete mode 100644 src/Core/Entity/TokenInterface.php delete mode 100644 src/Core/Enum/App/AccountVisibleStatus.php delete mode 100644 src/Core/Enum/App/DateTimeFormat.php delete mode 100644 src/Core/Exception/DuplicateEntryException.php delete mode 100644 src/Core/Exception/EmptyResultException.php delete mode 100644 src/Core/Exception/UndefinedOffsetException.php delete mode 100644 src/Core/Factory/DatabaseFactory.php delete mode 100644 src/Core/Factory/MailFactory.php delete mode 100644 src/Core/Factory/QueryFactory.php delete mode 100644 src/Core/Factory/UuidFactory.php delete mode 100644 src/Core/Hydrator/HydratorInterface.php delete mode 100644 src/Core/Listener/LoggingErrorListener.php delete mode 100644 src/Core/Listener/LoggingErrorListenerDelegatorFactory.php delete mode 100644 src/Core/Listener/LoggingErrorListenerFactory.php delete mode 100644 src/Core/Logger/LoggerFactory.php delete mode 100644 src/Core/Logger/MetaDataProcessor.php delete mode 100644 src/Core/Message/DataType.php delete mode 100644 src/Core/Message/OADataType.php delete mode 100644 src/Core/Message/OAMessage.php delete mode 100644 src/Core/Message/ResponseMessage.php delete mode 100644 src/Core/Message/RouteName.php delete mode 100644 src/Core/Middleware/RouteNotFoundMiddleware.php delete mode 100644 src/Core/Repository/AccountAccessAuthRepositoryInterface.php delete mode 100644 src/Core/Repository/AccountActivationRepositoryInterface.php delete mode 100644 src/Core/Repository/AccountRepositoryInterface.php delete mode 100644 src/Core/Repository/RepositoryInterface.php delete mode 100644 src/Core/Repository/TokenRepositoryInterface.php delete mode 100644 src/Core/Store/AccountAccessAuthStoreInterface.php delete mode 100644 src/Core/Store/AccountActivationStoreInterface.php delete mode 100644 src/Core/Store/AccountStoreInterface.php delete mode 100644 src/Core/Store/StoreInterface.php delete mode 100644 src/Core/Store/TokenStoreInterface.php delete mode 100644 src/Core/Trait/CloneReadonlyClassWith.php delete mode 100644 src/Core/Type/Email.php delete mode 100644 src/Core/Type/TypeInterface.php delete mode 100644 src/Core/Utils/Collectible.php delete mode 100644 src/Core/Utils/Collection.php delete mode 100644 src/Core/Utils/CollectionInterface.php delete mode 100644 src/Core/Utils/UuidFactory.php delete mode 100644 src/Core/Utils/UuidFactoryInterface.php delete mode 100644 tests/FunctionalTest/AbstractFunctional.php delete mode 100644 tests/FunctionalTest/Mock/NullLogger.php delete mode 100644 tests/FunctionalTest/Mock/NullLoggerFactory.php delete mode 100644 tests/FunctionalTest/Mock/NullMailer.php delete mode 100644 tests/FunctionalTest/Mock/NullMailerFactory.php delete mode 100644 tests/FunctionalTest/Root/Account/AccessTokenHandlerTest.php delete mode 100644 tests/FunctionalTest/Root/Account/AccountActivationHandlerTest.php delete mode 100644 tests/FunctionalTest/Root/Account/AccountPasswordForgottenHandlerTest.php delete mode 100644 tests/FunctionalTest/Root/Account/AccountPasswordHandlerTest.php delete mode 100644 tests/FunctionalTest/Root/Account/AccountRegisterHandlerTest.php delete mode 100644 tests/FunctionalTest/Root/Account/AuthenticationHandlerTest.php delete mode 100644 tests/FunctionalTest/Root/Account/InvalidEMailAddressProviderTrait.php delete mode 100644 tests/FunctionalTest/Root/PingHandlerTest.php delete mode 100644 tests/FunctionalTest/bootstrap.php delete mode 100644 tests/FunctionalTest/database/migrations/Version20990921210156_InsertAccountTestData.php delete mode 100644 tests/UnitTest/AppTest/Handler/AbstractTestHandler.php delete mode 100644 tests/UnitTest/AppTest/Handler/AuthenticationHandlerTest.php delete mode 100644 tests/UnitTest/AppTest/Handler/PingHandlerTest.php delete mode 100644 tests/UnitTest/AppTest/Hydrator/AccountAccessAuthHydratorTest.php delete mode 100644 tests/UnitTest/AppTest/Hydrator/AccountHydratorTest.php delete mode 100644 tests/UnitTest/AppTest/Middleware/AbstractTestMiddleware.php delete mode 100644 tests/UnitTest/AppTest/Middleware/AccountAccessAuthPersistMiddlewareTest.php delete mode 100644 tests/UnitTest/AppTest/Middleware/AccountAuthenticationMiddlewareTest.php delete mode 100644 tests/UnitTest/AppTest/Middleware/AuthenticationConditionsMiddlewareTest.php delete mode 100644 tests/UnitTest/AppTest/Middleware/AuthenticationMiddlewareTest.php delete mode 100644 tests/UnitTest/AppTest/Middleware/AuthenticationValidationMiddlewareTest.php delete mode 100644 tests/UnitTest/AppTest/Middleware/ClientIdentificationMiddlewareTest.php delete mode 100644 tests/UnitTest/AppTest/Middleware/GenerateAccessTokenMiddlewareTest.php delete mode 100644 tests/UnitTest/AppTest/Middleware/GenerateRefreshTokenMiddlewareTest.php delete mode 100644 tests/UnitTest/AppTest/Repository/AccountAccessAuthRepositoryTest.php delete mode 100644 tests/UnitTest/AppTest/Repository/AccountRepositoryTest.php delete mode 100644 tests/UnitTest/AppTest/Service/AccessTokenServiceTest.php delete mode 100644 tests/UnitTest/AppTest/Service/AuthenticationServiceTest.php delete mode 100644 tests/UnitTest/AppTest/Service/RefreshTokenServiceTest.php delete mode 100644 tests/UnitTest/AppTest/Table/AccountAccessAuthTableTest.php delete mode 100644 tests/UnitTest/AppTest/Table/AccountTableTest.php delete mode 100644 tests/UnitTest/CoreTest/Factory/DatabaseFactoryTest.php delete mode 100644 tests/UnitTest/CoreTest/Factory/QueryFactoryTest.php delete mode 100644 tests/UnitTest/GameTest/.gitkeep delete mode 100644 tests/UnitTest/JsonRequestHelper.php delete mode 100644 tests/UnitTest/Mock/Constants/Account.php delete mode 100644 tests/UnitTest/Mock/Constants/AccountAccessAuth.php delete mode 100644 tests/UnitTest/Mock/Constants/Token.php delete mode 100644 tests/UnitTest/Mock/Database/MockDelete.php delete mode 100644 tests/UnitTest/Mock/Database/MockDeleteFailed.php delete mode 100644 tests/UnitTest/Mock/Database/MockInsert.php delete mode 100644 tests/UnitTest/Mock/Database/MockInsertFailed.php delete mode 100644 tests/UnitTest/Mock/Database/MockPDO.php delete mode 100644 tests/UnitTest/Mock/Database/MockQuery.php delete mode 100644 tests/UnitTest/Mock/Database/MockQueryFailed.php delete mode 100644 tests/UnitTest/Mock/Database/MockSelect.php delete mode 100644 tests/UnitTest/Mock/Database/MockSelectFailed.php delete mode 100644 tests/UnitTest/Mock/Database/MockUpdate.php delete mode 100644 tests/UnitTest/Mock/Database/MockUpdateFailed.php delete mode 100644 tests/UnitTest/Mock/Entity/MockAccount.php delete mode 100644 tests/UnitTest/Mock/MockAccountAuthenticationMiddlewareRequestHandler.php delete mode 100644 tests/UnitTest/Mock/MockContainer.php delete mode 100644 tests/UnitTest/Mock/MockRequestHandler.php delete mode 100644 tests/UnitTest/Mock/MockResponse.php delete mode 100644 tests/UnitTest/Mock/MockServerRequest.php delete mode 100644 tests/UnitTest/Mock/Repository/MockAccountAccessAuthRepository.php delete mode 100644 tests/UnitTest/Mock/Repository/MockAccountRepository.php delete mode 100644 tests/UnitTest/Mock/Repository/MockAccountRepositoryAccountAuthenticationMiddlewareInvalidToken.php delete mode 100644 tests/UnitTest/Mock/Service/MockAccessTokenService.php delete mode 100644 tests/UnitTest/Mock/Service/MockAccessTokenServiceWithoutDuration.php delete mode 100644 tests/UnitTest/Mock/Service/MockAuthenticationService.php delete mode 100644 tests/UnitTest/Mock/Service/MockClientIdentificationService.php delete mode 100644 tests/UnitTest/Mock/Service/MockRefreshTokenService.php delete mode 100644 tests/UnitTest/Mock/Table/MockAccountAccessAuthTable.php delete mode 100644 tests/UnitTest/Mock/Table/MockAccountAccessAuthTableFailed.php delete mode 100644 tests/UnitTest/Mock/Table/MockAccountTable.php delete mode 100644 tests/UnitTest/Mock/Table/MockAccountTableAccountAuthenticationMiddlewareInvalidToken.php delete mode 100644 tests/UnitTest/Mock/Table/MockAccountTableFailed.php delete mode 100644 tests/UnitTest/Mock/Validator/MockAuthenticationValidator.php delete mode 100644 tests/UnitTest/Mock/Validator/MockAuthenticationValidatorFailed.php diff --git a/.env.dist b/.env.dist deleted file mode 100644 index e80ae27f..00000000 --- a/.env.dist +++ /dev/null @@ -1,14 +0,0 @@ -APP_ENV=develope -USERMAP_UID=1000 -USERMAP_GID=984 -MYSQL_USER=dev -MYSQL_PASSWORD=dev -MYSQL_ROOT_PASSWORD=root -MYSQL_DATABASE=db -MYSQL_PUBLIC_PORT=3306 -MYSQL_TESTING_PORT=3307 -PHP_VERSION=8.3 -MARIADB_VERSION=latest -APACHE_VERSION=2.4-alpine -HTTP_PORT=80 -SHTTP_PORT=443 diff --git a/.github/workflows/codestyle-and-unittest.yml b/.github/workflows/codestyle-and-unittest.yml index ae528968..c6be1757 100644 --- a/.github/workflows/codestyle-and-unittest.yml +++ b/.github/workflows/codestyle-and-unittest.yml @@ -4,9 +4,9 @@ on: branches: - '*' - '!master' - - '!develope' paths: - "**.php" + pull_request: jobs: phplint: @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.2.2 + - uses: actions/checkout@v4.1.1 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -34,20 +34,12 @@ jobs: - name: Run PHP Linter run: composer run-script phplint - - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 - with: - severity: error - details: PHP Lint failed. - webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} - if: failure() - phpstan: name: PHP Stan runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.2.2 + - uses: actions/checkout@v4.1.1 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -67,20 +59,12 @@ jobs: - name: Run PHP Stan run: composer run-script phpstan - - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 - with: - severity: error - details: PHP Stan failed. - webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} - if: failure() - phpcs: name: PHP CodeSniffer runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.2.2 + - uses: actions/checkout@v4.1.1 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -100,14 +84,6 @@ jobs: - name: Run PHP Codesniffer run: composer run-script phpcs - - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 - with: - severity: error - details: CodeSniffer failed. - webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} - if: failure() - phpunit: name: PHP Unit Test needs: @@ -117,7 +93,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.2.2 + - uses: actions/checkout@v4.1.1 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -137,14 +113,6 @@ jobs: - name: Run PHP Unit Test run: composer run-script unittest - - name: Test Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 - with: - severity: error - details: PHP Unit Test failed. - webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} - if: failure() - phpfunctional: name: PHP Functional Test needs: @@ -152,36 +120,17 @@ jobs: - phpstan - phpcs runs-on: ubuntu-latest - env: - DB_DATABASE: db - DB_USERNAME: dev - DB_PASSWORD: dev - DB_HOST: 127.0.0.1 - DB_PORT: 3306 - MYSQL_ALLOW_EMPTY_PASSWORD: false - MYSQL_ROOT_PASSWORD: root - MYSQL_DATABASE: db - APP_ENV: action - services: - database-testing: - image: mariadb:latest - env: - MYSQL_ALLOW_EMPTY_PASSWORD: false - MYSQL_ROOT_PASSWORD: root - MYSQL_DATABASE: db - MYSQL_USER: dev - MYSQL_PASSWORD: dev - ports: - - 3306:3306 - options: --health-cmd="healthcheck.sh --connect --innodb_initialized" --health-interval=10s --health-timeout=5s --health-retries=3 + steps: - - uses: actions/checkout@v4.2.2 + - uses: actions/checkout@v4.1.1 + - name: Install PHP with extensions. uses: shivammathur/setup-php@v2 with: php-version: 8.3 - extensions: pdo + extensions: pdo, pdo_sqlite ini-values: date.timezone='UTC' + - name: Validate composer.json and composer.lock run: composer validate --strict @@ -197,38 +146,5 @@ jobs: - name: Install dependencies run: composer install --prefer-dist --no-progress - - name: Run PHP Functional Test + - name: Run PHP Unit Test run: composer run-script functionaltest - - - name: Test Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 - with: - severity: error - details: Functional Test failed. - webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} - if: failure() - - message: - needs: - - phpcs - - phplint - - phpstan - - phpunit - - phpfunctional - runs-on: ubuntu-latest - steps: - - name: Check Info Success - uses: rjstone/discord-webhook-notify@v1.0.4 - with: - severity: info - details: Checks successfully executed on API. - webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} - if: success() - - - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 - with: - severity: error - details: Incorrect checks during the API check. - webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} - if: failure() diff --git a/.github/workflows/deploy_dev.yml b/.github/workflows/deployment_build.yml similarity index 71% rename from .github/workflows/deploy_dev.yml rename to .github/workflows/deployment_build.yml index e49ed94c..e6f1be5f 100644 --- a/.github/workflows/deploy_dev.yml +++ b/.github/workflows/deployment_build.yml @@ -1,16 +1,17 @@ -name: Deployment on Developement +name: Development Deployment on: push: - branches: [ "develope" ] + branches: [ "master" ] workflow_dispatch: jobs: + phplint: name: PHP Lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.2.2 + - uses: actions/checkout@v4.1.1 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -30,11 +31,11 @@ jobs: - name: Run PHP Linter run: composer run-script phplint - - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + - name: Test Info + uses: rjstone/discord-webhook-notify@v1 with: severity: error - details: PHP Lint failed. + details: Code-Style error. webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} if: failure() @@ -43,7 +44,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.2.2 + - uses: actions/checkout@v4.1.1 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -63,11 +64,11 @@ jobs: - name: Run PHP Stan run: composer run-script phpstan - - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + - name: Test Info + uses: rjstone/discord-webhook-notify@v1 with: severity: error - details: PHP Stan failed. + details: Code-Style error. webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} if: failure() @@ -76,7 +77,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.2.2 + - uses: actions/checkout@v4.1.1 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -96,11 +97,11 @@ jobs: - name: Run PHP Codesniffer run: composer run-script phpcs - - name: Check Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + - name: Test Info + uses: rjstone/discord-webhook-notify@v1 with: severity: error - details: CodeSniffer failed. + details: Code-Style error. webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} if: failure() @@ -113,7 +114,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.2.2 + - uses: actions/checkout@v4.1.1 - name: Validate composer.json and composer.lock run: composer validate --strict @@ -133,11 +134,11 @@ jobs: - name: Run PHP Unit Test run: composer run-script unittest - - name: Test Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + - name: Test Info + uses: rjstone/discord-webhook-notify@v1 with: severity: error - details: PHP Unit Test failed. + details: Test error. webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} if: failure() @@ -148,36 +149,17 @@ jobs: - phpstan - phpcs runs-on: ubuntu-latest - env: - DB_DATABASE: db - DB_USERNAME: dev - DB_PASSWORD: dev - DB_HOST: 127.0.0.1 - DB_PORT: 3306 - MYSQL_ALLOW_EMPTY_PASSWORD: false - MYSQL_ROOT_PASSWORD: root - MYSQL_DATABASE: db - APP_ENV: action - services: - database-testing: - image: mariadb:latest - env: - MYSQL_ALLOW_EMPTY_PASSWORD: false - MYSQL_ROOT_PASSWORD: root - MYSQL_DATABASE: db - MYSQL_USER: dev - MYSQL_PASSWORD: dev - ports: - - 3306:3306 - options: --health-cmd="healthcheck.sh --connect --innodb_initialized" --health-interval=10s --health-timeout=5s --health-retries=3 + steps: - - uses: actions/checkout@v4.2.2 + - uses: actions/checkout@v4.1.1 + - name: Install PHP with extensions. uses: shivammathur/setup-php@v2 with: php-version: 8.3 - extensions: pdo + extensions: pdo, pdo_sqlite ini-values: date.timezone='UTC' + - name: Validate composer.json and composer.lock run: composer validate --strict @@ -193,18 +175,18 @@ jobs: - name: Install dependencies run: composer install --prefer-dist --no-progress - - name: Run PHP Functional Test + - name: Run PHP Unit Test run: composer run-script functionaltest - - name: Test Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + - name: Test Info + uses: rjstone/discord-webhook-notify@v1 with: severity: error - details: Functional Test failed. + details: Test error. webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} if: failure() - deployment_of_stormannsgal_to_develope: + deployment_of_hackathon_to_build: name: Deploy Build needs: - phpcs @@ -226,27 +208,27 @@ jobs: - name: rsync deployments uses: burnett01/rsync-deployments@7.0.1 with: - switches: -avz --no-o --no-g --no-perms --no-t --omit-dir-times --delete --exclude-from='.rsync-exclude' + switches: -avz --no-o --no-g --no-perms --no-t --omit-dir-times --delete --exclude '*' --include-from='.rsync-include' path: / - remote_path: ${{ secrets.DEPLOY_PATH_API_DEV }} + remote_path: ${{ secrets.DEPLOY_PATH_API_BUILD }} remote_host: ${{ secrets.DEPLOY_HOST }} remote_port: ${{ secrets.DEPLOY_PORT }} remote_user: ${{ secrets.DEPLOY_USER }} remote_key: ${{ secrets.DEPLOY_KEY }} remote_key_pass: ${{ secrets.DEPLOY_KEY_PASS }} - - name: Deploay Info Success - uses: rjstone/discord-webhook-notify@v1.0.4 + - name: Test Info Success + uses: rjstone/discord-webhook-notify@v1 with: severity: info - details: Successful deployment on build https://dev.stormannsgal.de + details: Successful deployment on build https://build.hackathon.exdrals.de webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} if: success() - - name: Deplay Info Failure - uses: rjstone/discord-webhook-notify@v1.0.4 + - name: Test Info Failure + uses: rjstone/discord-webhook-notify@v1 with: severity: error - details: Failure deployment on develope. + details: Failure deployment on build. webhookUrl: ${{ secrets.WEBHOOK_DISCORD_URL }} if: failure() diff --git a/.github/workflows/deployment_production.yml b/.github/workflows/deployment_production.yml new file mode 100644 index 00000000..49208751 --- /dev/null +++ b/.github/workflows/deployment_production.yml @@ -0,0 +1,51 @@ +name: Production Deployment + +on: + release: + types: [ published ] + +jobs: + deployment_of_hackathon_to_production: + env: + VUE_APP_API_BASE_URL: 'https://hackathon.exdrals.de' + runs-on: ubuntu-latest + steps: + - name: Get latest code + uses: actions/checkout@v4.1.1 + + - name: Install Composer Dependencies + run: composer install --prefer-dist --no-progress --no-dev + + - name: Run create openapi Data + run: composer run-script openapi + + - name: FTP Deploy to Production Server (Staging) + uses: SamKirkland/FTP-Deploy-Action@4.3.2 + with: + server: ${{ secrets.PROD_HOST }} + username: ${{ secrets.PROD_USER }} + password: ${{ secrets.PROD_PASSWORD }} + exclude: | + **/.git* + **/*.dist + **/*.dist/** + **/.git*/** + **/bin/** + **/tests/** + **/config/autoload/** + **/config/migrations/** + **/node_modules/** + **/client/** + **/database/** + **/scripts/** + **/tests/** + **/docker/** + **/public/assets/** + **/public/index.html + **/*.md + **/*.xml + **/*.neon + **/*.json + **/*.yml + **/*.lock + **/LICENSE diff --git a/.gitignore b/.gitignore index e3d8f26f..e3dcfbf5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ /tests/behat.yml /tests/.phpunit.result.cache /vendor/ -/public/assets/* *.cache *.phar .ddev @@ -10,11 +9,4 @@ /database/structure/update*.sql /public/api/doc/swagger.json coverage.xml -/.phpcs-cache -/.phpunit.result.cache -/clover.xml -/coveralls-upload.json -/phpunit.xml -/public/test.php -/tmp -.env +/.env diff --git a/.laminas-ci/pre-run.sh b/.laminas-ci/pre-run.sh deleted file mode 100755 index 8b8528d8..00000000 --- a/.laminas-ci/pre-run.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -# Due to the fact that we are disabling plugins when installing/updating/downgrading composer dependencies -# we have to manually enable the coding standard here. -composer enable-codestandard diff --git a/.phplint.yml b/.phplint.yml deleted file mode 100644 index 2264a4f4..00000000 --- a/.phplint.yml +++ /dev/null @@ -1,9 +0,0 @@ -path: ./ -jobs: 10 -cache: .phplint.cache -extensions: - - php -exclude: - - vendor -warning: true -memory_limit: -1 diff --git a/.rsync-exclude b/.rsync-exclude deleted file mode 100644 index 97e349aa..00000000 --- a/.rsync-exclude +++ /dev/null @@ -1,33 +0,0 @@ -/.github -/.laminas-ci -/bin/ -/config/.gitignore -/config/*.dist -/config/*.tpl -/config/autoload/.gitignore -/config/autoload/*.dist -/config/autoload/*.local.* -/config/autoload/*.testing.* -/config/autoload/*.develope.* -/config/autoload/*.action.* -/config/autoload/migrations.* -/database/ -/data/.gitignore -/data/log/** -/docker/ -/docs/ -/public/.* -/public/*.php -/public/*.html -/public/assets/ -/tests/ -/.* -/*.json -/*.lock -/*.yml -/*.yaml -/*.xml -/*.neon -/*.md -/LICENSE -/README diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..ec2148df --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,35 @@ + + +# Changelog for the Hackathon evaluation Project + + + + + + + + + + + + + + + +## Unreleased + + + + + + + + + + + + diff --git a/bin/hackathon b/bin/hackathon index ff1f25c8..93c6f4cc 100755 --- a/bin/hackathon +++ b/bin/hackathon @@ -1,12 +1,13 @@ #!/usr/bin/bash +export APP_ENV=${APP_ENV:-develope} function composer_install() { docker-compose exec php composer install } function setup_database() { - docker-compose exec php composer run doctrine migrations:sync-metadata-storage - docker-compose exec php composer run doctrine migrations:migrate --no-interaction + docker-compose exec --env APP_ENV php composer run doctrine migrations:sync-metadata-storage + docker-compose exec --env APP_ENV php composer run doctrine migrations:migrate --no-interaction } function docker_start() { @@ -19,7 +20,6 @@ function docker_down() { function docker_database_cleanup() { docker volume rm hackathon-api_db - docker volume rm hackathon-api_db-testing } function docker_vendor_cleanup() { @@ -27,7 +27,7 @@ function docker_vendor_cleanup() { } function docker_cleanup() { - docker image rm ghcr.io/ownhackathon/hackathon-api-php:latest mariadb:latest mailhog/mailhog httpd:alpine + docker image rm -f ghcr.io/ownhackathon/hackathon-api-php:latest mariadb:latest mailhog/mailhog httpd:alpine docker_database_cleanup docker_vendor_cleanup } @@ -51,6 +51,10 @@ case $1 in setup_database ;; + "clean") + docker_vendor_cleanup + ;; + "reset") echo "turning down docker container" docker_down @@ -61,7 +65,7 @@ case $1 in docker_cleanup ;; "vendor") - echo "cleanup database with vendor" + echo "cleanup vendor folder" docker_vendor_cleanup ;; *) @@ -77,7 +81,7 @@ case $1 in composer_install echo "wait for services" - sleep 10 + sleep 5 echo "create database storage information an run migrations" setup_database @@ -86,14 +90,10 @@ case $1 in ;; "composer") - docker-compose run --rm php composer "${@:2}" + docker-compose run --rm --env APP_ENV php composer "${@:2}" ;; - "indocker") - docker-compose run --rm php "${@:2}" - ;; - - *) - + "php") + docker-compose run --rm --env APP_ENV php "${@:2}" ;; esac diff --git a/bin/migrations.php b/bin/migrations.php deleted file mode 100755 index cef980d9..00000000 --- a/bin/migrations.php +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env php -setCustomTemplate(__DIR__ . '/../config/migrations.template.tpl'); - -$configuration->addMigrationsDirectory('Migrations', $config['migrations_paths']['Migrations']); -if (array_key_exists('TestDataMigrations', $config['migrations_paths'])) { - $configuration->addMigrationsDirectory('TestDataMigrations', $config['migrations_paths']['TestDataMigrations']); -} -$configuration->setAllOrNothing($config['all_or_nothing']); -$configuration->setCheckDatabasePlatform($config['check_database_platform']); -$configuration->setTransactional($config['transactional']); -$configuration->setMigrationOrganization($config['organize_migrations']); - -$storageConfiguration = new TableMetadataStorageConfiguration(); -$storageConfiguration->setTableName($config['table_storage']['table_name']); -$storageConfiguration->setVersionColumnName($config['table_storage']['version_column_name']); -$storageConfiguration->setVersionColumnLength($config['table_storage']['version_column_length']); -$storageConfiguration->setExecutedAtColumnName($config['table_storage']['executed_at_column_name']); -$storageConfiguration->setExecutionTimeColumnName($config['table_storage']['execution_time_column_name']); - -$configuration->setMetadataStorageConfiguration($storageConfiguration); - -$container = require_once __DIR__ . '/../config/container.php'; - -$dependencyFactory = DependencyFactory::fromConnection( - new ExistingConfiguration($configuration), - new ExistingConnection($connection) -); - -$dependencyFactory->setService(Psr\Container\ContainerInterface::class, $container); - -$cli = new Application('Doctrine Migrations'); -$cli->setCatchExceptions(true); - -$cli->addCommands([ - new Command\DumpSchemaCommand($dependencyFactory), - new Command\ExecuteCommand($dependencyFactory), - new Command\GenerateCommand($dependencyFactory), - new Command\LatestCommand($dependencyFactory), - new Command\ListCommand($dependencyFactory), - new Command\MigrateCommand($dependencyFactory), - new Command\RollupCommand($dependencyFactory), - new Command\StatusCommand($dependencyFactory), - new Command\SyncMetadataCommand($dependencyFactory), - new Command\VersionCommand($dependencyFactory), -]); - -$cli->run(); diff --git a/composer.json b/composer.json deleted file mode 100644 index 1c8410e7..00000000 --- a/composer.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "name": "ownhackathon/hackathon-api", - "description": "Evaluation project for self-created hackathon", - "type": "project", - "license": "BSD-3-Clause", - "keywords": [ - "Hackathon", - "OpenSource" - ], - "homepage": "https://github.com/ownHackathon", - "support": { - "docs": "https://github.com/ownHackathon", - "issues": "https://github.com/ownHackathon/hackathon-api/issues", - "source": "https://github.com/ownHackathon/hackathon-api" - }, - "config": { - "sort-packages": true, - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true, - "composer/package-versions-deprecated": true, - "laminas/laminas-component-installer": true - }, - "platform": { - "php": "8.3.0" - } - }, - "extra": { - "laminas": { - "component-auto-installs": [ - "mezzio/mezzio", - "mezzio/mezzio-helpers", - "mezzio/mezzio-router", - "laminas/laminas-httphandlerrunner", - "mezzio/mezzio-fastroute" - ] - } - }, - "require": { - "php": "~8.3.0", - "ext-json": "*", - "ext-openssl": "*", - "ext-pdo": "*", - "composer/package-versions-deprecated": "^1.10.99", - "doctrine/migrations": "^3.6", - "envms/fluentpdo": "^2.2", - "firebase/php-jwt": "^6.0", - "jetbrains/phpstorm-attributes": "^1.0", - "laminas/laminas-component-installer": "^2.6 || ^3.0", - "laminas/laminas-config-aggregator": "^1.6", - "laminas/laminas-diactoros": "^2.24.2", - "laminas/laminas-inputfilter": "^2.30", - "laminas/laminas-servicemanager": "^3.4", - "laminas/laminas-stdlib": "^3.6", - "laminas/laminas-validator": "^2.64", - "mezzio/mezzio": "^3.7", - "mezzio/mezzio-cors": "^1.13", - "mezzio/mezzio-fastroute": "^3.0.3", - "mezzio/mezzio-helpers": "^5.7", - "mezzio/mezzio-tooling": "^2.8", - "monolog/monolog": "^3.9.0", - "ramsey/uuid": "^4.7", - "symfony/mailer": "^7.3", - "zircote/swagger-php": "^4.7" - }, - "require-dev": { - "filp/whoops": "^2.7.1", - "helmich/phpunit-json-assert": "^3.5", - "helmich/phpunit-psr7-assert": "^4.4", - "laminas/laminas-development-mode": "^3.3.0", - "overtrue/phplint": "^9.0", - "phpstan/phpstan": "^1.10", - "phpstan/phpstan-deprecation-rules": "^1.2", - "phpunit/php-code-coverage": "^10.0", - "phpunit/phpunit": "^10.0", - "roave/security-advisories": "dev-master", - "slevomat/coding-standard": "^8.14", - "squizlabs/php_codesniffer": "^3.7" - }, - "autoload": { - "psr-4": { - "ownHackathon\\App\\": "src/App/", - "ownHackathon\\Core\\": "src/Core/" - } - }, - "autoload-dev": { - "psr-4": { - "ownHackathon\\UnitTest\\": "tests/UnitTest/", - "ownHackathon\\FunctionalTest\\": "tests/FunctionalTest/" - } - }, - "scripts": { - "post-create-project-cmd": [ - "@development-enable" - ], - "development-disable": "laminas-development-mode disable", - "development-enable": "laminas-development-mode enable", - "development-status": "laminas-development-mode status", - "mezzio": "laminas --ansi", - "clear-config-cache": "php bin/clear-config-cache.php", - "enable-codestandard": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin::run", - "doctrine": "php ./bin/migrations.php", - "openapi": "php ./vendor/bin/openapi ./src -f json -o ./public/api/docs/swagger.json", - "phplint": "vendor/bin/phplint", - "phpcs": "phpcs --standard=phpcs.xml -s -p", - "phpcbf": "phpcbf --standard=phpcs.xml -p", - "phpstan": "vendor/bin/phpstan analyse -c phpstan.neon", - "unittest": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --colors=always --configuration phpunit_unittest.xml", - "functionaltest": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --colors=always --configuration phpunit_functionaltest.xml", - "test": [ - "@unittest", - "@functionaltest" - ], - "check": [ - "@phplint", - "@phpcs", - "@phpstan", - "@test" - ] - } -} diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 9ec6b24a..00000000 --- a/composer.lock +++ /dev/null @@ -1,8516 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "3df468d49dc6191a49240b6e113267bd", - "packages": [ - { - "name": "brick/math", - "version": "0.13.1", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04", - "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "6.8.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "bignumber", - "brick", - "decimal", - "integer", - "math", - "mathematics", - "rational" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.13.1" - }, - "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - } - ], - "time": "2025-03-29T13:50:30+00:00" - }, - { - "name": "brick/varexporter", - "version": "0.6.0", - "source": { - "type": "git", - "url": "https://github.com/brick/varexporter.git", - "reference": "af98bfc2b702a312abbcaff37656dbe419cec5bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/varexporter/zipball/af98bfc2b702a312abbcaff37656dbe419cec5bc", - "reference": "af98bfc2b702a312abbcaff37656dbe419cec5bc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.0", - "php": "^8.1" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "6.8.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\VarExporter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A powerful alternative to var_export(), which can export closures and objects without __set_state()", - "keywords": [ - "var_export" - ], - "support": { - "issues": "https://github.com/brick/varexporter/issues", - "source": "https://github.com/brick/varexporter/tree/0.6.0" - }, - "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - } - ], - "time": "2025-02-20T17:42:39+00:00" - }, - { - "name": "composer/package-versions-deprecated", - "version": "1.11.99.5", - "source": { - "type": "git", - "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", - "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1.0 || ^2.0", - "php": "^7 || ^8" - }, - "replace": { - "ocramius/package-versions": "1.11.99" - }, - "require-dev": { - "composer/composer": "^1.9.3 || ^2.0@dev", - "ext-zip": "^1.13", - "phpunit/phpunit": "^6.5 || ^7" - }, - "type": "composer-plugin", - "extra": { - "class": "PackageVersions\\Installer", - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "PackageVersions\\": "src/PackageVersions" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "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", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-01-17T14:14:24+00:00" - }, - { - "name": "doctrine/dbal", - "version": "4.3.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "7669f131d43b880de168b2d2df9687d152d6c762" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/7669f131d43b880de168b2d2df9687d152d6c762", - "reference": "7669f131d43b880de168b2d2df9687d152d6c762", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.1.5", - "php": "^8.2", - "psr/cache": "^1|^2|^3", - "psr/log": "^1|^2|^3" - }, - "require-dev": { - "doctrine/coding-standard": "13.0.0", - "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.2", - "phpstan/phpstan": "2.1.17", - "phpstan/phpstan-phpunit": "2.0.6", - "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "11.5.23", - "slevomat/coding-standard": "8.16.2", - "squizlabs/php_codesniffer": "3.13.1", - "symfony/cache": "^6.3.8|^7.0", - "symfony/console": "^5.4|^6.3|^7.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "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" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.3.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%2Fdbal", - "type": "tidelift" - } - ], - "time": "2025-08-05T13:30:38+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "phpunit/phpunit": "<=7.5 || >=13" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^13", - "phpstan/phpstan": "1.4.10 || 2.1.11", - "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", - "psr/log": "^1 || ^2 || ^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "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/event-manager", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", - "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.24" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "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" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.1" - }, - "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%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2024-05-22T20:47:39+00:00" - }, - { - "name": "doctrine/lexer", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.21" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.1" - }, - "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%2Flexer", - "type": "tidelift" - } - ], - "time": "2024-02-05T11:56:58+00:00" - }, - { - "name": "doctrine/migrations", - "version": "3.9.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/migrations.git", - "reference": "fa94c6f06b1bc6d4759481ec20b8b81d13e861be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/fa94c6f06b1bc6d4759481ec20b8b81d13e861be", - "reference": "fa94c6f06b1bc6d4759481ec20b8b81d13e861be", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/dbal": "^3.6 || ^4", - "doctrine/deprecations": "^0.5.3 || ^1", - "doctrine/event-manager": "^1.2 || ^2.0", - "php": "^8.1", - "psr/log": "^1.1.3 || ^2 || ^3", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", - "symfony/var-exporter": "^6.2 || ^7.0" - }, - "conflict": { - "doctrine/orm": "<2.12 || >=4" - }, - "require-dev": { - "doctrine/coding-standard": "^13", - "doctrine/orm": "^2.13 || ^3", - "doctrine/persistence": "^2 || ^3 || ^4", - "doctrine/sql-formatter": "^1.0", - "ext-pdo_sqlite": "*", - "fig/log-test": "^1", - "phpstan/phpstan": "^2", - "phpstan/phpstan-deprecation-rules": "^2", - "phpstan/phpstan-phpunit": "^2", - "phpstan/phpstan-strict-rules": "^2", - "phpstan/phpstan-symfony": "^2", - "phpunit/phpunit": "^10.3 || ^11.0 || ^12.0", - "symfony/cache": "^5.4 || ^6.0 || ^7.0", - "symfony/process": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" - }, - "suggest": { - "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", - "symfony/yaml": "Allows the use of yaml for migration configuration files." - }, - "bin": [ - "bin/doctrine-migrations" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Migrations\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Michael Simonson", - "email": "contact@mikesimonson.com" - } - ], - "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" - ], - "support": { - "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.9.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%2Fmigrations", - "type": "tidelift" - } - ], - "time": "2025-07-29T11:36:14+00:00" - }, - { - "name": "egulias/email-validator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", - "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^2.0 || ^3.0", - "php": ">=8.1", - "symfony/polyfill-intl-idn": "^1.26" - }, - "require-dev": { - "phpunit/phpunit": "^10.2", - "vimeo/psalm": "^5.12" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ], - "support": { - "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/egulias", - "type": "github" - } - ], - "time": "2025-03-06T22:45:56+00:00" - }, - { - "name": "envms/fluentpdo", - "version": "v2.2.4", - "source": { - "type": "git", - "url": "https://github.com/envms/fluentpdo.git", - "reference": "1985e0e8406a56140f387bc9bec786b419cbeccc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/envms/fluentpdo/zipball/1985e0e8406a56140f387bc9bec786b419cbeccc", - "reference": "1985e0e8406a56140f387bc9bec786b419cbeccc", - "shasum": "" - }, - "require": { - "ext-pdo": "*", - "php": ">=7.1" - }, - "require-dev": { - "envms/fluent-test": "^1.0", - "phpunit/phpunit": "^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Envms\\FluentPDO\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0", - "GPL-2.0+" - ], - "authors": [ - { - "name": "envms", - "homepage": "https://env.ms" - } - ], - "description": "FluentPDO is a quick and light PHP library for rapid query building. It features a smart join builder, which automatically creates table joins.", - "homepage": "https://github.com/envms/fluentpdo", - "keywords": [ - "builder", - "database", - "db", - "dbal", - "fluent", - "mysql", - "oracle", - "pdo", - "query" - ], - "support": { - "issues": "https://github.com/envms/fluentpdo/issues", - "source": "https://github.com/envms/fluentpdo/tree/v2.2.4" - }, - "time": "2022-01-27T21:49:44+00:00" - }, - { - "name": "fig/http-message-util", - "version": "1.1.5", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message-util.git", - "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765", - "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0 || ^8.0" - }, - "suggest": { - "psr/http-message": "The package containing the PSR-7 interfaces" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Fig\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "issues": "https://github.com/php-fig/http-message-util/issues", - "source": "https://github.com/php-fig/http-message-util/tree/1.1.5" - }, - "time": "2020-11-24T22:02:12+00:00" - }, - { - "name": "firebase/php-jwt", - "version": "v6.11.1", - "source": { - "type": "git", - "url": "https://github.com/firebase/php-jwt.git", - "reference": "d1e91ecf8c598d073d0995afa8cd5c75c6e19e66" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/d1e91ecf8c598d073d0995afa8cd5c75c6e19e66", - "reference": "d1e91ecf8c598d073d0995afa8cd5c75c6e19e66", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "guzzlehttp/guzzle": "^7.4", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "psr/cache": "^2.0||^3.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0" - }, - "suggest": { - "ext-sodium": "Support EdDSA (Ed25519) signatures", - "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" - }, - "type": "library", - "autoload": { - "psr-4": { - "Firebase\\JWT\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Neuman Vong", - "email": "neuman+pear@twilio.com", - "role": "Developer" - }, - { - "name": "Anant Narayanan", - "email": "anant@php.net", - "role": "Developer" - } - ], - "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", - "homepage": "https://github.com/firebase/php-jwt", - "keywords": [ - "jwt", - "php" - ], - "support": { - "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.11.1" - }, - "time": "2025-04-09T20:32:01+00:00" - }, - { - "name": "jetbrains/phpstorm-attributes", - "version": "1.2", - "source": { - "type": "git", - "url": "https://github.com/JetBrains/phpstorm-attributes.git", - "reference": "64de815a4509c29e00d5e3474087fd24c171afc2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JetBrains/phpstorm-attributes/zipball/64de815a4509c29e00d5e3474087fd24c171afc2", - "reference": "64de815a4509c29e00d5e3474087fd24c171afc2", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "JetBrains\\PhpStorm\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "JetBrains", - "homepage": "https://www.jetbrains.com" - } - ], - "description": "PhpStorm specific attributes", - "keywords": [ - "attributes", - "jetbrains", - "phpstorm" - ], - "support": { - "issues": "https://youtrack.jetbrains.com/newIssue?project=WI", - "source": "https://github.com/JetBrains/phpstorm-attributes/tree/1.2" - }, - "time": "2024-10-11T10:46:19+00:00" - }, - { - "name": "laminas/laminas-cli", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-cli.git", - "reference": "159b48f896fb2502cb6618a95307b56a0f23e592" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-cli/zipball/159b48f896fb2502cb6618a95307b56a0f23e592", - "reference": "159b48f896fb2502cb6618a95307b56a0f23e592", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.0.0", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/container": "^1.0 || ^2.0", - "symfony/console": "^6.0 || ^7.0", - "symfony/event-dispatcher": "^6.0 || ^7.0", - "webmozart/assert": "^1.10" - }, - "conflict": { - "amphp/amp": "<2.6.4" - }, - "require-dev": { - "laminas/laminas-coding-standard": "^3.0.1", - "laminas/laminas-mvc": "^3.8.0", - "laminas/laminas-servicemanager": "^3.23.0", - "mikey179/vfsstream": "2.0.x-dev", - "phpunit/phpunit": "^10.5.38", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.26.1" - }, - "bin": [ - "bin/laminas" - ], - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\Cli\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Command-line interface for Laminas projects", - "keywords": [ - "cli", - "command", - "console", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-cli/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/mezzio/laminas-cli/issues", - "rss": "https://github.com/mezzio/laminas-cli/releases.atom", - "source": "https://github.com/mezzio/laminas-cli" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2024-11-22T12:39:15+00:00" - }, - { - "name": "laminas/laminas-code", - "version": "4.16.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-code.git", - "reference": "1793e78dad4108b594084d05d1fb818b85b110af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/1793e78dad4108b594084d05d1fb818b85b110af", - "reference": "1793e78dad4108b594084d05d1fb818b85b110af", - "shasum": "" - }, - "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0.1", - "ext-phar": "*", - "laminas/laminas-coding-standard": "^3.0.0", - "laminas/laminas-stdlib": "^3.18.0", - "phpunit/phpunit": "^10.5.37", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.15.0" - }, - "suggest": { - "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", - "laminas/laminas-stdlib": "Laminas\\Stdlib component" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\Code\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", - "homepage": "https://laminas.dev", - "keywords": [ - "code", - "laminas", - "laminasframework" - ], - "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" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2024-11-20T13:15:13+00:00" - }, - { - "name": "laminas/laminas-component-installer", - "version": "3.5.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-component-installer.git", - "reference": "8752d73b5df8c368ec0bf2aff2b32e00e0ac8b1b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-component-installer/zipball/8752d73b5df8c368ec0bf2aff2b32e00e0ac8b1b", - "reference": "8752d73b5df8c368ec0bf2aff2b32e00e0ac8b1b", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^2.0", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" - }, - "conflict": { - "zendframework/zend-component-installer": "*" - }, - "require-dev": { - "composer/composer": "^2.7.7", - "laminas/laminas-coding-standard": "~3.0.0", - "mikey179/vfsstream": "^1.6.11", - "phpunit/phpunit": "^10.5.35", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.24.0", - "webmozart/assert": "^1.11.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Laminas\\ComponentInstaller\\ComponentInstaller" - }, - "autoload": { - "psr-4": { - "Laminas\\ComponentInstaller\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Composer plugin for injecting modules and configuration providers into application configuration", - "homepage": "https://laminas.dev", - "keywords": [ - "component installer", - "composer", - "laminas", - "plugin" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-component-installer/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-component-installer/issues", - "rss": "https://github.com/laminas/laminas-component-installer/releases.atom", - "source": "https://github.com/laminas/laminas-component-installer" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2024-11-26T14:11:43+00:00" - }, - { - "name": "laminas/laminas-config-aggregator", - "version": "1.18.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-config-aggregator.git", - "reference": "a5cc009f58daa4e1b968abd65972fa3a481c22c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-config-aggregator/zipball/a5cc009f58daa4e1b968abd65972fa3a481c22c5", - "reference": "a5cc009f58daa4e1b968abd65972fa3a481c22c5", - "shasum": "" - }, - "require": { - "brick/varexporter": "^0.5.0 || ^0.4.0 || ^0.6.0", - "laminas/laminas-stdlib": "^3.18.0", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "webimpress/safe-writer": "^2.2.0" - }, - "conflict": { - "nikic/php-parser": "<4.12", - "zendframework/zend-config-aggregator": "*" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~3.0.1", - "laminas/laminas-config": "^3.10.1", - "phpunit/phpunit": "^10.5.45", - "psalm/plugin-phpunit": "^0.19.2", - "vimeo/psalm": "^6.8.6" - }, - "suggest": { - "laminas/laminas-config": "Allows loading configuration from XML, INI, YAML, and JSON files", - "laminas/laminas-config-aggregator-modulemanager": "Allows loading configuration from laminas-mvc Module classes", - "laminas/laminas-config-aggregator-parameters": "Allows usage of templated parameters within your configuration" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\ConfigAggregator\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Lightweight library for collecting and merging configuration from different sources", - "homepage": "https://laminas.dev", - "keywords": [ - "config-aggregator", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-config-aggregator/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-config-aggregator/issues", - "rss": "https://github.com/laminas/laminas-config-aggregator/releases.atom", - "source": "https://github.com/laminas/laminas-config-aggregator" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-02-21T18:18:40+00:00" - }, - { - "name": "laminas/laminas-diactoros", - "version": "2.26.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "6584d44eb8e477e89d453313b858daac6183cddc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6584d44eb8e477e89d453313b858daac6183cddc", - "reference": "6584d44eb8e477e89d453313b858daac6183cddc", - "shasum": "" - }, - "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.1" - }, - "conflict": { - "zendframework/zend-diactoros": "*" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-curl": "*", - "ext-dom": "*", - "ext-gd": "*", - "ext-libxml": "*", - "http-interop/http-factory-tests": "^0.9.0", - "laminas/laminas-coding-standard": "^2.5", - "php-http/psr7-integration-tests": "^1.2", - "phpunit/phpunit": "^9.5.28", - "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.6" - }, - "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\Diactoros", - "config-provider": "Laminas\\Diactoros\\ConfigProvider" - } - }, - "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/marshal_uri_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php", - "src/functions/create_uploaded_file.legacy.php", - "src/functions/marshal_headers_from_sapi.legacy.php", - "src/functions/marshal_method_from_sapi.legacy.php", - "src/functions/marshal_protocol_version_from_sapi.legacy.php", - "src/functions/marshal_uri_from_sapi.legacy.php", - "src/functions/normalize_server.legacy.php", - "src/functions/normalize_uploaded_files.legacy.php", - "src/functions/parse_cookie_header.legacy.php" - ], - "psr-4": { - "Laminas\\Diactoros\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "PSR HTTP Message implementations", - "homepage": "https://laminas.dev", - "keywords": [ - "http", - "laminas", - "psr", - "psr-17", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-diactoros/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-diactoros/issues", - "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", - "source": "https://github.com/laminas/laminas-diactoros" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2023-10-29T16:17:44+00:00" - }, - { - "name": "laminas/laminas-escaper", - "version": "2.17.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "df1ef9503299a8e3920079a16263b578eaf7c3ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/df1ef9503299a8e3920079a16263b578eaf7c3ba", - "reference": "df1ef9503299a8e3920079a16263b578eaf7c3ba", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-mbstring": "*", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" - }, - "conflict": { - "zendframework/zend-escaper": "*" - }, - "require-dev": { - "infection/infection": "^0.29.8", - "laminas/laminas-coding-standard": "~3.0.1", - "phpunit/phpunit": "^10.5.45", - "psalm/plugin-phpunit": "^0.19.2", - "vimeo/psalm": "^6.6.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\Escaper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", - "homepage": "https://laminas.dev", - "keywords": [ - "escaper", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-escaper/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-escaper/issues", - "rss": "https://github.com/laminas/laminas-escaper/releases.atom", - "source": "https://github.com/laminas/laminas-escaper" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-05-06T19:29:36+00:00" - }, - { - "name": "laminas/laminas-filter", - "version": "2.41.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-filter.git", - "reference": "eaa00111231bf6669826ae84d3abe85b94477585" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-filter/zipball/eaa00111231bf6669826ae84d3abe85b94477585", - "reference": "eaa00111231bf6669826ae84d3abe85b94477585", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "laminas/laminas-servicemanager": "^3.21.0", - "laminas/laminas-stdlib": "^3.19.0", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" - }, - "conflict": { - "laminas/laminas-validator": "<2.10.1", - "zendframework/zend-filter": "*" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~3.0", - "laminas/laminas-crypt": "^3.12", - "laminas/laminas-i18n": "^2.28.1", - "laminas/laminas-uri": "^2.12", - "pear/archive_tar": "^1.5.0", - "phpunit/phpunit": "^10.5.36", - "psalm/plugin-phpunit": "^0.19.0", - "psr/http-factory": "^1.1.0", - "vimeo/psalm": "^5.26.1" - }, - "suggest": { - "laminas/laminas-crypt": "Laminas\\Crypt component, for encryption filters", - "laminas/laminas-i18n": "Laminas\\I18n component for filters depending on i18n functionality", - "laminas/laminas-uri": "Laminas\\Uri component, for the UriNormalize filter", - "psr/http-factory-implementation": "psr/http-factory-implementation, for creating file upload instances when consuming PSR-7 in file upload filters" - }, - "type": "library", - "extra": { - "laminas": { - "component": "Laminas\\Filter", - "config-provider": "Laminas\\Filter\\ConfigProvider" - } - }, - "autoload": { - "psr-4": { - "Laminas\\Filter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Programmatically filter and normalize data and files", - "homepage": "https://laminas.dev", - "keywords": [ - "filter", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-filter/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-filter/issues", - "rss": "https://github.com/laminas/laminas-filter/releases.atom", - "source": "https://github.com/laminas/laminas-filter" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-05-05T02:02:31+00:00" - }, - { - "name": "laminas/laminas-httphandlerrunner", - "version": "2.12.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-httphandlerrunner.git", - "reference": "b14da3519c650e9436e410cfedee6f860312eff9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/b14da3519c650e9436e410cfedee6f860312eff9", - "reference": "b14da3519c650e9436e410cfedee6f860312eff9", - "shasum": "" - }, - "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/http-message": "^1.0 || ^2.0", - "psr/http-message-implementation": "^1.0 || ^2.0", - "psr/http-server-handler": "^1.0" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~3.1.0", - "laminas/laminas-diactoros": "^3.6.0", - "phpunit/phpunit": "^10.5.46", - "psalm/plugin-phpunit": "^0.19.5", - "vimeo/psalm": "^6.10.3" - }, - "type": "library", - "extra": { - "laminas": { - "config-provider": "Laminas\\HttpHandlerRunner\\ConfigProvider" - } - }, - "autoload": { - "psr-4": { - "Laminas\\HttpHandlerRunner\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Execute PSR-15 RequestHandlerInterface instances and emit responses they generate.", - "homepage": "https://laminas.dev", - "keywords": [ - "components", - "laminas", - "mezzio", - "psr-15", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-httphandlerrunner/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-httphandlerrunner/issues", - "rss": "https://github.com/laminas/laminas-httphandlerrunner/releases.atom", - "source": "https://github.com/laminas/laminas-httphandlerrunner" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-05-13T21:21:16+00:00" - }, - { - "name": "laminas/laminas-inputfilter", - "version": "2.33.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-inputfilter.git", - "reference": "928afe6f5e7c7a17f9c02c40d4feca92944d8e2f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-inputfilter/zipball/928afe6f5e7c7a17f9c02c40d4feca92944d8e2f", - "reference": "928afe6f5e7c7a17f9c02c40d4feca92944d8e2f", - "shasum": "" - }, - "require": { - "laminas/laminas-filter": "^2.19", - "laminas/laminas-servicemanager": "^3.21.0", - "laminas/laminas-stdlib": "^3.19", - "laminas/laminas-validator": "^2.60.0", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/container": "^1.1 || ^2.0" - }, - "conflict": { - "zendframework/zend-inputfilter": "*" - }, - "require-dev": { - "ext-json": "*", - "laminas/laminas-coding-standard": "^3.1.0", - "phpunit/phpunit": "^10.5.46", - "psalm/plugin-phpunit": "^0.19.5", - "psr/http-message": "^2.0", - "vimeo/psalm": "^6.11.0", - "webmozart/assert": "^1.11" - }, - "suggest": { - "psr/http-message-implementation": "PSR-7 is required if you wish to validate PSR-7 UploadedFileInterface payloads" - }, - "type": "library", - "extra": { - "laminas": { - "component": "Laminas\\InputFilter", - "config-provider": "Laminas\\InputFilter\\ConfigProvider" - } - }, - "autoload": { - "psr-4": { - "Laminas\\InputFilter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Normalize and validate input sets from the web, APIs, the CLI, and more, including files", - "homepage": "https://laminas.dev", - "keywords": [ - "inputfilter", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-inputfilter/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-inputfilter/issues", - "rss": "https://github.com/laminas/laminas-inputfilter/releases.atom", - "source": "https://github.com/laminas/laminas-inputfilter" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-05-27T09:48:19+00:00" - }, - { - "name": "laminas/laminas-servicemanager", - "version": "3.23.1", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-servicemanager.git", - "reference": "06594db3a644447521eace9b5efdb12dc8446a33" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/06594db3a644447521eace9b5efdb12dc8446a33", - "reference": "06594db3a644447521eace9b5efdb12dc8446a33", - "shasum": "" - }, - "require": { - "laminas/laminas-stdlib": "^3.19", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/container": "^1.0" - }, - "conflict": { - "ext-psr": "*", - "laminas/laminas-code": "<4.10.0", - "zendframework/zend-code": "<3.3.1", - "zendframework/zend-servicemanager": "*" - }, - "provide": { - "psr/container-implementation": "^1.0" - }, - "replace": { - "container-interop/container-interop": "^1.2.0" - }, - "require-dev": { - "composer/package-versions-deprecated": "^1.11.99.5", - "friendsofphp/proxy-manager-lts": "^1.0.18", - "laminas/laminas-code": "^4.16.0", - "laminas/laminas-coding-standard": "~2.5.0", - "laminas/laminas-container-config-test": "^0.8", - "mikey179/vfsstream": "^1.6.12", - "phpbench/phpbench": "^1.4.1", - "phpunit/phpunit": "^10.5.51", - "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.26.1" - }, - "suggest": { - "friendsofphp/proxy-manager-lts": "ProxyManager ^2.1.1 to handle lazy initialization of services" - }, - "bin": [ - "bin/generate-deps-for-config-factory", - "bin/generate-factory-for-class" - ], - "type": "library", - "autoload": { - "files": [ - "src/autoload.php" - ], - "psr-4": { - "Laminas\\ServiceManager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Factory-Driven Dependency Injection Container", - "homepage": "https://laminas.dev", - "keywords": [ - "PSR-11", - "dependency-injection", - "di", - "dic", - "laminas", - "service-manager", - "servicemanager" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-servicemanager/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-servicemanager/issues", - "rss": "https://github.com/laminas/laminas-servicemanager/releases.atom", - "source": "https://github.com/laminas/laminas-servicemanager" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-08-12T08:44:02+00:00" - }, - { - "name": "laminas/laminas-stdlib", - "version": "3.20.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "8974a1213be42c3e2f70b2c27b17f910291ab2f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/8974a1213be42c3e2f70b2c27b17f910291ab2f4", - "reference": "8974a1213be42c3e2f70b2c27b17f910291ab2f4", - "shasum": "" - }, - "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" - }, - "conflict": { - "zendframework/zend-stdlib": "*" - }, - "require-dev": { - "laminas/laminas-coding-standard": "^3.0", - "phpbench/phpbench": "^1.3.1", - "phpunit/phpunit": "^10.5.38", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.26.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\Stdlib\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "SPL extensions, array utilities, error handlers, and more", - "homepage": "https://laminas.dev", - "keywords": [ - "laminas", - "stdlib" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-stdlib/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-stdlib/issues", - "rss": "https://github.com/laminas/laminas-stdlib/releases.atom", - "source": "https://github.com/laminas/laminas-stdlib" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2024-10-29T13:46:07+00:00" - }, - { - "name": "laminas/laminas-stratigility", - "version": "3.13.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-stratigility.git", - "reference": "3df57528b5c8e9d958515c51006825a83f76d62b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stratigility/zipball/3df57528b5c8e9d958515c51006825a83f76d62b", - "reference": "3df57528b5c8e9d958515c51006825a83f76d62b", - "shasum": "" - }, - "require": { - "fig/http-message-util": "^1.1", - "laminas/laminas-escaper": "^2.10.0", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/http-message": "^1.0 || ^2.0", - "psr/http-server-middleware": "^1.0.2" - }, - "conflict": { - "zendframework/zend-stratigility": "*" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~2.5.0", - "laminas/laminas-diactoros": "^2.25 || ^3.5.0", - "phpunit/phpunit": "^10.5.37", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.26.1" - }, - "suggest": { - "psr/http-message-implementation": "Please install a psr/http-message-implementation to consume Stratigility; e.g., laminas/laminas-diactoros" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions/double-pass-middleware.php", - "src/functions/host.php", - "src/functions/middleware.php", - "src/functions/path.php", - "src/functions/double-pass-middleware.legacy.php", - "src/functions/host.legacy.php", - "src/functions/middleware.legacy.php", - "src/functions/path.legacy.php" - ], - "psr-4": { - "Laminas\\Stratigility\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "PSR-7 middleware foundation for building and dispatching middleware pipelines", - "homepage": "https://laminas.dev", - "keywords": [ - "http", - "laminas", - "middleware", - "psr-15", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-stratigility/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-stratigility/issues", - "rss": "https://github.com/laminas/laminas-stratigility/releases.atom", - "source": "https://github.com/laminas/laminas-stratigility" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2024-10-28T11:28:41+00:00" - }, - { - "name": "laminas/laminas-validator", - "version": "2.64.4", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-validator.git", - "reference": "e2e6631f599a9b0db1e23adb633c09a2f0c68bed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/e2e6631f599a9b0db1e23adb633c09a2f0c68bed", - "reference": "e2e6631f599a9b0db1e23adb633c09a2f0c68bed", - "shasum": "" - }, - "require": { - "laminas/laminas-servicemanager": "^3.21.0", - "laminas/laminas-stdlib": "^3.19", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/http-message": "^1.0.1 || ^2.0.0" - }, - "conflict": { - "zendframework/zend-validator": "*" - }, - "require-dev": { - "laminas/laminas-coding-standard": "^2.5", - "laminas/laminas-db": "^2.20", - "laminas/laminas-filter": "^2.35.2", - "laminas/laminas-i18n": "^2.26.0", - "laminas/laminas-session": "^2.20", - "laminas/laminas-uri": "^2.11.0", - "phpunit/phpunit": "^10.5.20", - "psalm/plugin-phpunit": "^0.19.0", - "psr/http-client": "^1.0.3", - "psr/http-factory": "^1.1.0", - "vimeo/psalm": "^5.24.0" - }, - "suggest": { - "laminas/laminas-db": "Laminas\\Db component, required by the (No)RecordExists validator", - "laminas/laminas-filter": "Laminas\\Filter component, required by the Digits validator", - "laminas/laminas-i18n": "Laminas\\I18n component to allow translation of validation error messages", - "laminas/laminas-i18n-resources": "Translations of validator messages", - "laminas/laminas-servicemanager": "Laminas\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", - "laminas/laminas-session": "Laminas\\Session component, ^2.8; required by the Csrf validator", - "laminas/laminas-uri": "Laminas\\Uri component, required by the Uri and Sitemap\\Loc validators", - "psr/http-message": "psr/http-message, required when validating PSR-7 UploadedFileInterface instances via the Upload and UploadFile validators" - }, - "type": "library", - "extra": { - "laminas": { - "component": "Laminas\\Validator", - "config-provider": "Laminas\\Validator\\ConfigProvider" - } - }, - "autoload": { - "psr-4": { - "Laminas\\Validator\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Validation classes for a wide range of domains, and the ability to chain validators to create complex validation criteria", - "homepage": "https://laminas.dev", - "keywords": [ - "laminas", - "validator" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-validator/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-validator/issues", - "rss": "https://github.com/laminas/laminas-validator/releases.atom", - "source": "https://github.com/laminas/laminas-validator" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-06-16T14:38:00+00:00" - }, - { - "name": "mezzio/mezzio", - "version": "3.21.0", - "source": { - "type": "git", - "url": "https://github.com/mezzio/mezzio.git", - "reference": "1ec7e77a0532984c30d18e7278d9bbc596c6293a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mezzio/mezzio/zipball/1ec7e77a0532984c30d18e7278d9bbc596c6293a", - "reference": "1ec7e77a0532984c30d18e7278d9bbc596c6293a", - "shasum": "" - }, - "require": { - "fig/http-message-util": "^1.1.5", - "laminas/laminas-httphandlerrunner": "^2.1", - "laminas/laminas-stratigility": "^3.5", - "mezzio/mezzio-router": "^3.7", - "mezzio/mezzio-template": "^2.2", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/container": "^1.0||^2.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0.1 || ^2.0.0", - "psr/http-server-middleware": "^1.0", - "webmozart/assert": "^1.11.0" - }, - "conflict": { - "container-interop/container-interop": "<1.2.0", - "filp/whoops": "<2.14.4", - "laminas/laminas-diactoros": "<1.7.1", - "laminas/laminas-http": "<2.15.0", - "laminas/laminas-router": "<3.5.0", - "laminas/laminas-stdlib": "<3.6.0", - "zendframework/zend-expressive": "*" - }, - "require-dev": { - "filp/whoops": "^2.18.0", - "laminas/laminas-coding-standard": "^3.0.1", - "laminas/laminas-diactoros": "^3.5.0", - "laminas/laminas-servicemanager": "^3.23.0", - "mezzio/mezzio-fastroute": "^3.13", - "mezzio/mezzio-laminasrouter": "^3.11", - "phpunit/phpunit": "^10.5.45", - "psalm/plugin-phpunit": "^0.19.5", - "vimeo/psalm": "^6.10.1" - }, - "suggest": { - "filp/whoops": "^2.1 to use the Whoops error handler", - "laminas/laminas-auradi-config": "^2.0 to use Aura.Di dependency injection container", - "laminas/laminas-pimple-config": "^1.0 to use Pimple for dependency injection container", - "laminas/laminas-servicemanager": "^3.3 to use laminas-servicemanager for dependency injection", - "mezzio/mezzio-helpers": "^3.0 for its UrlHelper, ServerUrlHelper, and BodyParseMiddleware", - "mezzio/mezzio-tooling": "^1.0 for migration and development tools; require it with the --dev flag", - "psr/http-message-implementation": "Please install a psr/http-message-implementation to consume Mezzio; e.g., laminas/laminas-diactoros" - }, - "bin": [ - "bin/mezzio-tooling" - ], - "type": "library", - "extra": { - "laminas": { - "config-provider": "Mezzio\\ConfigProvider" - } - }, - "autoload": { - "files": [ - "src/constants.php", - "src/constants.legacy.php" - ], - "psr-4": { - "Mezzio\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "PSR-15 Middleware Microframework", - "homepage": "https://mezzio.dev", - "keywords": [ - "PSR-11", - "http", - "laminas", - "mezzio", - "middleware", - "psr", - "psr-15", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.mezzio.dev/mezzio/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/mezzio/mezzio/issues", - "rss": "https://github.com/mezzio/mezzio/releases.atom", - "source": "https://github.com/mezzio/mezzio" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-04-27T12:45:58+00:00" - }, - { - "name": "mezzio/mezzio-cors", - "version": "1.14.0", - "source": { - "type": "git", - "url": "https://github.com/mezzio/mezzio-cors.git", - "reference": "84c5c783c1c005576f18411aef1dd724f0ffebc0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mezzio/mezzio-cors/zipball/84c5c783c1c005576f18411aef1dd724f0ffebc0", - "reference": "84c5c783c1c005576f18411aef1dd724f0ffebc0", - "shasum": "" - }, - "require": { - "fig/http-message-util": "^1.1", - "mezzio/mezzio-router": "^3.5 || ^4.0", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/container": "^1.0 || ^2.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0 || ^2.0", - "psr/http-server-handler": "^1.0", - "psr/http-server-middleware": "^1.0", - "webmozart/assert": "^1.11.0" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~3.0.1", - "laminas/laminas-diactoros": "^3.5.0", - "phpunit/phpunit": "^10.5.45", - "psalm/plugin-phpunit": "^0.19.5", - "vimeo/psalm": "^6.10.1" - }, - "type": "library", - "extra": { - "laminas": { - "config-provider": "Mezzio\\Cors\\ConfigProvider" - } - }, - "autoload": { - "psr-4": { - "Mezzio\\Cors\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "CORS component for Mezzio and other PSR-15 middleware runners.", - "keywords": [ - "cors", - "mezzio", - "psr-15", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/mezzio-cors/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/mezzio/mezzio-cors/issues", - "rss": "https://github.com/mezzio/mezzio-cli/releases.atom", - "source": "https://github.com/mezzio/mezzio-cors" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-04-27T09:44:46+00:00" - }, - { - "name": "mezzio/mezzio-fastroute", - "version": "3.13.0", - "source": { - "type": "git", - "url": "https://github.com/mezzio/mezzio-fastroute.git", - "reference": "513a636c1ca539e7e687e994f92856cc99358e4a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mezzio/mezzio-fastroute/zipball/513a636c1ca539e7e687e994f92856cc99358e4a", - "reference": "513a636c1ca539e7e687e994f92856cc99358e4a", - "shasum": "" - }, - "require": { - "fig/http-message-util": "^1.1.2", - "laminas/laminas-stdlib": "^3.19.0", - "mezzio/mezzio-router": "^3.14 || ^4.0.1", - "nikic/fast-route": "^1.2", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/container": "^1.0 || ^2.0", - "psr/http-message": "^1.0.1 || ^2.0.0" - }, - "conflict": { - "container-interop/container-interop": "<1.2.0", - "zendframework/zend-expressive-fastroute": "*" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~3.0.1", - "laminas/laminas-diactoros": "^3.5.0", - "laminas/laminas-stratigility": "^4.1.0", - "mikey179/vfsstream": "^1.6.12", - "phpunit/phpunit": "^10.5.45", - "psalm/plugin-phpunit": "^0.19.5", - "vimeo/psalm": "^6.10.1" - }, - "type": "library", - "extra": { - "laminas": { - "config-provider": "Mezzio\\Router\\FastRouteRouter\\ConfigProvider" - } - }, - "autoload": { - "psr-4": { - "Mezzio\\Router\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "FastRoute integration for Mezzio", - "homepage": "https://mezzio.dev", - "keywords": [ - "FastRoute", - "http", - "laminas", - "mezzio", - "middleware", - "psr", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.mezzio.dev/mezzio/features/router/fast-route/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/mezzio/mezzio-fastroute/issues", - "rss": "https://github.com/mezzio/mezzio-fastroute/releases.atom", - "source": "https://github.com/mezzio/mezzio-fastroute" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-04-27T12:05:55+00:00" - }, - { - "name": "mezzio/mezzio-helpers", - "version": "5.18.0", - "source": { - "type": "git", - "url": "https://github.com/mezzio/mezzio-helpers.git", - "reference": "8d76502e4d71aff178f2084eadd71d12fe737d3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mezzio/mezzio-helpers/zipball/8d76502e4d71aff178f2084eadd71d12fe737d3c", - "reference": "8d76502e4d71aff178f2084eadd71d12fe737d3c", - "shasum": "" - }, - "require": { - "mezzio/mezzio-router": "^3.0 || ^4.0", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/container": "^1.0 || ^2.0", - "psr/http-message": "^1.0.1 || ^2.0.0", - "psr/http-server-middleware": "^1.0" - }, - "conflict": { - "amphp/amp": "<2.6.4", - "amphp/dns": "<2.1.2", - "amphp/socket": "<2.3.1", - "zendframework/zend-expressive-helpers": "*" - }, - "require-dev": { - "ext-json": "*", - "laminas/laminas-coding-standard": "~3.0.1", - "laminas/laminas-diactoros": "^3.5", - "phpunit/phpunit": "^10.5.45", - "psalm/plugin-phpunit": "^0.19.5", - "vimeo/psalm": "^6.10.1" - }, - "suggest": { - "ext-json": "If you wish to use the JsonStrategy with BodyParamsMiddleware" - }, - "type": "library", - "extra": { - "laminas": { - "config-provider": "Mezzio\\Helper\\ConfigProvider" - } - }, - "autoload": { - "psr-4": { - "Mezzio\\Helper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Helper/Utility classes for Mezzio", - "homepage": "https://mezzio.dev", - "keywords": [ - "http", - "laminas", - "mezzio", - "middleware", - "psr", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.mezzio.dev/mezzio/features/helpers/intro/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/mezzio/mezzio-helpers/issues", - "rss": "https://github.com/mezzio/mezzio-helpers/releases.atom", - "source": "https://github.com/mezzio/mezzio-helpers" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-04-27T08:59:18+00:00" - }, - { - "name": "mezzio/mezzio-router", - "version": "3.18.0", - "source": { - "type": "git", - "url": "https://github.com/mezzio/mezzio-router.git", - "reference": "75e9a3e636ee69f3a51006772cf29c00cb5da675" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mezzio/mezzio-router/zipball/75e9a3e636ee69f3a51006772cf29c00cb5da675", - "reference": "75e9a3e636ee69f3a51006772cf29c00cb5da675", - "shasum": "" - }, - "require": { - "fig/http-message-util": "^1.1.5", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/container": "^1.1.2 || ^2.0", - "psr/http-factory": "^1.0.2", - "psr/http-message": "^1.0.1 || ^2.0.0", - "psr/http-server-middleware": "^1.0.2", - "webmozart/assert": "^1.11" - }, - "conflict": { - "mezzio/mezzio": "<3.5", - "zendframework/zend-expressive-router": "*" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~2.5.0", - "laminas/laminas-diactoros": "^3.4.0", - "laminas/laminas-servicemanager": "^4.2.0", - "laminas/laminas-stratigility": "^4.0.2", - "phpunit/phpunit": "^10.5.36", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.26.1" - }, - "suggest": { - "mezzio/mezzio-aurarouter": "^3.0 to use the Aura.Router routing adapter", - "mezzio/mezzio-fastroute": "^3.0 to use the FastRoute routing adapter", - "mezzio/mezzio-laminasrouter": "^3.0 to use the laminas-router routing adapter" - }, - "type": "library", - "extra": { - "laminas": { - "config-provider": "Mezzio\\Router\\ConfigProvider" - } - }, - "autoload": { - "psr-4": { - "Mezzio\\Router\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Router subcomponent for Mezzio", - "homepage": "https://mezzio.dev", - "keywords": [ - "http", - "laminas", - "mezzio", - "middleware", - "psr", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.mezzio.dev/mezzio/features/router/intro/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/mezzio/mezzio-router/issues", - "rss": "https://github.com/mezzio/mezzio-router/releases.atom", - "source": "https://github.com/mezzio/mezzio-router" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2024-10-16T21:18:01+00:00" - }, - { - "name": "mezzio/mezzio-template", - "version": "2.11.0", - "source": { - "type": "git", - "url": "https://github.com/mezzio/mezzio-template.git", - "reference": "836b7e55f92277d5c557f96895d13a547c4abf14" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mezzio/mezzio-template/zipball/836b7e55f92277d5c557f96895d13a547c4abf14", - "reference": "836b7e55f92277d5c557f96895d13a547c4abf14", - "shasum": "" - }, - "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" - }, - "conflict": { - "zendframework/zend-expressive-template": "*" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~2.5.0", - "phpunit/phpunit": "^10.5.36", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.26.1" - }, - "suggest": { - "mezzio/mezzio-laminasviewrenderer": "^2.0 to use the laminas-view PhpRenderer template renderer", - "mezzio/mezzio-platesrenderer": "^2.0 to use the Plates template renderer", - "mezzio/mezzio-twigrenderer": "^2.0 to use the Twig template renderer" - }, - "type": "library", - "autoload": { - "psr-4": { - "Mezzio\\Template\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Template subcomponent for Mezzio", - "homepage": "https://mezzio.dev", - "keywords": [ - "laminas", - "mezzio", - "template" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.mezzio.dev/mezzio/features/template/intro/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/mezzio/mezzio-template/issues", - "rss": "https://github.com/mezzio/mezzio-template/releases.atom", - "source": "https://github.com/mezzio/mezzio-template" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2024-10-16T20:54:53+00:00" - }, - { - "name": "mezzio/mezzio-tooling", - "version": "2.11.0", - "source": { - "type": "git", - "url": "https://github.com/mezzio/mezzio-tooling.git", - "reference": "fc7f93fb7ad9dd9fb710be22dc892fd8a34d655d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mezzio/mezzio-tooling/zipball/fc7f93fb7ad9dd9fb710be22dc892fd8a34d655d", - "reference": "fc7f93fb7ad9dd9fb710be22dc892fd8a34d655d", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laminas/laminas-cli": "^1.7.0", - "laminas/laminas-code": "^4.7.1", - "laminas/laminas-stdlib": "^3.15.0", - "laminas/laminas-stratigility": "^3.9.0", - "mezzio/mezzio": "^3.13.0", - "mezzio/mezzio-router": "^3.9.0", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.1", - "symfony/process": "^6.0.11" - }, - "conflict": { - "amphp/amp": "<2.6.4", - "symfony/console": "<5.4.45", - "symfony/string": "<5.4.45" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~2.5.0", - "laminas/laminas-diactoros": "^3.3", - "mikey179/vfsstream": "^1.6.12", - "mockery/mockery": "^1.6.10", - "php-mock/php-mock-phpunit": "^2.9.0", - "phpdocumentor/reflection-docblock": "^5.3.0", - "phpunit/phpunit": "^10.5.35", - "psalm/plugin-mockery": "^0.11.0", - "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.17.0" - }, - "type": "library", - "extra": { - "laminas": { - "config-provider": "Mezzio\\Tooling\\ConfigProvider" - } - }, - "autoload": { - "psr-4": { - "Mezzio\\Tooling\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Migration and development tooling for Mezzio", - "homepage": "https://mezzio.dev", - "keywords": [ - "http", - "laminas", - "mezzio", - "middleware", - "psr", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.mezzio.dev/mezzio/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/mezzio/mezzio-tooling/issues", - "rss": "https://github.com/mezzio/mezzio-tooling/releases.atom", - "source": "https://github.com/mezzio/mezzio-tooling" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-08-07T10:03:45+00:00" - }, - { - "name": "monolog/monolog", - "version": "3.9.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", - "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/log": "^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2.0", - "guzzlehttp/guzzle": "^7.4.5", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.8", - "phpstan/phpstan": "^2", - "phpstan/phpstan-deprecation-rules": "^2", - "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "^10.5.17 || ^11.0.7", - "predis/predis": "^1.1 || ^2", - "rollbar/rollbar": "^4.0", - "ruflin/elastica": "^7 || ^8", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.9.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2025-03-24T10:02:05+00:00" - }, - { - "name": "nikic/fast-route", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/FastRoute.git", - "reference": "181d480e08d9476e61381e04a71b34dc0432e812" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", - "reference": "181d480e08d9476e61381e04a71b34dc0432e812", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35|~5.7" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "FastRoute\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov", - "email": "nikic@php.net" - } - ], - "description": "Fast request router for PHP", - "keywords": [ - "router", - "routing" - ], - "support": { - "issues": "https://github.com/nikic/FastRoute/issues", - "source": "https://github.com/nikic/FastRoute/tree/master" - }, - "time": "2018-02-13T20:26:39+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.6.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "221b0d0fdf1369c71047ad1d18bb5880017bbc56" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/221b0d0fdf1369c71047ad1d18bb5880017bbc56", - "reference": "221b0d0fdf1369c71047ad1d18bb5880017bbc56", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.0" - }, - "time": "2025-07-27T20:03:57+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" - }, - { - "name": "psr/container", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" - }, - "time": "2021-11-05T16:50:12+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, - "time": "2024-04-15T12:06:14+00:00" - }, - { - "name": "psr/http-message", - "version": "1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" - }, - "time": "2023-04-04T09:50:52+00:00" - }, - { - "name": "psr/http-server-handler", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-server-handler.git", - "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4", - "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4", - "shasum": "" - }, - "require": { - "php": ">=7.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Server\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP server-side request handler", - "keywords": [ - "handler", - "http", - "http-interop", - "psr", - "psr-15", - "psr-7", - "request", - "response", - "server" - ], - "support": { - "source": "https://github.com/php-fig/http-server-handler/tree/1.0.2" - }, - "time": "2023-04-10T20:06:20+00:00" - }, - { - "name": "psr/http-server-middleware", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-server-middleware.git", - "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829", - "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829", - "shasum": "" - }, - "require": { - "php": ">=7.0", - "psr/http-message": "^1.0 || ^2.0", - "psr/http-server-handler": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Server\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP server-side middleware", - "keywords": [ - "http", - "http-interop", - "middleware", - "psr", - "psr-15", - "psr-7", - "request", - "response" - ], - "support": { - "issues": "https://github.com/php-fig/http-server-middleware/issues", - "source": "https://github.com/php-fig/http-server-middleware/tree/1.0.2" - }, - "time": "2023-04-11T06:14:47+00:00" - }, - { - "name": "psr/log", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" - }, - "time": "2024-09-11T13:17:53+00:00" - }, - { - "name": "ramsey/collection", - "version": "2.1.1", - "source": { - "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", - "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.45", - "fakerphp/faker": "^1.24", - "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^2.1", - "mockery/mockery": "^1.6", - "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.4", - "phpspec/prophecy-phpunit": "^2.3", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-mockery": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^10.5", - "ramsey/coding-standard": "^2.3", - "ramsey/conventional-commits": "^1.6", - "roave/security-advisories": "dev-latest" - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - }, - "ramsey/conventional-commits": { - "configFile": "conventional-commits.json" - } - }, - "autoload": { - "psr-4": { - "Ramsey\\Collection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A PHP library for representing and manipulating collections.", - "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" - ], - "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.1.1" - }, - "time": "2025-03-22T05:38:12+00:00" - }, - { - "name": "ramsey/uuid", - "version": "4.9.0", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/4e0e23cc785f0724a0e838279a9eb03f28b092a0", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0", - "shasum": "" - }, - "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13", - "php": "^8.0", - "ramsey/collection": "^1.2 || ^2.0" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "captainhook/captainhook": "^5.25", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^1.0", - "ergebnis/composer-normalize": "^2.47", - "mockery/mockery": "^1.6", - "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.6", - "php-mock/php-mock-mockery": "^1.5", - "php-parallel-lint/php-parallel-lint": "^1.4.0", - "phpbench/phpbench": "^1.2.14", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-mockery": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^9.6", - "slevomat/coding-standard": "^8.18", - "squizlabs/php_codesniffer": "^3.13" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Ramsey\\Uuid\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": [ - "guid", - "identifier", - "uuid" - ], - "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.9.0" - }, - "time": "2025-06-25T14:20:11+00:00" - }, - { - "name": "symfony/console", - "version": "v7.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "5f360ebc65c55265a74d23d7fe27f957870158a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5f360ebc65c55265a74d23d7fe27f957870158a1", - "reference": "5f360ebc65c55265a74d23d7fe27f957870158a1", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "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": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v7.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-07-30T17:13:41+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "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": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" - }, - "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:21:43+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/event-dispatcher-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/service-contracts": "<2.5" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "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 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/v7.3.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-04-22T09:11:45+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "59eb412e93815df44f05f342958efa9f46b1e586" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", - "reference": "59eb412e93815df44f05f342958efa9f46b1e586", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "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 dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.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-25T14:21:43+00:00" - }, - { - "name": "symfony/finder", - "version": "v7.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe", - "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "symfony/filesystem": "^6.4|^7.0" - }, - "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/v7.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-07-15T13:41:35+00:00" - }, - { - "name": "symfony/mailer", - "version": "v7.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/mailer.git", - "reference": "d43e84d9522345f96ad6283d5dfccc8c1cfc299b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/d43e84d9522345f96ad6283d5dfccc8c1cfc299b", - "reference": "d43e84d9522345f96ad6283d5dfccc8c1cfc299b", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.2", - "psr/event-dispatcher": "^1", - "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^7.2", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/messenger": "<6.4", - "symfony/mime": "<6.4", - "symfony/twig-bridge": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/twig-bridge": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mailer\\": "" - }, - "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": "Helps sending emails", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/mailer/tree/v7.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-07-15T11:36:08+00:00" - }, - { - "name": "symfony/mime", - "version": "v7.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/e0a0f859148daf1edf6c60b398eb40bfc96697d1", - "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<6.4", - "symfony/serializer": "<6.4.3|>7.0,<7.0.3" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1|^4", - "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3" - }, - "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/v7.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-07-15T13:41:35+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-intl-grapheme", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "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\\Grapheme\\": "" - } - }, - "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 grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/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-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-mbstring", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "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 Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/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-23T08:48:59+00:00" - }, - { - "name": "symfony/process", - "version": "v6.4.24", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "8eb6dc555bfb49b2703438d5de65cc9f138ff50b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/8eb6dc555bfb49b2703438d5de65cc9f138ff50b", - "reference": "8eb6dc555bfb49b2703438d5de65cc9f138ff50b", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "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": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v6.4.24" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-07-10T08:14:14+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "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/v3.6.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-04-25T09:37:31+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", - "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/service-contracts": "^2.5|^3" - }, - "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/v7.3.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-02-24T10:49:57+00:00" - }, - { - "name": "symfony/string", - "version": "v7.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/42f505aff654e62ac7ac2ce21033818297ca89ca", - "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" - }, - "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "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 an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v7.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-07-10T08:47:49+00:00" - }, - { - "name": "symfony/var-exporter", - "version": "v7.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-exporter.git", - "reference": "05b3e90654c097817325d6abd284f7938b05f467" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/05b3e90654c097817325d6abd284f7938b05f467", - "reference": "05b3e90654c097817325d6abd284f7938b05f467", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "require-dev": { - "symfony/property-access": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.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", - "lazy-loading", - "proxy", - "serialize" - ], - "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-07-10T08:47:49+00:00" - }, - { - "name": "symfony/yaml", - "version": "v7.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "b8d7d868da9eb0919e99c8830431ea087d6aae30" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/b8d7d868da9eb0919e99c8830431ea087d6aae30", - "reference": "b8d7d868da9eb0919e99c8830431ea087d6aae30", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "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/v7.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-07-10T08:47:49+00:00" - }, - { - "name": "webimpress/safe-writer", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/webimpress/safe-writer.git", - "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", - "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.5.4", - "vimeo/psalm": "^4.7", - "webimpress/coding-standard": "^1.2.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev", - "dev-develop": "2.3.x-dev", - "dev-release-1.0": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Webimpress\\SafeWriter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "description": "Tool to write files safely, to avoid race conditions", - "keywords": [ - "concurrent write", - "file writer", - "race condition", - "safe writer", - "webimpress" - ], - "support": { - "issues": "https://github.com/webimpress/safe-writer/issues", - "source": "https://github.com/webimpress/safe-writer/tree/2.2.0" - }, - "funding": [ - { - "url": "https://github.com/michalbundyra", - "type": "github" - } - ], - "time": "2021-04-19T16:34:45+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" - }, - { - "name": "zircote/swagger-php", - "version": "4.11.1", - "source": { - "type": "git", - "url": "https://github.com/zircote/swagger-php.git", - "reference": "7df10e8ec47db07c031db317a25bef962b4e5de1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/7df10e8ec47db07c031db317a25bef962b4e5de1", - "reference": "7df10e8ec47db07c031db317a25bef962b4e5de1", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=7.2", - "psr/log": "^1.1 || ^2.0 || ^3.0", - "symfony/deprecation-contracts": "^2 || ^3", - "symfony/finder": ">=2.2", - "symfony/yaml": ">=3.3" - }, - "require-dev": { - "composer/package-versions-deprecated": "^1.11", - "doctrine/annotations": "^1.7 || ^2.0", - "friendsofphp/php-cs-fixer": "^2.17 || 3.62.0", - "phpstan/phpstan": "^1.6", - "phpunit/phpunit": ">=8", - "vimeo/psalm": "^4.23" - }, - "suggest": { - "doctrine/annotations": "^1.7 || ^2.0" - }, - "bin": [ - "bin/openapi" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "OpenApi\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Robert Allen", - "email": "zircote@gmail.com" - }, - { - "name": "Bob Fanger", - "email": "bfanger@gmail.com", - "homepage": "https://bfanger.nl" - }, - { - "name": "Martin Rademacher", - "email": "mano@radebatz.net", - "homepage": "https://radebatz.net" - } - ], - "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", - "homepage": "https://github.com/zircote/swagger-php/", - "keywords": [ - "api", - "json", - "rest", - "service discovery" - ], - "support": { - "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/4.11.1" - }, - "time": "2024-10-15T19:20:02+00:00" - } - ], - "packages-dev": [ - { - "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v1.1.2", - "source": { - "type": "git", - "url": "https://github.com/PHPCSStandards/composer-installer.git", - "reference": "e9cf5e4bbf7eeaf9ef5db34938942602838fc2b1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/e9cf5e4bbf7eeaf9ef5db34938942602838fc2b1", - "reference": "e9cf5e4bbf7eeaf9ef5db34938942602838fc2b1", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^2.2", - "php": ">=5.4", - "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" - }, - "require-dev": { - "composer/composer": "^2.2", - "ext-json": "*", - "ext-zip": "*", - "php-parallel-lint/php-parallel-lint": "^1.4.0", - "phpcompatibility/php-compatibility": "^9.0", - "yoast/phpunit-polyfills": "^1.0" - }, - "type": "composer-plugin", - "extra": { - "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" - }, - "autoload": { - "psr-4": { - "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Franck Nijhof", - "email": "opensource@frenck.dev", - "homepage": "https://frenck.dev", - "role": "Open source developer" - }, - { - "name": "Contributors", - "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" - } - ], - "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "keywords": [ - "PHPCodeSniffer", - "PHP_CodeSniffer", - "code quality", - "codesniffer", - "composer", - "installer", - "phpcbf", - "phpcs", - "plugin", - "qa", - "quality", - "standard", - "standards", - "style guide", - "stylecheck", - "tests" - ], - "support": { - "issues": "https://github.com/PHPCSStandards/composer-installer/issues", - "security": "https://github.com/PHPCSStandards/composer-installer/security/policy", - "source": "https://github.com/PHPCSStandards/composer-installer" - }, - "funding": [ - { - "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": "2025-07-17T20:45:56+00:00" - }, - { - "name": "filp/whoops", - "version": "2.18.4", - "source": { - "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", - "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^4.0 || ^5.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" - } - ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" - ], - "support": { - "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.4" - }, - "funding": [ - { - "url": "https://github.com/denis-sokolov", - "type": "github" - } - ], - "time": "2025-08-08T12:00:00+00:00" - }, - { - "name": "helmich/phpunit-json-assert", - "version": "v3.5.3", - "source": { - "type": "git", - "url": "https://github.com/martin-helmich/phpunit-json-assert.git", - "reference": "82cedf4ee0a7a2e6a619fbbdab9db77c53fe3793" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/martin-helmich/phpunit-json-assert/zipball/82cedf4ee0a7a2e6a619fbbdab9db77c53fe3793", - "reference": "82cedf4ee0a7a2e6a619fbbdab9db77c53fe3793", - "shasum": "" - }, - "require": { - "justinrainbow/json-schema": "^5.0", - "php": "^8.1", - "softcreatr/jsonpath": "^0.8" - }, - "conflict": { - "phpunit/phpunit": "<8.0 || >= 13.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Helmich\\JsonAssert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Martin Helmich", - "email": "m.helmich@mittwald.de" - } - ], - "description": "PHPUnit assertions for JSON documents", - "support": { - "issues": "https://github.com/martin-helmich/phpunit-json-assert/issues", - "source": "https://github.com/martin-helmich/phpunit-json-assert/tree/v3.5.3" - }, - "funding": [ - { - "url": "https://donate.helmich.me", - "type": "custom" - }, - { - "url": "https://github.com/martin-helmich", - "type": "github" - } - ], - "time": "2025-05-19T22:04:17+00:00" - }, - { - "name": "helmich/phpunit-psr7-assert", - "version": "v4.4.1", - "source": { - "type": "git", - "url": "https://github.com/martin-helmich/phpunit-psr7-assert.git", - "reference": "f35fa69e07cc16977b52805d3abd873cc16747fd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/martin-helmich/phpunit-psr7-assert/zipball/f35fa69e07cc16977b52805d3abd873cc16747fd", - "reference": "f35fa69e07cc16977b52805d3abd873cc16747fd", - "shasum": "" - }, - "require": { - "helmich/phpunit-json-assert": "^3.4", - "php": "^8.0", - "psr/http-message": "^1.1 || ^2.0" - }, - "conflict": { - "phpunit/phpunit": "<8.0 || >= 11.0" - }, - "require-dev": { - "guzzlehttp/psr7": "^2.4", - "mockery/mockery": "^1.4.1", - "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Helmich\\Psr7Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Martin Helmich", - "email": "m.helmich@mittwald.de" - } - ], - "description": "PHPUnit assertions for testing PSR7-compliant applications", - "support": { - "issues": "https://github.com/martin-helmich/phpunit-psr7-assert/issues", - "source": "https://github.com/martin-helmich/phpunit-psr7-assert/tree/v4.4.1" - }, - "funding": [ - { - "url": "https://donate.helmich.me", - "type": "custom" - }, - { - "url": "https://github.com/martin-helmich", - "type": "github" - } - ], - "time": "2023-07-26T19:04:29+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", - "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "support": { - "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0" - }, - "time": "2024-07-06T21:00:26+00:00" - }, - { - "name": "laminas/laminas-development-mode", - "version": "3.14.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-development-mode.git", - "reference": "21e4e5fd40c5b22b710306f72060c15ec6091279" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-development-mode/zipball/21e4e5fd40c5b22b710306f72060c15ec6091279", - "reference": "21e4e5fd40c5b22b710306f72060c15ec6091279", - "shasum": "" - }, - "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" - }, - "conflict": { - "zfcampus/zf-development-mode": "*" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~3.1.0", - "mikey179/vfsstream": "^1.6.12", - "phpunit/phpunit": "^10.5.46", - "psalm/plugin-phpunit": "^0.19.5", - "vimeo/psalm": "^6.12.0" - }, - "bin": [ - "bin/laminas-development-mode" - ], - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\DevelopmentMode\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Laminas development mode script", - "homepage": "https://laminas.dev", - "keywords": [ - "framework", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-development-mode/issues", - "rss": "https://github.com/laminas/laminas-development-mode/releases.atom", - "source": "https://github.com/laminas/laminas-development-mode" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-06-16T09:56:05+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.13.4", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "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": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "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.4" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2025-08-01T08:46:24+00:00" - }, - { - "name": "overtrue/phplint", - "version": "9.6.2", - "source": { - "type": "git", - "url": "https://github.com/overtrue/phplint.git", - "reference": "e2ebdbac93fa6ffe45d724e350f77df34c1f8fb4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/overtrue/phplint/zipball/e2ebdbac93fa6ffe45d724e350f77df34c1f8fb4", - "reference": "e2ebdbac93fa6ffe45d724e350f77df34c1f8fb4", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.0", - "ext-dom": "*", - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.1", - "symfony/cache": "^6.4 || ^7.0", - "symfony/console": "^6.4 || ^7.0", - "symfony/event-dispatcher": "^6.4 || ^7.0", - "symfony/finder": "^6.4 || ^7.0", - "symfony/options-resolver": "^6.4 || ^7.0", - "symfony/process": "^6.4 || ^7.0", - "symfony/yaml": "^6.4 || ^7.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4", - "brainmaestro/composer-git-hooks": "^3.0.0", - "jetbrains/phpstorm-stubs": "^2024.1", - "php-parallel-lint/php-console-highlighter": "^1.0" - }, - "bin": [ - "bin/phplint" - ], - "type": "library", - "extra": { - "hooks": { - "pre-commit": [ - "composer style:fix", - "composer code:check" - ] - }, - "bamarni-bin": { - "bin-links": true, - "forward-command": true, - "target-directory": "vendor-bin" - }, - "branch-alias": { - "dev-main": "9.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "Overtrue\\PHPLint\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "overtrue", - "email": "anzhengchao@gmail.com" - }, - { - "name": "Laurent Laville", - "homepage": "https://github.com/llaville" - } - ], - "description": "`phplint` is a tool that can speed up linting of php files by running several lint processes at once.", - "keywords": [ - "check", - "lint", - "phplint", - "static analysis", - "syntax" - ], - "support": { - "issues": "https://github.com/overtrue/phplint/issues", - "source": "https://github.com/overtrue/phplint/tree/9.6.2" - }, - "funding": [ - { - "url": "https://github.com/overtrue", - "type": "github" - } - ], - "time": "2025-04-10T13:12:51+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "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" - } - ], - "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/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "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" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/b9e61a61e39e02dd90944e9115241c7f7e76bfd8", - "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^5.3.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.2.0" - }, - "time": "2025-07-13T07:04:09+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "1.12.28", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "fcf8b71aeab4e1a1131d1783cef97b23a51b87a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/fcf8b71aeab4e1a1131d1783cef97b23a51b87a9", - "reference": "fcf8b71aeab4e1a1131d1783cef97b23a51b87a9", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "keywords": [ - "dev", - "static analysis" - ], - "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", - "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" - } - ], - "time": "2025-07-17T17:15:39+00:00" - }, - { - "name": "phpstan/phpstan-deprecation-rules", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", - "reference": "f94d246cc143ec5a23da868f8f7e1393b50eaa82" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/f94d246cc143ec5a23da868f8f7e1393b50eaa82", - "reference": "f94d246cc143ec5a23da868f8f7e1393b50eaa82", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.12" - }, - "require-dev": { - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^9.5" - }, - "type": "phpstan-extension", - "extra": { - "phpstan": { - "includes": [ - "rules.neon" - ] - } - }, - "autoload": { - "psr-4": { - "PHPStan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", - "support": { - "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", - "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/1.2.1" - }, - "time": "2024-09-11T15:52:35+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "10.1.16", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-text-template": "^3.0.1", - "sebastian/code-unit-reverse-lookup": "^3.0.0", - "sebastian/complexity": "^3.2.0", - "sebastian/environment": "^6.1.0", - "sebastian/lines-of-code": "^2.0.2", - "sebastian/version": "^4.0.1", - "theseer/tokenizer": "^1.2.3" - }, - "require-dev": { - "phpunit/phpunit": "^10.1" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "10.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "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": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-08-22T04:31:57+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "4.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "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/sebastianbergmann/php-file-iterator/issues", - "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-08-31T06:24:48+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "4.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:56:09+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-08-31T14:07:24+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "6.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:57:52+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "10.5.51", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "ace160e31aaa317a99c411410c40c502b4be42a4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ace160e31aaa317a99c411410c40c502b4be42a4", - "reference": "ace160e31aaa317a99c411410c40c502b4be42a4", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.4", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.16", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-invoker": "^4.0.0", - "phpunit/php-text-template": "^3.0.1", - "phpunit/php-timer": "^6.0.0", - "sebastian/cli-parser": "^2.0.1", - "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.3", - "sebastian/diff": "^5.1.1", - "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.2", - "sebastian/global-state": "^6.0.2", - "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.1", - "sebastian/type": "^4.0.0", - "sebastian/version": "^4.0.1" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "10.5-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.51" - }, - "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-08-12T07:31:25+00:00" - }, - { - "name": "roave/security-advisories", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "0479005335290f5c772337cf359599dad65bb63f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/0479005335290f5c772337cf359599dad65bb63f", - "reference": "0479005335290f5c772337cf359599dad65bb63f", - "shasum": "" - }, - "conflict": { - "3f/pygmentize": "<1.2", - "adaptcms/adaptcms": "<=1.3", - "admidio/admidio": "<4.3.12", - "adodb/adodb-php": "<=5.22.9", - "aheinze/cockpit": "<2.2", - "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", - "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", - "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", - "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", - "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", - "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", - "airesvsg/acf-to-rest-api": "<=3.1", - "akaunting/akaunting": "<2.1.13", - "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", - "alextselegidis/easyappointments": "<=1.5.1", - "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", - "amazing/media2click": ">=1,<1.3.3", - "ameos/ameos_tarteaucitron": "<1.2.23", - "amphp/artax": "<1.0.6|>=2,<2.0.6", - "amphp/http": "<=1.7.2|>=2,<=2.1", - "amphp/http-client": ">=4,<4.4", - "anchorcms/anchor-cms": "<=0.12.7", - "andreapollastri/cipi": "<=3.1.15", - "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", - "aoe/restler": "<1.7.1", - "apache-solr-for-typo3/solr": "<2.8.3", - "apereo/phpcas": "<1.6", - "api-platform/core": "<3.4.17|>=4.0.0.0-alpha1,<4.0.22", - "api-platform/graphql": "<3.4.17|>=4.0.0.0-alpha1,<4.0.22", - "appwrite/server-ce": "<=1.2.1", - "arc/web": "<3", - "area17/twill": "<1.2.5|>=2,<2.5.3", - "artesaos/seotools": "<0.17.2", - "asymmetricrypt/asymmetricrypt": "<9.9.99", - "athlon1600/php-proxy": "<=5.1", - "athlon1600/php-proxy-app": "<=3", - "athlon1600/youtube-downloader": "<=4", - "austintoddj/canvas": "<=3.4.2", - "auth0/auth0-php": ">=8.0.0.0-beta1,<8.14", - "auth0/login": "<7.17", - "auth0/symfony": "<5.4", - "auth0/wordpress": "<5.3", - "automad/automad": "<2.0.0.0-alpha5", - "automattic/jetpack": "<9.8", - "awesome-support/awesome-support": "<=6.0.7", - "aws/aws-sdk-php": "<3.288.1", - "azuracast/azuracast": "<0.18.3", - "b13/seo_basics": "<0.8.2", - "backdrop/backdrop": "<1.27.3|>=1.28,<1.28.2", - "backpack/crud": "<3.4.9", - "backpack/filemanager": "<2.0.2|>=3,<3.0.9", - "bacula-web/bacula-web": "<9.7.1", - "badaso/core": "<2.7", - "bagisto/bagisto": "<2.1", - "barrelstrength/sprout-base-email": "<1.2.7", - "barrelstrength/sprout-forms": "<3.9", - "barryvdh/laravel-translation-manager": "<0.6.8", - "barzahlen/barzahlen-php": "<2.0.1", - "baserproject/basercms": "<=5.1.1", - "bassjobsen/bootstrap-3-typeahead": ">4.0.2", - "bbpress/bbpress": "<2.6.5", - "bcit-ci/codeigniter": "<3.1.3", - "bcosca/fatfree": "<3.7.2", - "bedita/bedita": "<4", - "bednee/cooluri": "<1.0.30", - "bigfork/silverstripe-form-capture": ">=3,<3.1.1", - "billz/raspap-webgui": "<3.3.6", - "binarytorch/larecipe": "<2.8.1", - "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", - "blueimp/jquery-file-upload": "==6.4.4", - "bmarshall511/wordpress_zero_spam": "<5.2.13", - "bolt/bolt": "<3.7.2", - "bolt/core": "<=4.2", - "born05/craft-twofactorauthentication": "<3.3.4", - "bottelet/flarepoint": "<2.2.1", - "bref/bref": "<2.1.17", - "brightlocal/phpwhois": "<=4.2.5", - "brotkrueml/codehighlight": "<2.7", - "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", - "brotkrueml/typo3-matomo-integration": "<1.3.2", - "buddypress/buddypress": "<7.2.1", - "bugsnag/bugsnag-laravel": ">=2,<2.0.2", - "bvbmedia/multishop": "<2.0.39", - "bytefury/crater": "<6.0.2", - "cachethq/cachet": "<2.5.1", - "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", - "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", - "cardgate/magento2": "<2.0.33", - "cardgate/woocommerce": "<=3.1.15", - "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", - "cart2quote/module-quotation-encoded": ">=4.1.6,<=4.4.5|>=5,<5.4.4", - "cartalyst/sentry": "<=2.1.6", - "catfan/medoo": "<1.7.5", - "causal/oidc": "<4", - "cecil/cecil": "<7.47.1", - "centreon/centreon": "<22.10.15", - "cesnet/simplesamlphp-module-proxystatistics": "<3.1", - "chriskacerguis/codeigniter-restserver": "<=2.7.1", - "chrome-php/chrome": "<1.14", - "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", - "ckeditor/ckeditor": "<4.25", - "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", - "co-stack/fal_sftp": "<0.2.6", - "cockpit-hq/cockpit": "<2.11.4", - "codeception/codeception": "<3.1.3|>=4,<4.1.22", - "codeigniter/framework": "<3.1.10", - "codeigniter4/framework": "<4.6.2", - "codeigniter4/shield": "<1.0.0.0-beta8", - "codiad/codiad": "<=2.8.4", - "codingms/additional-tca": ">=1.7,<1.15.17|>=1.16,<1.16.9", - "commerceteam/commerce": ">=0.9.6,<0.9.9", - "components/jquery": ">=1.0.3,<3.5", - "composer/composer": "<1.10.27|>=2,<2.2.24|>=2.3,<2.7.7", - "concrete5/concrete5": "<9.4.3", - "concrete5/core": "<8.5.8|>=9,<9.1", - "contao-components/mediaelement": ">=2.14.2,<2.21.1", - "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4", - "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", - "contao/core": "<3.5.39", - "contao/core-bundle": "<4.13.54|>=5,<5.3.30|>=5.4,<5.5.6", - "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", - "contao/managed-edition": "<=1.5", - "corveda/phpsandbox": "<1.3.5", - "cosenary/instagram": "<=2.3", - "couleurcitron/tarteaucitron-wp": "<0.3", - "craftcms/cms": "<4.16.3|>=5,<5.8.4", - "croogo/croogo": "<4", - "cuyz/valinor": "<0.12", - "czim/file-handling": "<1.5|>=2,<2.3", - "czproject/git-php": "<4.0.3", - "damienharper/auditor-bundle": "<5.2.6", - "dapphp/securimage": "<3.6.6", - "darylldoyle/safe-svg": "<1.9.10", - "datadog/dd-trace": ">=0.30,<0.30.2", - "datatables/datatables": "<1.10.10", - "david-garcia/phpwhois": "<=4.3.1", - "dbrisinajumi/d2files": "<1", - "dcat/laravel-admin": "<=2.1.3|==2.2.0.0-beta|==2.2.2.0-beta", - "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", - "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", - "desperado/xml-bundle": "<=0.1.7", - "dev-lancer/minecraft-motd-parser": "<=1.0.5", - "devgroup/dotplant": "<2020.09.14-dev", - "digimix/wp-svg-upload": "<=1", - "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", - "dl/yag": "<3.0.1", - "dmk/webkitpdf": "<1.1.4", - "dnadesign/silverstripe-elemental": "<5.3.12", - "doctrine/annotations": "<1.2.7", - "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", - "doctrine/common": "<2.4.3|>=2.5,<2.5.1", - "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", - "doctrine/doctrine-bundle": "<1.5.2", - "doctrine/doctrine-module": "<0.7.2", - "doctrine/mongodb-odm": "<1.0.2", - "doctrine/mongodb-odm-bundle": "<3.0.1", - "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<=21.0.2", - "dompdf/dompdf": "<2.0.4", - "doublethreedigital/guest-entries": "<3.1.2", - "drupal/admin_audit_trail": "<1.0.5", - "drupal/ai": "<1.0.5", - "drupal/alogin": "<2.0.6", - "drupal/cache_utility": "<1.2.1", - "drupal/commerce_alphabank_redirect": "<1.0.3", - "drupal/commerce_eurobank_redirect": "<2.1.1", - "drupal/config_split": "<1.10|>=2,<2.0.2", - "drupal/core": ">=6,<6.38|>=7,<7.102|>=8,<10.3.14|>=10.4,<10.4.5|>=11,<11.0.13|>=11.1,<11.1.5", - "drupal/core-recommended": ">=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", - "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", - "drupal/formatter_suite": "<2.1", - "drupal/gdpr": "<3.0.1|>=3.1,<3.1.2", - "drupal/google_tag": "<1.8|>=2,<2.0.8", - "drupal/ignition": "<1.0.4", - "drupal/lightgallery": "<1.6", - "drupal/link_field_display_mode_formatter": "<1.6", - "drupal/matomo": "<1.24", - "drupal/oauth2_client": "<4.1.3", - "drupal/oauth2_server": "<2.1", - "drupal/obfuscate": "<2.0.1", - "drupal/quick_node_block": "<2", - "drupal/rapidoc_elements_field_formatter": "<1.0.1", - "drupal/spamspan": "<3.2.1", - "drupal/tfa": "<1.10", - "duncanmcclean/guest-entries": "<3.1.2", - "dweeves/magmi": "<=0.7.24", - "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", - "ecodev/newsletter": "<=4", - "ectouch/ectouch": "<=2.7.2", - "egroupware/egroupware": "<23.1.20240624", - "elefant/cms": "<2.0.7", - "elgg/elgg": "<3.3.24|>=4,<4.0.5", - "elijaa/phpmemcacheadmin": "<=1.3", - "elmsln/haxcms": "<11.0.14", - "encore/laravel-admin": "<=1.8.19", - "endroid/qr-code-bundle": "<3.4.2", - "enhavo/enhavo-app": "<=0.13.1", - "enshrined/svg-sanitize": "<0.22", - "erusev/parsedown": "<1.7.2", - "ether/logs": "<3.0.4", - "evolutioncms/evolution": "<=3.2.3", - "exceedone/exment": "<4.4.3|>=5,<5.0.3", - "exceedone/laravel-admin": "<2.2.3|==3", - "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", - "ezsystems/ez-support-tools": ">=2.2,<2.2.3", - "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", - "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", - "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", - "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.38|>=3.3,<3.3.39", - "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1|>=5.3.0.0-beta1,<5.3.5", - "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", - "ezsystems/ezplatform-http-cache": "<2.3.16", - "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", - "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", - "ezsystems/ezplatform-richtext": ">=2.3,<2.3.26|>=3.3,<3.3.40", - "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", - "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", - "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", - "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", - "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", - "ezyang/htmlpurifier": "<=4.2", - "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", - "facturascripts/facturascripts": "<=2022.08", - "fastly/magento2": "<1.2.26", - "feehi/cms": "<=2.1.1", - "feehi/feehicms": "<=2.1.1", - "fenom/fenom": "<=2.12.1", - "filament/actions": ">=3.2,<3.2.123", - "filament/infolists": ">=3,<3.2.115", - "filament/tables": ">=3,<3.2.115", - "filegator/filegator": "<7.8", - "filp/whoops": "<2.1.13", - "fineuploader/php-traditional-server": "<=1.2.2", - "firebase/php-jwt": "<6", - "fisharebest/webtrees": "<=2.1.18", - "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", - "fixpunkt/fp-newsletter": "<1.1.1|>=1.2,<2.1.2|>=2.2,<3.2.6", - "flarum/core": "<1.8.10", - "flarum/flarum": "<0.1.0.0-beta8", - "flarum/framework": "<1.8.10", - "flarum/mentions": "<1.6.3", - "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", - "flarum/tags": "<=0.1.0.0-beta13", - "floriangaerber/magnesium": "<0.3.1", - "fluidtypo3/vhs": "<5.1.1", - "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", - "fof/upload": "<1.2.3", - "foodcoopshop/foodcoopshop": ">=3.2,<3.6.1", - "fooman/tcpdf": "<6.2.22", - "forkcms/forkcms": "<5.11.1", - "fossar/tcpdf-parser": "<6.2.22", - "francoisjacquet/rosariosis": "<=11.5.1", - "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", - "friendsofsymfony/oauth2-php": "<1.3", - "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", - "friendsofsymfony/user-bundle": ">=1,<1.3.5", - "friendsofsymfony1/swiftmailer": ">=4,<5.4.13|>=6,<6.2.5", - "friendsofsymfony1/symfony1": ">=1.1,<1.5.19", - "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", - "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", - "froala/wysiwyg-editor": "<=4.3", - "froxlor/froxlor": "<=2.2.5", - "frozennode/administrator": "<=5.0.12", - "fuel/core": "<1.8.1", - "funadmin/funadmin": "<=5.0.2", - "gaoming13/wechat-php-sdk": "<=1.10.2", - "genix/cms": "<=1.1.11", - "georgringer/news": "<1.3.3", - "geshi/geshi": "<=1.0.9.1", - "getformwork/formwork": "<1.13.1|>=2.0.0.0-beta1,<2.0.0.0-beta4", - "getgrav/grav": "<1.7.46", - "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", - "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", - "getkirby/panel": "<2.5.14", - "getkirby/starterkit": "<=3.7.0.2", - "gilacms/gila": "<=1.15.4", - "gleez/cms": "<=1.3|==2", - "globalpayments/php-sdk": "<2", - "goalgorilla/open_social": "<12.3.11|>=12.4,<12.4.10|>=13.0.0.0-alpha1,<13.0.0.0-alpha11", - "gogentooss/samlbase": "<1.2.7", - "google/protobuf": "<3.15", - "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", - "gree/jose": "<2.2.1", - "gregwar/rst": "<1.0.3", - "grumpydictator/firefly-iii": "<6.1.17", - "gugoan/economizzer": "<=0.9.0.0-beta1", - "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", - "guzzlehttp/oauth-subscriber": "<0.8.1", - "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", - "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", - "handcraftedinthealps/goodby-csv": "<1.4.3", - "harvesthq/chosen": "<1.8.7", - "helloxz/imgurl": "<=2.31", - "hhxsv5/laravel-s": "<3.7.36", - "hillelcoren/invoice-ninja": "<5.3.35", - "himiklab/yii2-jqgrid-widget": "<1.0.8", - "hjue/justwriting": "<=1", - "hov/jobfair": "<1.0.13|>=2,<2.0.2", - "httpsoft/http-message": "<1.0.12", - "hyn/multi-tenant": ">=5.6,<5.7.2", - "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6,<4.6.21", - "ibexa/admin-ui-assets": ">=4.6.0.0-alpha1,<4.6.21", - "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", - "ibexa/fieldtype-richtext": ">=4.6,<4.6.21", - "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", - "ibexa/http-cache": ">=4.6,<4.6.14", - "ibexa/post-install": "<1.0.16|>=4.6,<4.6.14", - "ibexa/solr": ">=4.5,<4.5.4", - "ibexa/user": ">=4,<4.4.3", - "icecoder/icecoder": "<=8.1", - "idno/known": "<=1.3.1", - "ilicmiljan/secure-props": ">=1.2,<1.2.2", - "illuminate/auth": "<5.5.10", - "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<6.18.31|>=7,<7.22.4", - "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", - "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", - "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", - "imdbphp/imdbphp": "<=5.1.1", - "impresscms/impresscms": "<=1.4.5", - "impresspages/impresspages": "<1.0.13", - "in2code/femanager": "<6.4.2|>=7,<7.5.3|>=8,<8.3.1", - "in2code/ipandlanguageredirect": "<5.1.2", - "in2code/lux": "<17.6.1|>=18,<24.0.2", - "in2code/powermail": "<7.5.1|>=8,<8.5.1|>=9,<10.9.1|>=11,<12.5.3|==13", - "innologi/typo3-appointments": "<2.0.6", - "intelliants/subrion": "<4.2.2", - "inter-mediator/inter-mediator": "==5.5", - "ipl/web": "<0.10.1", - "islandora/crayfish": "<4.1", - "islandora/islandora": ">=2,<2.4.1", - "ivankristianto/phpwhois": "<=4.3", - "jackalope/jackalope-doctrine-dbal": "<1.7.4", - "jambagecom/div2007": "<0.10.2", - "james-heinrich/getid3": "<1.9.21", - "james-heinrich/phpthumb": "<=1.7.23", - "jasig/phpcas": "<1.3.3", - "jbartels/wec-map": "<3.0.3", - "jcbrand/converse.js": "<3.3.3", - "joelbutcher/socialstream": "<5.6|>=6,<6.2", - "johnbillion/wp-crontrol": "<1.16.2", - "joomla/application": "<1.0.13", - "joomla/archive": "<1.1.12|>=2,<2.0.1", - "joomla/database": ">=1,<2.2|>=3,<3.4", - "joomla/filesystem": "<1.6.2|>=2,<2.0.1", - "joomla/filter": "<1.4.4|>=2,<2.0.1", - "joomla/framework": "<1.5.7|>=2.5.4,<=3.8.12", - "joomla/input": ">=2,<2.0.2", - "joomla/joomla-cms": "<3.9.12|>=4,<4.4.13|>=5,<5.2.6", - "joomla/joomla-platform": "<1.5.4", - "joomla/session": "<1.3.1", - "joyqi/hyper-down": "<=2.4.27", - "jsdecena/laracom": "<2.0.9", - "jsmitty12/phpwhois": "<5.1", - "juzaweb/cms": "<=3.4.2", - "jweiland/events2": "<8.3.8|>=9,<9.0.6", - "jweiland/kk-downloader": "<1.2.2", - "kazist/phpwhois": "<=4.2.6", - "kelvinmo/simplexrd": "<3.1.1", - "kevinpapst/kimai2": "<1.16.7", - "khodakhah/nodcms": "<=3", - "kimai/kimai": "<=2.20.1", - "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", - "klaviyo/magento2-extension": ">=1,<3", - "knplabs/knp-snappy": "<=1.4.2", - "kohana/core": "<3.3.3", - "koillection/koillection": "<1.6.12", - "krayin/laravel-crm": "<=1.3", - "kreait/firebase-php": ">=3.2,<3.8.1", - "kumbiaphp/kumbiapp": "<=1.1.1", - "la-haute-societe/tcpdf": "<6.2.22", - "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", - "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", - "laminas/laminas-http": "<2.14.2", - "lara-zeus/artemis": ">=1,<=1.0.6", - "lara-zeus/dynamic-dashboard": ">=3,<=3.0.1", - "laravel/fortify": "<1.11.1", - "laravel/framework": "<10.48.29|>=11,<11.44.1|>=12,<12.1.1", - "laravel/laravel": ">=5.4,<5.4.22", - "laravel/pulse": "<1.3.1", - "laravel/reverb": "<1.4", - "laravel/socialite": ">=1,<2.0.10", - "latte/latte": "<2.10.8", - "lavalite/cms": "<=9|==10.1", - "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", - "league/commonmark": "<2.7", - "league/flysystem": "<1.1.4|>=2,<2.1.1", - "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", - "leantime/leantime": "<3.3", - "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", - "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", - "liftkit/database": "<2.13.2", - "lightsaml/lightsaml": "<1.3.5", - "limesurvey/limesurvey": "<6.5.12", - "livehelperchat/livehelperchat": "<=3.91", - "livewire/livewire": "<2.12.7|>=3.0.0.0-beta1,<3.6.4", - "livewire/volt": "<1.7", - "lms/routes": "<2.1.1", - "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", - "lomkit/laravel-rest-api": "<2.13", - "luracast/restler": "<3.1", - "luyadev/yii-helpers": "<1.2.1", - "macropay-solutions/laravel-crud-wizard-free": "<3.4.17", - "maestroerror/php-heic-to-jpg": "<1.0.5", - "magento/community-edition": "<2.4.5.0-patch13|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch11|>=2.4.7.0-beta1,<2.4.7.0-patch6|>=2.4.8.0-beta1,<2.4.8.0-patch1", - "magento/core": "<=1.9.4.5", - "magento/magento1ce": "<1.9.4.3-dev", - "magento/magento1ee": ">=1,<1.14.4.3-dev", - "magento/product-community-edition": "<2.4.4.0-patch9|>=2.4.5,<2.4.5.0-patch8|>=2.4.6,<2.4.6.0-patch6|>=2.4.7,<2.4.7.0-patch1", - "magento/project-community-edition": "<=2.0.2", - "magneto/core": "<1.9.4.4-dev", - "maikuolan/phpmussel": ">=1,<1.6", - "mainwp/mainwp": "<=4.4.3.3", - "manogi/nova-tiptap": "<=3.2.6", - "mantisbt/mantisbt": "<=2.26.3", - "marcwillmann/turn": "<0.3.3", - "marshmallow/nova-tiptap": "<5.7", - "matomo/matomo": "<1.11", - "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.6|>=6.0.0.0-alpha,<6.0.2", - "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", - "maximebf/debugbar": "<1.19", - "mdanter/ecc": "<2", - "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", - "mediawiki/cargo": "<3.6.1", - "mediawiki/core": "<1.39.5|==1.40", - "mediawiki/data-transfer": ">=1.39,<1.39.11|>=1.41,<1.41.3|>=1.42,<1.42.2", - "mediawiki/matomo": "<2.4.3", - "mediawiki/semantic-media-wiki": "<4.0.2", - "mehrwert/phpmyadmin": "<3.2", - "melisplatform/melis-asset-manager": "<5.0.1", - "melisplatform/melis-cms": "<5.0.1", - "melisplatform/melis-front": "<5.0.1", - "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", - "mgallegos/laravel-jqgrid": "<=1.3", - "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", - "microsoft/microsoft-graph-beta": "<2.0.1", - "microsoft/microsoft-graph-core": "<2.0.2", - "microweber/microweber": "<=2.0.19", - "mikehaertl/php-shellcommand": "<1.6.1", - "miniorange/miniorange-saml": "<1.4.3", - "mittwald/typo3_forum": "<1.2.1", - "mobiledetect/mobiledetectlib": "<2.8.32", - "modx/revolution": "<=3.1", - "mojo42/jirafeau": "<4.4", - "mongodb/mongodb": ">=1,<1.9.2", - "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.3.12|>=4.4,<4.4.8|>=4.5.0.0-beta,<4.5.4", - "mos/cimage": "<0.7.19", - "movim/moxl": ">=0.8,<=0.10", - "movingbytes/social-network": "<=1.2.1", - "mpdf/mpdf": "<=7.1.7", - "munkireport/comment": "<4.1", - "munkireport/managedinstalls": "<2.6", - "munkireport/munki_facts": "<1.5", - "munkireport/munkireport": ">=2.5.3,<5.6.3", - "munkireport/reportdata": "<3.5", - "munkireport/softwareupdate": "<1.6", - "mustache/mustache": ">=2,<2.14.1", - "mwdelaney/wp-enable-svg": "<=0.2", - "namshi/jose": "<2.2", - "nasirkhan/laravel-starter": "<11.11", - "nategood/httpful": "<1", - "neoan3-apps/template": "<1.1.1", - "neorazorx/facturascripts": "<2022.04", - "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", - "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", - "neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9", - "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", - "neos/swiftmailer": "<5.4.5", - "nesbot/carbon": "<2.72.6|>=3,<3.8.4", - "netcarver/textile": "<=4.1.2", - "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", - "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", - "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", - "nilsteampassnet/teampass": "<3.1.3.1-dev", - "nitsan/ns-backup": "<13.0.1", - "nonfiction/nterchange": "<4.1.1", - "notrinos/notrinos-erp": "<=0.7", - "noumo/easyii": "<=0.9", - "novaksolutions/infusionsoft-php-sdk": "<1", - "nukeviet/nukeviet": "<4.5.02", - "nyholm/psr7": "<1.6.1", - "nystudio107/craft-seomatic": "<3.4.12", - "nzedb/nzedb": "<0.8", - "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", - "october/backend": "<1.1.2", - "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", - "october/october": "<3.7.5", - "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<3.7.5", - "oliverklee/phpunit": "<3.5.15", - "omeka/omeka-s": "<4.0.3", - "onelogin/php-saml": "<2.10.4", - "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", - "open-web-analytics/open-web-analytics": "<1.7.4", - "opencart/opencart": ">=0", - "openid/php-openid": "<2.3", - "openmage/magento-lts": "<20.12.3", - "opensolutions/vimbadmin": "<=3.0.15", - "opensource-workshop/connect-cms": "<1.8.7|>=2,<2.4.7", - "orchid/platform": ">=8,<14.43", - "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", - "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", - "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", - "oro/crm-call-bundle": ">=4.2,<=4.2.5|>=5,<5.0.4|>=5.1,<5.1.1", - "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", - "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", - "oveleon/contao-cookiebar": "<1.16.3|>=2,<2.1.3", - "oxid-esales/oxideshop-ce": "<=7.0.5", - "oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1", - "packbackbooks/lti-1-3-php-library": "<5", - "padraic/humbug_get_contents": "<1.1.2", - "pagarme/pagarme-php": "<3", - "pagekit/pagekit": "<=1.0.18", - "paragonie/ecc": "<2.0.1", - "paragonie/random_compat": "<2", - "passbolt/passbolt_api": "<4.6.2", - "paypal/adaptivepayments-sdk-php": "<=3.9.2", - "paypal/invoice-sdk-php": "<=3.9", - "paypal/merchant-sdk-php": "<3.12", - "paypal/permissions-sdk-php": "<=3.9.1", - "pear/archive_tar": "<1.4.14", - "pear/auth": "<1.2.4", - "pear/crypt_gpg": "<1.6.7", - "pear/http_request2": "<2.7", - "pear/pear": "<=1.10.1", - "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", - "personnummer/personnummer": "<3.0.2", - "phanan/koel": "<5.1.4", - "phenx/php-svg-lib": "<0.5.2", - "php-censor/php-censor": "<2.0.13|>=2.1,<2.1.5", - "php-mod/curl": "<2.3.2", - "phpbb/phpbb": "<3.3.11", - "phpems/phpems": ">=6,<=6.1.3", - "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", - "phpmailer/phpmailer": "<6.5", - "phpmussel/phpmussel": ">=1,<1.6", - "phpmyadmin/phpmyadmin": "<5.2.2", - "phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5|>=3.2.10,<=4.0.1", - "phpoffice/common": "<0.2.9", - "phpoffice/math": "<=0.2", - "phpoffice/phpexcel": "<=1.8.2", - "phpoffice/phpspreadsheet": "<1.29.9|>=2,<2.1.8|>=2.2,<2.3.7|>=3,<3.9", - "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", - "phpservermon/phpservermon": "<3.6", - "phpsysinfo/phpsysinfo": "<3.4.3", - "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", - "phpwhois/phpwhois": "<=4.2.5", - "phpxmlrpc/extras": "<0.6.1", - "phpxmlrpc/phpxmlrpc": "<4.9.2", - "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<1.7.6", - "pimcore/customer-management-framework-bundle": "<4.2.1", - "pimcore/data-hub": "<1.2.4", - "pimcore/data-importer": "<1.8.9|>=1.9,<1.9.3", - "pimcore/demo": "<10.3", - "pimcore/ecommerce-framework-bundle": "<1.0.10", - "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<11.5.4", - "piwik/piwik": "<1.11", - "pixelfed/pixelfed": "<0.12.5", - "plotly/plotly.js": "<2.25.2", - "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<5.25.2", - "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", - "pressbooks/pressbooks": "<5.18", - "prestashop/autoupgrade": ">=4,<4.10.1", - "prestashop/blockreassurance": "<=5.1.3", - "prestashop/blockwishlist": ">=2,<2.1.1", - "prestashop/contactform": ">=1.0.1,<4.3", - "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.1.6", - "prestashop/productcomments": "<5.0.2", - "prestashop/ps_contactinfo": "<=3.3.2", - "prestashop/ps_emailsubscription": "<2.6.1", - "prestashop/ps_facetedsearch": "<3.4.1", - "prestashop/ps_linklist": "<3.1", - "privatebin/privatebin": "<1.4|>=1.5,<1.7.4", - "processwire/processwire": "<=3.0.229", - "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", - "propel/propel1": ">=1,<=1.7.1", - "pterodactyl/panel": "<=1.11.10", - "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", - "ptrofimov/beanstalk_console": "<1.7.14", - "pubnub/pubnub": "<6.1", - "punktde/pt_extbase": "<1.5.1", - "pusher/pusher-php-server": "<2.2.1", - "pwweb/laravel-core": "<=0.3.6.0-beta", - "pxlrbt/filament-excel": "<1.1.14|>=2.0.0.0-alpha,<2.3.3", - "pyrocms/pyrocms": "<=3.9.1", - "qcubed/qcubed": "<=3.1.1", - "quickapps/cms": "<=2.0.0.0-beta2", - "rainlab/blog-plugin": "<1.4.1", - "rainlab/debugbar-plugin": "<3.1", - "rainlab/user-plugin": "<=1.4.5", - "rankmath/seo-by-rank-math": "<=1.0.95", - "rap2hpoutre/laravel-log-viewer": "<0.13", - "react/http": ">=0.7,<1.9", - "really-simple-plugins/complianz-gdpr": "<6.4.2", - "redaxo/source": "<5.18.3", - "remdex/livehelperchat": "<4.29", - "renolit/reint-downloadmanager": "<4.0.2|>=5,<5.0.1", - "reportico-web/reportico": "<=8.1", - "rhukster/dom-sanitizer": "<1.0.7", - "rmccue/requests": ">=1.6,<1.8", - "robrichards/xmlseclibs": ">=1,<3.0.4", - "roots/soil": "<4.1", - "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11", - "rudloff/alltube": "<3.0.3", - "rudloff/rtmpdump-bin": "<=2.3.1", - "s-cart/core": "<6.9", - "s-cart/s-cart": "<6.9", - "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", - "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", - "samwilson/unlinked-wikibase": "<1.42", - "scheb/two-factor-bundle": "<3.26|>=4,<4.11", - "sensiolabs/connect": "<4.2.3", - "serluck/phpwhois": "<=4.2.6", - "setasign/fpdi": "<2.6.4", - "sfroemken/url_redirect": "<=1.2.1", - "sheng/yiicms": "<1.2.1", - "shopware/core": "<6.5.8.18-dev|>=6.6,<6.6.10.3-dev|>=6.7.0.0-RC1-dev,<6.7.0.0-RC2-dev", - "shopware/platform": "<=6.6.10.4|>=6.7.0.0-RC1-dev,<6.7.0.0-RC2-dev", - "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.17", - "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", - "shopxo/shopxo": "<=6.4", - "showdoc/showdoc": "<2.10.4", - "shuchkin/simplexlsx": ">=1.0.12,<1.1.13", - "silverstripe-australia/advancedreports": ">=1,<=2", - "silverstripe/admin": "<1.13.19|>=2,<2.1.8", - "silverstripe/assets": ">=1,<1.11.1", - "silverstripe/cms": "<4.11.3", - "silverstripe/comments": ">=1.3,<3.1.1", - "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<5.3.23", - "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3", - "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", - "silverstripe/recipe-cms": ">=4.5,<4.5.3", - "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", - "silverstripe/reports": "<5.2.3", - "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4|>=2.1,<2.1.2", - "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", - "silverstripe/subsites": ">=2,<2.6.1", - "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", - "silverstripe/userforms": "<3|>=5,<5.4.2", - "silverstripe/versioned-admin": ">=1,<1.11.1", - "simogeo/filemanager": "<=2.5", - "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<=4.16.15|>=5.0.0.0-alpha1,<=5.0.0.0-alpha19", - "simplesamlphp/saml2-legacy": "<=4.16.15", - "simplesamlphp/simplesamlphp": "<1.18.6", - "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", - "simplesamlphp/simplesamlphp-module-openid": "<1", - "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", - "simplesamlphp/xml-common": "<1.20", - "simplesamlphp/xml-security": "==1.6.11", - "simplito/elliptic-php": "<1.0.6", - "sitegeist/fluid-components": "<3.5", - "sjbr/sr-feuser-register": "<2.6.2|>=5.1,<12.5", - "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", - "sjbr/static-info-tables": "<2.3.1", - "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", - "slim/slim": "<2.6", - "slub/slub-events": "<3.0.3", - "smarty/smarty": "<4.5.3|>=5,<5.1.1", - "snipe/snipe-it": "<8.1", - "socalnick/scn-social-auth": "<1.15.2", - "socialiteproviders/steam": "<1.1", - "spatie/browsershot": "<5.0.5", - "spatie/image-optimizer": "<1.7.3", - "spencer14420/sp-php-email-handler": "<1", - "spipu/html2pdf": "<5.2.8", - "spoon/library": "<1.4.1", - "spoonity/tcpdf": "<6.2.22", - "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", - "ssddanbrown/bookstack": "<24.05.1", - "starcitizentools/citizen-skin": ">=1.9.4,<3.4", - "starcitizentools/short-description": ">=4,<4.0.1", - "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", - "statamic/cms": "<=5.16", - "stormpath/sdk": "<9.9.99", - "studio-42/elfinder": "<=2.1.64", - "studiomitte/friendlycaptcha": "<0.1.4", - "subhh/libconnect": "<7.0.8|>=8,<8.1", - "sukohi/surpass": "<1", - "sulu/form-bundle": ">=2,<2.5.3", - "sulu/sulu": "<1.6.44|>=2,<2.5.25|>=2.6,<2.6.9|>=3.0.0.0-alpha1,<3.0.0.0-alpha3", - "sumocoders/framework-user-bundle": "<1.4", - "superbig/craft-audit": "<3.0.2", - "svewap/a21glossary": "<=0.4.10", - "swag/paypal": "<5.4.4", - "swiftmailer/swiftmailer": "<6.2.5", - "swiftyedit/swiftyedit": "<1.2", - "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", - "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", - "sylius/grid-bundle": "<1.10.1", - "sylius/paypal-plugin": "<1.6.2|>=1.7,<1.7.2|>=2,<2.0.2", - "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.12.19|>=1.13.0.0-alpha1,<1.13.4", - "symbiote/silverstripe-multivaluefield": ">=3,<3.1", - "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", - "symbiote/silverstripe-seed": "<6.0.3", - "symbiote/silverstripe-versionedfiles": "<=2.0.3", - "symfont/process": ">=0", - "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", - "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", - "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", - "symfony/http-client": ">=4.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", - "symfony/http-foundation": "<5.4.46|>=6,<6.4.14|>=7,<7.1.7", - "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", - "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", - "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", - "symfony/mime": ">=4.3,<4.3.8", - "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/polyfill": ">=1,<1.10", - "symfony/polyfill-php55": ">=1,<1.10", - "symfony/process": "<5.4.46|>=6,<6.4.14|>=7,<7.1.7", - "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/routing": ">=2,<2.0.19", - "symfony/runtime": ">=5.3,<5.4.46|>=6,<6.4.14|>=7,<7.1.7", - "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", - "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.4.10|>=7,<7.0.10|>=7.1,<7.1.3", - "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", - "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", - "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", - "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": "<5.4.47|>=6,<6.4.15|>=7,<7.1.8", - "symfony/translation": ">=2,<2.0.17", - "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", - "symfony/ux-autocomplete": "<2.11.2", - "symfony/ux-live-component": "<2.25.1", - "symfony/ux-twig-component": "<2.25.1", - "symfony/validator": "<5.4.43|>=6,<6.4.11|>=7,<7.1.4", - "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", - "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", - "symfony/webhook": ">=6.3,<6.3.8", - "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7|>=2.2.0.0-beta1,<2.2.0.0-beta2", - "symphonycms/symphony-2": "<2.6.4", - "t3/dce": "<0.11.5|>=2.2,<2.6.2", - "t3g/svg-sanitizer": "<1.0.3", - "t3s/content-consent": "<1.0.3|>=2,<2.0.2", - "tastyigniter/tastyigniter": "<4", - "tcg/voyager": "<=1.8", - "tecnickcom/tc-lib-pdf-font": "<2.6.4", - "tecnickcom/tcpdf": "<6.8", - "terminal42/contao-tablelookupwizard": "<3.3.5", - "thelia/backoffice-default-template": ">=2.1,<2.1.2", - "thelia/thelia": ">=2.1,<2.1.3", - "theonedemon/phpwhois": "<=4.2.5", - "thinkcmf/thinkcmf": "<6.0.8", - "thorsten/phpmyfaq": "<=4.0.1", - "tikiwiki/tiki-manager": "<=17.1", - "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", - "tinymce/tinymce": "<7.2", - "tinymighty/wiki-seo": "<1.2.2", - "titon/framework": "<9.9.99", - "tltneon/lgsl": "<7", - "tobiasbg/tablepress": "<=2.0.0.0-RC1", - "topthink/framework": "<6.0.17|>=6.1,<=8.0.4", - "topthink/think": "<=6.1.1", - "topthink/thinkphp": "<=3.2.3|>=6.1.3,<=8.0.4", - "torrentpier/torrentpier": "<=2.4.3", - "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", - "tribalsystems/zenario": "<=9.7.61188", - "truckersmp/phpwhois": "<=4.3.1", - "ttskch/pagination-service-provider": "<1", - "twbs/bootstrap": "<=3.4.1|>=4,<=4.6.2", - "twig/twig": "<3.11.2|>=3.12,<3.14.1|>=3.16,<3.19", - "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<10.4.46|>=11,<11.5.40|>=12,<=12.4.30|>=13,<=13.4.11", - "typo3/cms-belog": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", - "typo3/cms-beuser": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", - "typo3/cms-core": "<=8.7.56|>=9,<=9.5.50|>=10,<=10.4.49|>=11,<=11.5.43|>=12,<=12.4.30|>=13,<=13.4.11", - "typo3/cms-dashboard": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", - "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", - "typo3/cms-extensionmanager": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", - "typo3/cms-felogin": ">=4.2,<4.2.3", - "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1", - "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", - "typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5", - "typo3/cms-indexed-search": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", - "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8|==13.4.2", - "typo3/cms-lowlevel": ">=11,<=11.5.41", - "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", - "typo3/cms-scheduler": ">=11,<=11.5.41", - "typo3/cms-setup": ">=9,<=9.5.50|>=10,<=10.4.49|>=11,<=11.5.43|>=12,<=12.4.30|>=13,<=13.4.11", - "typo3/cms-webhooks": ">=12,<=12.4.30|>=13,<=13.4.11", - "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", - "typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3", - "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", - "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", - "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", - "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", - "ua-parser/uap-php": "<3.8", - "uasoft-indonesia/badaso": "<=2.9.7", - "unisharp/laravel-filemanager": "<2.9.1", - "universal-omega/dynamic-page-list3": "<3.6.4", - "unopim/unopim": "<0.1.5", - "userfrosting/userfrosting": ">=0.3.1,<4.6.3", - "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", - "uvdesk/community-skeleton": "<=1.1.1", - "uvdesk/core-framework": "<=1.1.1", - "vanilla/safecurl": "<0.9.2", - "verbb/comments": "<1.5.5", - "verbb/formie": "<=2.1.43", - "verbb/image-resizer": "<2.0.9", - "verbb/knock-knock": "<1.2.8", - "verot/class.upload.php": "<=2.1.6", - "vertexvaar/falsftp": "<0.2.6", - "villagedefrance/opencart-overclocked": "<=1.11.1", - "vova07/yii2-fileapi-widget": "<0.1.9", - "vrana/adminer": "<4.8.1", - "vufind/vufind": ">=2,<9.1.1", - "waldhacker/hcaptcha": "<2.1.2", - "wallabag/tcpdf": "<6.2.22", - "wallabag/wallabag": "<2.6.11", - "wanglelecc/laracms": "<=1.0.3", - "wapplersystems/a21glossary": "<=0.4.10", - "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9", - "web-auth/webauthn-lib": ">=4.5,<4.9", - "web-feet/coastercms": "==5.5", - "web-tp3/wec_map": "<3.0.3", - "webbuilders-group/silverstripe-kapost-bridge": "<0.4", - "webcoast/deferred-image-processing": "<1.0.2", - "webklex/laravel-imap": "<5.3", - "webklex/php-imap": "<5.3", - "webpa/webpa": "<3.1.2", - "wikibase/wikibase": "<=1.39.3", - "wikimedia/parsoid": "<0.12.2", - "willdurand/js-translation-bundle": "<2.1.1", - "winter/wn-backend-module": "<1.2.4", - "winter/wn-cms-module": "<1.0.476|>=1.1,<1.1.11|>=1.2,<1.2.7", - "winter/wn-dusk-plugin": "<2.1", - "winter/wn-system-module": "<1.2.4", - "wintercms/winter": "<=1.2.3", - "wireui/wireui": "<1.19.3|>=2,<2.1.3", - "woocommerce/woocommerce": "<6.6|>=8.8,<8.8.5|>=8.9,<8.9.3", - "wp-cli/wp-cli": ">=0.12,<2.5", - "wp-graphql/wp-graphql": "<=1.14.5", - "wp-premium/gravityforms": "<2.4.21", - "wpanel/wpanel4-cms": "<=4.3.1", - "wpcloud/wp-stateless": "<3.2", - "wpglobus/wpglobus": "<=1.9.6", - "wwbn/avideo": "<14.3", - "xataface/xataface": "<3", - "xpressengine/xpressengine": "<3.0.15", - "yab/quarx": "<2.4.5", - "yeswiki/yeswiki": "<4.5.4", - "yetiforce/yetiforce-crm": "<6.5", - "yidashi/yii2cmf": "<=2", - "yii2mod/yii2-cms": "<1.9.2", - "yiisoft/yii": "<1.1.31", - "yiisoft/yii2": "<2.0.52", - "yiisoft/yii2-authclient": "<2.2.15", - "yiisoft/yii2-bootstrap": "<2.0.4", - "yiisoft/yii2-dev": "<=2.0.45", - "yiisoft/yii2-elasticsearch": "<2.0.5", - "yiisoft/yii2-gii": "<=2.2.4", - "yiisoft/yii2-jui": "<2.0.4", - "yiisoft/yii2-redis": "<2.0.20", - "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", - "yoast-seo-for-typo3/yoast_seo": "<7.2.3", - "yourls/yourls": "<=1.8.2", - "yuan1994/tpadmin": "<=1.3.12", - "z-push/z-push-dev": "<2.7.6", - "zencart/zencart": "<=1.5.7.0-beta", - "zendesk/zendesk_api_client_php": "<2.2.11", - "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", - "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", - "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", - "zendframework/zend-db": "<2.2.10|>=2.3,<2.3.5", - "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", - "zendframework/zend-diactoros": "<1.8.4", - "zendframework/zend-feed": "<2.10.3", - "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-http": "<2.8.1", - "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", - "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", - "zendframework/zend-mail": "<2.4.11|>=2.5,<2.7.2", - "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-session": ">=2,<2.2.9|>=2.3,<2.3.4", - "zendframework/zend-validator": ">=2.3,<2.3.6", - "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", - "zendframework/zendframework": "<=3", - "zendframework/zendframework1": "<1.12.20", - "zendframework/zendopenid": "<2.0.2", - "zendframework/zendrest": "<2.0.2", - "zendframework/zendservice-amazon": "<2.0.3", - "zendframework/zendservice-api": "<1", - "zendframework/zendservice-audioscrobbler": "<2.0.2", - "zendframework/zendservice-nirvanix": "<2.0.2", - "zendframework/zendservice-slideshare": "<2.0.2", - "zendframework/zendservice-technorati": "<2.0.2", - "zendframework/zendservice-windowsazure": "<2.0.2", - "zendframework/zendxml": ">=1,<1.0.1", - "zenstruck/collection": "<0.2.1", - "zetacomponents/mail": "<1.8.2", - "zf-commons/zfc-user": "<1.2.2", - "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", - "zfr/zfr-oauth2-server-module": "<0.1.2", - "zoujingli/thinkadmin": "<=6.1.53" - }, - "type": "metapackage", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "role": "maintainer" - }, - { - "name": "Ilya Tribusean", - "email": "slash3b@gmail.com", - "role": "maintainer" - } - ], - "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", - "keywords": [ - "dev" - ], - "support": { - "issues": "https://github.com/Roave/SecurityAdvisories/issues", - "source": "https://github.com/Roave/SecurityAdvisories/tree/latest" - }, - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories", - "type": "tidelift" - } - ], - "time": "2025-08-12T21:05:30+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:12:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:58:43+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "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/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:59:15+00:00" - }, - { - "name": "sebastian/comparator", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "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": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-10-18T14:56:07+00:00" - }, - { - "name": "sebastian/complexity", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-21T08:37:17+00:00" - }, - { - "name": "sebastian/diff", - "version": "5.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:15:17+00:00" - }, - { - "name": "sebastian/environment", - "version": "6.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-23T08:47:14+00:00" - }, - { - "name": "sebastian/exporter", - "version": "5.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "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" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:17:12+00:00" - }, - { - "name": "sebastian/global-state", - "version": "6.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "https://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:19:19+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-21T08:38:20+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "5.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "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/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:08:32+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "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/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:06:18+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "5.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", - "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1" - }, - "funding": [ - { - "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/sebastian/recursion-context", - "type": "tidelift" - } - ], - "time": "2025-08-10T07:50:56+00:00" - }, - { - "name": "sebastian/type", - "version": "4.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "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/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:10:45+00:00" - }, - { - "name": "sebastian/version", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "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/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-07T11:34:05+00:00" - }, - { - "name": "slevomat/coding-standard", - "version": "8.20.0", - "source": { - "type": "git", - "url": "https://github.com/slevomat/coding-standard.git", - "reference": "b4f9f02edd4e6a586777f0cabe8d05574323f3eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/b4f9f02edd4e6a586777f0cabe8d05574323f3eb", - "reference": "b4f9f02edd4e6a586777f0cabe8d05574323f3eb", - "shasum": "" - }, - "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.1.2", - "php": "^7.4 || ^8.0", - "phpstan/phpdoc-parser": "^2.2.0", - "squizlabs/php_codesniffer": "^3.13.2" - }, - "require-dev": { - "phing/phing": "3.0.1|3.1.0", - "php-parallel-lint/php-parallel-lint": "1.4.0", - "phpstan/phpstan": "2.1.19", - "phpstan/phpstan-deprecation-rules": "2.0.3", - "phpstan/phpstan-phpunit": "2.0.7", - "phpstan/phpstan-strict-rules": "2.0.6", - "phpunit/phpunit": "9.6.8|10.5.48|11.4.4|11.5.27|12.2.7" - }, - "type": "phpcodesniffer-standard", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "SlevomatCodingStandard\\": "SlevomatCodingStandard/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", - "keywords": [ - "dev", - "phpcs" - ], - "support": { - "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.20.0" - }, - "funding": [ - { - "url": "https://github.com/kukulich", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", - "type": "tidelift" - } - ], - "time": "2025-07-26T15:35:10+00:00" - }, - { - "name": "softcreatr/jsonpath", - "version": "0.8.3", - "source": { - "type": "git", - "url": "https://github.com/SoftCreatR/JSONPath.git", - "reference": "fc12dee0b46f3fa3a175c4051dbab60984acef4b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/SoftCreatR/JSONPath/zipball/fc12dee0b46f3fa3a175c4051dbab60984acef4b", - "reference": "fc12dee0b46f3fa3a175c4051dbab60984acef4b", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=8.0" - }, - "replace": { - "flow/jsonpath": "*" - }, - "require-dev": { - "phpunit/phpunit": "^9.6", - "roave/security-advisories": "dev-latest" - }, - "type": "library", - "autoload": { - "psr-4": { - "Flow\\JSONPath\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Stephen Frank", - "email": "stephen@flowsa.com", - "homepage": "https://prismaticbytes.com", - "role": "Developer" - }, - { - "name": "Sascha Greuel", - "email": "hello@1-2.dev", - "homepage": "https://1-2.dev", - "role": "Developer" - } - ], - "description": "JSONPath implementation for parsing, searching and flattening arrays", - "support": { - "email": "hello@1-2.dev", - "forum": "https://github.com/SoftCreatR/JSONPath/discussions", - "issues": "https://github.com/SoftCreatR/JSONPath/issues", - "source": "https://github.com/SoftCreatR/JSONPath" - }, - "funding": [ - { - "url": "https://ecologi.com/softcreatr?r=61212ab3fc69b8eb8a2014f4", - "type": "custom" - }, - { - "url": "https://github.com/softcreatr", - "type": "github" - } - ], - "time": "2023-08-17T20:14:00+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.13.2", - "source": { - "type": "git", - "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "5b5e3821314f947dd040c70f7992a64eac89025c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/5b5e3821314f947dd040c70f7992a64eac89025c", - "reference": "5b5e3821314f947dd040c70f7992a64eac89025c", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "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.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "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": "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": [ - "phpcs", - "standards", - "static analysis" - ], - "support": { - "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/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": "2025-06-17T22:17:01+00:00" - }, - { - "name": "symfony/cache", - "version": "v7.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache.git", - "reference": "6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6", - "reference": "6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/cache": "^2.0|^3.0", - "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^3.6", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.4|^7.0" - }, - "conflict": { - "doctrine/dbal": "<3.6", - "symfony/dependency-injection": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/var-dumper": "<6.4" - }, - "provide": { - "psr/cache-implementation": "2.0|3.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0", - "symfony/cache-implementation": "1.1|2.0|3.0" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/dbal": "^3.6|^4", - "predis/predis": "^1.1|^2.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/filesystem": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Cache\\": "" - }, - "classmap": [ - "Traits/ValueWrapper.php" - ], - "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 extended PSR-6, PSR-16 (and tags) implementations", - "homepage": "https://symfony.com", - "keywords": [ - "caching", - "psr6" - ], - "support": { - "source": "https://github.com/symfony/cache/tree/v7.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-07-30T17:13:41+00:00" - }, - { - "name": "symfony/cache-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache-contracts.git", - "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868", - "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/cache": "^3.0" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Cache\\": "" - } - }, - "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 caching", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.6.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-13T15:25:07+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v7.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "119bcf13e67dbd188e5dbc74228b1686f66acd37" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/119bcf13e67dbd188e5dbc74228b1686f66acd37", - "reference": "119bcf13e67dbd188e5dbc74228b1686f66acd37", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "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/v7.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-07-15T11:36:08+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "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.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:36:25+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "roave/security-advisories": 20 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "~8.3.0", - "ext-json": "*", - "ext-openssl": "*", - "ext-pdo": "*" - }, - "platform-dev": [], - "platform-overrides": { - "php": "8.3.0" - }, - "plugin-api-version": "2.6.0" -} diff --git a/config/.gitignore b/config/.gitignore index 96043010..d5ce9da0 100644 --- a/config/.gitignore +++ b/config/.gitignore @@ -1 +1,2 @@ development.config.php +database.php diff --git a/config/autoload/.gitignore b/config/autoload/.gitignore index 1a83fda6..65f817e9 100644 --- a/config/autoload/.gitignore +++ b/config/autoload/.gitignore @@ -1,2 +1,4 @@ +*.production.php local.php -*.local.php +development.config.global.php +development.local.php diff --git a/config/autoload/cors.develope.php b/config/autoload/cors.develope.php deleted file mode 100644 index 19c8b962..00000000 --- a/config/autoload/cors.develope.php +++ /dev/null @@ -1,13 +0,0 @@ - [ - 'allowed_origins' => ['http://localhost:5173','http://localhost'], - 'allowed_headers' => ['x-ident', 'Authorization', 'Authentication', 'Content-Type'], // No custom headers allowed - 'allowed_max_age' => '3600', // 60 minutes - 'credentials_allowed' => true, // Disallow cookies - 'exposed_headers' => [], // No headers are exposed - ], -]; diff --git a/config/autoload/cors.global.php b/config/autoload/cors.global.php deleted file mode 100644 index 2c9c2000..00000000 --- a/config/autoload/cors.global.php +++ /dev/null @@ -1,13 +0,0 @@ - [ - 'allowed_origins' => [ConfigurationInterface::ANY_ORIGIN], - 'allowed_headers' => ['x-ident', 'Authorization', 'Authentication', 'Content-Type'], // No custom headers allowed - 'allowed_max_age' => '3600', // 60 minutes - 'credentials_allowed' => true, // Disallow cookies - 'exposed_headers' => [], // No headers are exposed - ], -]; diff --git a/config/autoload/database.action.php b/config/autoload/database.action.php deleted file mode 100644 index 13ee96f3..00000000 --- a/config/autoload/database.action.php +++ /dev/null @@ -1,20 +0,0 @@ - [ - 'driver' => 'mysql', - 'host' => '127.0.0.1', - 'port' => '3306', - 'user' => 'dev', - 'password' => 'dev', - 'dbname' => 'db', - 'charset' => 'utf8mb4', - 'defaultTableOptions' => [ - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_general_ci', - 'engine' => 'InnoDB', - ], - 'error' => PDO::ERRMODE_EXCEPTION, - 'emulate_prepares' => false, - ] -]; diff --git a/config/autoload/database.develope.php b/config/autoload/database.develope.php deleted file mode 100644 index 08271b9e..00000000 --- a/config/autoload/database.develope.php +++ /dev/null @@ -1,20 +0,0 @@ - [ - 'driver' => 'mysql', - 'host' => 'database', - 'port' => '3306', - 'user' => 'dev', - 'password' => 'dev', - 'dbname' => 'db', - 'charset' => 'utf8mb4', - 'defaultTableOptions' => [ - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_general_ci', - 'engine' => 'InnoDB', - ], - 'error' => PDO::ERRMODE_EXCEPTION, - 'emulate_prepares' => false, - ] -]; diff --git a/config/autoload/database.global.php.dist b/config/autoload/database.global.php.dist deleted file mode 100644 index 1152a4f8..00000000 --- a/config/autoload/database.global.php.dist +++ /dev/null @@ -1,20 +0,0 @@ - [ - 'driver' => 'driver', - 'host' => 'host', - 'port' => 'port', - 'user' => 'user', - 'password' => 'password', - 'dbname' => 'dbname', - 'charset' => 'utf8mb4', - 'defaultTableOptions' => [ - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_general_ci', - 'engine' => 'InnoDB', - ], - 'error' => PDO::ERRMODE_EXCEPTION, - 'emulate_prepares' => false, - ] -]; diff --git a/config/autoload/database.testing.php b/config/autoload/database.testing.php deleted file mode 100644 index 73522bc0..00000000 --- a/config/autoload/database.testing.php +++ /dev/null @@ -1,20 +0,0 @@ - [ - 'driver' => 'mysql', - 'host' => 'database-testing', - 'port' => '3306', - 'user' => 'dev', - 'password' => 'dev', - 'dbname' => 'db', - 'charset' => 'utf8mb4', - 'defaultTableOptions' => [ - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_general_ci', - 'engine' => 'InnoDB', - ], - 'error' => PDO::ERRMODE_EXCEPTION, - 'emulate_prepares' => false, - ] -]; diff --git a/config/autoload/dependencies.action.php b/config/autoload/dependencies.action.php deleted file mode 100644 index 9ab17fbb..00000000 --- a/config/autoload/dependencies.action.php +++ /dev/null @@ -1,25 +0,0 @@ - [ - 'aliases' => [ - PDO::class => 'database', - Envms\FluentPDO\Query::class => 'query', - ownHackathon\Core\Utils\UuidFactoryInterface::class => 'uuid', - Psr\Log\LoggerInterface::class => 'logger', - Symfony\Component\Mailer\MailerInterface::class => 'mailer', - ], - 'invokables' => [ - ], - 'factories' => [ - 'database' => ownHackathon\Core\Factory\DatabaseFactory::class, - 'query' => ownHackathon\Core\Factory\QueryFactory::class, - 'logger' => LoggerFactory::class, - 'uuid' => ownHackathon\Core\Factory\UuidFactory::class, - 'mailer' => NullMailerFactory::class, - ], - ], -]; diff --git a/config/autoload/dependencies.global.php b/config/autoload/dependencies.global.php deleted file mode 100644 index c2d581e5..00000000 --- a/config/autoload/dependencies.global.php +++ /dev/null @@ -1,46 +0,0 @@ - [ - // Use 'aliases' to alias a service name to another service. The - // key is the alias name, the value is the service to which it points. - 'aliases' => [ - PDO::class => 'database', - Envms\FluentPDO\Query::class => 'query', - Psr\Log\LoggerInterface::class => 'logger', - ownHackathon\Core\Utils\UuidFactoryInterface::class => 'uuid', - Symfony\Component\Mailer\MailerInterface::class => 'mailer', - ], - // Use 'invokables' for constructor-less services, or services that do - // not require arguments to the constructor. Map a service name to the - // class name. - 'invokables' => [ - ], - // Use 'factories' for services provided by callbacks/factory classes. - 'factories' => [ - 'database' => DatabaseFactory::class, - 'query' => QueryFactory::class, - 'logger' => LoggerFactory::class, - 'uuid' => UuidFactory::class, - 'mailer' => MailFactory::class, - ], - 'delegators' => [ - ErrorHandler::class => [ - LoggingErrorListenerDelegatorFactory::class, - ], - ], - ], -]; diff --git a/config/autoload/dependencies.testing.php b/config/autoload/dependencies.testing.php deleted file mode 100644 index cd7486b8..00000000 --- a/config/autoload/dependencies.testing.php +++ /dev/null @@ -1,24 +0,0 @@ - [ - 'aliases' => [ - PDO::class => 'database', - Envms\FluentPDO\Query::class => 'query', - ownHackathon\Core\Utils\UuidFactoryInterface::class => 'uuid', - Psr\Log\LoggerInterface::class => 'logger', - Symfony\Component\Mailer\MailerInterface::class => 'mailer', - ], - 'invokables' => [ - ], - 'factories' => [ - 'database' => ownHackathon\Core\Factory\DatabaseFactory::class, - 'query' => ownHackathon\Core\Factory\QueryFactory::class, - 'logger' => LoggerFactory::class, - 'uuid' => ownHackathon\Core\Factory\UuidFactory::class, - 'mailer' => ownHackathon\FunctionalTest\Mock\NullMailerFactory::class, - ], - ], -]; diff --git a/config/autoload/development.local.php.dist b/config/autoload/development.local.php.dist deleted file mode 100644 index 4aca5a7c..00000000 --- a/config/autoload/development.local.php.dist +++ /dev/null @@ -1,35 +0,0 @@ - [ - 'factories' => [ - ErrorResponseGenerator::class => Container\WhoopsErrorResponseGeneratorFactory::class, - 'Mezzio\Whoops' => Container\WhoopsFactory::class, - 'Mezzio\WhoopsPageHandler' => Container\WhoopsPageHandlerFactory::class, - ], - ], - 'whoops' => [ - 'json_exceptions' => [ - 'display' => true, - 'show_trace' => true, - 'ajax_only' => true, - ], - ], -]; diff --git a/config/autoload/local.php.dist b/config/autoload/local.php.dist deleted file mode 100644 index db858d77..00000000 --- a/config/autoload/local.php.dist +++ /dev/null @@ -1,13 +0,0 @@ - [ - 'path' => __DIR__ . '/../../data/log/', - ] -]; diff --git a/config/autoload/mail.develope.php b/config/autoload/mail.develope.php deleted file mode 100644 index 7a17007e..00000000 --- a/config/autoload/mail.develope.php +++ /dev/null @@ -1,8 +0,0 @@ - [ - 'dsn' => 'smtp://mailhog:1025', - 'from' => 'hackathon@exdrals.de', - ], -]; diff --git a/config/autoload/mail.testing.php b/config/autoload/mail.testing.php deleted file mode 100644 index 7a17007e..00000000 --- a/config/autoload/mail.testing.php +++ /dev/null @@ -1,8 +0,0 @@ - [ - 'dsn' => 'smtp://mailhog:1025', - 'from' => 'hackathon@exdrals.de', - ], -]; diff --git a/config/autoload/mezzio.global.php b/config/autoload/mezzio.global.php deleted file mode 100644 index 64d701e7..00000000 --- a/config/autoload/mezzio.global.php +++ /dev/null @@ -1,24 +0,0 @@ - true, - - // Enable debugging; typically used to provide debugging information within templates. - 'debug' => false, - 'mezzio' => [ - // Provide templates for the error handling middleware to use when - // generating responses. - 'error_handler' => [ - 'template_404' => 'error::404', - 'template_error' => 'error::error', - ], - ], -]; diff --git a/config/autoload/migrations.action.php b/config/autoload/migrations.action.php deleted file mode 100644 index 166dbab1..00000000 --- a/config/autoload/migrations.action.php +++ /dev/null @@ -1,23 +0,0 @@ - [ - 'table_storage' => [ - 'table_name' => 'MigrationVersions', - 'version_column_name' => 'version', - 'version_column_length' => 192, - 'executed_at_column_name' => 'executedAt', - 'execution_time_column_name' => 'executionTime', - ], - - 'migrations_paths' => [ - 'Migrations' => __DIR__ . '/../../database/migrations', - 'TestDataMigrations' => __DIR__ . '/../../tests/FunctionalTest/database/migrations', - ], - - 'all_or_nothing' => true, - 'transactional' => true, - 'check_database_platform' => true, - 'organize_migrations' => 'none', - ], -]; diff --git a/config/autoload/migrations.develope.php b/config/autoload/migrations.develope.php deleted file mode 100644 index 0626d103..00000000 --- a/config/autoload/migrations.develope.php +++ /dev/null @@ -1,22 +0,0 @@ - [ - 'table_storage' => [ - 'table_name' => 'MigrationVersions', - 'version_column_name' => 'version', - 'version_column_length' => 192, - 'executed_at_column_name' => 'executedAt', - 'execution_time_column_name' => 'executionTime', - ], - - 'migrations_paths' => [ - 'Migrations' => __DIR__ . '/../../database/migrations', - ], - - 'all_or_nothing' => true, - 'transactional' => true, - 'check_database_platform' => true, - 'organize_migrations' => 'none', - ], -]; diff --git a/config/autoload/migrations.global.php b/config/autoload/migrations.global.php deleted file mode 100644 index 0626d103..00000000 --- a/config/autoload/migrations.global.php +++ /dev/null @@ -1,22 +0,0 @@ - [ - 'table_storage' => [ - 'table_name' => 'MigrationVersions', - 'version_column_name' => 'version', - 'version_column_length' => 192, - 'executed_at_column_name' => 'executedAt', - 'execution_time_column_name' => 'executionTime', - ], - - 'migrations_paths' => [ - 'Migrations' => __DIR__ . '/../../database/migrations', - ], - - 'all_or_nothing' => true, - 'transactional' => true, - 'check_database_platform' => true, - 'organize_migrations' => 'none', - ], -]; diff --git a/config/autoload/migrations.testing.php b/config/autoload/migrations.testing.php deleted file mode 100644 index 166dbab1..00000000 --- a/config/autoload/migrations.testing.php +++ /dev/null @@ -1,23 +0,0 @@ - [ - 'table_storage' => [ - 'table_name' => 'MigrationVersions', - 'version_column_name' => 'version', - 'version_column_length' => 192, - 'executed_at_column_name' => 'executedAt', - 'execution_time_column_name' => 'executionTime', - ], - - 'migrations_paths' => [ - 'Migrations' => __DIR__ . '/../../database/migrations', - 'TestDataMigrations' => __DIR__ . '/../../tests/FunctionalTest/database/migrations', - ], - - 'all_or_nothing' => true, - 'transactional' => true, - 'check_database_platform' => true, - 'organize_migrations' => 'none', - ], -]; diff --git a/config/autoload/routes.global.php b/config/autoload/routes.global.php deleted file mode 100644 index 30521647..00000000 --- a/config/autoload/routes.global.php +++ /dev/null @@ -1,29 +0,0 @@ - [ - //.. - 'invokables' => [ - /* ... */ - // Comment out or remove the following line: - // Mezzio\Router\RouterInterface::class => Mezzio\Router\FastRouteRouter::class, - /* ... */ - ], - 'factories' => [ - /* ... */ - // Add this line; the specified factory now creates the router instance: - /* ... */ - ], - ], - - // Add the following to enable caching support: - 'router' => [ - 'fastroute' => [ - // Enable caching support: - 'cache_enabled' => false, - // Optional (but recommended) cache file path: - 'cache_file' => './../../data/cache/fastroute.php.cache', - ], - ], - - 'routes' => [ /* ... */], -]; diff --git a/config/autoload/token.action.php b/config/autoload/token.action.php deleted file mode 100644 index 97d7be24..00000000 --- a/config/autoload/token.action.php +++ /dev/null @@ -1,20 +0,0 @@ - [ - 'refresh' => [ - 'key' => 'ixo>+W%!Rf/\@)m2UMok:/A_gL 'HS512', - 'duration' => 60 * 60 * 24 * 7 * 12, - 'iss' => 'localhost', - 'aud' => 'localhost', - ], - 'access' => [ - 'key' => 'b:?Y@5JCWF:yi{o>irc(3$HFcR-#b\SA', - 'algorithmus' => 'HS512', - 'duration' => 60 * 15, - 'iss' => 'localhost', - 'aud' => 'localhost', - ], - ], -]; diff --git a/config/autoload/token.develope.php b/config/autoload/token.develope.php deleted file mode 100644 index 97d7be24..00000000 --- a/config/autoload/token.develope.php +++ /dev/null @@ -1,20 +0,0 @@ - [ - 'refresh' => [ - 'key' => 'ixo>+W%!Rf/\@)m2UMok:/A_gL 'HS512', - 'duration' => 60 * 60 * 24 * 7 * 12, - 'iss' => 'localhost', - 'aud' => 'localhost', - ], - 'access' => [ - 'key' => 'b:?Y@5JCWF:yi{o>irc(3$HFcR-#b\SA', - 'algorithmus' => 'HS512', - 'duration' => 60 * 15, - 'iss' => 'localhost', - 'aud' => 'localhost', - ], - ], -]; diff --git a/config/autoload/token.global.php.dist b/config/autoload/token.global.php.dist deleted file mode 100644 index ac8d71d3..00000000 --- a/config/autoload/token.global.php.dist +++ /dev/null @@ -1,20 +0,0 @@ - [ - 'refresh' => [ - 'key' => 'token secret', - 'algorithmus' => 'HS512', - 'duration' => 60 * 60 * 24 * 7 * 12, - 'iss' => 'Issuer of the token', - 'aud' => 'recipients of the token', - ], - 'access' => [ - 'key' =>'token secret', - 'algorithmus' => 'HS512', - 'duration' => 60 * 5, - 'iss' => 'Issuer of the token', - 'aud' => 'recipients of the token', - ], - ], -]; diff --git a/config/autoload/token.testing.php b/config/autoload/token.testing.php deleted file mode 100644 index 97d7be24..00000000 --- a/config/autoload/token.testing.php +++ /dev/null @@ -1,20 +0,0 @@ - [ - 'refresh' => [ - 'key' => 'ixo>+W%!Rf/\@)m2UMok:/A_gL 'HS512', - 'duration' => 60 * 60 * 24 * 7 * 12, - 'iss' => 'localhost', - 'aud' => 'localhost', - ], - 'access' => [ - 'key' => 'b:?Y@5JCWF:yi{o>irc(3$HFcR-#b\SA', - 'algorithmus' => 'HS512', - 'duration' => 60 * 15, - 'iss' => 'localhost', - 'aud' => 'localhost', - ], - ], -]; diff --git a/config/config.php b/config/config.php deleted file mode 100644 index d3c582bc..00000000 --- a/config/config.php +++ /dev/null @@ -1,54 +0,0 @@ - __DIR__ . '/../data/cache/config-cache.php', -]; - -$aggregator = new ConfigAggregator([ - \Mezzio\Cors\ConfigProvider::class, - \Laminas\InputFilter\ConfigProvider::class, - \Laminas\Filter\ConfigProvider::class, - \Laminas\Validator\ConfigProvider::class, - \Mezzio\Helper\ConfigProvider::class, - \Mezzio\Tooling\ConfigProvider::class, - \Mezzio\Router\FastRouteRouter\ConfigProvider::class, - \Laminas\HttpHandlerRunner\ConfigProvider::class, - // Include cache configuration - new ArrayProvider($cacheConfig), - \Mezzio\ConfigProvider::class, - \Mezzio\Router\ConfigProvider::class, - \Laminas\Diactoros\ConfigProvider::class, - // Swoole config to overwrite some services (if installed) - class_exists(\Mezzio\Swoole\ConfigProvider::class) - ? \Mezzio\Swoole\ConfigProvider::class - : function (): array { - return []; - }, - // Default App module config - ownHackathon\Core\ConfigProvider::class, - ownHackathon\App\ConfigProvider::class, - // Load application config in a pre-defined order in such a way that local settings - // overwrite global settings. (Loaded as first to last): - // - `global.php` - // - `*.global.php` - // - `local.php` - // - `*.local.php` - new PhpFileProvider( - realpath(__DIR__) . sprintf( - '/autoload/{,*.}{global,local,%s}.php', - getenv('APP_ENV') ?: 'production' - ) - ), - // Load development config if it exists - new PhpFileProvider(realpath(__DIR__) . '/development.config.php'), -], $cacheConfig['config_cache_path']); - -return $aggregator->getMergedConfig(); diff --git a/config/container.php b/config/container.php deleted file mode 100644 index b7358d18..00000000 --- a/config/container.php +++ /dev/null @@ -1,14 +0,0 @@ - true, - ConfigAggregator::ENABLE_CACHE => false, -]; diff --git a/config/migrations.template.tpl b/config/migrations.template.tpl deleted file mode 100644 index 83fc0322..00000000 --- a/config/migrations.template.tpl +++ /dev/null @@ -1,19 +0,0 @@ - extends AbstractMigration -{ - public function up(Schema $schema): void - { - - } - - public function down(Schema $schema): void - { - - } -} diff --git a/config/pipeline.php b/config/pipeline.php deleted file mode 100644 index a84efb9f..00000000 --- a/config/pipeline.php +++ /dev/null @@ -1,50 +0,0 @@ -pipe('/api', [ - ErrorHandler::class, - ServerUrlMiddleware::class, - BodyParamsMiddleware::class, - - CorsMiddleware::class, - RouteMiddleware::class, - - ImplicitHeadMiddleware::class, - ImplicitOptionsMiddleware::class, - MethodNotAllowedMiddleware::class, - - UrlHelperMiddleware::class, - - ClientIdentificationMiddleware::class, - RequestAuthenticationMiddleware::class, - - DispatchMiddleware::class, - - RouteNotFoundMiddleware::class, - NotFoundHandler::class, - ]); -}; diff --git a/config/routes.php b/config/routes.php deleted file mode 100644 index 0945bb26..00000000 --- a/config/routes.php +++ /dev/null @@ -1,82 +0,0 @@ -get( - path: '/ping[/]', - middleware: [ - App\Handler\PingHandler::class, - ], - name: RouteName::PING - ); - $app->get( - path: '/token/refresh[/]', - middleware: [ - App\Middleware\Token\RefreshTokenValidationMiddleware::class, - App\Middleware\Token\RefreshTokenDatabaseExistenceMiddleware::class, - App\Middleware\Token\RefreshTokenMatchClientIdentificationMiddleware::class, - App\Middleware\Token\RefreshTokenAccountMiddleware::class, - App\Middleware\Token\GenerateAccessTokenMiddleware::class, - App\Handler\Account\AccessTokenHandler::class, - ], - name: RouteName::ACCESS_TOKEN_REFRESH - ); - $app->post( - path: '/account/authentication[/]', - middleware: [ - App\Middleware\Account\LoginAuthentication\AuthenticationConditionsMiddleware::class, - App\Middleware\Account\LoginAuthentication\AuthenticationValidationMiddleware::class, - App\Middleware\Account\LoginAuthentication\AuthenticationMiddleware::class, - App\Middleware\Token\GenerateRefreshTokenMiddleware::class, - App\Middleware\Token\GenerateAccessTokenMiddleware::class, - App\Middleware\Account\LoginAuthentication\PersistAuthenticationMiddleware::class, - App\Handler\Account\AuthenticationHandler::class, - ], - name: RouteName::ACCOUNT_AUTHENTICATE - ); - - $app->post( - path: '/account', - middleware: [ - App\Middleware\Account\Validation\EmailInputValidatorMiddleware::class, - App\Middleware\Account\RegisterMiddleware::class, - App\Handler\Account\AccountRegisterHandler::class, - ], - name: RouteName::ACCOUNT_CREATE - ); - - $app->post( - path: '/account/activation/[{token}[/]]', - middleware: [ - App\Middleware\Account\Validation\ActivationInputValidatorMiddleware::class, - App\Middleware\Account\ActivationMiddleware::class, - App\Handler\Account\AccountActivationHandler::class, - ], - name: RouteName::ACCOUNT_ACTIVATION - ); - - $app->post( - path: '/account/password/forgotten[/]', - middleware: [ - App\Middleware\Account\Validation\EmailInputValidatorMiddleware::class, - App\Middleware\Account\PasswordForgottenMiddleware::class, - App\Handler\Account\AccountPasswordForgottenHandler::class, - ], - name: RouteName::ACCOUNT_PASSWORD_FORGOTTEN - ); - - $app->patch( - path: '/account/password/[{token}[/]]', - middleware: [ - App\Middleware\Account\Validation\PasswordInputValidatorMiddleware::class, - App\Middleware\Account\PasswordChangeMiddleware::class, - App\Handler\Account\AccountPasswordHandler::class, - ], - name: RouteName::ACCOUNT_PASSWORD_SET - ); -}; diff --git a/database/.gitignore b/database/.gitignore index a37b1e37..44dbbcda 100644 --- a/database/.gitignore +++ b/database/.gitignore @@ -1,2 +1 @@ database.sqlite -*Ignore.php diff --git a/database/migrations/Version20231103223745_CreateAccountTable.php b/database/migrations/Version20231103223745_CreateAccountTable.php deleted file mode 100644 index 8b04c336..00000000 --- a/database/migrations/Version20231103223745_CreateAccountTable.php +++ /dev/null @@ -1,33 +0,0 @@ -createTable('Account'); - - $table->addColumn('id', Types::INTEGER, ['autoincrement' => true, 'unsigned' => true,]); - $table->addColumn('uuid', Types::STRING, ['length' => 32,]); - $table->addColumn('name', Types::STRING, ['length' => 64, 'notnull' => false,]); - $table->addColumn('password', Types::STRING, ['length' => 255, 'notnull' => false,]); - $table->addColumn('email', Types::STRING, ['length' => 512,]); - $table->addColumn('registeredAt', Types::DATETIME_IMMUTABLE, ['default' => 'CURRENT_TIMESTAMP',]); - $table->addColumn('lastActionAt', Types::DATETIME_IMMUTABLE, ['default' => 'CURRENT_TIMESTAMP',]); - - $table->setPrimaryKey(['id']); - $table->addUniqueIndex(['uuid'], 'account_uuid_UNIQUE'); - $table->addUniqueIndex(['name'], 'account_name_UNIQUE'); - $table->addUniqueIndex(['email'], 'account_email_UNIQUE'); - } - - public function down(Schema $schema): void - { - $schema->dropTable('Account'); - } -} diff --git a/database/migrations/Version20231103224045_CreateAccountAccessAuthTable.php b/database/migrations/Version20231103224045_CreateAccountAccessAuthTable.php deleted file mode 100644 index bd4486d7..00000000 --- a/database/migrations/Version20231103224045_CreateAccountAccessAuthTable.php +++ /dev/null @@ -1,32 +0,0 @@ -createTable('AccountAccessAuth'); - - $table->addColumn('id', Types::INTEGER, ['autoincrement' => true, 'unsigned' => true,]); - $table->addColumn('userId', Types::INTEGER, ['unsigned' => true,]); - $table->addColumn('label', Types::STRING, ['length' => 64, 'default' => 'default']); - $table->addColumn('refreshToken', Types::STRING, ['length' => 512,]); - $table->addColumn('userAgent', Types::STRING, ['length' => 255, 'default' => 'unknown']); - $table->addColumn('clientIdentHash', Types::STRING, ['length' => 128,]); - $table->addColumn('createdAt', Types::DATETIME_IMMUTABLE, ['default' => 'CURRENT_TIMESTAMP',]); - - $table->setPrimaryKey(['id']); - $table->addUniqueIndex(['refreshToken'], 'account_access_auth_refresh_token_UNIQUE'); - $table->addUniqueIndex(['clientIdentHash'], 'account_access_auth_client_ident_hash_UNIQUE'); - } - - public function down(Schema $schema): void - { - $schema->dropTable('AccountAccessAuth'); - } -} diff --git a/database/migrations/Version20231103224046_CreateAccountActivationTable.php b/database/migrations/Version20231103224046_CreateAccountActivationTable.php deleted file mode 100644 index a2ef6c01..00000000 --- a/database/migrations/Version20231103224046_CreateAccountActivationTable.php +++ /dev/null @@ -1,28 +0,0 @@ -createTable('AccountActivation'); - - $table->addColumn('id', Types::INTEGER, ['autoincrement' => true, 'unsigned' => true,]); - $table->addColumn('email', Types::STRING, ['length' => 512,]); - $table->addColumn('token', Types::STRING, ['length' => 32,]); - $table->addColumn('createdAt', Types::DATETIME_IMMUTABLE, ['default' => 'CURRENT_TIMESTAMP',]); - - $table->setPrimaryKey(['id']); - $table->addUniqueIndex(['token'], 'account_activation_token_UNIQUE'); - } - - public function down(Schema $schema): void - { - $schema->dropTable('AccountActivation'); - } -} diff --git a/database/migrations/Version20231103224047_CreateTokenTable.php b/database/migrations/Version20231103224047_CreateTokenTable.php deleted file mode 100644 index 026030d9..00000000 --- a/database/migrations/Version20231103224047_CreateTokenTable.php +++ /dev/null @@ -1,29 +0,0 @@ -createTable('Token'); - - $table->addColumn('id', Types::INTEGER, ['autoincrement' => true, 'unsigned' => true,]); - $table->addColumn('accountId', Types::INTEGER, ['unsigned' => true,]); - $table->addColumn('token', Types::STRING, ['length' => 32,]); - $table->addColumn('tokenType', Types::SMALLINT, ['unsigned' => true, 'length' => 2,]); - $table->addColumn('createdAt', Types::DATETIME_IMMUTABLE, ['default' => 'CURRENT_TIMESTAMP',]); - - $table->setPrimaryKey(['id']); - $table->addUniqueIndex(['token'], 'token_token_UNIQUE'); - } - - public function down(Schema $schema): void - { - $schema->dropTable('Token'); - } -} diff --git a/docker-compose.yml b/docker-compose.yml index af55b61b..d1f8c1a0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,6 @@ services: container_name: hackathon-php user: "${USERMAP_UID:-1000}:${USERMAP_GID:-1000}" image: "ghcr.io/ownhackathon/hackathon-api-php:latest" - env_file: ".env" volumes: - ./:/var/www/html - ./docker/php/php-ini-overrides.ini:/usr/local/etc/php/conf.d/extra.ini diff --git a/docker/php/php-ini-overrides.ini b/docker/php/php-ini-overrides.ini index 92aa2697..68c41dad 100644 --- a/docker/php/php-ini-overrides.ini +++ b/docker/php/php-ini-overrides.ini @@ -5,4 +5,3 @@ xdebug.discover_client_host=On error_reporting=E_ALL error_log=/var/log/php.log sendmail_path = /usr/local/bin/mhsendmail -memory_limit = 1024M diff --git a/phpcs.xml b/phpcs.xml deleted file mode 100644 index 7df485db..00000000 --- a/phpcs.xml +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - - - - - src/ - tests/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - src - - */vendor/* - */config/* - */database/* - */ConfigProvider.php - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/phpstan.neon b/phpstan.neon deleted file mode 100644 index cd68152e..00000000 --- a/phpstan.neon +++ /dev/null @@ -1,17 +0,0 @@ -parameters: - level: 6 - paths: - - src - ignoreErrors: - - identifier: missingType.iterableValue - - identifier: missingType.generics - - '#^Dead catch - PDOException is never thrown in the try block.$#' - bootstrapFiles: - - constants.php - tips: - treatPhpDocTypesAsCertain: false -rules: - - PHPStan\Rules\Functions\ReturnNullsafeByRefRule -includes: - - vendor/phpstan/phpstan-deprecation-rules/rules.neon - - vendor/phpstan/phpstan/conf/bleedingEdge.neon diff --git a/phpunit_functionaltest.xml b/phpunit_functionaltest.xml deleted file mode 100644 index 34759303..00000000 --- a/phpunit_functionaltest.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - tests/FunctionalTest - - - diff --git a/phpunit_unittest.xml b/phpunit_unittest.xml deleted file mode 100644 index 20b50c0a..00000000 --- a/phpunit_unittest.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - tests/UnitTest/AppTest - - - tests/UnitTest/CoreTest - - - tests/UnitTest/GameTest - - - - - - - - - - - src - - - diff --git a/public/api/docs/index.html b/public/api/doc/index.html similarity index 78% rename from public/api/docs/index.html rename to public/api/doc/index.html index cad62401..39bbd0fb 100644 --- a/public/api/docs/index.html +++ b/public/api/doc/index.html @@ -7,13 +7,13 @@ name="description" content="SwaggerUI" /> - SwaggerUI - + Hackathon API Overview +
- - + +