From 0ce7d24f69d69e4b1f95d255c75c2240592e3bbf Mon Sep 17 00:00:00 2001 From: drkthunder02 Date: Fri, 12 Feb 2021 18:20:57 +0900 Subject: [PATCH] socialite --- app/Http/Controllers/Auth/LoginController.php | 17 +++- app/Providers/EveOnlineOAuthProvider.php | 86 ++++++------------- 2 files changed, 40 insertions(+), 63 deletions(-) diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index a3c1f979d..04fd28378 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -75,12 +75,21 @@ class LoginController extends Controller * @return Socialite */ public function redirectToProvider($profile = null, Socialite $social) { - + //The default scope is public data for everyone due to OAuth2 Tokens + $scopes = ['publicData']; + + //Collect any other scopes we need if we are logged in. + if(Auth::check()) { + $extraScopes = EsiScope::where([ + 'character_id' => auth()->user()->getId(), + ])->get(['scope'])->toArray(); + + array_push($scopes, $extraScopes); + } + return $social->driver('eveonline') - ->scopes([]) + ->scopes($scopes) ->redirect(); - - //return Socialite::driver('eveonline')->redirect(); } /** diff --git a/app/Providers/EveOnlineOAuthProvider.php b/app/Providers/EveOnlineOAuthProvider.php index 0310d54a6..31d27dcf6 100644 --- a/app/Providers/EveOnlineOAuthProvider.php +++ b/app/Providers/EveOnlineOAuthProvider.php @@ -61,36 +61,19 @@ class EveOnlineOAuthProvider extends AbstractProvider { //Get the character Id from the token returned $characterId = strtr($user['sub'], ['CHARACTER:EVE:' => '']); - - if(isset($user['scp'])) { - //Return a user object with the mapped out variables below - return (new User)->setRaw($user)->map([ - 'id' => $characterId, - 'name' => $user['name'], - 'nickname' => $user['name'], - 'owner_hash' => $user['owner'], - 'scopes' => null, - 'expires_on' => $user['exp'], - 'avatar' => 'https://image.eveonline.com/Character/' . $characterId . '_128.jpg', - 'iss' => $user['iss'], - 'region' => $user['region'], - 'tier' => $user['tier'] - ]); - } else { - //Return a user object with the mapped out variables below - return (new User)->setRaw($user)->map([ - 'id' => $characterId, - 'name' => $user['name'], - 'nickname' => $user['name'], - 'owner_hash' => $user['owner'], - 'scopes' => is_array($user['scp']) ? $user['scp'] : [$user['scp']], - 'expires_on' => $user['exp'], - 'avatar' => 'https://image.eveonline.com/Character/' . $characterId . '_128.jpg', - 'iss' => $user['iss'], - 'region' => $user['region'], - 'tier' => $user['tier'] - ]); - } + //Return a user object with the mapped out variables below + return (new User)->setRaw($user)->map([ + 'id' => $characterId, + 'name' => $user['name'], + 'nickname' => $user['name'], + 'owner_hash' => $user['owner'], + 'scopes' => is_array($user['scp']) ? $user['scp'] : [$user['scp']], + 'expires_on' => $user['exp'], + 'avatar' => 'https://image.eveonline.com/Character/' . $characterId . '_128.jpg', + 'iss' => $user['iss'], + 'region' => $user['region'], + 'tier' => $user['tier'] + ]); } @@ -139,8 +122,7 @@ class EveOnlineOAuthProvider extends AbstractProvider { //Declare variables $jws = null; - //$scopes = session()->pull('scopes', []); - $scopes = array(); + $scopes = session()->pull('scopes', []); // pulling JWK sets from CCP $sets = $this->getJwkSets(); @@ -149,34 +131,20 @@ class EveOnlineOAuthProvider extends AbstractProvider { $jwk_sets = JWKSet::createFromKeyData($sets); // attempt to parse the JWT and collect payload - if($scopes == null) { - $jws = Load::jws($access_token) - ->algs(['RS256', 'ES256', 'HS256']) - ->exp() - ->iss('login.eveonline.com') - ->header('typ', new TypeChecker(['JWT'], true)) - ->claim('sub', new SubEveCharacterChecker()) - ->claim('azp', new AzpChecker(config('esi.client_id'))) - ->claim('name', new NameChecker()) - ->claim('owner', new OwnerChecker()) - ->keyset($jwk_sets) - ->run(); - } else { - $jws = Load::jws($access_token) - ->algs(['RS256', 'ES256', 'HS256']) - ->exp() - ->iss('login.eveonline.com') - ->header('typ', new TypeChecker(['JWT'], true)) - ->claim('scp', new ScpChecker($scopes)) - ->claim('sub', new SubEveCharacterChecker()) - ->claim('azp', new AzpChecker(config('esi.client_id'))) - ->claim('name', new NameChecker()) - ->claim('owner', new OwnerChecker()) - ->keyset($jwk_sets) - ->run(); - } + $jws = Load::jws($access_token) + ->algs(['RS256', 'ES256', 'HS256']) + ->exp() + ->iss('login.eveonline.com') + ->header('typ', new TypeChecker(['JWT'], true)) + ->claim('scp', new ScpChecker($scopes)) + ->claim('sub', new SubEveCharacterChecker()) + ->claim('azp', new AzpChecker(config('esi.client_id'))) + ->claim('name', new NameChecker()) + ->claim('owner', new OwnerChecker()) + ->keyset($jwk_sets) + ->run(); - + //Return the data collected return $jws->claims->all(); } }