Skip to content

Commit 4ebc009

Browse files
zfelyxcoderabbitai[bot]Boy132
authored
Add user server deletion capability (#33)
* Add user server deletion capability Introduces the ability for users to delete their own servers if permitted by configuration. Adds related configuration, language strings, UI actions, and updates resource limit logic for improved robustness. Also updates plugin settings to allow toggling this feature. * Allow admins to delete any server Updated the delete action logic to permit root admins to delete any server, not just those they own. This change ensures that both server owners and admins can perform deletions when enabled in the configuration. * Fix null user check in DeleteServerAction Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * remove hardcoded language Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Translate success notification messages for server deletion * Remove unused DeleteServerAction class. Deleted the DeleteServerAction class from the Filament components. This action is no longer needed or has been replaced elsewhere in the codebase. * Remove redundant user check in canView method Eliminated the unnecessary null check for the authenticated user in the canView method, as auth()->user() is assumed to always return a user in this context. * Update server delete permission check Replaces isRootAdmin() with can('delete servers') for determining if a user can delete a server, allowing for more flexible permission management. * Redirect to default panel URL after server creation Updated the post-creation redirect to use Filament's default panel URL instead of the root path. This ensures users are redirected to the appropriate panel home after creating a server. * Remove redundant null check for user in cpuLeft Eliminates an unnecessary check for a null user in the cpuLeft method, assuming the user relationship is always present when this method is called. * cleanup * cleanup * cleanup --------- Co-authored-by: Felix <154911483+invalidfelix@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Boy132 <mail@boy132.de>
1 parent 201e54d commit 4ebc009

6 files changed

Lines changed: 55 additions & 5 deletions

File tree

user-creatable-servers/config/user-creatable-servers.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66
'backup_limit' => env('UCS_DEFAULT_BACKUP_LIMIT', 0),
77

88
'can_users_update_servers' => env('UCS_CAN_USERS_UPDATE_SERVERS', true),
9+
'can_users_delete_servers' => env('UCS_CAN_USERS_DELETE_SERVERS', false),
910
];

user-creatable-servers/lang/en/strings.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,10 @@
1313
'name' => 'Server Name',
1414
'egg' => 'Egg',
1515
'left' => 'left',
16+
'delete_server' => 'Delete Server',
17+
'delete_server_confirm' => 'Are you sure you want to delete this server?',
18+
'delete_server_warning' => 'This action cannot be undone and all data will be permanently lost.',
19+
'server_deleted' => 'Server Deleted',
20+
'server_deleted_success' => 'The server has been deleted successfully.',
21+
'server_delete_error' => 'Could not delete server',
1622
];

user-creatable-servers/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
"panels": null,
1313
"panel_version": null,
1414
"composer_packages": null
15-
}
15+
}

user-creatable-servers/src/Filament/Server/Pages/ServerResourcePage.php

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
use App\Filament\Server\Pages\ServerFormPage;
66
use App\Models\Server;
77
use App\Repositories\Daemon\DaemonServerRepository;
8+
use App\Services\Servers\ServerDeletionService;
89
use Boy132\UserCreatableServers\Filament\App\Widgets\UserResourceLimitsOverview;
910
use Boy132\UserCreatableServers\Models\UserResourceLimits;
11+
use Exception;
1012
use Filament\Actions\Action;
1113
use Filament\Facades\Filament;
1214
use Filament\Forms\Components\TextInput;
@@ -103,12 +105,46 @@ protected function getHeaderWidgets(): array
103105

104106
protected function getHeaderActions(): array
105107
{
108+
/** @var Server $server */
109+
$server = Filament::getTenant();
110+
106111
return [
107112
Action::make('save')
108-
->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
113+
->label(trans('filament-panels::resources/pages/edit-record.form.actions.save.label'))
109114
->submit('save')
110115
->formId('form')
111116
->keyBindings(['mod+s']),
117+
Action::make('delete_server')
118+
->visible(fn () => config('user-creatable-servers.can_users_delete_servers'))
119+
->authorize(fn () => $server->owner_id === auth()->user()->id || auth()->user()->can('delete server', $server))
120+
->label(trans('user-creatable-servers::strings.delete_server'))
121+
->color('danger')
122+
->icon('tabler-trash')
123+
->requiresConfirmation()
124+
->modalHeading(trans('user-creatable-servers::strings.delete_server_confirm'))
125+
->modalDescription(trans('user-creatable-servers::strings.delete_server_warning'))
126+
->modalSubmitActionLabel(trans('user-creatable-servers::strings.delete_server'))
127+
->action(function (ServerDeletionService $service) use ($server) {
128+
try {
129+
$service->handle($server);
130+
131+
Notification::make()
132+
->title(trans('user-creatable-servers::strings.server_deleted'))
133+
->body(trans('user-creatable-servers::strings.server_deleted_success'))
134+
->success()
135+
->send();
136+
137+
redirect(Filament::getDefaultPanel()->getUrl());
138+
} catch (Exception $exception) {
139+
report($exception);
140+
141+
Notification::make()
142+
->title(trans('user-creatable-servers::strings.server_delete_error'))
143+
->body($exception->getMessage())
144+
->danger()
145+
->send();
146+
}
147+
}),
112148
];
113149
}
114150

user-creatable-servers/src/Models/UserResourceLimits.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public function getCpuLeft(): ?int
4242
if ($this->cpu > 0) {
4343
$sum_cpu = $this->user->servers->sum('cpu');
4444

45-
return $this->cpu - $sum_cpu;
45+
return max(0, $this->cpu - $sum_cpu);
4646
}
4747

4848
return null;
@@ -53,7 +53,7 @@ public function getMemoryLeft(): ?int
5353
if ($this->memory > 0) {
5454
$sum_memory = $this->user->servers->sum('memory');
5555

56-
return $this->memory - $sum_memory;
56+
return max(0, $this->memory - $sum_memory);
5757
}
5858

5959
return null;
@@ -64,7 +64,7 @@ public function getDiskLeft(): ?int
6464
if ($this->disk > 0) {
6565
$sum_disk = $this->user->servers->sum('disk');
6666

67-
return $this->disk - $sum_disk;
67+
return max(0, $this->disk - $sum_disk);
6868
}
6969

7070
return null;

user-creatable-servers/src/UserCreatableServersPlugin.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,12 @@ public function getSettingsForm(): array
5757
->hintIconTooltip('If checked users can update the resource limits of theirs servers after creation.')
5858
->inline(false)
5959
->default(fn () => config('user-creatable-servers.can_users_update_servers')),
60+
Toggle::make('can_users_delete_servers')
61+
->label('Can users delete servers?')
62+
->hintIcon('tabler-question-mark')
63+
->hintIconTooltip('If checked users can delete their own servers.')
64+
->inline(false)
65+
->default(fn () => config('user-creatable-servers.can_users_delete_servers')),
6066
];
6167
}
6268

@@ -67,6 +73,7 @@ public function saveSettings(array $data): void
6773
'UCS_DEFAULT_ALLOCATION_LIMIT' => $data['allocation_limit'],
6874
'UCS_DEFAULT_BACKUP_LIMIT' => $data['backup_limit'],
6975
'UCS_CAN_USERS_UPDATE_SERVERS' => $data['can_users_update_servers'] ? 'true' : 'false',
76+
'UCS_CAN_USERS_DELETE_SERVERS' => $data['can_users_delete_servers'] ? 'true' : 'false',
7077
]);
7178

7279
Notification::make()

0 commit comments

Comments
 (0)