Disaster Recovery v4

This commit is contained in:
Charles 2025-06-23 09:17:43 -04:00
parent ea19202609
commit 250d293edf
39 changed files with 76 additions and 93 deletions

View File

@ -120,7 +120,7 @@ class Handler extends ExceptionHandler
/** /**
* Render an exception into an HTTP response. * Render an exception into an HTTP response.
* *
* @param Request $request * @param Request $request
* *
* @throws Throwable * @throws Throwable
*/ */
@ -146,7 +146,7 @@ class Handler extends ExceptionHandler
* Transform a validation exception into a consistent format to be returned for * Transform a validation exception into a consistent format to be returned for
* calls to the API. * calls to the API.
* *
* @param Request $request * @param Request $request
*/ */
public function invalidJson($request, ValidationException $exception): JsonResponse public function invalidJson($request, ValidationException $exception): JsonResponse
{ {
@ -260,7 +260,7 @@ class Handler extends ExceptionHandler
/** /**
* Convert an authentication exception into an unauthenticated response. * Convert an authentication exception into an unauthenticated response.
* *
* @param Request $request * @param Request $request
*/ */
protected function unauthenticated($request, AuthenticationException $exception): JsonResponse|RedirectResponse protected function unauthenticated($request, AuthenticationException $exception): JsonResponse|RedirectResponse
{ {

View File

@ -12,6 +12,7 @@ use Exception;
use Filament\Actions\Action; use Filament\Actions\Action;
use Filament\Facades\Filament; use Filament\Facades\Filament;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Infolists\Components\TextEntry;
use Filament\Notifications\Notification; use Filament\Notifications\Notification;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Foundation\Application; use Illuminate\Foundation\Application;
@ -60,7 +61,7 @@ class GSLToken extends FeatureProvider
->modalSubmitActionLabel('Update GSL Token') ->modalSubmitActionLabel('Update GSL Token')
->disabledSchema(fn () => !auth()->user()->can(Permission::ACTION_STARTUP_UPDATE, $server)) ->disabledSchema(fn () => !auth()->user()->can(Permission::ACTION_STARTUP_UPDATE, $server))
->schema([ ->schema([
Placeholder::make('info') TextEntry::make('info')
->label(new HtmlString(Blade::render('You can either <x-filament::link href="https://steamcommunity.com/dev/managegameservers" target="_blank">generate a new one</x-filament::link> and enter it below or leave the field blank to remove it completely.'))), ->label(new HtmlString(Blade::render('You can either <x-filament::link href="https://steamcommunity.com/dev/managegameservers" target="_blank">generate a new one</x-filament::link> and enter it below or leave the field blank to remove it completely.'))),
TextInput::make('gsltoken') TextInput::make('gsltoken')
->label('GSL Token') ->label('GSL Token')

View File

@ -9,7 +9,6 @@ use Illuminate\Foundation\Application;
use Illuminate\Support\Facades\Blade; use Illuminate\Support\Facades\Blade;
use Illuminate\Support\HtmlString; use Illuminate\Support\HtmlString;
use SocialiteProviders\Discord\Provider; use SocialiteProviders\Discord\Provider;
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
final class DiscordProvider extends OAuthProvider final class DiscordProvider extends OAuthProvider
{ {
@ -43,7 +42,7 @@ final class DiscordProvider extends OAuthProvider
->label('Redirect URL') ->label('Redirect URL')
->dehydrated() ->dehydrated()
->disabled() ->disabled()
->hintAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null) //TODO ->hintAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
->formatStateUsing(fn () => url('/auth/oauth/callback/discord')), ->formatStateUsing(fn () => url('/auth/oauth/callback/discord')),
]), ]),
], parent::getSetupSteps()); ], parent::getSetupSteps());

View File

@ -7,7 +7,7 @@ use Filament\Pages\Dashboard as BaseDashboard;
class Dashboard extends BaseDashboard class Dashboard extends BaseDashboard
{ {
protected static string | \BackedEnum | null $navigationIcon = 'tabler-layout-dashboard'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-layout-dashboard';
private SoftwareVersionService $softwareVersionService; private SoftwareVersionService $softwareVersionService;

View File

@ -13,7 +13,7 @@ use Spatie\Health\ResultStores\ResultStore;
class Health extends Page class Health extends Page
{ {
protected static string | \BackedEnum | null $navigationIcon = 'tabler-heart'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-heart';
protected string $view = 'filament.pages.health'; protected string $view = 'filament.pages.health';

View File

@ -10,6 +10,7 @@ use App\Notifications\MailTested;
use App\Traits\EnvironmentWriterTrait; use App\Traits\EnvironmentWriterTrait;
use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderActions;
use App\Traits\Filament\CanCustomizeHeaderWidgets; use App\Traits\Filament\CanCustomizeHeaderWidgets;
use BackedEnum;
use Exception; use Exception;
use Filament\Actions\Action; use Filament\Actions\Action;
use Filament\Actions\ActionGroup; use Filament\Actions\ActionGroup;
@ -54,7 +55,7 @@ class Settings extends Page implements HasSchemas
use EnvironmentWriterTrait; use EnvironmentWriterTrait;
use InteractsWithForms; use InteractsWithForms;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-settings'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-settings';
protected string $view = 'filament.pages.settings'; protected string $view = 'filament.pages.settings';

View File

@ -5,7 +5,6 @@ namespace App\Filament\Admin\Resources;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use App\Filament\Admin\Resources\ApiKeyResource\Pages\ListApiKeys; use App\Filament\Admin\Resources\ApiKeyResource\Pages\ListApiKeys;
use App\Filament\Admin\Resources\ApiKeyResource\Pages\CreateApiKey; use App\Filament\Admin\Resources\ApiKeyResource\Pages\CreateApiKey;
use App\Filament\Admin\Resources\ApiKeyResource\Pages;
use App\Filament\Admin\Resources\UserResource\Pages\EditUser; use App\Filament\Admin\Resources\UserResource\Pages\EditUser;
use App\Filament\Components\Tables\Columns\DateTimeColumn; use App\Filament\Components\Tables\Columns\DateTimeColumn;
use App\Models\ApiKey; use App\Models\ApiKey;
@ -22,7 +21,6 @@ use Filament\Forms\Components\ToggleButtons;
use Filament\Resources\Pages\PageRegistration; use Filament\Resources\Pages\PageRegistration;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Components\Fieldset; use Filament\Schemas\Components\Fieldset;
use Filament\Schemas\Components\Form;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
@ -36,7 +34,7 @@ class ApiKeyResource extends Resource
protected static ?string $model = ApiKey::class; protected static ?string $model = ApiKey::class;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-key'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-key';
public static function getNavigationLabel(): string public static function getNavigationLabel(): string
{ {
@ -112,16 +110,12 @@ class ApiKeyResource extends Resource
/** /**
* @throws Exception * @throws Exception
*/ */
public static function form(Form|Schema $form): Schema public static function defaultForm(Schema $schema): Schema
{ {
return $form return $schema
->schema([ ->schema([
Fieldset::make('Permissions') Fieldset::make('Permissions')
->columns([ ->columnSpanFull()
'default' => 1,
'sm' => 1,
'md' => 2,
])
->schema( ->schema(
collect(ApiKey::getPermissionList())->map(fn ($resource) => ToggleButtons::make('permissions_' . $resource) collect(ApiKey::getPermissionList())->map(fn ($resource) => ToggleButtons::make('permissions_' . $resource)
->label(str($resource)->replace('_', ' ')->title())->inline() ->label(str($resource)->replace('_', ' ')->title())->inline()

View File

@ -7,8 +7,6 @@ use App\Filament\Admin\Resources\DatabaseHostResource\Pages\ListDatabaseHosts;
use App\Filament\Admin\Resources\DatabaseHostResource\Pages\CreateDatabaseHost; use App\Filament\Admin\Resources\DatabaseHostResource\Pages\CreateDatabaseHost;
use App\Filament\Admin\Resources\DatabaseHostResource\Pages\ViewDatabaseHost; use App\Filament\Admin\Resources\DatabaseHostResource\Pages\ViewDatabaseHost;
use App\Filament\Admin\Resources\DatabaseHostResource\Pages\EditDatabaseHost; use App\Filament\Admin\Resources\DatabaseHostResource\Pages\EditDatabaseHost;
use App\Filament\Admin\Resources\DatabaseHostResource\Pages;
use App\Filament\Admin\Resources\DatabaseHostResource\RelationManagers;
use App\Models\DatabaseHost; use App\Models\DatabaseHost;
use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizePages;
use App\Traits\Filament\CanCustomizeRelations; use App\Traits\Filament\CanCustomizeRelations;
@ -25,6 +23,7 @@ use Filament\Resources\Pages\PageRegistration;
use Filament\Resources\RelationManagers\RelationManager; use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Components\Section; use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
@ -39,7 +38,7 @@ class DatabaseHostResource extends Resource
protected static ?string $model = DatabaseHost::class; protected static ?string $model = DatabaseHost::class;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-database'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-database';
protected static ?string $recordTitleAttribute = 'name'; protected static ?string $recordTitleAttribute = 'name';
@ -112,7 +111,7 @@ class DatabaseHostResource extends Resource
/** /**
* @throws Exception * @throws Exception
*/ */
public static function form(Schema $schema): Schema public static function defaultForm(Schema $schema): Schema
{ {
return $schema return $schema
->components([ ->components([

View File

@ -2,12 +2,14 @@
namespace App\Filament\Admin\Resources\DatabaseHostResource\RelationManagers; namespace App\Filament\Admin\Resources\DatabaseHostResource\RelationManagers;
use Exception;
use Filament\Actions\DeleteAction;
use Filament\Actions\ViewAction;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use App\Filament\Components\Forms\Actions\RotateDatabasePasswordAction; use App\Filament\Components\Forms\Actions\RotateDatabasePasswordAction;
use App\Filament\Components\Tables\Columns\DateTimeColumn; use App\Filament\Components\Tables\Columns\DateTimeColumn;
use App\Models\Database; use App\Models\Database;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Schemas\Components\Form;
use Filament\Resources\RelationManagers\RelationManager; use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
@ -16,7 +18,10 @@ class DatabasesRelationManager extends RelationManager
{ {
protected static string $relationship = 'databases'; protected static string $relationship = 'databases';
public function form(Form|Schema $schema): Schema /**
* @throws Exception
*/
public function form(Schema $schema): Schema
{ {
return $schema return $schema
->schema([ ->schema([

View File

@ -6,8 +6,6 @@ use App\Filament\Admin\Resources\EggResource\RelationManagers\ServersRelationMan
use App\Filament\Admin\Resources\EggResource\Pages\ListEggs; use App\Filament\Admin\Resources\EggResource\Pages\ListEggs;
use App\Filament\Admin\Resources\EggResource\Pages\CreateEgg; use App\Filament\Admin\Resources\EggResource\Pages\CreateEgg;
use App\Filament\Admin\Resources\EggResource\Pages\EditEgg; use App\Filament\Admin\Resources\EggResource\Pages\EditEgg;
use App\Filament\Admin\Resources\EggResource\Pages;
use App\Filament\Admin\Resources\EggResource\RelationManagers;
use App\Models\Egg; use App\Models\Egg;
use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizePages;
use App\Traits\Filament\CanCustomizeRelations; use App\Traits\Filament\CanCustomizeRelations;
@ -22,7 +20,7 @@ class EggResource extends Resource
protected static ?string $model = Egg::class; protected static ?string $model = Egg::class;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-eggs'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-eggs';
protected static ?string $recordTitleAttribute = 'name'; protected static ?string $recordTitleAttribute = 'name';

View File

@ -7,7 +7,6 @@ use App\Filament\Admin\Resources\MountResource\Pages\CreateMount;
use App\Filament\Admin\Resources\MountResource\Pages\ViewMount; use App\Filament\Admin\Resources\MountResource\Pages\ViewMount;
use App\Filament\Admin\Resources\MountResource\Pages\EditMount; use App\Filament\Admin\Resources\MountResource\Pages\EditMount;
use Exception; use Exception;
use App\Filament\Admin\Resources\MountResource\Pages;
use App\Models\Mount; use App\Models\Mount;
use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizePages;
use App\Traits\Filament\CanCustomizeRelations; use App\Traits\Filament\CanCustomizeRelations;
@ -39,7 +38,7 @@ class MountResource extends Resource
protected static ?string $model = Mount::class; protected static ?string $model = Mount::class;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-layers-linked'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-layers-linked';
protected static ?string $recordTitleAttribute = 'name'; protected static ?string $recordTitleAttribute = 'name';
@ -115,7 +114,7 @@ class MountResource extends Resource
/** /**
* @throws Exception * @throws Exception
*/ */
public static function form(Schema $schema): Schema public static function defaultForm(Schema $schema): Schema
{ {
return $schema return $schema
->components([ ->components([

View File

@ -7,8 +7,6 @@ use App\Filament\Admin\Resources\NodeResource\RelationManagers\NodesRelationMana
use App\Filament\Admin\Resources\NodeResource\Pages\ListNodes; use App\Filament\Admin\Resources\NodeResource\Pages\ListNodes;
use App\Filament\Admin\Resources\NodeResource\Pages\CreateNode; use App\Filament\Admin\Resources\NodeResource\Pages\CreateNode;
use App\Filament\Admin\Resources\NodeResource\Pages\EditNode; use App\Filament\Admin\Resources\NodeResource\Pages\EditNode;
use App\Filament\Admin\Resources\NodeResource\Pages;
use App\Filament\Admin\Resources\NodeResource\RelationManagers;
use App\Models\Node; use App\Models\Node;
use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizePages;
use App\Traits\Filament\CanCustomizeRelations; use App\Traits\Filament\CanCustomizeRelations;
@ -24,7 +22,7 @@ class NodeResource extends Resource
protected static ?string $model = Node::class; protected static ?string $model = Node::class;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-server-2'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-server-2';
protected static ?string $recordTitleAttribute = 'name'; protected static ?string $recordTitleAttribute = 'name';

View File

@ -2,6 +2,10 @@
namespace App\Filament\Admin\Resources\NodeResource\Pages; namespace App\Filament\Admin\Resources\NodeResource\Pages;
use Filament\Actions\Action;
use Filament\Actions\DeleteAction;
use Filament\Schemas\Components\Actions;
use Filament\Schemas\Components\Grid;
use Throwable; use Throwable;
use App\Filament\Admin\Resources\NodeResource; use App\Filament\Admin\Resources\NodeResource;
use App\Models\Node; use App\Models\Node;
@ -12,7 +16,6 @@ use App\Services\Nodes\NodeUpdateService;
use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderActions;
use App\Traits\Filament\CanCustomizeHeaderWidgets; use App\Traits\Filament\CanCustomizeHeaderWidgets;
use Exception; use Exception;
use Filament\Actions;
use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Hidden;
use Filament\Forms\Components\TagsInput; use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\Textarea; use Filament\Forms\Components\Textarea;
@ -20,7 +23,6 @@ use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Components\ToggleButtons;
use Filament\Infolists\Components\TextEntry; use Filament\Infolists\Components\TextEntry;
use Filament\Schemas\Components\Fieldset; use Filament\Schemas\Components\Fieldset;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Tabs; use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab; use Filament\Schemas\Components\Tabs\Tab;
use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Components\Utilities\Get;
@ -592,7 +594,7 @@ class EditNode extends EditRecord
//TODO ->hintAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null) //TODO ->hintAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
->formatStateUsing(fn (NodeAutoDeployService $service, Node $node, Set $set, Get $get) => $set('generatedToken', $service->handle(request(), $node, $get('docker')))), ->formatStateUsing(fn (NodeAutoDeployService $service, Node $node, Set $set, Get $get) => $set('generatedToken', $service->handle(request(), $node, $get('docker')))),
]) ])
->mountUsing(function (Form|Schema $schema) { ->mountUsing(function (Schema $schema) {
$schema->fill(); $schema->fill();
}), }),
])->fullWidth(), ])->fullWidth(),
@ -650,7 +652,7 @@ class EditNode extends EditRecord
return []; return [];
} }
/** @return array<Actions\Action|Actions\ActionGroup> */ /** @return array<Action|Actions> */
protected function getDefaultHeaderActions(): array protected function getDefaultHeaderActions(): array
{ {
return [ return [

View File

@ -27,7 +27,7 @@ class AllocationsRelationManager extends RelationManager
{ {
protected static string $relationship = 'allocations'; protected static string $relationship = 'allocations';
protected static string | \BackedEnum | null $icon = 'tabler-plug-connected'; protected static string|\BackedEnum|null $icon = 'tabler-plug-connected';
public function setTitle(): string public function setTitle(): string
{ {

View File

@ -12,7 +12,7 @@ class NodesRelationManager extends RelationManager
{ {
protected static string $relationship = 'servers'; protected static string $relationship = 'servers';
protected static string | \BackedEnum | null $icon = 'tabler-brand-docker'; protected static string|\BackedEnum|null $icon = 'tabler-brand-docker';
public function setTitle(): string public function setTitle(): string
{ {

View File

@ -7,7 +7,6 @@ use App\Filament\Admin\Resources\RoleResource\Pages\CreateRole;
use App\Filament\Admin\Resources\RoleResource\Pages\ViewRole; use App\Filament\Admin\Resources\RoleResource\Pages\ViewRole;
use App\Filament\Admin\Resources\RoleResource\Pages\EditRole; use App\Filament\Admin\Resources\RoleResource\Pages\EditRole;
use BackedEnum; use BackedEnum;
use App\Filament\Admin\Resources\RoleResource\Pages;
use App\Models\Role; use App\Models\Role;
use Exception; use Exception;
use Filament\Actions\Action; use Filament\Actions\Action;
@ -44,7 +43,7 @@ class RoleResource extends Resource
protected static ?string $model = Role::class; protected static ?string $model = Role::class;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-users-group'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-users-group';
protected static ?string $recordTitleAttribute = 'name'; protected static ?string $recordTitleAttribute = 'name';
@ -118,7 +117,7 @@ class RoleResource extends Resource
/** /**
* @throws Exception * @throws Exception
*/ */
public static function form(Schema $schema): Schema public static function defaultForm(Schema $schema): Schema
{ {
$permissionSections = []; $permissionSections = [];
@ -164,7 +163,7 @@ class RoleResource extends Resource
} }
/** /**
* @param string[]|int[]|Permission[]|BackedEnum[] $options * @param string[]|int[]|Permission[]|BackedEnum[] $options
* *
* @throws Exception * @throws Exception
*/ */

View File

@ -7,8 +7,6 @@ use App\Filament\Admin\Resources\ServerResource\Pages\ListServers;
use App\Filament\Admin\Resources\ServerResource\Pages\CreateServer; use App\Filament\Admin\Resources\ServerResource\Pages\CreateServer;
use App\Filament\Admin\Resources\ServerResource\Pages\EditServer; use App\Filament\Admin\Resources\ServerResource\Pages\EditServer;
use Exception; use Exception;
use App\Filament\Admin\Resources\ServerResource\Pages;
use App\Filament\Admin\Resources\ServerResource\RelationManagers;
use App\Models\Mount; use App\Models\Mount;
use App\Models\Server; use App\Models\Server;
use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizePages;
@ -27,7 +25,7 @@ class ServerResource extends Resource
protected static ?string $model = Server::class; protected static ?string $model = Server::class;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-brand-docker'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-brand-docker';
protected static ?string $recordTitleAttribute = 'name'; protected static ?string $recordTitleAttribute = 'name';

View File

@ -2,9 +2,9 @@
namespace App\Filament\Admin\Resources\ServerResource\Pages; namespace App\Filament\Admin\Resources\ServerResource\Pages;
use AbdelhamidErrahmouni\FilamentMonacoEditor\MonacoEditor;
use App\Enums\SuspendAction; use App\Enums\SuspendAction;
use App\Filament\Admin\Resources\ServerResource; use App\Filament\Admin\Resources\ServerResource;
use App\Filament\Admin\Resources\ServerResource\RelationManagers\AllocationsRelationManager;
use App\Filament\Components\Forms\Actions\PreviewStartupAction; use App\Filament\Components\Forms\Actions\PreviewStartupAction;
use App\Filament\Components\Forms\Actions\RotateDatabasePasswordAction; use App\Filament\Components\Forms\Actions\RotateDatabasePasswordAction;
use App\Filament\Server\Pages\Console; use App\Filament\Server\Pages\Console;
@ -30,6 +30,7 @@ use App\Traits\Filament\CanCustomizeHeaderWidgets;
use Closure; use Closure;
use Exception; use Exception;
use Filament\Actions\Action; use Filament\Actions\Action;
use Filament\Forms\Components\CodeEditor;
use Filament\Schemas\Components\Actions; use Filament\Schemas\Components\Actions;
use Filament\Schemas\Components\Component; use Filament\Schemas\Components\Component;
use Filament\Schemas\Components\Fieldset; use Filament\Schemas\Components\Fieldset;
@ -164,9 +165,8 @@ class EditServer extends EditRecord
->modalFooterActionsAlignment(Alignment::Right) ->modalFooterActionsAlignment(Alignment::Right)
->modalCancelActionLabel(trans('filament::components/modal.actions.close.label')) ->modalCancelActionLabel(trans('filament::components/modal.actions.close.label'))
->schema([ ->schema([
MonacoEditor::make('logs') CodeEditor::make('logs')
->hiddenLabel() ->hiddenLabel()
->placeholderText(trans('admin/server.no_log'))
->formatStateUsing(function (Server $server, DaemonServerRepository $serverRepository) { ->formatStateUsing(function (Server $server, DaemonServerRepository $serverRepository) {
try { try {
return $serverRepository->setServer($server)->getInstallLogs(); return $serverRepository->setServer($server)->getInstallLogs();

View File

@ -7,8 +7,6 @@ use App\Filament\Admin\Resources\UserResource\Pages\ListUsers;
use App\Filament\Admin\Resources\UserResource\Pages\CreateUser; use App\Filament\Admin\Resources\UserResource\Pages\CreateUser;
use App\Filament\Admin\Resources\UserResource\Pages\ViewUser; use App\Filament\Admin\Resources\UserResource\Pages\ViewUser;
use App\Filament\Admin\Resources\UserResource\Pages\EditUser; use App\Filament\Admin\Resources\UserResource\Pages\EditUser;
use App\Filament\Admin\Resources\UserResource\Pages;
use App\Filament\Admin\Resources\UserResource\RelationManagers;
use App\Models\Role; use App\Models\Role;
use App\Models\User; use App\Models\User;
use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizePages;
@ -38,7 +36,7 @@ class UserResource extends Resource
protected static ?string $model = User::class; protected static ?string $model = User::class;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-users'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-users';
protected static ?string $recordTitleAttribute = 'username'; protected static ?string $recordTitleAttribute = 'username';
@ -115,7 +113,7 @@ class UserResource extends Resource
]); ]);
} }
public static function form(Schema $schema): Schema public static function defaultForm(Schema $schema): Schema
{ {
return $schema return $schema
->columns(['default' => 1, 'lg' => 3]) ->columns(['default' => 1, 'lg' => 3])

View File

@ -6,7 +6,6 @@ use App\Filament\Admin\Resources\WebhookResource\Pages\ListWebhookConfigurations
use App\Filament\Admin\Resources\WebhookResource\Pages\CreateWebhookConfiguration; use App\Filament\Admin\Resources\WebhookResource\Pages\CreateWebhookConfiguration;
use App\Filament\Admin\Resources\WebhookResource\Pages\ViewWebhookConfiguration; use App\Filament\Admin\Resources\WebhookResource\Pages\ViewWebhookConfiguration;
use App\Filament\Admin\Resources\WebhookResource\Pages\EditWebhookConfiguration; use App\Filament\Admin\Resources\WebhookResource\Pages\EditWebhookConfiguration;
use App\Filament\Admin\Resources\WebhookResource\Pages;
use App\Models\WebhookConfiguration; use App\Models\WebhookConfiguration;
use Filament\Actions\CreateAction; use Filament\Actions\CreateAction;
use Filament\Actions\DeleteBulkAction; use Filament\Actions\DeleteBulkAction;
@ -34,7 +33,7 @@ class WebhookResource extends Resource
protected static ?string $model = WebhookConfiguration::class; protected static ?string $model = WebhookConfiguration::class;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-webhook'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-webhook';
protected static ?string $recordTitleAttribute = 'description'; protected static ?string $recordTitleAttribute = 'description';
@ -89,7 +88,7 @@ class WebhookResource extends Resource
]); ]);
} }
public static function form(Schema $schema): Schema public static function defaultForm(Schema $schema): Schema
{ {
return $schema return $schema
->components([ ->components([

View File

@ -3,7 +3,6 @@
namespace App\Filament\App\Resources; namespace App\Filament\App\Resources;
use App\Filament\App\Resources\ServerResource\Pages\ListServers; use App\Filament\App\Resources\ServerResource\Pages\ListServers;
use App\Filament\App\Resources\ServerResource\Pages;
use App\Models\Server; use App\Models\Server;
use Filament\Resources\Resource; use Filament\Resources\Resource;

View File

@ -3,11 +3,11 @@
namespace App\Filament\Server\Components; namespace App\Filament\Server\Components;
use Closure; use Closure;
use Filament\Schemas\Components\Component;
use Filament\Support\Concerns\EvaluatesClosures; use Filament\Support\Concerns\EvaluatesClosures;
use Filament\Widgets\StatsOverviewWidget\Stat;
use Illuminate\Contracts\View\View; use Illuminate\Contracts\View\View;
class SmallStatBlock extends Component class SmallStatBlock extends Stat
{ {
use EvaluatesClosures; use EvaluatesClosures;
@ -16,9 +16,9 @@ class SmallStatBlock extends Component
public function copyOnClick(bool|Closure $copyOnClick = true): static public function copyOnClick(bool|Closure $copyOnClick = true): static
{ {
$this->copyOnClick = $copyOnClick; $this->copyOnClick = $copyOnClick;
}
protected string $value; return $this;
}
public function shouldCopyOnClick(): bool public function shouldCopyOnClick(): bool
{ {
@ -27,6 +27,6 @@ class SmallStatBlock extends Component
public function render(): View public function render(): View
{ {
return value($this->value); return view('filament.components.server-small-data-block', $this->data());
} }
} }

View File

@ -20,7 +20,7 @@ use Illuminate\Support\Number;
class Settings extends ServerFormPage class Settings extends ServerFormPage
{ {
protected static string | \BackedEnum | null $navigationIcon = 'tabler-settings'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-settings';
protected static ?int $navigationSort = 10; protected static ?int $navigationSort = 10;

View File

@ -24,7 +24,7 @@ use Illuminate\Support\Facades\Validator;
class Startup extends ServerFormPage class Startup extends ServerFormPage
{ {
protected static string | \BackedEnum | null $navigationIcon = 'tabler-player-play'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-player-play';
protected static ?int $navigationSort = 9; protected static ?int $navigationSort = 9;

View File

@ -6,7 +6,6 @@ use App\Filament\Server\Resources\ActivityResource\Pages\ListActivities;
use Exception; use Exception;
use App\Filament\Admin\Resources\UserResource\Pages\EditUser; use App\Filament\Admin\Resources\UserResource\Pages\EditUser;
use App\Filament\Components\Tables\Columns\DateTimeColumn; use App\Filament\Components\Tables\Columns\DateTimeColumn;
use App\Filament\Server\Resources\ActivityResource\Pages;
use App\Models\ActivityLog; use App\Models\ActivityLog;
use App\Models\Permission; use App\Models\Permission;
use App\Models\Role; use App\Models\Role;
@ -46,7 +45,7 @@ class ActivityResource extends Resource
protected static ?int $navigationSort = 8; protected static ?int $navigationSort = 8;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-stack'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-stack';
protected static bool $isScopedToTenant = false; protected static bool $isScopedToTenant = false;

View File

@ -4,7 +4,6 @@ namespace App\Filament\Server\Resources;
use App\Filament\Server\Resources\AllocationResource\Pages\ListAllocations; use App\Filament\Server\Resources\AllocationResource\Pages\ListAllocations;
use App\Facades\Activity; use App\Facades\Activity;
use App\Filament\Server\Resources\AllocationResource\Pages;
use App\Models\Allocation; use App\Models\Allocation;
use App\Models\Permission; use App\Models\Permission;
use App\Models\Server; use App\Models\Server;
@ -38,7 +37,7 @@ class AllocationResource extends Resource
protected static ?int $navigationSort = 7; protected static ?int $navigationSort = 7;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-network'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-network';
/** /**
* @throws Exception * @throws Exception

View File

@ -6,7 +6,6 @@ use App\Filament\Server\Resources\BackupResource\Pages\ListBackups;
use App\Enums\BackupStatus; use App\Enums\BackupStatus;
use App\Enums\ServerState; use App\Enums\ServerState;
use App\Facades\Activity; use App\Facades\Activity;
use App\Filament\Server\Resources\BackupResource\Pages;
use App\Http\Controllers\Api\Client\Servers\BackupController; use App\Http\Controllers\Api\Client\Servers\BackupController;
use App\Models\Backup; use App\Models\Backup;
use App\Models\Permission; use App\Models\Permission;
@ -56,7 +55,7 @@ class BackupResource extends Resource
protected static ?int $navigationSort = 3; protected static ?int $navigationSort = 3;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-file-zip'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-file-zip';
protected static bool $canCreateAnother = false; protected static bool $canCreateAnother = false;
@ -78,7 +77,7 @@ class BackupResource extends Resource
public static function defaultForm(Schema $schema): Schema public static function defaultForm(Schema $schema): Schema
{ {
return $form return $schema
->schema([ ->schema([
TextInput::make('name') TextInput::make('name')
->label('Name') ->label('Name')

View File

@ -5,7 +5,6 @@ namespace App\Filament\Server\Resources;
use App\Filament\Server\Resources\DatabaseResource\Pages\ListDatabases; use App\Filament\Server\Resources\DatabaseResource\Pages\ListDatabases;
use App\Filament\Components\Forms\Actions\RotateDatabasePasswordAction; use App\Filament\Components\Forms\Actions\RotateDatabasePasswordAction;
use App\Filament\Components\Tables\Columns\DateTimeColumn; use App\Filament\Components\Tables\Columns\DateTimeColumn;
use App\Filament\Server\Resources\DatabaseResource\Pages;
use App\Models\Database; use App\Models\Database;
use App\Models\Permission; use App\Models\Permission;
use App\Models\Server; use App\Models\Server;
@ -41,7 +40,7 @@ class DatabaseResource extends Resource
protected static ?int $navigationSort = 6; protected static ?int $navigationSort = 6;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-database'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-database';
protected static function getBadgeCount(): int protected static function getBadgeCount(): int
{ {

View File

@ -6,7 +6,6 @@ use App\Filament\Server\Resources\FileResource\Pages\EditFiles;
use App\Filament\Server\Resources\FileResource\Pages\SearchFiles; use App\Filament\Server\Resources\FileResource\Pages\SearchFiles;
use App\Filament\Server\Resources\FileResource\Pages\DownloadFiles; use App\Filament\Server\Resources\FileResource\Pages\DownloadFiles;
use App\Filament\Server\Resources\FileResource\Pages\ListFiles; use App\Filament\Server\Resources\FileResource\Pages\ListFiles;
use App\Filament\Server\Resources\FileResource\Pages;
use App\Models\File; use App\Models\File;
use App\Models\Permission; use App\Models\Permission;
use App\Traits\Filament\BlockAccessInConflict; use App\Traits\Filament\BlockAccessInConflict;
@ -27,7 +26,7 @@ class FileResource extends Resource
protected static ?int $navigationSort = 2; protected static ?int $navigationSort = 2;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-files'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-files';
protected static bool $isScopedToTenant = false; protected static bool $isScopedToTenant = false;

View File

@ -8,7 +8,6 @@ use App\Filament\Server\Resources\ScheduleResource\Pages\ViewSchedule;
use App\Filament\Server\Resources\ScheduleResource\Pages\EditSchedule; use App\Filament\Server\Resources\ScheduleResource\Pages\EditSchedule;
use App\Facades\Activity; use App\Facades\Activity;
use App\Filament\Components\Tables\Columns\DateTimeColumn; use App\Filament\Components\Tables\Columns\DateTimeColumn;
use App\Filament\Server\Resources\ScheduleResource\Pages;
use App\Filament\Server\Resources\ScheduleResource\RelationManagers\TasksRelationManager; use App\Filament\Server\Resources\ScheduleResource\RelationManagers\TasksRelationManager;
use App\Helpers\Utilities; use App\Helpers\Utilities;
use App\Models\Permission; use App\Models\Permission;
@ -57,7 +56,7 @@ class ScheduleResource extends Resource
protected static ?int $navigationSort = 4; protected static ?int $navigationSort = 4;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-clock'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-clock';
public static function canViewAny(): bool public static function canViewAny(): bool
{ {
@ -82,7 +81,7 @@ class ScheduleResource extends Resource
/** /**
* @throws Exception * @throws Exception
*/ */
public static function form(Schema $schema): Schema public static function defaultForm(Schema $schema): Schema
{ {
return $schema return $schema
->columns([ ->columns([

View File

@ -3,7 +3,6 @@
namespace App\Filament\Server\Resources; namespace App\Filament\Server\Resources;
use App\Filament\Server\Resources\UserResource\Pages\ListUsers; use App\Filament\Server\Resources\UserResource\Pages\ListUsers;
use App\Filament\Server\Resources\UserResource\Pages;
use App\Models\Permission; use App\Models\Permission;
use App\Models\Server; use App\Models\Server;
use App\Models\User; use App\Models\User;
@ -46,7 +45,7 @@ class UserResource extends Resource
protected static ?int $navigationSort = 5; protected static ?int $navigationSort = 5;
protected static string | \BackedEnum | null $navigationIcon = 'tabler-users'; protected static string|\BackedEnum|null $navigationIcon = 'tabler-users';
protected static ?string $tenantOwnershipRelationshipName = 'subServers'; protected static ?string $tenantOwnershipRelationshipName = 'subServers';

View File

@ -8,19 +8,18 @@ use Filament\Notifications\Concerns\HasId;
use Filament\Notifications\Concerns\HasStatus; use Filament\Notifications\Concerns\HasStatus;
use Filament\Notifications\Concerns\HasTitle; use Filament\Notifications\Concerns\HasTitle;
use Closure; use Closure;
use Filament\Notifications\Concerns;
use Filament\Support\Concerns\EvaluatesClosures; use Filament\Support\Concerns\EvaluatesClosures;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Livewire\Wireable; use Livewire\Wireable;
final class AlertBanner implements Wireable final class AlertBanner implements Wireable
{ {
use EvaluatesClosures;
use HasBody; use HasBody;
use HasIcon; use HasIcon;
use HasId; use HasId;
use HasStatus; use HasStatus;
use HasTitle; use HasTitle;
use EvaluatesClosures;
protected bool|Closure $closable = false; protected bool|Closure $closable = false;

View File

@ -2,6 +2,7 @@
namespace App\Livewire\Installer\Steps; namespace App\Livewire\Installer\Steps;
use Exception;
use Filament\Schemas\Components\Wizard\Step; use Filament\Schemas\Components\Wizard\Step;
use App\Livewire\Installer\PanelInstaller; use App\Livewire\Installer\PanelInstaller;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
@ -9,7 +10,6 @@ use Filament\Forms\Components\Toggle;
use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Components\ToggleButtons;
use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Components\Utilities\Get;
use Illuminate\Support\HtmlString; use Illuminate\Support\HtmlString;
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
class QueueStep class QueueStep
{ {
@ -19,6 +19,9 @@ class QueueStep
'sync' => 'Sync', 'sync' => 'Sync',
]; ];
/**
* @throws Exception
*/
public static function make(PanelInstaller $installer): Step public static function make(PanelInstaller $installer): Step
{ {
return Step::make('queue') return Step::make('queue')
@ -45,14 +48,14 @@ class QueueStep
TextInput::make('crontab') TextInput::make('crontab')
->label(new HtmlString('Run the following command to set up your crontab. Note that <code>www-data</code> is your webserver user. On some systems this username might be different!')) ->label(new HtmlString('Run the following command to set up your crontab. Note that <code>www-data</code> is your webserver user. On some systems this username might be different!'))
->disabled() ->disabled()
->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null) //TODO ->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
->default('(crontab -l -u www-data 2>/dev/null; echo "* * * * * php ' . base_path() . '/artisan schedule:run >> /dev/null 2>&1") | crontab -u www-data -') ->default('(crontab -l -u www-data 2>/dev/null; echo "* * * * * php ' . base_path() . '/artisan schedule:run >> /dev/null 2>&1") | crontab -u www-data -')
->hidden(fn () => @file_exists('/.dockerenv')) ->hidden(fn () => @file_exists('/.dockerenv'))
->columnSpanFull(), ->columnSpanFull(),
TextInput::make('queueService') TextInput::make('queueService')
->label(new HtmlString('To setup the queue worker service you simply have to run the following command.')) ->label(new HtmlString('To setup the queue worker service you simply have to run the following command.'))
->disabled() ->disabled()
->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null) //TODO ->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
->default('sudo php ' . base_path() . '/artisan p:environment:queue-service') ->default('sudo php ' . base_path() . '/artisan p:environment:queue-service')
->hidden(fn () => @file_exists('/.dockerenv')) ->hidden(fn () => @file_exists('/.dockerenv'))
->columnSpanFull(), ->columnSpanFull(),

View File

@ -97,7 +97,7 @@ class Backup extends Model implements Validatable
} }
/** /**
* @param Builder $query * @param Builder $query
* @return BackupQueryBuilder<Model> * @return BackupQueryBuilder<Model>
*/ */
public function newEloquentBuilder($query): BackupQueryBuilder public function newEloquentBuilder($query): BackupQueryBuilder

View File

@ -347,7 +347,7 @@ class User extends Model implements AuthenticatableContract, AuthorizableContrac
* this checks if the ability is one of our permissions and then checks if the user can do it or not * this checks if the ability is one of our permissions and then checks if the user can do it or not
* Otherwise it calls the Authorizable trait's parent method * Otherwise it calls the Authorizable trait's parent method
* *
* @param iterable<string|BackedEnum>|BackedEnum|string $abilities * @param iterable<string|BackedEnum>|BackedEnum|string $abilities
* @param array<mixed>|mixed $arguments * @param array<mixed>|mixed $arguments
*/ */
public function can($abilities, mixed $arguments = []): bool public function can($abilities, mixed $arguments = []): bool

View File

@ -25,7 +25,6 @@ use App\Checks\UsedDiskSpaceCheck;
use App\Extensions\Avatar\Providers\GravatarProvider; use App\Extensions\Avatar\Providers\GravatarProvider;
use App\Extensions\Avatar\Providers\UiAvatarsProvider; use App\Extensions\Avatar\Providers\UiAvatarsProvider;
use App\Extensions\OAuth\Providers\GitlabProvider; use App\Extensions\OAuth\Providers\GitlabProvider;
use App\Models;
use App\Extensions\Captcha\Providers\TurnstileProvider; use App\Extensions\Captcha\Providers\TurnstileProvider;
use App\Extensions\Features\GSLToken; use App\Extensions\Features\GSLToken;
use App\Extensions\Features\JavaVersion; use App\Extensions\Features\JavaVersion;

View File

@ -11,7 +11,7 @@ class Port implements ValidationRule
/** /**
* Run the validation rule. * Run the validation rule.
* *
* @param Closure(string):PotentiallyTranslatedString $fail * @param Closure(string):PotentiallyTranslatedString $fail
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, Closure $fail): void
{ {

View File

@ -15,12 +15,12 @@ trait CanModifyForm
static::$customFormModifications[] = $closure; static::$customFormModifications[] = $closure;
} }
public static function defaultForm(Schema $schema): Schema public static function form(Schema $schema): Schema
{ {
return $schema; return $schema;
} }
public static function form(Schema $schema): Schema public static function defaultForm(Schema $schema): Schema
{ {
$schema = static::defaultForm($schema); $schema = static::defaultForm($schema);

View File

@ -15,7 +15,7 @@ trait ValidatesValidationRules
/** /**
* Validate that the rules being provided are valid and can be resolved. * Validate that the rules being provided are valid and can be resolved.
* *
* @param string[]|string|ValidationRule[] $rules * @param string[]|string|ValidationRule[] $rules
* *
* @throws BadValidationRuleException * @throws BadValidationRuleException
*/ */