Files
panel-pelican-dev/app/Providers/AppServiceProvider.php

140 lines
5.0 KiB
PHP
Raw Normal View History

<?php
2024-03-12 22:39:16 -04:00
namespace App\Providers;
2025-09-24 13:34:19 +02:00
use App\Checks\CacheCheck;
use App\Checks\DatabaseCheck;
use App\Checks\DebugModeCheck;
use App\Checks\EnvironmentCheck;
use App\Checks\NodeVersionsCheck;
use App\Checks\PanelVersionCheck;
use App\Checks\ScheduleCheck;
use App\Checks\UsedDiskSpaceCheck;
use App\Http\Responses\LoginResponse;
use App\Models\Allocation;
use App\Models\ApiKey;
use App\Models\Backup;
use App\Models\Database;
use App\Models\Egg;
use App\Models\EggVariable;
2025-09-24 13:34:19 +02:00
use App\Models\Node;
use App\Models\Schedule;
use App\Models\Server;
use App\Models\Task;
use App\Models\User;
2025-09-24 13:34:19 +02:00
use App\Models\UserSSHKey;
2025-12-20 00:32:13 +01:00
use App\Services\Helpers\PluginService;
use App\Services\Helpers\SoftwareVersionService;
2024-05-16 00:22:55 -04:00
use Dedoc\Scramble\Scramble;
use Dedoc\Scramble\Support\Generator\OpenApi;
use Dedoc\Scramble\Support\Generator\SecurityScheme;
use Filament\Auth\Http\Responses\Contracts\LoginResponse as LoginResponseContract;
use Illuminate\Config\Repository;
2024-03-19 20:42:40 -04:00
use Illuminate\Database\Eloquent\Relations\Relation;
2024-10-19 17:22:03 -04:00
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Console\AboutCommand;
2024-05-19 23:24:21 -04:00
use Illuminate\Support\Facades\Gate;
2024-03-19 20:42:40 -04:00
use Illuminate\Support\Facades\Http;
2024-11-26 23:27:58 +01:00
use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider;
2024-11-26 23:27:58 +01:00
use Illuminate\Support\Str;
2024-03-19 20:42:40 -04:00
use Laravel\Sanctum\Sanctum;
use Spatie\Health\Facades\Health;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*/
public function boot(
Application $app,
SoftwareVersionService $versionService,
Repository $config,
): void {
2024-11-26 23:27:58 +01:00
// If the APP_URL value is set with https:// make sure we force it here. Theoretically
// this should just work with the proxy logic, but there are a lot of cases where it
// doesn't, and it triggers a lot of support requests, so lets just head it off here.
URL::forceHttps(Str::startsWith(config('app.url') ?? '', 'https://'));
if ($app->runningInConsole() && empty(config('app.key'))) {
$config->set('app.key', '');
}
Relation::enforceMorphMap([
'allocation' => Allocation::class,
'api_key' => ApiKey::class,
'backup' => Backup::class,
'database' => Database::class,
'egg' => Egg::class,
'egg_variable' => EggVariable::class,
'schedule' => Schedule::class,
'server' => Server::class,
'ssh_key' => UserSSHKey::class,
'task' => Task::class,
'user' => User::class,
'node' => Node::class,
]);
2024-03-16 15:11:10 -04:00
Http::macro(
'daemon',
fn (Node $node, array $headers = []) => Http::acceptJson()
2024-03-23 12:31:31 -04:00
->asJson()
->withToken($node->daemon_token)
2024-03-16 18:53:20 -04:00
->withHeaders($headers)
2024-10-19 17:22:03 -04:00
->withOptions(['verify' => (bool) $app->environment('production')])
2024-03-16 18:53:20 -04:00
->timeout(config('panel.guzzle.timeout'))
->connectTimeout(config('panel.guzzle.connect_timeout'))
2024-03-16 15:11:10 -04:00
->baseUrl($node->getConnectionAddress())
);
2024-03-19 20:42:40 -04:00
Sanctum::usePersonalAccessTokenModel(ApiKey::class);
2024-05-16 00:22:55 -04:00
2024-05-19 23:24:21 -04:00
Gate::define('viewApiDocs', fn () => true);
$bearerTokens = fn (OpenApi $openApi) => $openApi->secure(SecurityScheme::http('bearer'));
Scramble::registerApi('application', ['api_path' => 'api/application', 'info' => ['version' => '1.0']])->afterOpenApiGenerated($bearerTokens);
2024-05-19 23:24:21 -04:00
Scramble::registerApi('client', ['api_path' => 'api/client', 'info' => ['version' => '1.0']])->afterOpenApiGenerated($bearerTokens);
// Don't run any health checks during tests
if (!$app->runningUnitTests()) {
Health::checks([
DebugModeCheck::new()->if($app->isProduction()),
EnvironmentCheck::new(),
CacheCheck::new(),
DatabaseCheck::new(),
ScheduleCheck::new(),
UsedDiskSpaceCheck::new(),
PanelVersionCheck::new(),
NodeVersionsCheck::new(),
]);
}
Gate::before(fn (User $user, $ability) => $user->isRootAdmin() ? true : null);
AboutCommand::add('Pelican', [
'Panel Version' => $versionService->currentPanelVersion(),
'Latest Version' => $versionService->latestPanelVersion(),
'Up-to-Date' => $versionService->isLatestPanel() ? '<fg=green;options=bold>Yes</>' : '<fg=red;options=bold>No</>',
]);
AboutCommand::add('Drivers', 'Backups', config('backups.default'));
AboutCommand::add('Environment', 'Installation Directory', base_path());
}
2017-12-30 16:33:00 -06:00
/**
* Register application service providers.
*/
2023-02-23 12:30:16 -07:00
public function register(): void
2017-12-30 16:33:00 -06:00
{
$this->app->bind(LoginResponseContract::class, LoginResponse::class);
2024-05-16 00:22:55 -04:00
Scramble::ignoreDefaultRoutes();
2025-12-20 00:32:13 +01:00
/** @var PluginService $pluginService */
$pluginService = app(PluginService::class); // @phpstan-ignore myCustomRules.forbiddenGlobalFunctions
$pluginService->loadPlugins();
2017-12-30 16:33:00 -06:00
}
}