From 7c74efff5c68d009188f67aaf3d06b68ee868242 Mon Sep 17 00:00:00 2001 From: Volodymyr Komarov Date: Sat, 22 Apr 2023 12:51:29 +0300 Subject: [PATCH 1/2] Add limitation for unconfirmed profile on API level --- app/locale/en/messages.php | 1 + app/locale/uk/messages.php | 1 + app/src/Controller/AuthAwareController.php | 23 +++++---- app/src/Controller/Tags/TagsController.php | 6 +++ .../Wallets/Charges/ChargesController.php | 6 +++ .../Controller/Wallets/UsersController.php | 4 ++ .../Controller/Wallets/WalletsController.php | 6 +++ .../Exception/UnconfirmedProfileException.php | 9 ++++ app/src/Exception/ViewRenderer.php | 10 ++++ tests/Factories/UserFactory.php | 2 +- .../Controller/Tags/TagsControllerTest.php | 41 ++++++++++++++++ .../Wallets/UsersControllerTest.php | 38 +++++++++++++++ .../Wallets/WalletsControllerTest.php | 47 +++++++++++++++++++ 13 files changed, 185 insertions(+), 9 deletions(-) create mode 100644 app/src/Exception/UnconfirmedProfileException.php diff --git a/app/locale/en/messages.php b/app/locale/en/messages.php index 52f1353d..72523d90 100644 --- a/app/locale/en/messages.php +++ b/app/locale/en/messages.php @@ -10,6 +10,7 @@ 'error_wallet_does_not_exists' => 'One or more wallets does not exists.', 'error_nick_name_claimed' => 'Nick name already claimed.', 'error_value_is_not_unique' => 'Value should be unique.', + 'error_profile_not_confirmed' => 'You are not allowed to perform this action as your profile is not confirmed.', 'email_confirmation_confirm_failure' => 'Unable to confirm your email.', 'email_confirmation_ok' => 'Your email has been confirmed.', diff --git a/app/locale/uk/messages.php b/app/locale/uk/messages.php index 96a0c55c..69ff77cc 100644 --- a/app/locale/uk/messages.php +++ b/app/locale/uk/messages.php @@ -10,6 +10,7 @@ 'error_wallet_does_not_exists' => 'Один чи більше гаманець більше не існує.', 'error_nick_name_claimed' => 'Нікнейм вже зайнято.', 'error_value_is_not_unique' => 'Значення має бути унікальним.', + 'error_profile_not_confirmed' => 'Вам не дозволено здійснити бажану операцію, так як Ваш профіль не підтверджено.', 'email_confirmation_confirm_failure' => 'Неможливо підтвердити ваш email.', 'email_confirmation_ok' => 'Ваш email було підтверджено.', diff --git a/app/src/Controller/AuthAwareController.php b/app/src/Controller/AuthAwareController.php index a4c6c02e..bc3f3a17 100644 --- a/app/src/Controller/AuthAwareController.php +++ b/app/src/Controller/AuthAwareController.php @@ -1,22 +1,20 @@ getActor(); @@ -27,4 +25,13 @@ public function __construct(AuthScope $auth) $this->user = $user; } + + protected function verifyIsProfileConfirmed(): void + { + if ($this->user->isEmailConfirmed) { + return; + } + + throw new UnconfirmedProfileException($this->say('error_profile_not_confirmed')); + } } diff --git a/app/src/Controller/Tags/TagsController.php b/app/src/Controller/Tags/TagsController.php index 142fa0c8..7ce49311 100644 --- a/app/src/Controller/Tags/TagsController.php +++ b/app/src/Controller/Tags/TagsController.php @@ -44,6 +44,8 @@ public function list(): ResponseInterface #[Route(route: '/tags', name: 'tag.create', methods: 'POST', group: 'auth')] public function create(CreateRequest $request): ResponseInterface { + $this->verifyIsProfileConfirmed(); + try { $tag = $this->tagService->create($request->createTag(), $this->user); } catch (\Throwable $exception) { @@ -59,6 +61,8 @@ public function create(CreateRequest $request): ResponseInterface #[Route(route: '/tags/', name: 'tag.update', methods: 'PUT', group: 'auth')] public function update(string $id, UpdateRequest $request): ResponseInterface { + $this->verifyIsProfileConfirmed(); + $tag = $this->tagRepository->findByPKByUserPK((int) $id, (int) $this->user->id); if (! $tag instanceof Tag) { @@ -90,6 +94,8 @@ public function update(string $id, UpdateRequest $request): ResponseInterface #[Route(route: '/tags/', name: 'tag.delete', methods: 'DELETE', group: 'auth')] public function delete(string $id): ResponseInterface { + $this->verifyIsProfileConfirmed(); + $tag = $this->tagRepository->findByPKByUserPK((int) $id, (int) $this->user->id); if (! $tag instanceof Tag) { diff --git a/app/src/Controller/Wallets/Charges/ChargesController.php b/app/src/Controller/Wallets/Charges/ChargesController.php index 51ab189b..35da86a6 100644 --- a/app/src/Controller/Wallets/Charges/ChargesController.php +++ b/app/src/Controller/Wallets/Charges/ChargesController.php @@ -80,6 +80,8 @@ public function graph(string $walletId, InputManager $input, ChargeAmountGraph $ #[Route(route: '/wallets//charges', name: 'wallet.charge.create', methods: 'POST', group: 'auth')] public function create(string $walletId, CreateRequest $request): ResponseInterface { + $this->verifyIsProfileConfirmed(); + $wallet = $this->walletRepository->findByPKByUserPK((int) $walletId, (int) $this->user->id); if (! $wallet instanceof Wallet) { @@ -124,6 +126,8 @@ public function create(string $walletId, CreateRequest $request): ResponseInterf #[Route(route: '/wallets//charges/', name: 'wallet.charge.update', methods: 'PUT', group: 'auth')] public function update(string $walletId, string $chargeId, CreateRequest $request): ResponseInterface { + $this->verifyIsProfileConfirmed(); + $wallet = $this->walletRepository->findByPKByUserPK((int) $walletId, (int) $this->user->id); if (! $wallet instanceof Wallet) { @@ -174,6 +178,8 @@ public function update(string $walletId, string $chargeId, CreateRequest $reques #[Route(route: '/wallets//charges/', name: 'wallet.charge.delete', methods: 'DELETE', group: 'auth')] public function delete(string $walletId, string $chargeId): ResponseInterface { + $this->verifyIsProfileConfirmed(); + $wallet = $this->walletRepository->findByPKByUserPK((int) $walletId, (int) $this->user->id); if (! $wallet instanceof Wallet) { diff --git a/app/src/Controller/Wallets/UsersController.php b/app/src/Controller/Wallets/UsersController.php index ed8b9277..f6f55c99 100644 --- a/app/src/Controller/Wallets/UsersController.php +++ b/app/src/Controller/Wallets/UsersController.php @@ -48,6 +48,8 @@ public function users(string $id): ResponseInterface #[Route(route: '/wallets//users/', name: 'wallet.users.add', methods: 'PATCH', group: 'auth')] public function patch(string $id, string $userId): ResponseInterface { + $this->verifyIsProfileConfirmed(); + $wallet = $this->walletRepository->findByPKByUserPKWithUsers((int) $id, (int) $this->user->id); if (! $wallet instanceof Wallet) { @@ -84,6 +86,8 @@ public function patch(string $id, string $userId): ResponseInterface #[Route(route: '/wallets//users/', name: 'wallet.users.delete', methods: 'DELETE', group: 'auth')] public function delete(string $id, string $userId): ResponseInterface { + $this->verifyIsProfileConfirmed(); + $wallet = $this->walletRepository->findByPKByUserPKWithUsers((int) $id, (int) $this->user->id); if (! $wallet instanceof Wallet) { diff --git a/app/src/Controller/Wallets/WalletsController.php b/app/src/Controller/Wallets/WalletsController.php index a77ec97c..e2713939 100644 --- a/app/src/Controller/Wallets/WalletsController.php +++ b/app/src/Controller/Wallets/WalletsController.php @@ -38,6 +38,8 @@ public function __construct( #[Route(route: '/wallets', name: 'wallet.create', methods: 'POST', group: 'auth')] public function create(CreateRequest $request): ResponseInterface { + $this->verifyIsProfileConfirmed(); + try { $wallet = $this->walletService->create($request->createWallet(), $this->user); } catch (\Throwable $exception) { @@ -53,6 +55,8 @@ public function create(CreateRequest $request): ResponseInterface #[Route(route: '/wallets/', name: 'wallet.update', methods: 'PUT', group: 'auth')] public function update(string $id, UpdateRequest $request): ResponseInterface { + $this->verifyIsProfileConfirmed(); + $wallet = $this->walletRepository->findByPKByUserPK((int) $id, (int) $this->user->id); if (! $wallet instanceof Wallet) { @@ -106,6 +110,8 @@ public function update(string $id, UpdateRequest $request): ResponseInterface #[Route(route: '/wallets/', name: 'wallet.delete', methods: 'DELETE', group: 'auth')] public function delete(string $id): ResponseInterface { + $this->verifyIsProfileConfirmed(); + $wallet = $this->walletRepository->findByPKByUserPK((int) $id, (int) $this->user->id); if (! $wallet instanceof Wallet) { diff --git a/app/src/Exception/UnconfirmedProfileException.php b/app/src/Exception/UnconfirmedProfileException.php new file mode 100644 index 00000000..746af285 --- /dev/null +++ b/app/src/Exception/UnconfirmedProfileException.php @@ -0,0 +1,9 @@ + 403 + ]; + public function __construct( private readonly ResponseFactoryInterface $responseFactory, ) { @@ -18,6 +22,12 @@ public function __construct( public function renderException(Request $request, int $code, \Throwable $exception): ResponseInterface { + foreach (static::MAP as $className => $responseCode) { + if ($exception instanceof $className) { + return $this->renderJson($responseCode, $exception); + } + } + return $this->renderJson($code, $exception); } diff --git a/tests/Factories/UserFactory.php b/tests/Factories/UserFactory.php index 01123474..73fe3298 100644 --- a/tests/Factories/UserFactory.php +++ b/tests/Factories/UserFactory.php @@ -58,7 +58,7 @@ public static function make(): User $user->createdAt = Fixtures::dateTime(); $user->updatedAt = Fixtures::dateTimeAfter($user->createdAt); $user->photo = Fixtures::fileName(); - $user->isEmailConfirmed = Fixtures::boolean(); + $user->isEmailConfirmed = true; return self::withPassword(self::DEFAULT_PASSWORD, $user); } diff --git a/tests/Feature/Controller/Tags/TagsControllerTest.php b/tests/Feature/Controller/Tags/TagsControllerTest.php index df0e2010..bd36358c 100644 --- a/tests/Feature/Controller/Tags/TagsControllerTest.php +++ b/tests/Feature/Controller/Tags/TagsControllerTest.php @@ -81,6 +81,21 @@ public function testCreateRequireAuth(): void $response->assertUnauthorized(); } + public function testCreateRequireProfileConfirmation(): void + { + $tag = TagFactory::make(); + + $auth = $this->makeAuth($this->userFactory->create(UserFactory::emailNotConfirmed())); + + $response = $this->withAuth($auth)->post('/tags', [ + 'name' => $tag->name, + 'icon' => $tag->icon, + 'color' => $tag->color, + ]); + + $response->assertForbidden(); + } + public function createValidationFailsDataProvider(): array { return [ @@ -212,6 +227,21 @@ public function testUpdateRequireAuth(): void $response->assertUnauthorized(); } + public function testUpdateRequireProfileConfirmation(): void + { + $tag = $this->tagFactory->forUser($user = $this->userFactory->create(UserFactory::emailNotConfirmed()))->create(); + + $auth = $this->makeAuth($user); + + $response = $this->withAuth($auth)->put("/tags/{$tag->id}", [ + 'name' => $tag->name, + 'icon' => $tag->icon, + 'color' => $tag->color, + ]); + + $response->assertForbidden(); + } + public function testUpdateMissingTagStillRequireAuth(): void { $tagId = Fixtures::integer(); @@ -428,6 +458,17 @@ public function testDeleteRequireAuth(): void $response->assertUnauthorized(); } + public function testDeleteRequireProfileConfirmation(): void + { + $auth = $this->makeAuth($user = $this->userFactory->create(UserFactory::emailNotConfirmed())); + + $tag = $this->tagFactory->forUser($user)->create(); + + $response = $this->withAuth($auth)->delete("/tags/{$tag->id}"); + + $response->assertForbidden(); + } + public function testDeleteMissingTagStillRequireAuth(): void { $tagId = Fixtures::integer(); diff --git a/tests/Feature/Controller/Wallets/UsersControllerTest.php b/tests/Feature/Controller/Wallets/UsersControllerTest.php index bb3ffa7b..47dd2f89 100644 --- a/tests/Feature/Controller/Wallets/UsersControllerTest.php +++ b/tests/Feature/Controller/Wallets/UsersControllerTest.php @@ -102,6 +102,23 @@ public function testPathRequireAuth(): void $response->assertUnauthorized(); } + public function testPathRequireProfileConfirmation(): void + { + $auth = $this->makeAuth($user = $this->userFactory->create(UserFactory::emailNotConfirmed())); + $wallet = $this->walletFactory->forUser($user)->create(); + + $otherUser = $this->userFactory->create(); + + $response = $this->withAuth($auth)->patch("/wallets/{$wallet->id}/users/{$otherUser->id}"); + + $response->assertForbidden(); + + $this->assertDatabaseMissing('user_wallets', [ + 'wallet_id' => $wallet->id, + 'user_id' => $otherUser->id, + ]); + } + public function testPatchNotExistingWalletAndUserStillRequireAuth(): void { $walletId = Fixtures::integer(); @@ -208,6 +225,27 @@ public function testDeleteRequireAuth(): void $response->assertUnauthorized(); } + public function testDeleteRequireProfileConfirmation(): void + { + $auth = $this->makeAuth($user = $this->userFactory->create(UserFactory::emailNotConfirmed())); + + $otherUser = $this->userFactory->create(); + + $wallet = WalletFactory::make(); + $wallet->users->add($user); + $wallet->users->add($otherUser); + $wallet = $this->walletFactory->create($wallet); + + $response = $this->withAuth($auth)->delete("/wallets/{$wallet->id}/users/{$otherUser->id}"); + + $response->assertForbidden(); + + $this->assertDatabaseHas('user_wallets', [ + 'wallet_id' => $wallet->id, + 'user_id' => $otherUser->id, + ]); + } + public function testDeleteNotExistingWalletAndUserStillRequireAuth(): void { $walletId = Fixtures::integer(); diff --git a/tests/Feature/Controller/Wallets/WalletsControllerTest.php b/tests/Feature/Controller/Wallets/WalletsControllerTest.php index a09cbe91..f9d139ed 100644 --- a/tests/Feature/Controller/Wallets/WalletsControllerTest.php +++ b/tests/Feature/Controller/Wallets/WalletsControllerTest.php @@ -35,6 +35,29 @@ public function testCreateRequireAuth(): void $response->assertUnauthorized(); } + public function testCreateRequireProfileConfirmation(): void + { + $auth = $this->makeAuth($this->userFactory->create(UserFactory::emailNotConfirmed())); + + $wallet = WalletFactory::make(); + + $response = $this->withAuth($auth)->post('/wallets', [ + 'name' => $wallet->name, + 'slug' => $wallet->slug, + 'isPublic' => $wallet->isPublic, + 'defaultCurrencyCode' => $wallet->defaultCurrencyCode, + ]); + + $response->assertForbidden(); + + $this->assertDatabaseMissing('wallets', [ + 'default_currency_code' => $wallet->defaultCurrencyCode, + ], [ + 'name' => $wallet->name, + 'slug' => $wallet->slug, + ]); + } + public function createValidationFailsDataProvider(): array { return [ @@ -171,6 +194,30 @@ public function testUpdateRequireAuth(): void $response->assertUnauthorized(); } + public function testUpdateRequireProfileConfirmation(): void + { + $auth = $this->makeAuth($user = $this->userFactory->create(UserFactory::emailNotConfirmed())); + + $wallet = $this->walletFactory->forUser($user)->create(); + $otherWallet = WalletFactory::make(); + + $response = $this->withAuth($auth)->put("/wallets/{$wallet->id}", [ + 'name' => $otherWallet->name, + 'isPublic' => $otherWallet->isPublic, + 'defaultCurrencyCode' => $otherWallet->defaultCurrencyCode, + ]); + + $response->assertForbidden(); + + $this->assertDatabaseMissing('wallets', [ + 'is_public' => $otherWallet->isPublic, + 'default_currency_code' => $otherWallet->defaultCurrencyCode, + ], [ + 'name' => $otherWallet->name, + 'slug' => $wallet->slug, + ]); + } + public function testUpdateMissingWalletStillRequireAuth(): void { $walletId = Fixtures::integer(); From 429b4bddccfc8b0b929e2750becadc4068a2d9e2 Mon Sep 17 00:00:00 2001 From: Volodymyr Komarov Date: Sat, 22 Apr 2023 16:12:38 +0300 Subject: [PATCH 2/2] Upgrade packages --- composer.json | 26 +-- composer.lock | 571 ++++++++++++++++++++++++--------------------- tests/FakeHttp.php | 2 +- 3 files changed, 317 insertions(+), 282 deletions(-) diff --git a/composer.json b/composer.json index c0cbda2d..18a82d52 100644 --- a/composer.json +++ b/composer.json @@ -19,32 +19,32 @@ "cycle/entity-behavior-uuid": "^1.0", "doctrine/collections": "^1.8", "firebase/php-jwt": "^6.0", - "illuminate/collections": "^9.8", + "illuminate/collections": "^9.52", "kreait/firebase-php": "^7.0", - "laminas/laminas-diactoros": "^2.6", - "lcobucci/jwt": "^4.1", - "ramsey/uuid": "^4.2", + "laminas/laminas-diactoros": "^2.25", + "lcobucci/jwt": "^4.3", + "ramsey/uuid": "^4.7", "spiral-packages/league-event": "^1.0", "spiral-packages/scheduler": "^2.1", - "spiral/cycle-bridge": "^2.1", + "spiral/cycle-bridge": "^2.4", "spiral/filters-bridge": "^1.0", - "spiral/framework": "^3.6", + "spiral/framework": "^3.7", "spiral/nyholm-bridge": "^1.3", - "spiral/roadrunner-bridge": "^2.1", - "spiral/roadrunner-cli": "^2.4", + "spiral/roadrunner-bridge": "^2.6", + "spiral/roadrunner-cli": "^2.5", "spiral/stempler-bridge": "^3.2", "spiral/translator": "^3.6", - "spiral/validator": "^1.1", + "spiral/validator": "^1.3", "symfony/mailer": "^6.2", "voku/portable-utf8": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "^9.6", "qossmic/deptrac-shim": "^1.0", "squizlabs/php_codesniffer": "3.*", - "spiral/testing": "^2.2", - "symfony/var-dumper": "^6.1", - "vimeo/psalm": "^4.9" + "spiral/testing": "^2.3", + "symfony/var-dumper": "^6.2", + "vimeo/psalm": "^4.30" }, "scripts": { "post-create-project-cmd": [ diff --git a/composer.lock b/composer.lock index 99d9b351..c410aa1b 100644 --- a/composer.lock +++ b/composer.lock @@ -62,16 +62,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.263.2", + "version": "3.268.16", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "5516a7edae70fff66223b2fd320c20b3b17ced56" + "reference": "b59134c9ca64dcb9de6f7dbbcb9d5a75ed665a98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/5516a7edae70fff66223b2fd320c20b3b17ced56", - "reference": "5516a7edae70fff66223b2fd320c20b3b17ced56", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/b59134c9ca64dcb9de6f7dbbcb9d5a75ed665a98", + "reference": "b59134c9ca64dcb9de6f7dbbcb9d5a75ed665a98", "shasum": "" }, "require": { @@ -81,7 +81,7 @@ "ext-simplexml": "*", "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", "guzzlehttp/promises": "^1.4.0", - "guzzlehttp/psr7": "^1.8.5 || ^2.3", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", "mtdowling/jmespath.php": "^2.6", "php": ">=5.5" }, @@ -100,6 +100,7 @@ "paragonie/random_compat": ">= 2", "phpunit/phpunit": "^4.8.35 || ^5.6.3 || ^9.5", "psr/cache": "^1.0", + "psr/http-message": "^1.0", "psr/simple-cache": "^1.0", "sebastian/comparator": "^1.2.3 || ^4.0", "yoast/phpunit-polyfills": "^1.0" @@ -150,9 +151,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.263.2" + "source": "https://github.com/aws/aws-sdk-php/tree/3.268.16" }, - "time": "2023-04-03T18:19:25+00:00" + "time": "2023-04-21T21:37:05+00:00" }, { "name": "beste/clock", @@ -278,26 +279,25 @@ }, { "name": "brick/math", - "version": "0.10.2", + "version": "0.11.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", - "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^7.4 || ^8.0" + "php": "^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^9.0", - "vimeo/psalm": "4.25.0" + "vimeo/psalm": "5.0.0" }, "type": "library", "autoload": { @@ -322,7 +322,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.10.2" + "source": "https://github.com/brick/math/tree/0.11.0" }, "funding": [ { @@ -330,7 +330,7 @@ "type": "github" } ], - "time": "2022-08-10T22:54:19+00:00" + "time": "2023-01-15T23:15:59+00:00" }, { "name": "butschster/cron-expression-generator", @@ -1067,30 +1067,30 @@ }, { "name": "doctrine/annotations", - "version": "1.14.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", "shasum": "" }, "require": { - "doctrine/lexer": "^1 || ^2", + "doctrine/lexer": "^2 || ^3", "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", + "php": "^7.2 || ^8.0", "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.0", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/cache": "^5.4 || ^6", "vimeo/psalm": "^4.10" }, "suggest": { @@ -1137,9 +1137,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.3" + "source": "https://github.com/doctrine/annotations/tree/2.0.1" }, - "time": "2023-02-01T09:20:38+00:00" + "time": "2023-02-02T22:02:53+00:00" }, { "name": "doctrine/collections", @@ -1417,28 +1417,27 @@ }, { "name": "doctrine/lexer", - "version": "2.1.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" + "reference": "84a527db05647743d50373e0ec53a152f2cde568" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" + "vimeo/psalm": "^5.0" }, "type": "library", "autoload": { @@ -1475,7 +1474,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.0" + "source": "https://github.com/doctrine/lexer/tree/3.0.0" }, "funding": [ { @@ -1491,7 +1490,7 @@ "type": "tidelift" } ], - "time": "2022-12-14T08:49:07+00:00" + "time": "2022-12-15T16:57:16+00:00" }, { "name": "dragonmantank/cron-expression", @@ -1742,16 +1741,16 @@ }, { "name": "google/auth", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "0865c44ab50378f7b145827dfcbd1e7a238f7759" + "reference": "f1f0d0319e2e7750ebfaa523c78819792a9ed9f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/0865c44ab50378f7b145827dfcbd1e7a238f7759", - "reference": "0865c44ab50378f7b145827dfcbd1e7a238f7759", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/f1f0d0319e2e7750ebfaa523c78819792a9ed9f7", + "reference": "f1f0d0319e2e7750ebfaa523c78819792a9ed9f7", "shasum": "" }, "require": { @@ -1764,8 +1763,8 @@ }, "require-dev": { "guzzlehttp/promises": "0.1.1|^1.3", - "kelvinmo/simplejwt": "^0.2.5|^0.5.1", - "phpseclib/phpseclib": "^2.0.31", + "kelvinmo/simplejwt": "0.7.0", + "phpseclib/phpseclib": "^2.0.31||^3.0", "phpspec/prophecy-phpunit": "^1.1||^2.0", "phpunit/phpunit": "^7.5||^9.0.0", "sebastian/comparator": ">=1.2.3", @@ -1794,22 +1793,22 @@ "support": { "docs": "https://googleapis.github.io/google-auth-library-php/main/", "issues": "https://github.com/googleapis/google-auth-library-php/issues", - "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.25.0" + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.26.0" }, - "time": "2023-01-26T22:04:14+00:00" + "time": "2023-04-05T15:11:57+00:00" }, { "name": "google/cloud-core", - "version": "v1.49.3", + "version": "v1.50.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-cloud-php-core.git", - "reference": "236ceda7ac172e635715903192ea1244afc91422" + "reference": "2cb01dbf61e5818cc4a19f1289839223d074018e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/236ceda7ac172e635715903192ea1244afc91422", - "reference": "236ceda7ac172e635715903192ea1244afc91422", + "url": "https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/2cb01dbf61e5818cc4a19f1289839223d074018e", + "reference": "2cb01dbf61e5818cc4a19f1289839223d074018e", "shasum": "" }, "require": { @@ -1818,20 +1817,19 @@ "guzzlehttp/promises": "^1.3", "guzzlehttp/psr7": "^1.7|^2.0", "monolog/monolog": "^1.1|^2.0|^3.0", - "php": ">=5.6", - "psr/http-message": "1.0.*", + "php": ">=7.4", + "psr/http-message": "^1.0", "rize/uri-template": "~0.3" }, "require-dev": { "erusev/parsedown": "^1.6", - "google/cloud-common-protos": "^0.3", + "google/cloud-common-protos": "^0.4", "google/gax": "^1.9", "opis/closure": "^3", - "phpdocumentor/reflection": "^3.0||^4.0||^5.3", - "phpspec/prophecy": "^1.10.3", - "phpunit/phpunit": "^4.8|^5.0|^8.0", - "squizlabs/php_codesniffer": "2.*", - "yoast/phpunit-polyfills": "^1.0" + "phpdocumentor/reflection": "^5.0", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.0", + "squizlabs/php_codesniffer": "2.*" }, "suggest": { "opis/closure": "May be used to serialize closures to process jobs in the batch daemon. Please require version ^3.", @@ -1860,37 +1858,37 @@ ], "description": "Google Cloud PHP shared dependency, providing functionality useful to all components.", "support": { - "source": "https://github.com/googleapis/google-cloud-php-core/tree/v1.49.3" + "source": "https://github.com/googleapis/google-cloud-php-core/tree/v1.50.0" }, - "time": "2023-03-25T14:54:11+00:00" + "time": "2023-04-21T22:21:40+00:00" }, { "name": "google/cloud-storage", - "version": "v1.30.2", + "version": "v1.30.3", "source": { "type": "git", "url": "https://github.com/googleapis/google-cloud-php-storage.git", - "reference": "b7f74ec1b701d56945cbc6c20345e2d21b1b3545" + "reference": "43f885c04a22473440e29538dfa2f57d1f2bf83f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-cloud-php-storage/zipball/b7f74ec1b701d56945cbc6c20345e2d21b1b3545", - "reference": "b7f74ec1b701d56945cbc6c20345e2d21b1b3545", + "url": "https://api.github.com/repos/googleapis/google-cloud-php-storage/zipball/43f885c04a22473440e29538dfa2f57d1f2bf83f", + "reference": "43f885c04a22473440e29538dfa2f57d1f2bf83f", "shasum": "" }, "require": { "google/cloud-core": "^1.43", - "google/crc32": "^0.1.0" + "google/crc32": "^0.2.0", + "php": ">=7.4" }, "require-dev": { "erusev/parsedown": "^1.6", "google/cloud-pubsub": "^1.0", - "phpdocumentor/reflection": "^3.0||^4.0", + "phpdocumentor/reflection": "^5.0", "phpseclib/phpseclib": "^2.0||^3.0", - "phpspec/prophecy": "^1.10.3", - "phpunit/phpunit": "^4.8|^5.0|^8.0", - "squizlabs/php_codesniffer": "2.*", - "yoast/phpunit-polyfills": "^1.0" + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.0", + "squizlabs/php_codesniffer": "2.*" }, "suggest": { "google/cloud-pubsub": "May be used to register a topic to receive bucket notifications.", @@ -1916,9 +1914,9 @@ ], "description": "Cloud Storage Client for PHP", "support": { - "source": "https://github.com/googleapis/google-cloud-php-storage/tree/v1.30.2" + "source": "https://github.com/googleapis/google-cloud-php-storage/tree/v1.30.3" }, - "time": "2023-01-27T18:26:22+00:00" + "time": "2023-04-21T22:21:40+00:00" }, { "name": "google/common-protos", @@ -1974,25 +1972,24 @@ }, { "name": "google/crc32", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/google/php-crc32.git", - "reference": "a8525f0dea6fca1893e1bae2f6e804c5f7d007fb" + "reference": "948f7945d803dcc1a375152c72f63144c2dadf23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/google/php-crc32/zipball/a8525f0dea6fca1893e1bae2f6e804c5f7d007fb", - "reference": "a8525f0dea6fca1893e1bae2f6e804c5f7d007fb", + "url": "https://api.github.com/repos/google/php-crc32/zipball/948f7945d803dcc1a375152c72f63144c2dadf23", + "reference": "948f7945d803dcc1a375152c72f63144c2dadf23", "shasum": "" }, "require": { - "php": ">=5.4" + "php": ">=7.4" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^1.13 || v2.14.2", - "paragonie/random_compat": ">=2", - "phpunit/phpunit": "^4" + "friendsofphp/php-cs-fixer": "v3.15", + "phpunit/phpunit": "^9" }, "type": "library", "autoload": { @@ -2014,22 +2011,22 @@ "homepage": "https://github.com/google/php-crc32", "support": { "issues": "https://github.com/google/php-crc32/issues", - "source": "https://github.com/google/php-crc32/tree/v0.1.0" + "source": "https://github.com/google/php-crc32/tree/v0.2.0" }, - "time": "2019-05-09T06:24:58+00:00" + "time": "2023-04-16T22:44:57+00:00" }, { "name": "google/protobuf", - "version": "v3.22.2", + "version": "v3.22.3", "source": { "type": "git", "url": "https://github.com/protocolbuffers/protobuf-php.git", - "reference": "ff28a64946708e13f2be627b5e5561f247ecf95c" + "reference": "0edeee0cc2e2991706e16ab60c7d224e5c0241ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/ff28a64946708e13f2be627b5e5561f247ecf95c", - "reference": "ff28a64946708e13f2be627b5e5561f247ecf95c", + "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/0edeee0cc2e2991706e16ab60c7d224e5c0241ba", + "reference": "0edeee0cc2e2991706e16ab60c7d224e5c0241ba", "shasum": "" }, "require": { @@ -2058,9 +2055,9 @@ "proto" ], "support": { - "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.22.2" + "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.22.3" }, - "time": "2023-03-10T17:52:03+00:00" + "time": "2023-04-12T23:38:34+00:00" }, { "name": "graham-campbell/result-type", @@ -2170,22 +2167,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.5.0", + "version": "7.5.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" + "reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b964ca597e86b752cd994f27293e9fa6b6a95ed9", + "reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9 || ^2.4", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -2278,7 +2275,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.5.0" + "source": "https://github.com/guzzle/guzzle/tree/7.5.1" }, "funding": [ { @@ -2294,7 +2291,7 @@ "type": "tidelift" } ], - "time": "2022-08-28T15:39:27+00:00" + "time": "2023-04-17T16:30:08+00:00" }, { "name": "guzzlehttp/promises", @@ -2382,22 +2379,22 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.4.5", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "0454e12ef0cd597ccd2adb036f7bda4e7fface66" + "reference": "b635f279edd83fc275f822a1188157ffea568ff6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/0454e12ef0cd597ccd2adb036f7bda4e7fface66", - "reference": "0454e12ef0cd597ccd2adb036f7bda4e7fface66", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", + "reference": "b635f279edd83fc275f822a1188157ffea568ff6", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", + "psr/http-message": "^1.1 || ^2.0", "ralouphie/getallheaders": "^3.0" }, "provide": { @@ -2478,7 +2475,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.5" + "source": "https://github.com/guzzle/psr7/tree/2.5.0" }, "funding": [ { @@ -2494,11 +2491,11 @@ "type": "tidelift" } ], - "time": "2023-04-17T16:00:45+00:00" + "time": "2023-04-17T16:11:26+00:00" }, { "name": "illuminate/collections", - "version": "v9.52.5", + "version": "v9.52.6", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", @@ -2553,7 +2550,7 @@ }, { "name": "illuminate/conditionable", - "version": "v9.52.5", + "version": "v9.52.6", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", @@ -2599,7 +2596,7 @@ }, { "name": "illuminate/contracts", - "version": "v9.52.5", + "version": "v9.52.6", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", @@ -2647,7 +2644,7 @@ }, { "name": "illuminate/macroable", - "version": "v9.52.5", + "version": "v9.52.6", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", @@ -2863,22 +2860,22 @@ }, { "name": "laminas/laminas-diactoros", - "version": "2.24.0", + "version": "2.25.2", "source": { "type": "git", "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "6028af6c3b5ced4d063a680d2483cce67578b902" + "reference": "9f3f4bf5b99c9538b6f1dbcc20f6fec357914f9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6028af6c3b5ced4d063a680d2483cce67578b902", - "reference": "6028af6c3b5ced4d063a680d2483cce67578b902", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/9f3f4bf5b99c9538b6f1dbcc20f6fec357914f9e", + "reference": "9f3f4bf5b99c9538b6f1dbcc20f6fec357914f9e", "shasum": "" }, "require": { "php": "~8.0.0 || ~8.1.0 || ~8.2.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.1" }, "conflict": { "zendframework/zend-diactoros": "*" @@ -2893,11 +2890,11 @@ "ext-gd": "*", "ext-libxml": "*", "http-interop/http-factory-tests": "^0.9.0", - "laminas/laminas-coding-standard": "^2.4.0", + "laminas/laminas-coding-standard": "^2.5", "php-http/psr7-integration-tests": "^1.2", - "phpunit/phpunit": "^9.5.27", + "phpunit/phpunit": "^9.5.28", "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.4" + "vimeo/psalm": "^5.6" }, "type": "library", "extra": { @@ -2956,7 +2953,7 @@ "type": "community_bridge" } ], - "time": "2022-12-20T12:22:40+00:00" + "time": "2023-04-17T15:44:17+00:00" }, { "name": "lcobucci/clock", @@ -3835,38 +3832,39 @@ }, { "name": "nyholm/psr7", - "version": "1.5.1", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/Nyholm/psr7.git", - "reference": "f734364e38a876a23be4d906a2a089e1315be18a" + "reference": "ed7cf98f6562831dbc3c962406b5e49dc8179c8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Nyholm/psr7/zipball/f734364e38a876a23be4d906a2a089e1315be18a", - "reference": "f734364e38a876a23be4d906a2a089e1315be18a", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/ed7cf98f6562831dbc3c962406b5e49dc8179c8c", + "reference": "ed7cf98f6562831dbc3c962406b5e49dc8179c8c", "shasum": "" }, "require": { - "php": ">=7.1", + "php": ">=7.2", "php-http/message-factory": "^1.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.1 || ^2.0" }, "provide": { + "php-http/message-factory-implementation": "1.0", "psr/http-factory-implementation": "1.0", "psr/http-message-implementation": "1.0" }, "require-dev": { "http-interop/http-factory-tests": "^0.9", - "php-http/psr7-integration-tests": "^1.0", + "php-http/psr7-integration-tests": "^1.0@dev", "phpunit/phpunit": "^7.5 || 8.5 || 9.4", "symfony/error-handler": "^4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -3896,7 +3894,7 @@ ], "support": { "issues": "https://github.com/Nyholm/psr7/issues", - "source": "https://github.com/Nyholm/psr7/tree/1.5.1" + "source": "https://github.com/Nyholm/psr7/tree/1.7.0" }, "funding": [ { @@ -3908,7 +3906,7 @@ "type": "github" } ], - "time": "2022-06-22T07:13:36+00:00" + "time": "2023-04-20T08:38:48+00:00" }, { "name": "opis/closure", @@ -4027,26 +4025,26 @@ }, { "name": "php-http/message-factory", - "version": "v1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-http/message-factory.git", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" + "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", "shasum": "" }, "require": { "php": ">=5.4", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -4075,9 +4073,9 @@ ], "support": { "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/master" + "source": "https://github.com/php-http/message-factory/tree/1.1.0" }, - "time": "2015-12-19T14:08:53+00:00" + "time": "2023-04-14T14:16:17+00:00" }, { "name": "phpoption/phpoption", @@ -4356,21 +4354,21 @@ }, { "name": "psr/http-client", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", "shasum": "" }, "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -4390,7 +4388,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP clients", @@ -4402,9 +4400,9 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "source": "https://github.com/php-fig/http-client/tree/1.0.2" }, - "time": "2020-06-29T06:28:15+00:00" + "time": "2023-04-10T20:12:12+00:00" }, { "name": "psr/http-factory", @@ -4463,25 +4461,25 @@ }, { "name": "psr/http-message", - "version": "1.0.1", + "version": "1.1", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -4510,27 +4508,27 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "source": "https://github.com/php-fig/http-message/tree/1.1" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2023-04-04T09:50:52+00:00" }, { "name": "psr/http-server-handler", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/http-server-handler.git", - "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7" + "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7", - "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7", + "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" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -4550,7 +4548,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP server-side request handler", @@ -4566,28 +4564,27 @@ "server" ], "support": { - "issues": "https://github.com/php-fig/http-server-handler/issues", - "source": "https://github.com/php-fig/http-server-handler/tree/master" + "source": "https://github.com/php-fig/http-server-handler/tree/1.0.2" }, - "time": "2018-10-30T16:46:14+00:00" + "time": "2023-04-10T20:06:20+00:00" }, { "name": "psr/http-server-middleware", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/http-server-middleware.git", - "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5" + "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5", - "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5", + "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", + "psr/http-message": "^1.0 || ^2.0", "psr/http-server-handler": "^1.0" }, "type": "library", @@ -4608,7 +4605,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP server-side middleware", @@ -4624,9 +4621,9 @@ ], "support": { "issues": "https://github.com/php-fig/http-server-middleware/issues", - "source": "https://github.com/php-fig/http-server-middleware/tree/master" + "source": "https://github.com/php-fig/http-server-middleware/tree/1.0.2" }, - "time": "2018-10-30T17:12:04+00:00" + "time": "2023-04-11T06:14:47+00:00" }, { "name": "psr/log", @@ -4864,20 +4861,20 @@ }, { "name": "ramsey/uuid", - "version": "4.7.3", + "version": "4.7.4", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "433b2014e3979047db08a17a205f410ba3869cf2" + "reference": "60a4c63ab724854332900504274f6150ff26d286" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/433b2014e3979047db08a17a205f410ba3869cf2", - "reference": "433b2014e3979047db08a17a205f410ba3869cf2", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", + "reference": "60a4c63ab724854332900504274f6150ff26d286", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -4940,7 +4937,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.3" + "source": "https://github.com/ramsey/uuid/tree/4.7.4" }, "funding": [ { @@ -4952,20 +4949,20 @@ "type": "tidelift" } ], - "time": "2023-01-12T18:13:24+00:00" + "time": "2023-04-15T23:01:58+00:00" }, { "name": "riverline/multipart-parser", - "version": "2.0.9", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/Riverline/multipart-parser.git", - "reference": "ebba10245b5a6e03a673ff52c547d05029caedab" + "reference": "68e5499c54e455830bd3cfa4e5abe8c5d71360c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Riverline/multipart-parser/zipball/ebba10245b5a6e03a673ff52c547d05029caedab", - "reference": "ebba10245b5a6e03a673ff52c547d05029caedab", + "url": "https://api.github.com/repos/Riverline/multipart-parser/zipball/68e5499c54e455830bd3cfa4e5abe8c5d71360c8", + "reference": "68e5499c54e455830bd3cfa4e5abe8c5d71360c8", "shasum": "" }, "require": { @@ -4973,10 +4970,10 @@ "php": ">=5.6.0" }, "require-dev": { - "laminas/laminas-diactoros": "^1.8.7", - "phpunit/phpunit": "^5.2 || ^6.0 || ^7.0", + "laminas/laminas-diactoros": "^1.8.7 || ^2.11.1", + "phpunit/phpunit": "^5.7 || ^9.0", "psr/http-message": "^1.0", - "symfony/psr-http-message-bridge": "^1.1" + "symfony/psr-http-message-bridge": "^1.1 || ^2.0" }, "type": "library", "autoload": { @@ -5006,9 +5003,9 @@ ], "support": { "issues": "https://github.com/Riverline/multipart-parser/issues", - "source": "https://github.com/Riverline/multipart-parser/tree/2.0.9" + "source": "https://github.com/Riverline/multipart-parser/tree/2.1.0" }, - "time": "2021-10-18T09:56:35+00:00" + "time": "2023-04-12T14:30:23+00:00" }, { "name": "rize/uri-template", @@ -5074,27 +5071,27 @@ }, { "name": "roadrunner-php/app-logger", - "version": "1.0.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/roadrunner-php/app-logger.git", - "reference": "3844e1bf7e1d59f80fcf590be34cb3efdbb0c189" + "reference": "d622d68e86f18ef7e0295bc749c2bd25b2bbabdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/roadrunner-php/app-logger/zipball/3844e1bf7e1d59f80fcf590be34cb3efdbb0c189", - "reference": "3844e1bf7e1d59f80fcf590be34cb3efdbb0c189", + "url": "https://api.github.com/repos/roadrunner-php/app-logger/zipball/d622d68e86f18ef7e0295bc749c2bd25b2bbabdb", + "reference": "d622d68e86f18ef7e0295bc749c2bd25b2bbabdb", "shasum": "" }, "require": { "ext-json": "*", "php": ">=8.1", - "spiral/goridge": "^3.1" + "spiral/goridge": "^3.1 || ^4.0" }, "require-dev": { "mockery/mockery": "^1.5", - "phpunit/phpunit": "^8.0", - "vimeo/psalm": ">=4.4" + "phpunit/phpunit": "^10.0", + "vimeo/psalm": ">=5.8" }, "type": "library", "autoload": { @@ -5119,9 +5116,15 @@ "description": "Send log messages to RoadRunner", "support": { "issues": "https://github.com/roadrunner-php/app-logger/issues", - "source": "https://github.com/roadrunner-php/app-logger/tree/1.0.0" + "source": "https://github.com/roadrunner-php/app-logger/tree/1.1.0" }, - "time": "2022-11-03T15:47:26+00:00" + "funding": [ + { + "url": "https://github.com/roadrunner-server", + "type": "github" + } + ], + "time": "2023-04-13T13:48:31+00:00" }, { "name": "roadrunner-php/centrifugo", @@ -5655,23 +5658,23 @@ }, { "name": "spiral/framework", - "version": "3.6.1", + "version": "3.7.1", "source": { "type": "git", "url": "https://github.com/spiral/framework.git", - "reference": "2b2b046322c7ad04ec3e459f2ae2ba954376fbed" + "reference": "6c929db3c9a10773c6eb4484a2089b8aa9f24d88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spiral/framework/zipball/2b2b046322c7ad04ec3e459f2ae2ba954376fbed", - "reference": "2b2b046322c7ad04ec3e459f2ae2ba954376fbed", + "url": "https://api.github.com/repos/spiral/framework/zipball/6c929db3c9a10773c6eb4484a2089b8aa9f24d88", + "reference": "6c929db3c9a10773c6eb4484a2089b8aa9f24d88", "shasum": "" }, "require": { "cocur/slugify": "^3.2", "codedungeon/php-cli-colors": "^1.11", "defuse/php-encryption": "^2.2", - "doctrine/annotations": "^1.12", + "doctrine/annotations": "^1.12 || ^2.0", "doctrine/inflector": "^1.4|^2.0", "ext-json": "*", "ext-mbstring": "*", @@ -5756,13 +5759,13 @@ "phpunit/phpunit": "^9.5.20", "ramsey/collection": "^1.2", "ramsey/uuid": "^4.2.3", - "rector/rector": "0.12.15", + "rector/rector": "0.15.23", "spiral/code-style": "^1.1", "spiral/nyholm-bridge": "^1.2", "spiral/testing": "^2.2", "spiral/validator": "^1.2", "symplify/monorepo-builder": "^10.2.7", - "vimeo/psalm": "^4.27" + "vimeo/psalm": "^5.9" }, "type": "library", "extra": { @@ -5863,19 +5866,25 @@ "issues": "https://github.com/spiral/framework/issues", "source": "https://github.com/spiral/framework" }, - "time": "2023-02-20T15:36:00+00:00" + "funding": [ + { + "url": "https://github.com/roadrunner-server", + "type": "github" + } + ], + "time": "2023-04-21T14:41:36+00:00" }, { "name": "spiral/goridge", "version": "v3.2.0", "source": { "type": "git", - "url": "https://github.com/spiral/goridge-php.git", + "url": "https://github.com/roadrunner-php/goridge.git", "reference": "3d8e97d7d1cc26b6130d233177b23ecb3c7d4efb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spiral/goridge-php/zipball/3d8e97d7d1cc26b6130d233177b23ecb3c7d4efb", + "url": "https://api.github.com/repos/roadrunner-php/goridge/zipball/3d8e97d7d1cc26b6130d233177b23ecb3c7d4efb", "reference": "3d8e97d7d1cc26b6130d233177b23ecb3c7d4efb", "shasum": "" }, @@ -5922,9 +5931,15 @@ ], "description": "High-performance PHP-to-Golang RPC bridge", "support": { - "issues": "https://github.com/spiral/goridge-php/issues", - "source": "https://github.com/spiral/goridge-php/tree/v3.2.0" + "issues": "https://github.com/roadrunner-php/goridge/issues", + "source": "https://github.com/roadrunner-php/goridge/tree/v3.2.0" }, + "funding": [ + { + "url": "https://github.com/roadrunner-server", + "type": "github" + } + ], "time": "2022-03-21T20:32:19+00:00" }, { @@ -6163,16 +6178,16 @@ }, { "name": "spiral/roadrunner-cli", - "version": "v2.4.0", + "version": "v2.5.0", "source": { "type": "git", - "url": "https://github.com/spiral/roadrunner-cli.git", - "reference": "8676fcc57823b164cac216f08e8590fe7d0f2016" + "url": "https://github.com/roadrunner-php/cli.git", + "reference": "468c4a646d10a38b1475ec7b71f5880aa354febf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spiral/roadrunner-cli/zipball/8676fcc57823b164cac216f08e8590fe7d0f2016", - "reference": "8676fcc57823b164cac216f08e8590fe7d0f2016", + "url": "https://api.github.com/repos/roadrunner-php/cli/zipball/468c4a646d10a38b1475ec7b71f5880aa354febf", + "reference": "468c4a646d10a38b1475ec7b71f5880aa354febf", "shasum": "" }, "require": { @@ -6221,10 +6236,10 @@ ], "description": "RoadRunner: Command Line Interface", "support": { - "issues": "https://github.com/spiral/roadrunner-cli/issues", - "source": "https://github.com/spiral/roadrunner-cli/tree/v2.4.0" + "issues": "https://github.com/roadrunner-php/cli/issues", + "source": "https://github.com/roadrunner-php/cli/tree/v2.5.0" }, - "time": "2022-12-16T07:35:51+00:00" + "time": "2023-04-18T14:19:26+00:00" }, { "name": "spiral/roadrunner-grpc", @@ -7112,16 +7127,16 @@ }, { "name": "symfony/http-client", - "version": "v6.2.8", + "version": "v6.2.9", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "66391ba3a8862c560e1d9134c96d9bd2a619b477" + "reference": "7daf5d24c21a683164688b95bb73b7a4bd3b32fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/66391ba3a8862c560e1d9134c96d9bd2a619b477", - "reference": "66391ba3a8862c560e1d9134c96d9bd2a619b477", + "url": "https://api.github.com/repos/symfony/http-client/zipball/7daf5d24c21a683164688b95bb73b7a4bd3b32fc", + "reference": "7daf5d24c21a683164688b95bb73b7a4bd3b32fc", "shasum": "" }, "require": { @@ -7180,7 +7195,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.2.8" + "source": "https://github.com/symfony/http-client/tree/v6.2.9" }, "funding": [ { @@ -7196,7 +7211,7 @@ "type": "tidelift" } ], - "time": "2023-03-31T09:14:44+00:00" + "time": "2023-04-11T16:03:19+00:00" }, { "name": "symfony/http-client-contracts", @@ -9670,16 +9685,16 @@ }, { "name": "netresearch/jsonmapper", - "version": "v4.1.0", + "version": "v4.2.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "cfa81ea1d35294d64adb9c68aa4cb9e92400e53f" + "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/cfa81ea1d35294d64adb9c68aa4cb9e92400e53f", - "reference": "cfa81ea1d35294d64adb9c68aa4cb9e92400e53f", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", + "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", "shasum": "" }, "require": { @@ -9715,9 +9730,9 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.1.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" }, - "time": "2022-12-08T20:46:14+00:00" + "time": "2023-04-09T17:37:40+00:00" }, { "name": "openlss/lib-array2xml", @@ -10053,16 +10068,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.17.0", + "version": "1.20.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "bfec8729f7e23c40670f98e27e694cfdb13fc12a" + "reference": "57f6787f0bb6431905a18aa7caea25dcd2bd59e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bfec8729f7e23c40670f98e27e694cfdb13fc12a", - "reference": "bfec8729f7e23c40670f98e27e694cfdb13fc12a", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/57f6787f0bb6431905a18aa7caea25dcd2bd59e0", + "reference": "57f6787f0bb6431905a18aa7caea25dcd2bd59e0", "shasum": "" }, "require": { @@ -10092,9 +10107,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.17.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.20.1" }, - "time": "2023-04-04T08:27:19+00:00" + "time": "2023-04-22T09:05:52+00:00" }, { "name": "phpunit/php-code-coverage", @@ -10416,16 +10431,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.6", + "version": "9.6.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "b65d59a059d3004a040c16a82e07bbdf6cfdd115" + "reference": "c993f0d3b0489ffc42ee2fe0bd645af1538a63b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b65d59a059d3004a040c16a82e07bbdf6cfdd115", - "reference": "b65d59a059d3004a040c16a82e07bbdf6cfdd115", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c993f0d3b0489ffc42ee2fe0bd645af1538a63b2", + "reference": "c993f0d3b0489ffc42ee2fe0bd645af1538a63b2", "shasum": "" }, "require": { @@ -10499,7 +10514,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.6" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.7" }, "funding": [ { @@ -10515,7 +10530,7 @@ "type": "tidelift" } ], - "time": "2023-03-27T11:43:46+00:00" + "time": "2023-04-14T08:58:40+00:00" }, { "name": "qossmic/deptrac-shim", @@ -11538,16 +11553,16 @@ }, { "name": "spiral/testing", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/spiral/testing.git", - "reference": "e923e94647fb2836370741727366a226f0d9bbfc" + "reference": "430916b7580daa85dfcb431850f1646f4806602a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spiral/testing/zipball/e923e94647fb2836370741727366a226f0d9bbfc", - "reference": "e923e94647fb2836370741727366a226f0d9bbfc", + "url": "https://api.github.com/repos/spiral/testing/zipball/430916b7580daa85dfcb431850f1646f4806602a", + "reference": "430916b7580daa85dfcb431850f1646f4806602a", "shasum": "" }, "require": { @@ -11555,28 +11570,29 @@ "mockery/mockery": "^1.5", "nyholm/psr7": "^1.5", "php": ">=8.1", - "phpunit/phpunit": "^9.5", - "spiral/auth": "^3.0", - "spiral/auth-http": "^3.0", - "spiral/boot": "^3.0", - "spiral/console": "^3.0", - "spiral/events": "^3.0", - "spiral/http": "^3.0", - "spiral/mailer": "^3.0", - "spiral/queue": "^3.0", - "spiral/security": "^3.0", - "spiral/session": "^3.0", - "spiral/storage": "^3.0", - "spiral/tokenizer": "^3.0", - "spiral/translator": "^3.0", - "spiral/views": "^3.0", + "phpunit/phpunit": "^9.6 || ^10.0", + "spiral/auth": "^3.7", + "spiral/auth-http": "^3.7", + "spiral/boot": "^3.7", + "spiral/console": "^3.7", + "spiral/events": "^3.7", + "spiral/http": "^3.7", + "spiral/mailer": "^3.7", + "spiral/queue": "^3.7", + "spiral/scaffolder": "^3.7", + "spiral/security": "^3.7", + "spiral/session": "^3.7", + "spiral/storage": "^3.7", + "spiral/tokenizer": "^3.7", + "spiral/translator": "^3.7", + "spiral/views": "^3.7", "symfony/mime": "^6.0" }, "require-dev": { - "spiral-packages/league-event": "^1.0", + "spiral-packages/league-event": "^1.0.1", "spiral/nyholm-bridge": "^1.2", - "spiral/roadrunner-bridge": "^2.0", - "vimeo/psalm": "^4.9" + "spiral/roadrunner-bridge": "^2.2 || ^3.0", + "vimeo/psalm": "^5.9" }, "suggest": { "brianium/paratest": "Required to run tests in parallel (^6.0).", @@ -11594,28 +11610,47 @@ ], "authors": [ { - "name": "butschster", - "email": "butschster@gmail.com", - "role": "Developer" + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" }, { - "name": "roxblnfk", - "email": "roxblnfk@gmail.com", - "role": "Developer" + "name": "Pavel Buchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + }, + { + "name": "RoadRunner Community", + "homepage": "https://github.com/spiral/roadrunner/graphs/contributors" } ], "description": "Spiral Framework testing SDK", - "homepage": "https://github.com/spiral/testing", + "homepage": "https://spiral.dev/", "keywords": [ "spiral", "spiral-packages", "testing" ], "support": { + "chat": "https://discord.gg/TFeEmCs", + "docs": "https://spiral.dev/docs/testing-start", + "forum": "https://forum.roadrunner.dev/", "issues": "https://github.com/spiral/testing/issues", - "source": "https://github.com/spiral/testing/tree/2.2.0" + "source": "https://github.com/spiral/testing/tree/2.3.0" }, - "time": "2022-10-26T07:41:37+00:00" + "funding": [ + { + "url": "https://github.com/sponsors/roadrunner-server", + "type": "github" + } + ], + "time": "2023-04-21T16:01:39+00:00" }, { "name": "squizlabs/php_codesniffer", diff --git a/tests/FakeHttp.php b/tests/FakeHttp.php index 09086e93..6c505027 100644 --- a/tests/FakeHttp.php +++ b/tests/FakeHttp.php @@ -40,7 +40,7 @@ public function getJson(string $uri, array $query = [], array $headers = [], arr ); } - public function patchJson(string $uri, array $data = [], array $headers = [], array $cookies = []): TestResponse + public function patchJson(string $uri, $data = [], array $headers = [], array $cookies = [], array $files = []): TestResponse { return $this->handleRequest( $this->createJsonRequest($uri, 'PATCH', $data, $headers, $cookies)