socialite updates

This commit is contained in:
2021-02-12 20:37:10 +09:00
parent 9f7a3500dc
commit 7901708be7

View File

@@ -79,6 +79,8 @@ class LoginController extends Controller
$scopes = ['publicData']; $scopes = ['publicData'];
//Collect any other scopes we need if we are logged in. //Collect any other scopes we need if we are logged in.
//If we are logged in we are linking another character to this one.
//Attempt to use the same scopes for this character as the original one
if(Auth::check()) { if(Auth::check()) {
$extraScopes = EsiScope::where([ $extraScopes = EsiScope::where([
'character_id' => auth()->user()->getId(), 'character_id' => auth()->user()->getId(),
@@ -88,11 +90,14 @@ class LoginController extends Controller
foreach($extraScopes as $extra) { foreach($extraScopes as $extra) {
array_push($scopes, $extra->scope); array_push($scopes, $extra->scope);
} }
}
//Place the scopes in the session to verify later after the redirect /**
//has been completed and a token is received * Place the scopes in the session.
* Place the original character id in the session.
*/
session()->put('scopes', $scopes); session()->put('scopes', $scopes);
session()->put('orgCharacter', auth()->user()->getId());
}
return $social->driver('eveonline') return $social->driver('eveonline')
->scopes($scopes) ->scopes($scopes)
@@ -107,41 +112,34 @@ class LoginController extends Controller
//Get the sso user from the socialite driver //Get the sso user from the socialite driver
$ssoUser = $social->driver('eveonline')->user(); $ssoUser = $social->driver('eveonline')->user();
$scpSession = session()->get('scopes'); $scpSession = session()->pull('scopes');
//If the user was already logged in, let's do some checks to see if we are adding //If the user was already logged in, let's do some checks to see if we are adding
//additional scopes to the user's account //additional scopes to the user's account
if(Auth::check()) { if(Auth::check()) {
//If more scopes than just public Data are present on the return, then we are doing //If we are logged in already and the session contains the original characters, then we are creating an alt
//a scope callback to update scopes for an access token //for the original character
if(sizeof($ssoUser->scopes) > 1) { if(session()->has('orgCharacter')) {
//Check to see if an access token is present already for the character $orgCharacter = session()->pull('orgCharacter');
$tokenCount = EsiToken::where([
'character_id' => $ssoUser->id,
])->count();
//If a token is present, we need to update it.
if($tokenCount > 0) {
//Update the Esi Token
$this->UpdateEsiToken($ssoUser);
} else {
//Save the ESI token as it is new
$this->SaveEsiToken($ssoUser);
}
//After either creating the new token or updating an old token, we need to set the scopes available for the token if($this->createAlt($ssoUser, $orgCharacter)) {
$this->SetScopes($ssoUser->scopes, $ssoUser->id);
//Redirect to the dashboard with the correct message
return redirect()->to('/dashboard')->with('success', 'Successfully updated ESI Scopes.');
} else {
//Retrieve the session data for altCall, and delete it from the session
$alt = session()->pull('altCall');
if($this->createAlt($ssoUser)) {
return redirect()->to('/profile')->with('success', 'Alt registered.'); return redirect()->to('/profile')->with('success', 'Alt registered.');
} else { } else {
return redirect()->to('/profile')->with('error', 'Unable to register alt or it was previously registered.'); return redirect()->to('/profile')->with('error', 'Unable to register alt or it was previously registered.');
} }
} else {
if(sizeof($ssoUser->scopes) > 1) {
$tokenCount = EsiToken::where([
'character_id' => $ssoUser->id,
])->count();
if($tokenCount > 0) {
$this->UpdateEsiToken($ssoUser);
} else {
$this->SaveEsiToken($ssoUser);
}
$this->SetScopes($ssoUser->scopes, $ssoUser->id);
return redirect()->to('/dashboard')->with('success', 'Successfully updated ESI scopes.');
}
} }
} else { } else {
//If the user wasn't logged in, then create a new user //If the user wasn't logged in, then create a new user
@@ -159,12 +157,12 @@ class LoginController extends Controller
* *
* @param \Laravel\Socialite\Two\User $user * @param \Laravel\Socialite\Two\User $user
*/ */
private function createAlt($user) { private function createAlt($user, $orgCharacter) {
$altCount = UserAlt::where('character_id', $user->id)->count(); $altCount = UserAlt::where('character_id', $user->id)->count();
if($altCount == 0) { if($altCount == 0) {
$newAlt = new UserAlt; $newAlt = new UserAlt;
$newAlt->name = $user->getName(); $newAlt->name = $user->getName();
$newAlt->main_id = auth()->user()->getId(); $newAlt->main_id = $orgCharacter;
$newAlt->character_id = $user->id; $newAlt->character_id = $user->id;
$newAlt->avatar = $user->avatar; $newAlt->avatar = $user->avatar;
$newAlt->access_token = $user->token; $newAlt->access_token = $user->token;