diff --git a/.gitignore b/.gitignore index 187e79cd..9729c46b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ composer.lock build coverage.xml .phpunit.result.cache +.idea diff --git a/composer.json b/composer.json index 65a4e79c..955e6e3e 100644 --- a/composer.json +++ b/composer.json @@ -1,34 +1,14 @@ { - "name": "tymon/jwt-auth", - "description": "JSON Web Token Authentication for Laravel and Lumen", - "keywords": [ - "auth", - "authentication", - "json web token", - "jwt", - "laravel" - ], - "homepage": "https://github.com/tymondesigns/jwt-auth", - "support": { - "issues": "https://github.com/tymondesigns/jwt-auth/issues", - "source": "https://github.com/tymondesigns/jwt-auth" - }, + "name": "nexus/common", + "description": "JSON Web Token Authentication for Laravel", "license": "MIT", - "authors": [ - { - "name": "Sean Tymon", - "email": "tymon148@gmail.com", - "homepage": "https://tymon.xyz", - "role": "Developer" - } - ], "require": { "php": "^8.0", "illuminate/auth": "^9.0|^10.0", "illuminate/contracts": "^9.0|^10.0", "illuminate/http": "^9.0|^10.0", "illuminate/support": "^9.0|^10.0", - "lcobucci/jwt": "^4.0", + "lcobucci/jwt": "^5.0", "nesbot/carbon": "^2.0" }, "require-dev": { @@ -49,10 +29,6 @@ } }, "extra": { - "branch-alias": { - "dev-develop": "1.0-dev", - "dev-2.x": "2.0-dev" - }, "laravel": { "aliases": { "JWTAuth": "Tymon\\JWTAuth\\Facades\\JWTAuth", @@ -63,12 +39,6 @@ ] } }, - "funding": [ - { - "type": "patreon", - "url": "https://www.patreon.com/seantymon" - } - ], "config": { "sort-packages": true }, diff --git a/src/Providers/JWT/Lcobucci.php b/src/Providers/JWT/Lcobucci.php index 4e08e561..0a007811 100644 --- a/src/Providers/JWT/Lcobucci.php +++ b/src/Providers/JWT/Lcobucci.php @@ -140,31 +140,18 @@ protected function getBuilderFromClaims(array $payload): Builder $builder = $this->config->builder(); foreach ($payload as $key => $value) { - switch ($key) { - case RegisteredClaims::ID: - $builder->identifiedBy($value); - break; - case RegisteredClaims::EXPIRATION_TIME: - $builder->expiresAt(DateTimeImmutable::createFromFormat('U', $value)); - break; - case RegisteredClaims::NOT_BEFORE: - $builder->canOnlyBeUsedAfter(DateTimeImmutable::createFromFormat('U', $value)); - break; - case RegisteredClaims::ISSUED_AT: - $builder->issuedAt(DateTimeImmutable::createFromFormat('U', $value)); - break; - case RegisteredClaims::ISSUER: - $builder->issuedBy($value); - break; - case RegisteredClaims::AUDIENCE: - $builder->permittedFor($value); - break; - case RegisteredClaims::SUBJECT: - $builder->relatedTo($value); - break; - default: - $builder->withClaim($key, $value); - } + $builder = match ($key) { + RegisteredClaims::ID => $builder->identifiedBy($value), + RegisteredClaims::EXPIRATION_TIME => $builder->expiresAt(DateTimeImmutable::createFromFormat('U', + $value)), + RegisteredClaims::NOT_BEFORE => $builder->canOnlyBeUsedAfter(DateTimeImmutable::createFromFormat('U', + $value)), + RegisteredClaims::ISSUED_AT => $builder->issuedAt(DateTimeImmutable::createFromFormat('U', $value)), + RegisteredClaims::ISSUER => $builder->issuedBy($value), + RegisteredClaims::AUDIENCE => $builder->permittedFor($value), + RegisteredClaims::SUBJECT => $builder->relatedTo($value), + default => $builder->withClaim($key, $value), + }; } return $builder; @@ -207,10 +194,6 @@ protected function getSigner() $signer = $this->signers[$this->algo]; - if (is_subclass_of($signer, Ecdsa::class)) { - return $signer::create(); - } - return new $signer(); } diff --git a/src/Providers/JWT/Provider.php b/src/Providers/JWT/Provider.php index 2ec62bdd..a7812ff9 100644 --- a/src/Providers/JWT/Provider.php +++ b/src/Providers/JWT/Provider.php @@ -12,6 +12,8 @@ namespace Tymon\JWTAuth\Providers\JWT; use Illuminate\Support\Arr; +use Illuminate\Support\Str; +use Lcobucci\JWT\Signer\Key\InMemory; abstract class Provider { @@ -137,7 +139,9 @@ public function getKeys() */ public function getPublicKey() { - return Arr::get($this->keys, 'public'); + $public = Arr::get($this->keys, 'public'); + + return $this->getKeyContents($public); } /** @@ -147,7 +151,7 @@ public function getPublicKey() */ public function getPrivateKey() { - return Arr::get($this->keys, 'private'); + return Arr::get($this->keys, 'public'); } /** @@ -181,6 +185,24 @@ protected function getVerificationKey() return $this->isAsymmetric() ? $this->getPublicKey() : $this->getSecret(); } + /** + * Properly load pem files + * + * @param string $key + * + * @return string + */ + protected function getKeyContents(string $key) + { + if (Str::of($key)->endsWith('.pem')) { + $key = InMemory::file(storage_path($key)); + } else { + $key = InMemory::base64Encoded($key); + } + + return $key->contents; + } + /** * Determine if the algorithm is asymmetric, and thus requires a public/private key combo. *