Files
alliance-services/app/Http/Controllers/Auth/EveLoginController.php
2026-03-06 11:18:15 -06:00

80 lines
2.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\Auth;
//Library
use App\Http\Controllers\Controller;
use App\Models\Auth\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;
use Throwable;
//Models
use App\Models\User\User;
use App\Models\Esi\EsiScope;
class EveLoginController extends Controller
{
public function showLogin()
{
return view('auth.eve');
}
public function redirectToProvider(): RedirectResponse
{
// "eveonline" driver registered via SocialiteProviders
return Socialite::driver('eveonline')->scopes(['publicData'])->redirect();
}
public function handleProviderCallback(Request $request): RedirectResponse
{
try {
// Stateless can help in some deployments, but keep stateful by default.
// If you run into "Invalid state" issues behind proxies, switch to ->stateless()
$ssoUser = Socialite::driver('eveonline')->user();
// Socialite user basics
$characterId = (int) $ssoUser->getId();
$characterName = $ssoUser->getName() ?: ($ssoUser->getNickname() ?? 'Unknown');
// Provider-specific extra payload sometimes appears in user array / token response.
// Well defensively extract what we can.
$raw = $ssoUser->user ?? [];
$characterOwnerHash =
$raw['CharacterOwnerHash'] ?? $raw['character_owner_hash'] ?? $raw['owner_hash'] ?? '';
$token = $ssoUser->token;
$refreshToken = $ssoUser->refreshToken ?? null;
$expiresIn = $ssoUser->expiresIn ?? null;
$user = User::updateOrCreate(
['character_id' => $characterId],
[
'character_name' => $characterName,
'character_owner_hash' => $characterOwnerHash,
'token' => $token,
'refresh_token' => $refreshToken,
'expiresIn' => $expiresIn,
// "user" holds jwt - you can set it later when you add JWT issuance.
'user_jwt' => null,
]
);
//Issue JWT and store in the "user" column per your spec
$jwt = $jwtService->make($user);
$user->user = $jwt;
$user->save();
Auth::login($user, true);
$request->session()->regenerate();
return redirect()->route('dashboard');
} catch (Throwable $e) {
// For now: fail back to login with a generic error.
// Later you can add logging/telemetry.
return redirect()->route('login')->with('error', 'SSO login failed. Please try again.');
}
}
}