diff --git a/app/Http/Controllers/Api/Client/HardwareTokenController.php b/app/Http/Controllers/Api/Client/HardwareTokenController.php new file mode 100644 index 000000000..09ead408b --- /dev/null +++ b/app/Http/Controllers/Api/Client/HardwareTokenController.php @@ -0,0 +1,74 @@ +cache = $cache; + $this->createPublicKeyCredentials = $createPublicKeyCredentials; + } + + /** + * Returns all of the hardware security keys (WebAuthn) that exists for a user. + */ + public function index(Request $request): array + { + return []; + } + + /** + * Returns the data necessary for creating a new hardware security key for the + * user. + */ + public function create(Request $request): JsonResponse + { + $tokenId = Str::random(64); + $credentials = $this->createPublicKeyCredentials->handle($request->user()); + + $this->cache->put("webauthn:$tokenId", [ + 'credentials' => $credentials->jsonSerialize(), + 'user_entity' => $credentials->getUser()->jsonSerialize(), + ], CarbonImmutable::now()->addMinutes(10)); + + return new JsonResponse([ + 'data' => [ + 'token_id' => $tokenId, + 'credentials' => $credentials->jsonSerialize(), + ], + ]); + } + + /** + * Stores a new key for a user account. + */ + public function store(RegisterWebauthnTokenRequest $request): JsonResponse + { + return new JsonResponse([]); + } + + /** + * Removes a WebAuthn key from a user's account. + */ + public function delete(Request $request, int $webauthnKeyId): JsonResponse + { + return new JsonResponse([]); + } +} diff --git a/app/Http/Controllers/Api/Client/WebauthnController.php b/app/Http/Controllers/Api/Client/WebauthnController.php deleted file mode 100644 index bc4eb82ef..000000000 --- a/app/Http/Controllers/Api/Client/WebauthnController.php +++ /dev/null @@ -1,127 +0,0 @@ -fractal->collection(WebauthnKey::query()->where('user_id', '=', $request->user()->id)->get()) - ->transformWith(WebauthnKeyTransformer::class) - ->toArray(); - } - - /** - * ? - */ - public function register(Request $request): JsonResponse - { - if (!Webauthn::canRegister($request->user())) { - return new JsonResponse([ - 'error' => [ - 'message' => trans('webauthn::errors.cannot_register_new_key'), - ], - ], JsonResponse::HTTP_FORBIDDEN); - } - - $publicKey = Webauthn::getRegisterData($request->user()); - - $request->session()->put(self::SESSION_PUBLICKEY_CREATION, $publicKey); - $request->session()->save(); - - return new JsonResponse([ - 'public_key' => $publicKey, - ]); - } - - /** - * ? - * - * @return array|JsonResponse - */ - public function create(Request $request) - { - if (!Webauthn::canRegister($request->user())) { - return new JsonResponse([ - 'error' => [ - 'message' => trans('webauthn::errors.cannot_register_new_key'), - ], - ], JsonResponse::HTTP_FORBIDDEN); - } - - if ($request->input('register') === null) { - throw new BadRequestHttpException('Missing register data in request body.'); - } - - if ($request->input('name') === null) { - throw new BadRequestHttpException('Missing name in request body.'); - } - - try { - $publicKey = $request->session()->pull(self::SESSION_PUBLICKEY_CREATION); - if (!$publicKey instanceof PublicKeyCredentialCreationOptions) { - throw new ModelNotFoundException(trans('webauthn::errors.create_data_not_found')); - } - - $webauthnKey = Webauthn::doRegister( - $request->user(), - $publicKey, - $request->input('register'), - $request->input('name'), - ); - - - - return $this->fractal->item($webauthnKey) - ->transformWith(WebauthnKeyTransformer::class) - ->toArray(); - } catch (Exception $e) { - return new JsonResponse([ - 'error' => [ - 'message' => $e->getMessage(), - ], - ], JsonResponse::HTTP_FORBIDDEN); - } - } - - /** - * ? - */ - public function deleteKey(Request $request, int $webauthnKeyId): JsonResponse - { - try { - WebauthnKey::query() - ->where('user_id', $request->user()->getAuthIdentifier()) - ->findOrFail($webauthnKeyId) - ->delete(); - - return new JsonResponse([ - 'deleted' => true, - 'id' => $webauthnKeyId, - ]); - } catch (ModelNotFoundException $e) { - return new JsonResponse([ - 'error' => [ - 'message' => trans('webauthn::errors.object_not_found'), - ], - ], JsonResponse::HTTP_NOT_FOUND); - } - } -} diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index bf12ceb82..7df497865 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -8,7 +8,6 @@ use Illuminate\Http\Request; use Illuminate\Auth\AuthManager; use Illuminate\Http\JsonResponse; use Illuminate\Contracts\View\View; -use LaravelWebauthn\Facades\Webauthn; use Illuminate\Contracts\Config\Repository; use Illuminate\Contracts\View\Factory as ViewFactory; use Illuminate\Contracts\Cache\Repository as CacheRepository; @@ -92,30 +91,7 @@ class LoginController extends AbstractLoginController return; } - $webauthnKeys = $user->webauthnKeys()->get(); - - if (count($webauthnKeys) > 0) { - $token = Str::random(64); - $this->cache->put($token, $user->id, CarbonImmutable::now()->addMinutes(5)); - - $publicKey = Webauthn::getAuthenticateData($user); - $request->session()->put(self::SESSION_PUBLICKEY_REQUEST, $publicKey); - $request->session()->save(); - - $methods = [self::METHOD_WEBAUTHN]; - if ($user->use_totp) { - $methods[] = self::METHOD_TOTP; - } - - return new JsonResponse([ - 'complete' => false, - 'methods' => $methods, - 'confirmation_token' => $token, - 'webauthn' => [ - 'public_key' => $publicKey, - ], - ]); - } elseif ($user->use_totp) { + if ($user->use_totp) { $token = Str::random(64); $this->cache->put($token, $user->id, CarbonImmutable::now()->addMinutes(5)); diff --git a/app/Http/Controllers/Auth/WebauthnController.php b/app/Http/Controllers/Auth/WebauthnController.php deleted file mode 100644 index 7a85b9e19..000000000 --- a/app/Http/Controllers/Auth/WebauthnController.php +++ /dev/null @@ -1,101 +0,0 @@ -cache = $cache; - } - - /** - * @return JsonResponse|void - * - * @throws \Illuminate\Validation\ValidationException - * @throws \Pterodactyl\Exceptions\DisplayException - */ - public function auth(Request $request) - { - if ($this->hasTooManyLoginAttempts($request)) { - $this->sendLockoutResponse($request); - - return; - } - - $token = $request->input('confirmation_token'); - try { - /** @var \Pterodactyl\Models\User $user */ - $user = User::query()->findOrFail($this->cache->get($token, 0)); - } catch (ModelNotFoundException $exception) { - $this->incrementLoginAttempts($request); - - $this->sendFailedLoginResponse( - $request, - null, - 'The authentication token provided has expired, please refresh the page and try again.' - ); - - return; - } - $this->auth->guard()->onceUsingId($user->id); - - try { - $publicKey = $request->session()->pull(self::SESSION_PUBLICKEY_REQUEST); - if (!$publicKey instanceof PublicKeyCredentialRequestOptions) { - throw new ModelNotFoundException(trans('webauthn::errors.auth_data_not_found')); - } - - $result = Webauthn::doAuthenticate( - $user, - $publicKey, - $this->input($request, 'data'), - ); - - if (!$result) { - return new JsonResponse([ - 'error' => [ - 'message' => 'Nice attempt, you didn\'t pass the challenge.', - ], - ], JsonResponse::HTTP_I_AM_A_TEAPOT); - } - - $this->cache->delete($token); - - return $this->sendLoginResponse($user, $request); - } catch (Exception $e) { - return new JsonResponse([ - 'error' => [ - 'message' => $e->getMessage(), - ], - ], JsonResponse::HTTP_FORBIDDEN); - } - } - - /** - * Retrieve the input with a string result. - */ - private function input(Request $request, string $name, string $default = ''): string - { - $result = $request->input($name); - - return is_string($result) ? $result : $default; - } -} diff --git a/app/Http/Requests/Api/Client/Account/RegisterWebauthnTokenRequest.php b/app/Http/Requests/Api/Client/Account/RegisterWebauthnTokenRequest.php new file mode 100644 index 000000000..ad67341bb --- /dev/null +++ b/app/Http/Requests/Api/Client/Account/RegisterWebauthnTokenRequest.php @@ -0,0 +1,17 @@ + ['string', 'required'], + 'register' => ['string', 'required'], + 'public_key' => ['string', 'required'], + ]; + } +} diff --git a/app/Models/HardwareSecurityKey.php b/app/Models/HardwareSecurityKey.php new file mode 100644 index 000000000..4f2797b14 --- /dev/null +++ b/app/Models/HardwareSecurityKey.php @@ -0,0 +1,51 @@ + 'int', + 'transports' => 'array', + 'trust_path' => 'array', + 'other_ui' => 'array', + ]; + + public function user() + { + return $this->belongsTo(User::class); + } + + public function toCredentialsDescriptor() + { + return new PublicKeyCredentialDescriptor( + $this->type, + $this->public_key_id, + $this->transports + ); + } + + public function toCredentialSource(): PublicKeyCredentialSource + { + return PublicKeyCredentialSource::createFromArray([ + 'publicKeyCredentialId' => $this->public_key_id, + 'type' => $this->type, + 'transports' => $this->transports, + 'attestationType' => $this->attestation_type, + // 'trustPath' => $key->trustPath->jsonSerialize(), + 'aaguid' => $this->aaguid, + 'credentialPublicKey' => $this->public_key, + 'userHandle' => $this->user_handle, + 'counter' => $this->counter, + 'otherUI' => $this->other_ui, + ]); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 3e3ae71d9..01966d8e2 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -210,9 +210,9 @@ class User extends Model implements return $this->hasMany(RecoveryToken::class); } - public function webauthnKeys(): HasMany + public function hardwareSecurityKeys(): HasMany { - return $this->hasMany(WebauthnKey::class); + return $this->hasMany(HardwareSecurityKey::class); } /** diff --git a/app/Models/WebauthnKey.php b/app/Models/WebauthnKey.php deleted file mode 100644 index 07068e407..000000000 --- a/app/Models/WebauthnKey.php +++ /dev/null @@ -1,18 +0,0 @@ -belongsTo(User::class); - } -} diff --git a/app/Repositories/Webauthn/PublicKeyCredentialSourceRepository.php b/app/Repositories/Webauthn/PublicKeyCredentialSourceRepository.php new file mode 100644 index 000000000..0367cba04 --- /dev/null +++ b/app/Repositories/Webauthn/PublicKeyCredentialSourceRepository.php @@ -0,0 +1,64 @@ +user = $user; + } + + /** + * Find a single hardware security token for a user by uzing the credential ID. + */ + public function findOneByCredentialId(string $id): ?PublicKeyCredentialSource + { + /** @var \Pterodactyl\Models\HardwareSecurityKey $key */ + $key = $this->user->hardwareSecurityKeys() + ->where('public_key_id', $id) + ->first(); + + return $key ? $key->toCredentialSource() : null; + } + + /** + * Find all of the hardware tokens that exist for the user using the given + * entity handle. + */ + public function findAllForUserEntity(PublicKeyCredentialUserEntity $entity): array + { + $results = $this->user->hardwareSecurityKeys() + ->where('user_handle', $entity->getId()) + ->get(); + + return $results->map(function (HardwareSecurityKey $key) { + return $key->toCredentialSource(); + })->values()->toArray(); + } + + /** + * Save a credential to the database and link it with the user. + */ + public function saveCredentialSource(PublicKeyCredentialSource $source): void + { + // todo: implement + } + + /** + * Returns a new instance of the repository with the provided user attached. + */ + public static function factory(User $user): self + { + return Container::getInstance()->make(static::class, ['user' => $user]); + } +} diff --git a/app/Services/Users/HardwareSecurityKeys/CreatePublicKeyCredentialsService.php b/app/Services/Users/HardwareSecurityKeys/CreatePublicKeyCredentialsService.php new file mode 100644 index 000000000..20bd62152 --- /dev/null +++ b/app/Services/Users/HardwareSecurityKeys/CreatePublicKeyCredentialsService.php @@ -0,0 +1,49 @@ +rpEntity = new PublicKeyCredentialRpEntity(config('app.name'), trim($url, '/')); + } + + public function handle(User $user): PublicKeyCredentialCreationOptions + { + $id = Uuid::uuid4()->toString(); + + $entity = new PublicKeyCredentialUserEntity($user->uuid, $id, $user->email); + + $excluded = $user->hardwareSecurityKeys->map(function (HardwareSecurityKey $key) { + return $key->toCredentialsDescriptor(); + })->values()->toArray(); + + return $this->getServerInstance($user)->generatePublicKeyCredentialCreationOptions( + $entity, + PublicKeyCredentialCreationOptions::ATTESTATION_CONVEYANCE_PREFERENCE_NONE, + $excluded + ); + } + + protected function getServerInstance(User $user) + { + return new Server( + $this->rpEntity, + PublicKeyCredentialSourceRepository::factory($user) + ); + } +} diff --git a/app/Transformers/Api/Client/WebauthnKeyTransformer.php b/app/Transformers/Api/Client/WebauthnKeyTransformer.php index 07c47875e..3f7b695ca 100644 --- a/app/Transformers/Api/Client/WebauthnKeyTransformer.php +++ b/app/Transformers/Api/Client/WebauthnKeyTransformer.php @@ -2,7 +2,7 @@ namespace Pterodactyl\Transformers\Api\Client; -use Pterodactyl\Models\WebauthnKey; +use Pterodactyl\Models\HardwareSecurityKey; use Pterodactyl\Transformers\Api\Transformer; class WebauthnKeyTransformer extends Transformer @@ -12,15 +12,13 @@ class WebauthnKeyTransformer extends Transformer */ public function getResourceName(): string { - return WebauthnKey::RESOURCE_NAME; + return HardwareSecurityKey::RESOURCE_NAME; } /** * Return basic information about the currently logged in user. - * - * @param \Pterodactyl\Models\WebauthnKey|\LaravelWebauthn\Models\WebauthnKey $model */ - public function transform($model): array + public function transform(HardwareSecurityKey $model): array { return [ 'id' => $model->id, diff --git a/composer.json b/composer.json index 24bc5936b..ea5caa291 100644 --- a/composer.json +++ b/composer.json @@ -17,8 +17,7 @@ "ext-pdo": "*", "ext-pdo_mysql": "*", "ext-zip": "*", - "asbiin/laravel-webauthn": "^1.1", - "aws/aws-sdk-php": "^3.192", + "aws/aws-sdk-php": "^3.186", "doctrine/dbal": "^3.1", "fideloper/proxy": "^4.4", "guzzlehttp/guzzle": "^7.3", @@ -42,6 +41,7 @@ "spatie/laravel-query-builder": "^3.5", "staudenmeir/belongs-to-through": "^2.11", "symfony/yaml": "^5.3", + "web-auth/webauthn-lib": "^3.3", "webmozart/assert": "^1.10" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 9875d30af..2628b6bc2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,163 +4,23 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e33e2f1c67ffd0f166a97917dfacd63a", + "content-hash": "f6da942b0b0b32416bca002dff11f403", "packages": [ - { - "name": "asbiin/laravel-webauthn", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/asbiin/laravel-webauthn.git", - "reference": "b957ef8d8dd9a0b9a119f1bb97e855bf9f61ac22" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/asbiin/laravel-webauthn/zipball/b957ef8d8dd9a0b9a119f1bb97e855bf9f61ac22", - "reference": "b957ef8d8dd9a0b9a119f1bb97e855bf9f61ac22", - "shasum": "" - }, - "require": { - "guzzlehttp/psr7": "^1.5", - "laravel/framework": "^5.8 || ^6.0 || ^7.0 || ^8.0", - "php-http/discovery": "^1.6", - "php-http/httplug": "^1.0 || ^2.0", - "php-http/message": "^1.7", - "psr/http-client": "^1.0", - "thecodingmachine/safe": "^1.0", - "web-auth/cose-lib": "^3.0", - "web-auth/webauthn-lib": "^3.0", - "web-token/jwt-signature": "^1.3 || ^2.0" - }, - "require-dev": { - "ext-sqlite3": "*", - "laravel/legacy-factories": "^1.0", - "nunomaduro/larastan": "^0.4 || ^0.5 || ^0.6 || ^0.7", - "ocramius/package-versions": "^1.5 || ^2.0", - "orchestra/testbench": "^3.5 || ^5.0 || ^6.0", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "psalm/plugin-laravel": "^1.4", - "thecodingmachine/phpstan-safe-rule": "^1.0", - "vimeo/psalm": "^3.9 || ^4.0" - }, - "suggest": { - "php-http/client-implementation": "Recommended for the AndroidSafetyNet Attestation Statement support", - "web-token/jwt-signature-algorithm-ecdsa": "Recommended for the AndroidSafetyNet Attestation Statement support", - "web-token/jwt-signature-algorithm-eddsa": "Recommended for the AndroidSafetyNet Attestation Statement support", - "web-token/jwt-signature-algorithm-rsa": "Mandatory for the AndroidSafetyNet Attestation Statement support" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelWebauthn\\SingletonServiceProvider", - "LaravelWebauthn\\WebauthnServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelWebauthn\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alexis Saettler", - "email": "alexis@saettler.org" - } - ], - "description": "Laravel Webauthn support", - "keywords": [ - "laravel", - "php", - "security", - "webauthn" - ], - "support": { - "issues": "https://github.com/asbiin/laravel-webauthn/issues", - "source": "https://github.com/asbiin/laravel-webauthn" - }, - "funding": [ - { - "url": "https://github.com/asbiin", - "type": "github" - } - ], - "time": "2021-07-03T12:01:46+00:00" - }, - { - "name": "aws/aws-crt-php", - "version": "v1.0.2", - "source": { - "type": "git", - "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "3942776a8c99209908ee0b287746263725685732" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/3942776a8c99209908ee0b287746263725685732", - "reference": "3942776a8c99209908ee0b287746263725685732", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35|^5.4.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "AWS SDK Common Runtime Team", - "email": "aws-sdk-common-runtime@amazon.com" - } - ], - "description": "AWS Common Runtime for PHP", - "homepage": "http://aws.amazon.com/sdkforphp", - "keywords": [ - "amazon", - "aws", - "crt", - "sdk" - ], - "support": { - "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.0.2" - }, - "time": "2021-09-03T22:57:30+00:00" - }, { "name": "aws/aws-sdk-php", - "version": "3.192.0", + "version": "3.186.3", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "3f3026ecd3ef534701499ce98c8e3393604fca8b" + "reference": "037fd80e421b1dde4d32ec16d0f79c61bbee1605" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/3f3026ecd3ef534701499ce98c8e3393604fca8b", - "reference": "3f3026ecd3ef534701499ce98c8e3393604fca8b", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/037fd80e421b1dde4d32ec16d0f79c61bbee1605", + "reference": "037fd80e421b1dde4d32ec16d0f79c61bbee1605", "shasum": "" }, "require": { - "aws/aws-crt-php": "^1.0.1", "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", @@ -232,9 +92,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.192.0" + "source": "https://github.com/aws/aws-sdk-php/tree/3.186.3" }, - "time": "2021-09-03T18:13:44+00:00" + "time": "2021-07-30T18:30:36+00:00" }, { "name": "beberlei/assert", @@ -305,16 +165,16 @@ }, { "name": "brick/math", - "version": "0.9.3", + "version": "0.9.2", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", "shasum": "" }, "require": { @@ -324,7 +184,7 @@ "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.9.2" + "vimeo/psalm": "4.3.2" }, "type": "library", "autoload": { @@ -349,98 +209,28 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.3" + "source": "https://github.com/brick/math/tree/0.9.2" }, "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/brick/math", "type": "tidelift" } ], - "time": "2021-08-15T20:50:18+00:00" - }, - { - "name": "clue/stream-filter", - "version": "v1.5.0", - "source": { - "type": "git", - "url": "https://github.com/clue/stream-filter.git", - "reference": "aeb7d8ea49c7963d3b581378955dbf5bc49aa320" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/stream-filter/zipball/aeb7d8ea49c7963d3b581378955dbf5bc49aa320", - "reference": "aeb7d8ea49c7963d3b581378955dbf5bc49aa320", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" - }, - "type": "library", - "autoload": { - "psr-4": { - "Clue\\StreamFilter\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering" - } - ], - "description": "A simple and modern approach to stream filtering in PHP", - "homepage": "https://github.com/clue/php-stream-filter", - "keywords": [ - "bucket brigade", - "callback", - "filter", - "php_user_filter", - "stream", - "stream_filter_append", - "stream_filter_register" - ], - "support": { - "issues": "https://github.com/clue/stream-filter/issues", - "source": "https://github.com/clue/stream-filter/tree/v1.5.0" - }, - "funding": [ - { - "url": "https://clue.engineering/support", - "type": "custom" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2020-10-02T12:38:20+00:00" + "time": "2021-01-20T22:51:39+00:00" }, { "name": "composer/package-versions-deprecated", - "version": "1.11.99.3", + "version": "1.11.99.2", "source": { "type": "git", "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "fff576ac850c045158a250e7e27666e146e78d18" + "reference": "c6522afe5540d5fc46675043d3ed5a45a740b27c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/fff576ac850c045158a250e7e27666e146e78d18", - "reference": "fff576ac850c045158a250e7e27666e146e78d18", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/c6522afe5540d5fc46675043d3ed5a45a740b27c", + "reference": "c6522afe5540d5fc46675043d3ed5a45a740b27c", "shasum": "" }, "require": { @@ -484,7 +274,7 @@ "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.3" + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.2" }, "funding": [ { @@ -500,20 +290,20 @@ "type": "tidelift" } ], - "time": "2021-08-17T13:49:14+00:00" + "time": "2021-05-24T07:46:03+00:00" }, { "name": "dflydev/dot-access-data", - "version": "v3.0.1", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "0992cc19268b259a39e86f296da5f0677841f42c" + "reference": "e04ff030d24a33edc2421bef305e32919dd78fc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", - "reference": "0992cc19268b259a39e86f296da5f0677841f42c", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/e04ff030d24a33edc2421bef305e32919dd78fc3", + "reference": "e04ff030d24a33edc2421bef305e32919dd78fc3", "shasum": "" }, "require": { @@ -573,9 +363,9 @@ ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1" + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.0" }, - "time": "2021-08-13T13:06:58+00:00" + "time": "2021-01-01T22:08:42+00:00" }, { "name": "doctrine/cache", @@ -1361,26 +1151,31 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.0.2", + "version": "v1.0.1", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "84afea85c6841deeea872f36249a206e878a5de0" + "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/84afea85c6841deeea872f36249a206e878a5de0", - "reference": "84afea85c6841deeea872f36249a206e878a5de0", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb", + "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0", - "phpoption/phpoption": "^1.8" + "php": "^7.0|^8.0", + "phpoption/phpoption": "^1.7.3" }, "require-dev": { - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { "psr-4": { "GrahamCampbell\\ResultType\\": "src/" @@ -1393,7 +1188,7 @@ "authors": [ { "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk" + "email": "graham@alt-three.com" } ], "description": "An Implementation Of The Result Type", @@ -1406,7 +1201,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.2" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.1" }, "funding": [ { @@ -1418,7 +1213,7 @@ "type": "tidelift" } ], - "time": "2021-08-28T21:34:50+00:00" + "time": "2020-04-13T13:17:36+00:00" }, { "name": "guzzlehttp/guzzle", @@ -1786,16 +1581,16 @@ }, { "name": "laravel/framework", - "version": "v8.58.0", + "version": "v8.52.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "1b819bf99d87bd543a4d4895e5b3350f61ea7a23" + "reference": "8fe9877d52e25f8aed36c51734e5a8510be967e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/1b819bf99d87bd543a4d4895e5b3350f61ea7a23", - "reference": "1b819bf99d87bd543a4d4895e5b3350f61ea7a23", + "url": "https://api.github.com/repos/laravel/framework/zipball/8fe9877d52e25f8aed36c51734e5a8510be967e6", + "reference": "8fe9877d52e25f8aed36c51734e5a8510be967e6", "shasum": "" }, "require": { @@ -1868,7 +1663,7 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.189.0", + "aws/aws-sdk-php": "^3.155", "doctrine/dbal": "^2.6|^3.0", "filp/whoops": "^2.8", "guzzlehttp/guzzle": "^6.5.5|^7.0.1", @@ -1881,7 +1676,7 @@ "symfony/cache": "^5.1.4" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.189.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", "brianium/paratest": "Required to run tests in parallel (^6.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6|^3.0).", "ext-ftp": "Required to use the Flysystem FTP driver.", @@ -1950,7 +1745,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-08-31T13:55:57+00:00" + "time": "2021-07-27T13:03:29+00:00" }, { "name": "laravel/helpers", @@ -2335,21 +2130,21 @@ }, { "name": "league/commonmark", - "version": "2.0.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "2df87709f44b0dd733df86aef0830dce9b1f0f13" + "reference": "0d57f20aa03129ee7ef5f690e634884315d4238c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2df87709f44b0dd733df86aef0830dce9b1f0f13", - "reference": "2df87709f44b0dd733df86aef0830dce9b1f0f13", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/0d57f20aa03129ee7ef5f690e634884315d4238c", + "reference": "0d57f20aa03129ee7ef5f690e634884315d4238c", "shasum": "" }, "require": { "ext-mbstring": "*", - "league/config": "^1.1.1", + "league/config": "^1.1", "php": "^7.4 || ^8.0", "psr/event-dispatcher": "^1.0", "symfony/polyfill-php80": "^1.15" @@ -2442,24 +2237,24 @@ "type": "tidelift" } ], - "time": "2021-08-14T14:06:04+00:00" + "time": "2021-07-31T19:15:22+00:00" }, { "name": "league/config", - "version": "v1.1.1", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/thephpleague/config.git", - "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" + "reference": "20d42d88f12a76ff862e17af4f14a5a4bbfd0925" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", - "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "url": "https://api.github.com/repos/thephpleague/config/zipball/20d42d88f12a76ff862e17af4f14a5a4bbfd0925", + "reference": "20d42d88f12a76ff862e17af4f14a5a4bbfd0925", "shasum": "" }, "require": { - "dflydev/dot-access-data": "^3.0.1", + "dflydev/dot-access-data": "^3.0", "nette/schema": "^1.2", "php": "^7.4 || ^8.0" }, @@ -2524,20 +2319,20 @@ "type": "github" } ], - "time": "2021-08-14T12:15:32+00:00" + "time": "2021-06-19T15:52:37+00:00" }, { "name": "league/flysystem", - "version": "1.1.5", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "18634df356bfd4119fe3d6156bdb990c414c14ea" + "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/18634df356bfd4119fe3d6156bdb990c414c14ea", - "reference": "18634df356bfd4119fe3d6156bdb990c414c14ea", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3ad69181b8afed2c9edf7be5a2918144ff4ea32", + "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32", "shasum": "" }, "require": { @@ -2610,7 +2405,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.5" + "source": "https://github.com/thephpleague/flysystem/tree/1.1.4" }, "funding": [ { @@ -2618,7 +2413,7 @@ "type": "other" } ], - "time": "2021-08-17T13:49:42+00:00" + "time": "2021-06-23T21:56:05+00:00" }, { "name": "league/flysystem-aws-s3-v3", @@ -2852,32 +2647,32 @@ }, { "name": "league/uri", - "version": "6.5.0", + "version": "6.4.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "c68ca445abb04817d740ddd6d0b3551826ef0c5a" + "reference": "09da64118eaf4c5d52f9923a1e6a5be1da52fd9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/c68ca445abb04817d740ddd6d0b3551826ef0c5a", - "reference": "c68ca445abb04817d740ddd6d0b3551826ef0c5a", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/09da64118eaf4c5d52f9923a1e6a5be1da52fd9a", + "reference": "09da64118eaf4c5d52f9923a1e6a5be1da52fd9a", "shasum": "" }, "require": { "ext-json": "*", - "league/uri-interfaces": "^2.3", - "php": "^7.3 || ^8.0", + "league/uri-interfaces": "^2.1", + "php": ">=7.2", "psr/http-message": "^1.0" }, "conflict": { "league/uri-schemes": "^1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19 || ^3.0", - "phpstan/phpstan": "^0.12.90", - "phpstan/phpstan-phpunit": "^0.12.22", - "phpstan/phpstan-strict-rules": "^0.12.11", + "friendsofphp/php-cs-fixer": "^2.16", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", "phpunit/phpunit": "^8.0 || ^9.0", "psr/http-factory": "^1.0" }, @@ -2936,7 +2731,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri/issues", - "source": "https://github.com/thephpleague/uri/tree/6.5.0" + "source": "https://github.com/thephpleague/uri/tree/6.4.0" }, "funding": [ { @@ -2944,7 +2739,7 @@ "type": "github" } ], - "time": "2021-08-27T09:54:07+00:00" + "time": "2020-11-22T14:29:11+00:00" }, { "name": "league/uri-interfaces", @@ -3224,16 +3019,16 @@ }, { "name": "nesbot/carbon", - "version": "2.52.0", + "version": "2.51.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "369c0e2737c56a0f39c946dd261855255a6fccbe" + "reference": "8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/369c0e2737c56a0f39c946dd261855255a6fccbe", - "reference": "369c0e2737c56a0f39c946dd261855255a6fccbe", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922", + "reference": "8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922", "shasum": "" }, "require": { @@ -3314,7 +3109,7 @@ "type": "tidelift" } ], - "time": "2021-08-14T19:10:52+00:00" + "time": "2021-07-28T13:16:28+00:00" }, { "name": "nette/schema", @@ -3380,16 +3175,16 @@ }, { "name": "nette/utils", - "version": "v3.2.3", + "version": "v3.2.2", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "5c36cc1ba9bb6abb8a9e425cf054e0c3fd5b9822" + "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/5c36cc1ba9bb6abb8a9e425cf054e0c3fd5b9822", - "reference": "5c36cc1ba9bb6abb8a9e425cf054e0c3fd5b9822", + "url": "https://api.github.com/repos/nette/utils/zipball/967cfc4f9a1acd5f1058d76715a424c53343c20c", + "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c", "shasum": "" }, "require": { @@ -3459,9 +3254,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.2.3" + "source": "https://github.com/nette/utils/tree/v3.2.2" }, - "time": "2021-08-16T21:05:00+00:00" + "time": "2021-03-03T22:53:25+00:00" }, { "name": "nikic/php-parser", @@ -3651,346 +3446,31 @@ }, "time": "2020-12-06T15:14:20+00:00" }, - { - "name": "php-http/discovery", - "version": "1.14.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/discovery.git", - "reference": "778f722e29250c1fac0bbdef2c122fa5d038c9eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/778f722e29250c1fac0bbdef2c122fa5d038c9eb", - "reference": "778f722e29250c1fac0bbdef2c122fa5d038c9eb", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "nyholm/psr7": "<1.0" - }, - "require-dev": { - "graham-campbell/phpspec-skip-example-extension": "^5.0", - "php-http/httplug": "^1.0 || ^2.0", - "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^5.1 || ^6.1", - "puli/composer-plugin": "1.0.0-beta10" - }, - "suggest": { - "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Discovery\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Finds installed HTTPlug implementations and PSR-7 message factories", - "homepage": "http://php-http.org", - "keywords": [ - "adapter", - "client", - "discovery", - "factory", - "http", - "message", - "psr7" - ], - "support": { - "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.14.0" - }, - "time": "2021-06-01T14:30:21+00:00" - }, - { - "name": "php-http/httplug", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/httplug.git", - "reference": "191a0a1b41ed026b717421931f8d3bd2514ffbf9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/191a0a1b41ed026b717421931f8d3bd2514ffbf9", - "reference": "191a0a1b41ed026b717421931f8d3bd2514ffbf9", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/promise": "^1.1", - "psr/http-client": "^1.0", - "psr/http-message": "^1.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.1", - "phpspec/phpspec": "^5.1 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "HTTPlug, the HTTP client abstraction for PHP", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "http" - ], - "support": { - "issues": "https://github.com/php-http/httplug/issues", - "source": "https://github.com/php-http/httplug/tree/master" - }, - "time": "2020-07-13T15:43:23+00:00" - }, - { - "name": "php-http/message", - "version": "1.12.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/message.git", - "reference": "39eb7548be982a81085fe5a6e2a44268cd586291" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/39eb7548be982a81085fe5a6e2a44268cd586291", - "reference": "39eb7548be982a81085fe5a6e2a44268cd586291", - "shasum": "" - }, - "require": { - "clue/stream-filter": "^1.5", - "php": "^7.1 || ^8.0", - "php-http/message-factory": "^1.0.2", - "psr/http-message": "^1.0" - }, - "provide": { - "php-http/message-factory-implementation": "1.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.6", - "ext-zlib": "*", - "guzzlehttp/psr7": "^1.0", - "laminas/laminas-diactoros": "^2.0", - "phpspec/phpspec": "^5.1 || ^6.3", - "slim/slim": "^3.0" - }, - "suggest": { - "ext-zlib": "Used with compressor/decompressor streams", - "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", - "laminas/laminas-diactoros": "Used with Diactoros Factories", - "slim/slim": "Used with Slim Framework PSR-7 implementation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Message\\": "src/" - }, - "files": [ - "src/filters.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "HTTP Message related tools", - "homepage": "http://php-http.org", - "keywords": [ - "http", - "message", - "psr-7" - ], - "support": { - "issues": "https://github.com/php-http/message/issues", - "source": "https://github.com/php-http/message/tree/1.12.0" - }, - "time": "2021-08-29T09:13:12+00:00" - }, - { - "name": "php-http/message-factory", - "version": "v1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/message-factory.git", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Factory interfaces for PSR-7 HTTP Message", - "homepage": "http://php-http.org", - "keywords": [ - "factory", - "http", - "message", - "stream", - "uri" - ], - "support": { - "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/master" - }, - "time": "2015-12-19T14:08:53+00:00" - }, - { - "name": "php-http/promise", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/promise.git", - "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", - "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.3.2", - "phpspec/phpspec": "^5.1.2 || ^6.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Joel Wurtz", - "email": "joel.wurtz@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Promise used for asynchronous HTTP requests", - "homepage": "http://httplug.io", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/php-http/promise/issues", - "source": "https://github.com/php-http/promise/tree/1.1.0" - }, - "time": "2020-07-07T09:29:14+00:00" - }, { "name": "phpoption/phpoption", - "version": "1.8.0", + "version": "1.7.5", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "5455cb38aed4523f99977c4a12ef19da4bfe2a28" + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/5455cb38aed4523f99977c4a12ef19da4bfe2a28", - "reference": "5455cb38aed4523f99977c4a12ef19da4bfe2a28", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0" + "php": "^5.5.9 || ^7.0 || ^8.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^6.5.14 || ^7.0.20 || ^8.5.19 || ^9.5.8" + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -4009,7 +3489,7 @@ }, { "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk" + "email": "graham@alt-three.com" } ], "description": "Option Type for PHP", @@ -4021,7 +3501,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.8.0" + "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" }, "funding": [ { @@ -4033,7 +3513,7 @@ "type": "tidelift" } ], - "time": "2021-08-28T21:27:29+00:00" + "time": "2020-07-20T17:29:33+00:00" }, { "name": "pragmarx/google2fa", @@ -4752,21 +4232,20 @@ }, { "name": "ramsey/collection", - "version": "1.2.1", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "eaca1dc1054ddd10cbd83c1461907bee6fb528fa" + "reference": "ab2237657ad99667a5143e32ba2683c8029563d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/eaca1dc1054ddd10cbd83c1461907bee6fb528fa", - "reference": "eaca1dc1054ddd10cbd83c1461907bee6fb528fa", + "url": "https://api.github.com/repos/ramsey/collection/zipball/ab2237657ad99667a5143e32ba2683c8029563d4", + "reference": "ab2237657ad99667a5143e32ba2683c8029563d4", "shasum": "" }, "require": { - "php": "^7.3 || ^8", - "symfony/polyfill-php81": "^1.23" + "php": "^7.2 || ^8" }, "require-dev": { "captainhook/captainhook": "^5.3", @@ -4776,7 +4255,6 @@ "hamcrest/hamcrest-php": "^2", "jangregor/phpstan-prophecy": "^0.8", "mockery/mockery": "^1.3", - "phpspec/prophecy-phpunit": "^2.0", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^0.12.32", "phpstan/phpstan-mockery": "^0.12.5", @@ -4804,7 +4282,7 @@ "homepage": "https://benramsey.com" } ], - "description": "A PHP library for representing and manipulating collections.", + "description": "A PHP 7.2+ library for representing and manipulating collections.", "keywords": [ "array", "collection", @@ -4815,7 +4293,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.2.1" + "source": "https://github.com/ramsey/collection/tree/1.1.4" }, "funding": [ { @@ -4827,20 +4305,20 @@ "type": "tidelift" } ], - "time": "2021-08-06T03:41:06+00:00" + "time": "2021-07-30T00:58:27+00:00" }, { "name": "ramsey/uuid", - "version": "4.2.1", + "version": "4.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "fe665a03df4f056aa65af552a96e1976df8c8dae" + "reference": "cd4032040a750077205918c86049aa0f43d22947" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/fe665a03df4f056aa65af552a96e1976df8c8dae", - "reference": "fe665a03df4f056aa65af552a96e1976df8c8dae", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947", + "reference": "cd4032040a750077205918c86049aa0f43d22947", "shasum": "" }, "require": { @@ -4854,26 +4332,26 @@ "rhumsaa/uuid": "self.version" }, "require-dev": { - "captainhook/captainhook": "^5.10", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "codeception/aspect-mock": "^3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0", "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", + "goaop/framework": "^2", "mockery/mockery": "^1.3", "moontoast/math": "^1.1", "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", "php-mock/php-mock-mockery": "^1.3", + "php-mock/php-mock-phpunit": "^2.5", "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", + "phpbench/phpbench": "^0.17.1", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^0.12", "phpstan/phpstan-mockery": "^0.12", "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^8.5 || ^9", - "slevomat/coding-standard": "^7.0", + "phpunit/phpunit": "^8.5", + "psy/psysh": "^0.10.0", + "slevomat/coding-standard": "^6.0", "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" + "vimeo/psalm": "3.9.4" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", @@ -4886,10 +4364,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.x-dev" - }, - "captainhook": { - "force-install": true + "dev-master": "4.x-dev" } }, "autoload": { @@ -4905,6 +4380,7 @@ "MIT" ], "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "homepage": "https://github.com/ramsey/uuid", "keywords": [ "guid", "identifier", @@ -4912,19 +4388,16 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.2.1" + "rss": "https://github.com/ramsey/uuid/releases.atom", + "source": "https://github.com/ramsey/uuid" }, "funding": [ { "url": "https://github.com/ramsey", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" } ], - "time": "2021-08-11T01:06:55+00:00" + "time": "2020-08-18T17:17:46+00:00" }, { "name": "s1lentium/iptools", @@ -5324,16 +4797,16 @@ }, { "name": "staudenmeir/belongs-to-through", - "version": "v2.11.2", + "version": "v2.11.1", "source": { "type": "git", "url": "https://github.com/staudenmeir/belongs-to-through.git", - "reference": "32d03527163a3edd7f88e4b74b03575e4bdb5db7" + "reference": "d300afa1045e6541b79af2291336312613b5cd02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/staudenmeir/belongs-to-through/zipball/32d03527163a3edd7f88e4b74b03575e4bdb5db7", - "reference": "32d03527163a3edd7f88e4b74b03575e4bdb5db7", + "url": "https://api.github.com/repos/staudenmeir/belongs-to-through/zipball/d300afa1045e6541b79af2291336312613b5cd02", + "reference": "d300afa1045e6541b79af2291336312613b5cd02", "shasum": "" }, "require": { @@ -5341,8 +4814,7 @@ "php": "^7.3|^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "scrutinizer/ocular": "^1.8" + "phpunit/phpunit": "^9.3" }, "type": "library", "autoload": { @@ -5367,7 +4839,7 @@ "description": "Laravel Eloquent BelongsToThrough relationships", "support": { "issues": "https://github.com/staudenmeir/belongs-to-through/issues", - "source": "https://github.com/staudenmeir/belongs-to-through/tree/v2.11.2" + "source": "https://github.com/staudenmeir/belongs-to-through/tree/v2.11.1" }, "funding": [ { @@ -5375,7 +4847,7 @@ "type": "custom" } ], - "time": "2021-08-19T18:23:06+00:00" + "time": "2020-11-16T19:39:09+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -5454,16 +4926,16 @@ }, { "name": "symfony/console", - "version": "v5.3.7", + "version": "v5.3.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a" + "reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8b1008344647462ae6ec57559da166c2bfa5e16a", - "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a", + "url": "https://api.github.com/repos/symfony/console/zipball/51b71afd6d2dc8f5063199357b9880cea8d8bfe2", + "reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2", "shasum": "" }, "require": { @@ -5533,7 +5005,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.3.7" + "source": "https://github.com/symfony/console/tree/v5.3.6" }, "funding": [ { @@ -5549,7 +5021,7 @@ "type": "tidelift" } ], - "time": "2021-08-25T20:02:16+00:00" + "time": "2021-07-27T19:10:22+00:00" }, { "name": "symfony/css-selector", @@ -5686,16 +5158,16 @@ }, { "name": "symfony/error-handler", - "version": "v5.3.7", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "3bc60d0fba00ae8d1eaa9eb5ab11a2bbdd1fc321" + "reference": "281f6c4660bcf5844bb0346fe3a4664722fe4c73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/3bc60d0fba00ae8d1eaa9eb5ab11a2bbdd1fc321", - "reference": "3bc60d0fba00ae8d1eaa9eb5ab11a2bbdd1fc321", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/281f6c4660bcf5844bb0346fe3a4664722fe4c73", + "reference": "281f6c4660bcf5844bb0346fe3a4664722fe4c73", "shasum": "" }, "require": { @@ -5734,7 +5206,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.3.7" + "source": "https://github.com/symfony/error-handler/tree/v5.3.4" }, "funding": [ { @@ -5750,20 +5222,20 @@ "type": "tidelift" } ], - "time": "2021-08-28T15:07:08+00:00" + "time": "2021-07-23T15:55:36+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.3.7", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "ce7b20d69c66a20939d8952b617506a44d102130" + "reference": "f2fd2208157553874560f3645d4594303058c4bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ce7b20d69c66a20939d8952b617506a44d102130", - "reference": "ce7b20d69c66a20939d8952b617506a44d102130", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f2fd2208157553874560f3645d4594303058c4bd", + "reference": "f2fd2208157553874560f3645d4594303058c4bd", "shasum": "" }, "require": { @@ -5819,7 +5291,7 @@ "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/v5.3.7" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.4" }, "funding": [ { @@ -5835,7 +5307,7 @@ "type": "tidelift" } ], - "time": "2021-08-04T21:20:46+00:00" + "time": "2021-07-23T15:55:36+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -5918,16 +5390,16 @@ }, { "name": "symfony/finder", - "version": "v5.3.7", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93" + "reference": "17f50e06018baec41551a71a15731287dbaab186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a10000ada1e600d109a6c7632e9ac42e8bf2fb93", - "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93", + "url": "https://api.github.com/repos/symfony/finder/zipball/17f50e06018baec41551a71a15731287dbaab186", + "reference": "17f50e06018baec41551a71a15731287dbaab186", "shasum": "" }, "require": { @@ -5960,7 +5432,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.3.7" + "source": "https://github.com/symfony/finder/tree/v5.3.4" }, "funding": [ { @@ -5976,7 +5448,7 @@ "type": "tidelift" } ], - "time": "2021-08-04T21:20:46+00:00" + "time": "2021-07-23T15:54:19+00:00" }, { "name": "symfony/http-client-contracts", @@ -6058,16 +5530,16 @@ }, { "name": "symfony/http-foundation", - "version": "v5.3.7", + "version": "v5.3.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e36c8e5502b4f3f0190c675f1c1f1248a64f04e5" + "reference": "a8388f7b7054a7401997008ce9cd8c6b0ab7ac75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e36c8e5502b4f3f0190c675f1c1f1248a64f04e5", - "reference": "e36c8e5502b4f3f0190c675f1c1f1248a64f04e5", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a8388f7b7054a7401997008ce9cd8c6b0ab7ac75", + "reference": "a8388f7b7054a7401997008ce9cd8c6b0ab7ac75", "shasum": "" }, "require": { @@ -6111,7 +5583,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.3.7" + "source": "https://github.com/symfony/http-foundation/tree/v5.3.6" }, "funding": [ { @@ -6127,20 +5599,20 @@ "type": "tidelift" } ], - "time": "2021-08-27T11:20:35+00:00" + "time": "2021-07-27T17:08:17+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.3.7", + "version": "v5.3.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "a3a78e37935a527b50376c22ac1cec35b57fe787" + "reference": "60030f209018356b3b553b9dbd84ad2071c1b7e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a3a78e37935a527b50376c22ac1cec35b57fe787", - "reference": "a3a78e37935a527b50376c22ac1cec35b57fe787", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/60030f209018356b3b553b9dbd84ad2071c1b7e0", + "reference": "60030f209018356b3b553b9dbd84ad2071c1b7e0", "shasum": "" }, "require": { @@ -6150,7 +5622,7 @@ "symfony/error-handler": "^4.4|^5.0", "symfony/event-dispatcher": "^5.0", "symfony/http-client-contracts": "^1.1|^2", - "symfony/http-foundation": "^5.3.7", + "symfony/http-foundation": "^5.3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.16" @@ -6223,7 +5695,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.3.7" + "source": "https://github.com/symfony/http-kernel/tree/v5.3.6" }, "funding": [ { @@ -6239,20 +5711,20 @@ "type": "tidelift" } ], - "time": "2021-08-30T12:37:19+00:00" + "time": "2021-07-29T07:06:27+00:00" }, { "name": "symfony/mime", - "version": "v5.3.7", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ae887cb3b044658676129f5e97aeb7e9eb69c2d8" + "reference": "633e4e8afe9e529e5599d71238849a4218dd497b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ae887cb3b044658676129f5e97aeb7e9eb69c2d8", - "reference": "ae887cb3b044658676129f5e97aeb7e9eb69c2d8", + "url": "https://api.github.com/repos/symfony/mime/zipball/633e4e8afe9e529e5599d71238849a4218dd497b", + "reference": "633e4e8afe9e529e5599d71238849a4218dd497b", "shasum": "" }, "require": { @@ -6306,7 +5778,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.3.7" + "source": "https://github.com/symfony/mime/tree/v5.3.4" }, "funding": [ { @@ -6322,7 +5794,7 @@ "type": "tidelift" } ], - "time": "2021-08-20T11:40:01+00:00" + "time": "2021-07-21T12:40:44+00:00" }, { "name": "symfony/polyfill-ctype", @@ -7053,97 +6525,18 @@ ], "time": "2021-07-28T13:41:28+00:00" }, - { - "name": "symfony/polyfill-php81", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.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": "2021-05-21T13:25:03+00:00" - }, { "name": "symfony/process", - "version": "v5.3.7", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967" + "reference": "d16634ee55b895bd85ec714dadc58e4428ecf030" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/38f26c7d6ed535217ea393e05634cb0b244a1967", - "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967", + "url": "https://api.github.com/repos/symfony/process/zipball/d16634ee55b895bd85ec714dadc58e4428ecf030", + "reference": "d16634ee55b895bd85ec714dadc58e4428ecf030", "shasum": "" }, "require": { @@ -7176,7 +6569,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.3.7" + "source": "https://github.com/symfony/process/tree/v5.3.4" }, "funding": [ { @@ -7192,20 +6585,20 @@ "type": "tidelift" } ], - "time": "2021-08-04T21:20:46+00:00" + "time": "2021-07-23T15:54:19+00:00" }, { "name": "symfony/routing", - "version": "v5.3.7", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "be865017746fe869007d94220ad3f5297951811b" + "reference": "0a35d2f57d73c46ab6d042ced783b81d09a624c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/be865017746fe869007d94220ad3f5297951811b", - "reference": "be865017746fe869007d94220ad3f5297951811b", + "url": "https://api.github.com/repos/symfony/routing/zipball/0a35d2f57d73c46ab6d042ced783b81d09a624c4", + "reference": "0a35d2f57d73c46ab6d042ced783b81d09a624c4", "shasum": "" }, "require": { @@ -7266,7 +6659,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.3.7" + "source": "https://github.com/symfony/routing/tree/v5.3.4" }, "funding": [ { @@ -7282,7 +6675,7 @@ "type": "tidelift" } ], - "time": "2021-08-04T21:42:42+00:00" + "time": "2021-07-23T15:55:36+00:00" }, { "name": "symfony/service-contracts", @@ -7365,16 +6758,16 @@ }, { "name": "symfony/string", - "version": "v5.3.7", + "version": "v5.3.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5" + "reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/8d224396e28d30f81969f083a58763b8b9ceb0a5", - "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5", + "url": "https://api.github.com/repos/symfony/string/zipball/bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", + "reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", "shasum": "" }, "require": { @@ -7428,7 +6821,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.3.7" + "source": "https://github.com/symfony/string/tree/v5.3.3" }, "funding": [ { @@ -7444,20 +6837,20 @@ "type": "tidelift" } ], - "time": "2021-08-26T08:00:08+00:00" + "time": "2021-06-27T11:44:38+00:00" }, { "name": "symfony/translation", - "version": "v5.3.7", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "4d595a6d15fd3a2c67f6f31d14d15d3b7356d7a6" + "reference": "d89ad7292932c2699cbe4af98d72c5c6bbc504c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/4d595a6d15fd3a2c67f6f31d14d15d3b7356d7a6", - "reference": "4d595a6d15fd3a2c67f6f31d14d15d3b7356d7a6", + "url": "https://api.github.com/repos/symfony/translation/zipball/d89ad7292932c2699cbe4af98d72c5c6bbc504c1", + "reference": "d89ad7292932c2699cbe4af98d72c5c6bbc504c1", "shasum": "" }, "require": { @@ -7523,7 +6916,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.3.7" + "source": "https://github.com/symfony/translation/tree/v5.3.4" }, "funding": [ { @@ -7539,7 +6932,7 @@ "type": "tidelift" } ], - "time": "2021-08-26T08:22:53+00:00" + "time": "2021-07-25T09:39:16+00:00" }, { "name": "symfony/translation-contracts", @@ -7621,16 +7014,16 @@ }, { "name": "symfony/var-dumper", - "version": "v5.3.7", + "version": "v5.3.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "3ad5af4aed07d0a0201bbcfc42658fe6c5b2fb8f" + "reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3ad5af4aed07d0a0201bbcfc42658fe6c5b2fb8f", - "reference": "3ad5af4aed07d0a0201bbcfc42658fe6c5b2fb8f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0", + "reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0", "shasum": "" }, "require": { @@ -7689,7 +7082,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.3.7" + "source": "https://github.com/symfony/var-dumper/tree/v5.3.6" }, "funding": [ { @@ -7705,7 +7098,7 @@ "type": "tidelift" } ], - "time": "2021-08-04T23:19:25+00:00" + "time": "2021-07-27T01:56:02+00:00" }, { "name": "symfony/yaml", @@ -8342,158 +7735,6 @@ ], "time": "2021-04-19T20:22:20+00:00" }, - { - "name": "web-token/jwt-core", - "version": "v2.2.11", - "source": { - "type": "git", - "url": "https://github.com/web-token/jwt-core.git", - "reference": "53beb6f6c1eec4fa93c1c3e5d9e5701e71fa1678" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/web-token/jwt-core/zipball/53beb6f6c1eec4fa93c1c3e5d9e5701e71fa1678", - "reference": "53beb6f6c1eec4fa93c1c3e5d9e5701e71fa1678", - "shasum": "" - }, - "require": { - "brick/math": "^0.8.17|^0.9", - "ext-json": "*", - "ext-mbstring": "*", - "fgrosse/phpasn1": "^2.0", - "php": ">=7.2", - "spomky-labs/base64url": "^1.0|^2.0" - }, - "conflict": { - "spomky-labs/jose": "*" - }, - "type": "library", - "autoload": { - "psr-4": { - "Jose\\Component\\Core\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florent Morselli", - "homepage": "https://github.com/Spomky" - }, - { - "name": "All contributors", - "homepage": "https://github.com/web-token/jwt-framework/contributors" - } - ], - "description": "Core component of the JWT Framework.", - "homepage": "https://github.com/web-token", - "keywords": [ - "JOSE", - "JWE", - "JWK", - "JWKSet", - "JWS", - "Jot", - "RFC7515", - "RFC7516", - "RFC7517", - "RFC7518", - "RFC7519", - "RFC7520", - "bundle", - "jwa", - "jwt", - "symfony" - ], - "support": { - "source": "https://github.com/web-token/jwt-core/tree/v2.2.11" - }, - "funding": [ - { - "url": "https://www.patreon.com/FlorentMorselli", - "type": "patreon" - } - ], - "time": "2021-03-17T14:55:52+00:00" - }, - { - "name": "web-token/jwt-signature", - "version": "v2.2.11", - "source": { - "type": "git", - "url": "https://github.com/web-token/jwt-signature.git", - "reference": "015b59aaf3b6e8fb9f5bd1338845b7464c7d8103" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/web-token/jwt-signature/zipball/015b59aaf3b6e8fb9f5bd1338845b7464c7d8103", - "reference": "015b59aaf3b6e8fb9f5bd1338845b7464c7d8103", - "shasum": "" - }, - "require": { - "web-token/jwt-core": "^2.1" - }, - "suggest": { - "web-token/jwt-signature-algorithm-ecdsa": "ECDSA Based Signature Algorithms", - "web-token/jwt-signature-algorithm-eddsa": "EdDSA Based Signature Algorithms", - "web-token/jwt-signature-algorithm-experimental": "Experimental Signature Algorithms", - "web-token/jwt-signature-algorithm-hmac": "HMAC Based Signature Algorithms", - "web-token/jwt-signature-algorithm-none": "None Signature Algorithm", - "web-token/jwt-signature-algorithm-rsa": "RSA Based Signature Algorithms" - }, - "type": "library", - "autoload": { - "psr-4": { - "Jose\\Component\\Signature\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florent Morselli", - "homepage": "https://github.com/Spomky" - }, - { - "name": "All contributors", - "homepage": "https://github.com/web-token/jwt-signature/contributors" - } - ], - "description": "Signature component of the JWT Framework.", - "homepage": "https://github.com/web-token", - "keywords": [ - "JOSE", - "JWE", - "JWK", - "JWKSet", - "JWS", - "Jot", - "RFC7515", - "RFC7516", - "RFC7517", - "RFC7518", - "RFC7519", - "RFC7520", - "bundle", - "jwa", - "jwt", - "symfony" - ], - "support": { - "source": "https://github.com/web-token/jwt-signature/tree/v2.2.11" - }, - "funding": [ - { - "url": "https://www.patreon.com/FlorentMorselli", - "type": "patreon" - } - ], - "time": "2021-03-01T19:55:28+00:00" - }, { "name": "webmozart/assert", "version": "1.10.0", @@ -8859,16 +8100,16 @@ }, { "name": "composer/composer", - "version": "2.1.6", + "version": "2.1.5", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "e5cac5f9d2354d08b67f1d21c664ae70d748c603" + "reference": "ac679902e9f66b85a8f9d8c1c88180f609a8745d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/e5cac5f9d2354d08b67f1d21c664ae70d748c603", - "reference": "e5cac5f9d2354d08b67f1d21c664ae70d748c603", + "url": "https://api.github.com/repos/composer/composer/zipball/ac679902e9f66b85a8f9d8c1c88180f609a8745d", + "reference": "ac679902e9f66b85a8f9d8c1c88180f609a8745d", "shasum": "" }, "require": { @@ -8935,9 +8176,9 @@ "package" ], "support": { - "irc": "ircs://irc.libera.chat:6697/composer", + "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/2.1.6" + "source": "https://github.com/composer/composer/tree/2.1.5" }, "funding": [ { @@ -8953,7 +8194,7 @@ "type": "tidelift" } ], - "time": "2021-08-19T15:11:08+00:00" + "time": "2021-07-23T08:35:47+00:00" }, { "name": "composer/metadata-minifier", @@ -9250,16 +8491,16 @@ }, { "name": "doctrine/annotations", - "version": "1.13.2", + "version": "1.13.1", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", + "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", "shasum": "" }, "require": { @@ -9316,9 +8557,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.2" + "source": "https://github.com/doctrine/annotations/tree/1.13.1" }, - "time": "2021-08-05T19:00:23+00:00" + "time": "2021-05-16T18:07:53+00:00" }, { "name": "doctrine/instantiator", @@ -9456,16 +8697,16 @@ }, { "name": "facade/ignition", - "version": "2.12.0", + "version": "2.11.2", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "74dcc32a2895a126d1e5f2cd3bbab499cac66db1" + "reference": "7c4e7a7da184cd00c7ce6eacc590200bb9672de7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/74dcc32a2895a126d1e5f2cd3bbab499cac66db1", - "reference": "74dcc32a2895a126d1e5f2cd3bbab499cac66db1", + "url": "https://api.github.com/repos/facade/ignition/zipball/7c4e7a7da184cd00c7ce6eacc590200bb9672de7", + "reference": "7c4e7a7da184cd00c7ce6eacc590200bb9672de7", "shasum": "" }, "require": { @@ -9528,7 +8769,7 @@ "issues": "https://github.com/facade/ignition/issues", "source": "https://github.com/facade/ignition" }, - "time": "2021-08-24T09:53:54+00:00" + "time": "2021-07-20T14:01:22+00:00" }, { "name": "facade/ignition-contracts", @@ -9650,16 +8891,16 @@ }, { "name": "filp/whoops", - "version": "2.14.1", + "version": "2.14.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "15ead64e9828f0fc90932114429c4f7923570cb1" + "reference": "fdf92f03e150ed84d5967a833ae93abffac0315b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/15ead64e9828f0fc90932114429c4f7923570cb1", - "reference": "15ead64e9828f0fc90932114429c4f7923570cb1", + "url": "https://api.github.com/repos/filp/whoops/zipball/fdf92f03e150ed84d5967a833ae93abffac0315b", + "reference": "fdf92f03e150ed84d5967a833ae93abffac0315b", "shasum": "" }, "require": { @@ -9709,7 +8950,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.14.1" + "source": "https://github.com/filp/whoops/tree/2.14.0" }, "funding": [ { @@ -9717,20 +8958,20 @@ "type": "github" } ], - "time": "2021-08-29T12:00:00+00:00" + "time": "2021-07-13T12:00:00+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.1.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "cf4cedb9e8991c2daa94a756176d81bf487e4c4b" + "reference": "c15377bdfa8d1ecf186f1deadec39c89984e1167" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/cf4cedb9e8991c2daa94a756176d81bf487e4c4b", - "reference": "cf4cedb9e8991c2daa94a756176d81bf487e4c4b", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/c15377bdfa8d1ecf186f1deadec39c89984e1167", + "reference": "c15377bdfa8d1ecf186f1deadec39c89984e1167", "shasum": "" }, "require": { @@ -9746,8 +8987,7 @@ "symfony/filesystem": "^4.4.20 || ^5.0", "symfony/finder": "^4.4.20 || ^5.0", "symfony/options-resolver": "^4.4.20 || ^5.0", - "symfony/polyfill-php72": "^1.23", - "symfony/polyfill-php81": "^1.23", + "symfony/polyfill-php72": "^1.22", "symfony/process": "^4.4.20 || ^5.0", "symfony/stopwatch": "^4.4.20 || ^5.0" }, @@ -9798,7 +9038,7 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.1.0" + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.0.0" }, "funding": [ { @@ -9806,7 +9046,7 @@ "type": "github" } ], - "time": "2021-08-29T20:16:20+00:00" + "time": "2021-05-03T21:51:58+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -9931,16 +9171,16 @@ }, { "name": "laravel/dusk", - "version": "v6.18.0", + "version": "v6.15.1", "source": { "type": "git", "url": "https://github.com/laravel/dusk.git", - "reference": "9907436b923770a2fc8a0d99bd0fcf4b0baa767c" + "reference": "6978f331f526e84f06b803ed4407d372a6db065f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/dusk/zipball/9907436b923770a2fc8a0d99bd0fcf4b0baa767c", - "reference": "9907436b923770a2fc8a0d99bd0fcf4b0baa767c", + "url": "https://api.github.com/repos/laravel/dusk/zipball/6978f331f526e84f06b803ed4407d372a6db065f", + "reference": "6978f331f526e84f06b803ed4407d372a6db065f", "shasum": "" }, "require": { @@ -9998,9 +9238,9 @@ ], "support": { "issues": "https://github.com/laravel/dusk/issues", - "source": "https://github.com/laravel/dusk/tree/v6.18.0" + "source": "https://github.com/laravel/dusk/tree/v6.15.1" }, - "time": "2021-08-31T14:51:46+00:00" + "time": "2021-07-06T16:42:00+00:00" }, { "name": "maximebf/debugbar", @@ -10199,16 +9439,16 @@ }, { "name": "nunomaduro/collision", - "version": "v5.9.0", + "version": "v5.6.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "63456f5c3e8c4bc52bd573e5c85674d64d84fd43" + "reference": "0122ac6b03c75279ef78d1c0ad49725dfc52a8d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/63456f5c3e8c4bc52bd573e5c85674d64d84fd43", - "reference": "63456f5c3e8c4bc52bd573e5c85674d64d84fd43", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/0122ac6b03c75279ef78d1c0ad49725dfc52a8d2", + "reference": "0122ac6b03c75279ef78d1c0ad49725dfc52a8d2", "shasum": "" }, "require": { @@ -10220,7 +9460,7 @@ "require-dev": { "brianium/paratest": "^6.1", "fideloper/proxy": "^4.4.1", - "friendsofphp/php-cs-fixer": "^3.0", + "friendsofphp/php-cs-fixer": "^2.17.3", "fruitcake/laravel-cors": "^2.0.3", "laravel/framework": "^8.0 || ^9.0", "nunomaduro/larastan": "^0.6.2", @@ -10283,7 +9523,7 @@ "type": "patreon" } ], - "time": "2021-08-26T15:32:09+00:00" + "time": "2021-07-26T20:39:06+00:00" }, { "name": "phar-io/manifest", @@ -11249,16 +10489,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.9", + "version": "9.5.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b" + "reference": "191768ccd5c85513b4068bdbe99bb6390c7d54fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b", - "reference": "ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/191768ccd5c85513b4068bdbe99bb6390c7d54fb", + "reference": "191768ccd5c85513b4068bdbe99bb6390c7d54fb", "shasum": "" }, "require": { @@ -11336,7 +10576,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.9" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.8" }, "funding": [ { @@ -11348,7 +10588,7 @@ "type": "github" } ], - "time": "2021-08-31T06:47:40+00:00" + "time": "2021-07-31T15:17:34+00:00" }, { "name": "react/promise", @@ -12430,16 +11670,16 @@ }, { "name": "seld/phar-utils", - "version": "1.1.2", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "749042a2315705d2dfbbc59234dd9ceb22bf3ff0" + "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/749042a2315705d2dfbbc59234dd9ceb22bf3ff0", - "reference": "749042a2315705d2dfbbc59234dd9ceb22bf3ff0", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8674b1d84ffb47cc59a101f5d5a3b61e87d23796", + "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796", "shasum": "" }, "require": { @@ -12472,9 +11712,9 @@ ], "support": { "issues": "https://github.com/Seldaek/phar-utils/issues", - "source": "https://github.com/Seldaek/phar-utils/tree/1.1.2" + "source": "https://github.com/Seldaek/phar-utils/tree/master" }, - "time": "2021-08-19T21:01:38+00:00" + "time": "2020-07-07T18:42:57+00:00" }, { "name": "symfony/debug", @@ -12609,16 +11849,16 @@ }, { "name": "symfony/options-resolver", - "version": "v5.3.7", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "4b78e55b179003a42523a362cc0e8327f7a69b5e" + "reference": "a603e5701bd6e305cfc777a8b50bf081ef73105e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/4b78e55b179003a42523a362cc0e8327f7a69b5e", - "reference": "4b78e55b179003a42523a362cc0e8327f7a69b5e", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a603e5701bd6e305cfc777a8b50bf081ef73105e", + "reference": "a603e5701bd6e305cfc777a8b50bf081ef73105e", "shasum": "" }, "require": { @@ -12658,7 +11898,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.3.7" + "source": "https://github.com/symfony/options-resolver/tree/v5.3.4" }, "funding": [ { @@ -12674,7 +11914,7 @@ "type": "tidelift" } ], - "time": "2021-08-04T21:20:46+00:00" + "time": "2021-07-23T15:55:36+00:00" }, { "name": "symfony/stopwatch", @@ -12803,5 +12043,5 @@ "ext-zip": "*" }, "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.0.0" } diff --git a/config/webauthn.php b/config/webauthn.php deleted file mode 100644 index 4d94f7f07..000000000 --- a/config/webauthn.php +++ /dev/null @@ -1,222 +0,0 @@ - true, - - /* - |-------------------------------------------------------------------------- - | Route Middleware - |-------------------------------------------------------------------------- - | - | These middleware will be assigned to Webauthn routes, giving you - | the chance to add your own middleware to this list or change any of - | the existing middleware. Or, you can simply stick with this list. - | - */ - - 'middleware' => [ - 'web', - 'auth', - ], - - /* - |-------------------------------------------------------------------------- - | Prefix path - |-------------------------------------------------------------------------- - | - | The uri prefix for all webauthn requests. - | - */ - - 'prefix' => 'webauthn', - - 'authenticate' => [ - /* - |-------------------------------------------------------------------------- - | View to load after middleware login request. - |-------------------------------------------------------------------------- - | - | The name of blade template to load whe a user login and it request to validate - | the Webauthn 2nd factor. - | - */ - 'view' => 'webauthn::authenticate', - - /* - |-------------------------------------------------------------------------- - | Redirect with callback url after login. - |-------------------------------------------------------------------------- - | - | Save the destination url, then after a successful login, redirect to this - | url. - | - */ - 'postSuccessCallback' => true, - - /* - |-------------------------------------------------------------------------- - | Redirect route - |-------------------------------------------------------------------------- - | - | If postSuccessCallback if false, redirect to this route after login - | request is complete. - | If empty, send a json response to let the client side redirection. - | - */ - 'postSuccessRedirectRoute' => '', - ], - - 'register' => [ - /* - |-------------------------------------------------------------------------- - | View to load on register request. - |-------------------------------------------------------------------------- - | - | The name of blade template to load when a user request a creation of - | Webauthn key. - | - */ - 'view' => 'webauthn::register', - - /* - |-------------------------------------------------------------------------- - | Redirect route - |-------------------------------------------------------------------------- - | - | The route to redirect to after register key request is complete. - | If empty, send a json response to let the client side redirection. - | - */ - 'postSuccessRedirectRoute' => '', - ], - - /* - |-------------------------------------------------------------------------- - | Session name - |-------------------------------------------------------------------------- - | - | Name of the session parameter to store the successful login. - | - */ - - 'sessionName' => 'webauthn_auth', - - /* - |-------------------------------------------------------------------------- - | Webauthn challenge length - |-------------------------------------------------------------------------- - | - | Length of the random string used in the challenge request. - | - */ - - 'challenge_length' => 32, - - /* - |-------------------------------------------------------------------------- - | Webauthn timeout (milliseconds) - |-------------------------------------------------------------------------- - | - | Time that the caller is willing to wait for the call to complete. - | - */ - - 'timeout' => 60000, - - /* - |-------------------------------------------------------------------------- - | Webauthn extension client input - |-------------------------------------------------------------------------- - | - | Optional authentication extension. - | See https://www.w3.org/TR/webauthn/#client-extension-input - | - */ - - 'extensions' => [], - - /* - |-------------------------------------------------------------------------- - | Webauthn icon - |-------------------------------------------------------------------------- - | - | Url which resolves to an image associated with the entity. - | See https://www.w3.org/TR/webauthn/#dom-publickeycredentialentity-icon - | - */ - - 'icon' => null, - - /* - |-------------------------------------------------------------------------- - | Webauthn Attestation Conveyance - |-------------------------------------------------------------------------- - | - | This parameter specify the preference regarding the attestation conveyance - | during credential generation. - | See https://www.w3.org/TR/webauthn/#attestation-convey - | - */ - - 'attestation_conveyance' => \Webauthn\PublicKeyCredentialCreationOptions::ATTESTATION_CONVEYANCE_PREFERENCE_NONE, - - /* - |-------------------------------------------------------------------------- - | Google Safetynet ApiKey - |-------------------------------------------------------------------------- - | - | Api key to use Google Safetynet. - | See https://developer.android.com/training/safetynet/attestation - | - */ - - 'google_safetynet_api_key' => '', - - /* - |-------------------------------------------------------------------------- - | Webauthn Public Key Credential Parameters - |-------------------------------------------------------------------------- - | - | List of allowed Cryptographic Algorithm Identifier. - | See https://www.w3.org/TR/webauthn/#alg-identifier - | - */ - - 'public_key_credential_parameters' => [ - \Cose\Algorithms::COSE_ALGORITHM_ES256, - \Cose\Algorithms::COSE_ALGORITHM_RS256, - ], - - /* - |-------------------------------------------------------------------------- - | Webauthn Authenticator Selection Criteria - |-------------------------------------------------------------------------- - | - | Requirement for the creation operation. - | See https://www.w3.org/TR/webauthn/#authenticatorSelection - | - */ - - 'authenticator_selection_criteria' => [ - /* - | See https://www.w3.org/TR/webauthn/#attachment - */ - 'attachment_mode' => \Webauthn\AuthenticatorSelectionCriteria::AUTHENTICATOR_ATTACHMENT_NO_PREFERENCE, - - 'require_resident_key' => false, - - /* - | See https://www.w3.org/TR/webauthn/#userVerificationRequirement - */ - 'user_verification' => \Webauthn\AuthenticatorSelectionCriteria::USER_VERIFICATION_REQUIREMENT_PREFERRED, - ], -]; diff --git a/database/Factories/WebauthnKeyFactory.php b/database/Factories/WebauthnKeyFactory.php index 6b7d4ebfa..b398b5b5c 100644 --- a/database/Factories/WebauthnKeyFactory.php +++ b/database/Factories/WebauthnKeyFactory.php @@ -2,7 +2,7 @@ namespace Database\Factories; -use Pterodactyl\Models\WebauthnKey; +use Pterodactyl\Models\HardwareSecurityKey; use Illuminate\Database\Eloquent\Factories\Factory; class WebauthnKeyFactory extends Factory @@ -10,7 +10,7 @@ class WebauthnKeyFactory extends Factory /** * The name of the factory's corresponding model. */ - protected $model = WebauthnKey::class; + protected $model = HardwareSecurityKey::class; /** * Define the model's default state. diff --git a/database/migrations/2021_08_07_170141_create_hardware_security_keys_table.php b/database/migrations/2021_08_07_170141_create_hardware_security_keys_table.php new file mode 100644 index 000000000..7342adb06 --- /dev/null +++ b/database/migrations/2021_08_07_170141_create_hardware_security_keys_table.php @@ -0,0 +1,43 @@ +id(); + $table->char('uuid', 36); + $table->unsignedInteger('user_id')->references('id')->on('users')->onDelete('cascade'); + $table->text('public_key_id'); + $table->text('public_key'); + $table->char('aaguid', 36); + $table->string('type'); + $table->json('transports'); + $table->string('attestation_type'); + $table->json('trust_path'); + $table->text('user_handle'); + $table->unsignedInteger('counter'); + $table->json('other_ui'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('hardware_security_keys'); + } +} diff --git a/routes/api-client.php b/routes/api-client.php index 44cef3162..a06d9104b 100644 --- a/routes/api-client.php +++ b/routes/api-client.php @@ -30,10 +30,10 @@ Route::group(['prefix' => '/account'], function () { Route::post('/api-keys', [Client\ApiKeyController::class, 'store']); Route::delete('/api-keys/{identifier}', [Client\ApiKeyController::class, 'delete']); - Route::get('/webauthn', 'WebauthnController@index')->withoutMiddleware(RequireTwoFactorAuthentication::class); - Route::get('/webauthn/register', 'WebauthnController@register')->withoutMiddleware(RequireTwoFactorAuthentication::class); - Route::post('/webauthn/register', 'WebauthnController@create')->withoutMiddleware(RequireTwoFactorAuthentication::class); - Route::delete('/webauthn/{id}', 'WebauthnController@deleteKey')->withoutMiddleware(RequireTwoFactorAuthentication::class); + Route::get('/webauthn', [Client\HardwareTokenController::class, 'index'])->withoutMiddleware(RequireTwoFactorAuthentication::class); + Route::get('/webauthn/register', [Client\HardwareTokenController::class, 'create'])->withoutMiddleware(RequireTwoFactorAuthentication::class); + Route::post('/webauthn/register', [Client\HardwareTokenController::class, 'store'])->withoutMiddleware(RequireTwoFactorAuthentication::class); + Route::delete('/webauthn/{id}', [Client\HardwareTokenController::class, 'delete'])->withoutMiddleware(RequireTwoFactorAuthentication::class); Route::get('/ssh', 'SSHKeyController@index'); Route::post('/ssh', 'SSHKeyController@store'); diff --git a/routes/auth.php b/routes/auth.php index e7fe3773c..d16089ef8 100644 --- a/routes/auth.php +++ b/routes/auth.php @@ -20,7 +20,6 @@ Route::group(['middleware' => 'guest'], function () { // Login endpoints. Route::post('/login', 'LoginController@login')->middleware('recaptcha'); Route::post('/login/checkpoint', 'LoginCheckpointController')->name('auth.login-checkpoint'); - Route::post('/login/checkpoint/key', 'WebauthnController@auth'); // Forgot password route. A post to this endpoint will trigger an // email to be sent containing a reset token. diff --git a/tests/Unit/Http/Middleware/RequireTwoFactorAuthenticationTest.php b/tests/Unit/Http/Middleware/RequireTwoFactorAuthenticationTest.php index 2f984e2b9..941d6cdfa 100644 --- a/tests/Unit/Http/Middleware/RequireTwoFactorAuthenticationTest.php +++ b/tests/Unit/Http/Middleware/RequireTwoFactorAuthenticationTest.php @@ -4,7 +4,7 @@ namespace Pterodactyl\Tests\Unit\Http\Middleware; use Mockery as m; use Pterodactyl\Models\User; -use Pterodactyl\Models\WebauthnKey; +use Pterodactyl\Models\HardwareSecurityKey; use Prologue\Alerts\AlertsMessageBag; use Pterodactyl\Exceptions\Http\TwoFactorAuthRequiredException; use Pterodactyl\Http\Middleware\RequireTwoFactorAuthentication; @@ -66,7 +66,7 @@ class RequireTwoFactorAuthenticationTest extends MiddlewareTestCase /** @var \Pterodactyl\Models\User $user */ $user = User::factory() - ->has(WebauthnKey::factory()->count(1)) + ->has(HardwareSecurityKey::factory()->count(1)) ->create(['use_totp' => false]); $this->setRequestUserModel($user); @@ -141,7 +141,7 @@ class RequireTwoFactorAuthenticationTest extends MiddlewareTestCase /** @var \Pterodactyl\Models\User $user */ $user = User::factory() - ->has(WebauthnKey::factory()->count(1)) + ->has(HardwareSecurityKey::factory()->count(1)) ->create(['use_totp' => false]); $this->setRequestUserModel($user); @@ -255,7 +255,7 @@ class RequireTwoFactorAuthenticationTest extends MiddlewareTestCase config()->set('pterodactyl.auth.2fa_required', RequireTwoFactorAuthentication::LEVEL_ADMIN); /** @var \Pterodactyl\Models\User $user */ - $user = User::factory()->has(WebauthnKey::factory()->count(1))->create(['use_totp' => false]); + $user = User::factory()->has(HardwareSecurityKey::factory()->count(1))->create(['use_totp' => false]); $this->setRequestUserModel($user); $this->assertFalse($user->use_totp); @@ -278,7 +278,7 @@ class RequireTwoFactorAuthenticationTest extends MiddlewareTestCase /** @var \Pterodactyl\Models\User $user */ $user = User::factory() - ->has(WebauthnKey::factory()->count(1)) + ->has(HardwareSecurityKey::factory()->count(1)) ->create(['use_totp' => false, 'root_admin' => true]); $this->setRequestUserModel($user);