From 1a0be9b68edf6b1ab624e58bf3e8dd70ca9c3e24 Mon Sep 17 00:00:00 2001 From: denis Date: Sun, 3 Nov 2024 04:13:53 -0500 Subject: [PATCH] Update app/Providers/AppServiceProvider.php --- app/Providers/AppServiceProvider.php | 196 +++++++++++++++++++++++---- 1 file changed, 168 insertions(+), 28 deletions(-) diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 4453413..f3dc740 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -1,18 +1,30 @@ mergeConfigFrom(base_path('config/ExtensionFS.php'), 'filesystems'); - - // Load Blueprint's route service provider. - $this->app->register(RouteServiceProvider::class); - - // Only load the settings service provider if the environment - // is configured to allow it. - if (!config('pterodactyl.load_environment_only', false) && $this->app->environment() !== 'testing') { - $this->app->register(SettingsServiceProvider::class); - } - $this->app->singleton('extensions.themes', function () { - return new Theme(); - }); - } /** * Return version information for the footer. @@ -102,3 +97,148 @@ class AppServiceProvider extends ServiceProvider }); } } + + + Models\Allocation::class, + 'api_key' => Models\ApiKey::class, + 'backup' => Models\Backup::class, + 'database' => Models\Database::class, + 'egg' => Models\Egg::class, + 'egg_variable' => Models\EggVariable::class, + 'schedule' => Models\Schedule::class, + 'server' => Models\Server::class, + 'ssh_key' => Models\UserSSHKey::class, + 'task' => Models\Task::class, + 'user' => Models\User::class, + ]); + + Http::macro( + 'daemon', + fn (Node $node, array $headers = []) => Http::acceptJson() + ->asJson() + ->withToken($node->daemon_token) + ->withHeaders($headers) + ->withOptions(['verify' => (bool) $app->environment('production')]) + ->timeout(config('panel.guzzle.timeout')) + ->connectTimeout(config('panel.guzzle.connect_timeout')) + ->baseUrl($node->getConnectionAddress()) + ); + + $this->bootAuth(); + $this->bootBroadcast(); + + $bearerTokens = fn (OpenApi $openApi) => $openApi->secure(SecurityScheme::http('bearer')); + Gate::define('viewApiDocs', fn () => true); + Scramble::registerApi('application', ['api_path' => 'api/application', 'info' => ['version' => '1.0']]); + Scramble::registerApi('client', ['api_path' => 'api/client', 'info' => ['version' => '1.0']])->afterOpenApiGenerated($bearerTokens); + Scramble::registerApi('remote', ['api_path' => 'api/remote', 'info' => ['version' => '1.0']])->afterOpenApiGenerated($bearerTokens); + + Event::listen(function (\SocialiteProviders\Manager\SocialiteWasCalled $event) { + $event->extendSocialite('discord', \SocialiteProviders\Discord\Provider::class); + }); + + FilamentColor::register([ + 'danger' => Color::Red, + 'gray' => Color::Zinc, + 'info' => Color::Sky, + 'primary' => Color::Blue, + 'success' => Color::Green, + 'warning' => Color::Amber, + ]); + + Gate::before(function (User $user, $ability) { + return $user->isRootAdmin() ? true : null; + }); + } + + /** + * Register application service providers. + */ + public function register(): void + { + $this->mergeConfigFrom(base_path('config/ExtensionFS.php'), 'filesystems'); + + // Load Blueprint's route service provider. + $this->app->register(RouteServiceProvider::class); + + // Only load the settings service provider if the environment + // is configured to allow it. + if (!config('pelican.load_environment_only', false) && $this->app->environment() !== 'testing') { + $this->app->register(SettingsServiceProvider::class); + } + + $this->app->singleton('extensions.themes', function () { + return new Theme(); + }); + + Scramble::extendOpenApi(fn (OpenApi $openApi) => $openApi->secure(SecurityScheme::http('bearer'))); + Scramble::ignoreDefaultRoutes(); + } + + public function bootAuth(): void + { + Sanctum::usePersonalAccessTokenModel(ApiKey::class); + } + + public function bootBroadcast(): void + { + Broadcast::routes(); + + /* + * Authenticate the user's personal channel... + */ + Broadcast::channel('App.User.*', function ($user, $userId) { + return (int) $user->id === (int) $userId; + }); + } +}