diff --git a/app/Http/Controllers/Auth/EveLoginController.php b/app/Http/Controllers/Auth/EveLoginController.php index 3175ce2..9a96bcc 100644 --- a/app/Http/Controllers/Auth/EveLoginController.php +++ b/app/Http/Controllers/Auth/EveLoginController.php @@ -37,55 +37,16 @@ class EveLoginController extends Controller try { $ssoUser = Socialite::driver('eveonline')->user(); - $characterId = strtr($ssoUser['sub'], ['CHARACTER:EVE:' => '']); - $characterName = $ssoUser['name']; - $characterOwnerHash = $ssoUser['owner']; - $avatar = 'https://image.eveonline.com/Character/' . $characterId . '_128.jpg'; - $token = $ssoUser->token; - $refreshToken = $ssoUser->refreshToken ?? null; - $expiresIn = $ssoUser->expiresIn ?? null; - $scopes = is_array($ssoUser['scp']) ? $ssoUser['scp'] : [$ssoUser['scp']]; - - //Add user to the database - $user = User::updateOrCreate( - ['character_id' => $characterId], - [ - 'avatar' => $avatar, - 'character_name' => $characterName, - 'character_owner_hash' => $characterOwnerHash, - 'token' => $token, - 'refresh_token' => $refreshToken, - 'expiresIn' => $expiresIn, - ] - ); - - //Add scopes to the scope database - EsiScope::where(['character_id' => $characterId])->delete(); - foreach($scopes as $scope) { - $data = new EsiScope; - $data->character_id = $characterId; - $data->scope = $scope; - $data->save(); - } - - //Add Esi Token to the token database - $esiToken = EsiToken::updateOrCreate( - ['character_id' => $characterId], - [ - 'access_token' => $token, - 'refresh_token' => $refreshToken, - 'inserted_at' => time(), - 'expires_in' => $expiresIn, - ] - ); + $user = $this->CreateOrUpdateUser($ssoUser); // Always regenerate JWT on successful login $jwtService->forceRefresh($user); - + //Login the user Auth::login($user, true); + //Regenerate the session $request->session()->regenerate(); - - return redirect()->route('dashboard'); + //Send the user to the dashboard + return redirect()->route('dashboard')->with($user->token, 'Token'); } catch (ClientException $e) { Log::error('EVE SSO Client Exception', [ 'message' => $e->getMessage(), @@ -108,4 +69,51 @@ class EveLoginController extends Controller ->with('error', 'SSO login failed. Please try again.' . $e); } } + + private function CreateOrUpdateUser($ssoUser) + { + $characterId = strtr($ssoUser['sub'], ['CHARACTER:EVE:' => '']); + $characterName = $ssoUser['name']; + $characterOwnerHash = $ssoUser['owner']; + $avatar = 'https://image.eveonline.com/Character/' . $characterId . '_128.jpg'; + $token = $ssoUser->token; + $refreshToken = $ssoUser->refreshToken ?? null; + $expiresIn = $ssoUser->expiresIn ?? null; + $scopes = is_array($ssoUser['scp']) ? $ssoUser['scp'] : [$ssoUser['scp']]; + + //Add user to the database + $user = User::updateOrCreate( + ['character_id' => $characterId], + [ + 'avatar' => $avatar, + 'character_name' => $characterName, + 'character_owner_hash' => $characterOwnerHash, + 'token' => $token, + 'refresh_token' => $refreshToken, + 'expiresIn' => $expiresIn, + ] + ); + + //Delete currently saved scopes, then add the scopes used to login with. + EsiScope::where(['character_id' => $characterId])->delete(); + foreach($scopes as $scope) { + $data = new EsiScope; + $data->character_id = $characterId; + $data->scope = $scope; + $data->save(); + } + + //Add Esi Token to the token database + $esiToken = EsiToken::updateOrCreate( + ['character_id' => $characterId], + [ + 'access_token' => $token, + 'refresh_token' => $refreshToken, + 'inserted_at' => time(), + 'expires_in' => $expiresIn, + ] + ); + + return $user; + } } diff --git a/app/Http/Controllers/Dashboard/DashboardController.php b/app/Http/Controllers/Dashboard/DashboardController.php index 47da43f..bed2f79 100644 --- a/app/Http/Controllers/Dashboard/DashboardController.php +++ b/app/Http/Controllers/Dashboard/DashboardController.php @@ -2,12 +2,32 @@ namespace App\Http\Controllers\Dashboard; +//Internal Library use App\Http\Controllers\Controller; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; +use Carbon\Carbon; + +//Application Library +use App\Library\Esi\Esi; + +//Models +use App\Models\Esi\EsiScope; +use App\Models\Esi\EsiToken; +use App\Models\Auth\UserPermission; +use App\Models\Auth\UserRole; class DashboardController extends Controller { + public function __construct() { + $this->middleware('auth'); + $this->middleware('role:User'); + } + public function displayDashboard() { + + return view('dashboard.dashboard'); } } diff --git a/composer.json b/composer.json index 0278bd5..bc59b05 100644 --- a/composer.json +++ b/composer.json @@ -6,14 +6,16 @@ "keywords": ["laravel", "framework"], "license": "MIT", "require": { - "php": "^8.2", - "drkthunder02/eseye": "^0.1.0", + "php": "^8.4", + "asantibanez/livewire-charts": "^4.2", + "drkthunder02/eseye": "0.1.0", "firebase/php-jwt": "^7.0", "laravel/framework": "^12.0", "laravel/horizon": "^5.44", "laravel/tinker": "^2.10.1", "laravel/ui": "^4.6", - "socialiteproviders/eveonline": "^4.4" + "socialiteproviders/eveonline": "^4.4", + "spatie/laravel-prometheus": "^1.5" }, "require-dev": { "barryvdh/laravel-debugbar": "^4.1", diff --git a/composer.lock b/composer.lock index b2d425b..e3b131d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,70 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a6ca21d50e67ef5fcc522aeffba97342", + "content-hash": "c38eb63675202b3bd42d1dcdda9d15ae", "packages": [ + { + "name": "asantibanez/livewire-charts", + "version": "v4.2.0", + "source": { + "type": "git", + "url": "https://github.com/asantibanez/livewire-charts.git", + "reference": "f318e25e66c4eacc20457dfba60e9b946ee77f92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/asantibanez/livewire-charts/zipball/f318e25e66c4eacc20457dfba60e9b946ee77f92", + "reference": "f318e25e66c4eacc20457dfba60e9b946ee77f92", + "shasum": "" + }, + "require": { + "illuminate/support": "^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "livewire/livewire": "^3.0", + "php": "^7.2|^7.3|^7.4|^8.0|^8.2|^8.3" + }, + "require-dev": { + "orchestra/testbench": "^5.0|^6.0|^7.0|^8.0|^9.0", + "phpunit/phpunit": "^8.0|^9.5.10|^10.5" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "LivewireCharts": "Asantibanez\\LivewireCharts\\LivewireChartsFacade" + }, + "providers": [ + "Asantibanez\\LivewireCharts\\LivewireChartsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Asantibanez\\LivewireCharts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrés Santibáñez", + "email": "santibanez.andres@gmail.com", + "role": "Developer" + } + ], + "description": "Livewire Charts", + "homepage": "https://github.com/asantibanez/livewire-charts", + "keywords": [ + "asantibanez", + "livewire-charts" + ], + "support": { + "issues": "https://github.com/asantibanez/livewire-charts/issues", + "source": "https://github.com/asantibanez/livewire-charts/tree/v4.2.0" + }, + "time": "2025-12-18T16:58:46+00:00" + }, { "name": "brick/math", "version": "0.14.8", @@ -2511,6 +2573,82 @@ ], "time": "2026-01-15T06:54:53+00:00" }, + { + "name": "livewire/livewire", + "version": "v3.7.11", + "source": { + "type": "git", + "url": "https://github.com/livewire/livewire.git", + "reference": "addd6e8e9234df75f29e6a327ee2a745a7d67bb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/livewire/livewire/zipball/addd6e8e9234df75f29e6a327ee2a745a7d67bb6", + "reference": "addd6e8e9234df75f29e6a327ee2a745a7d67bb6", + "shasum": "" + }, + "require": { + "illuminate/database": "^10.0|^11.0|^12.0|^13.0", + "illuminate/routing": "^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^10.0|^11.0|^12.0|^13.0", + "illuminate/validation": "^10.0|^11.0|^12.0|^13.0", + "laravel/prompts": "^0.1.24|^0.2|^0.3", + "league/mime-type-detection": "^1.9", + "php": "^8.1", + "symfony/console": "^6.0|^7.0|^8.0", + "symfony/http-kernel": "^6.2|^7.0|^8.0" + }, + "require-dev": { + "calebporzio/sushi": "^2.1", + "laravel/framework": "^10.15.0|^11.0|^12.0|^13.0", + "mockery/mockery": "^1.3.1", + "orchestra/testbench": "^8.21.0|^9.0|^10.0|^11.0", + "orchestra/testbench-dusk": "^8.24|^9.1|^10.0|^11.0", + "phpunit/phpunit": "^10.4|^11.5|^12.5", + "psy/psysh": "^0.11.22|^0.12" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Livewire": "Livewire\\Livewire" + }, + "providers": [ + "Livewire\\LivewireServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Caleb Porzio", + "email": "calebporzio@gmail.com" + } + ], + "description": "A front-end framework for Laravel.", + "support": { + "issues": "https://github.com/livewire/livewire/issues", + "source": "https://github.com/livewire/livewire/tree/v3.7.11" + }, + "funding": [ + { + "url": "https://github.com/livewire", + "type": "github" + } + ], + "time": "2026-02-26T00:58:19+00:00" + }, { "name": "monolog/monolog", "version": "3.10.0", @@ -3390,6 +3528,74 @@ ], "time": "2022-01-05T17:46:08+00:00" }, + { + "name": "promphp/prometheus_client_php", + "version": "v2.14.1", + "source": { + "type": "git", + "url": "https://github.com/PromPHP/prometheus_client_php.git", + "reference": "a283aea8269287dc35313a0055480d950c59ac1f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PromPHP/prometheus_client_php/zipball/a283aea8269287dc35313a0055480d950c59ac1f", + "reference": "a283aea8269287dc35313a0055480d950c59ac1f", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4|^8.0" + }, + "replace": { + "endclothing/prometheus_client_php": "*", + "jimdo/prometheus_client_php": "*", + "lkaemmerling/prometheus_client_php": "*" + }, + "require-dev": { + "guzzlehttp/guzzle": "^6.3|^7.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5.4", + "phpstan/phpstan-phpunit": "^1.1.0", + "phpstan/phpstan-strict-rules": "^1.1.0", + "phpunit/phpunit": "^9.4", + "squizlabs/php_codesniffer": "^3.6", + "symfony/polyfill-apcu": "^1.6" + }, + "suggest": { + "ext-apc": "Required if using APCu.", + "ext-pdo": "Required if using PDO.", + "ext-redis": "Required if using Redis.", + "promphp/prometheus_push_gateway_php": "An easy client for using Prometheus PushGateway.", + "symfony/polyfill-apcu": "Required if you use APCu on PHP8.0+" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Prometheus\\": "src/Prometheus/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Lukas Kämmerling", + "email": "kontakt@lukas-kaemmerling.de" + } + ], + "description": "Prometheus instrumentation library for PHP applications.", + "support": { + "issues": "https://github.com/PromPHP/prometheus_client_php/issues", + "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.14.1" + }, + "time": "2025-04-14T07:59:43+00:00" + }, { "name": "psr/clock", "version": "1.0.0", @@ -4204,6 +4410,143 @@ }, "time": "2025-02-24T19:33:30+00:00" }, + { + "name": "spatie/laravel-package-tools", + "version": "1.93.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/0d097bce95b2bf6802fb1d83e1e753b0f5a948e7", + "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0|^11.0|^12.0|^13.0", + "php": "^8.1" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "orchestra/testbench": "^8.0|^9.2|^10.0|^11.0", + "pestphp/pest": "^2.1|^3.1|^4.0", + "phpunit/php-code-coverage": "^10.0|^11.0|^12.0", + "phpunit/phpunit": "^10.5|^11.5|^12.5", + "spatie/pest-plugin-test-time": "^2.2|^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\LaravelPackageTools\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", + "keywords": [ + "laravel-package-tools", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.93.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2026-02-21T12:49:54+00:00" + }, + { + "name": "spatie/laravel-prometheus", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-prometheus.git", + "reference": "4dbff129ca710f1ca65ce2a0684d9ae60cfbc6c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-prometheus/zipball/4dbff129ca710f1ca65ce2a0684d9ae60cfbc6c1", + "reference": "4dbff129ca710f1ca65ce2a0684d9ae60cfbc6c1", + "shasum": "" + }, + "require": { + "illuminate/config": "^12.0|^13.0", + "illuminate/contracts": "^12.0|^13.0", + "illuminate/support": "^12.0|^13.0", + "php": "^8.4", + "promphp/prometheus_client_php": "^2.7.1", + "spatie/laravel-package-tools": "^1.15.0" + }, + "require-dev": { + "ext-redis": "*", + "larastan/larastan": "^3.0", + "laravel/horizon": "^5.28", + "laravel/pint": "^1.10", + "mockery/mockery": "^1.6", + "orchestra/testbench": "^10.0|^11.0", + "pestphp/pest": "^4.4", + "pestphp/pest-plugin-arch": "^4.0", + "pestphp/pest-plugin-laravel": "^4.1", + "spatie/laravel-ray": "^1.32.4", + "spatie/pest-plugin-snapshots": "^2.0" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Prometheus": "Spatie\\Prometheus\\Facades\\Prometheus" + }, + "providers": [ + "Spatie\\Prometheus\\PrometheusServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Spatie\\Prometheus\\": "src/", + "Spatie\\Prometheus\\Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "Export Laravel metrics to Prometheus", + "homepage": "https://github.com/spatie/laravel-prometheus", + "keywords": [ + "laravel", + "laravel-prometheus", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-prometheus/issues", + "source": "https://github.com/spatie/laravel-prometheus/tree/1.5.0" + }, + "time": "2026-03-06T08:39:22+00:00" + }, { "name": "spomky-labs/base64url", "version": "v2.0.4", @@ -10258,7 +10601,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.2" + "php": "^8.4" }, "platform-dev": [], "plugin-api-version": "2.6.0"