- 2.x - sites (wip)

- improved ssh error handling
- database soft deletes
This commit is contained in:
Saeed Vaziry
2024-10-04 21:34:07 +02:00
parent ecdba02bc9
commit d1f2add699
64 changed files with 1340 additions and 421 deletions

View File

@ -4,12 +4,10 @@
use App\Actions\Database\CreateBackup;
use App\Models\Backup;
use App\Models\Server;
use App\Models\StorageProvider;
use App\Web\Components\Page;
use App\Web\Contracts\HasSecondSubNav;
use App\Web\Pages\Servers\Page;
use App\Web\Pages\Settings\StorageProviders\Actions\Create;
use App\Web\Traits\PageHasServer;
use Exception;
use Filament\Actions\Action;
use Filament\Forms\Components\Select;
@ -19,17 +17,12 @@
class Backups extends Page implements HasSecondSubNav
{
use PageHasServer;
use Traits\Navigation;
protected static ?string $slug = 'servers/{server}/databases/backups';
protected static bool $shouldRegisterNavigation = false;
protected static ?string $title = 'Backups';
public Server $server;
public static function canAccess(): bool
{
return auth()->user()?->can('viewAny', [Backup::class, static::getServerFromRoute()]) ?? false;

View File

@ -4,11 +4,8 @@
use App\Actions\Database\CreateDatabase;
use App\Models\Database;
use App\Models\Server;
use App\Web\Components\Page;
use App\Web\Contracts\HasSecondSubNav;
use App\Web\Traits\PageHasServer;
use Exception;
use App\Web\Pages\Servers\Page;
use Filament\Actions\Action;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\TextInput;
@ -17,17 +14,12 @@
class Index extends Page implements HasSecondSubNav
{
use PageHasServer;
use Traits\Navigation;
protected static ?string $slug = 'servers/{server}/databases';
protected static bool $shouldRegisterNavigation = false;
protected static ?string $title = 'Databases';
public Server $server;
public static function canAccess(): bool
{
return auth()->user()?->can('viewAny', [Database::class, static::getServerFromRoute()]) ?? false;
@ -67,7 +59,7 @@ protected function getHeaderActions(): array
])
->modalSubmitActionLabel('Create')
->action(function (array $data) {
try {
run_action($this, function () use ($data) {
app(CreateDatabase::class)->create($this->server, $data);
$this->dispatch('$refresh');
@ -76,14 +68,7 @@ protected function getHeaderActions(): array
->success()
->title('Database Created!')
->send();
} catch (Exception $e) {
Notification::make()
->danger()
->title($e->getMessage())
->send();
throw $e;
}
});
}),
];
}

View File

@ -5,10 +5,8 @@
use App\Actions\Database\CreateDatabase;
use App\Actions\Database\CreateDatabaseUser;
use App\Models\DatabaseUser;
use App\Models\Server;
use App\Web\Components\Page;
use App\Web\Contracts\HasSecondSubNav;
use App\Web\Traits\PageHasServer;
use App\Web\Pages\Servers\Page;
use Exception;
use Filament\Actions\Action;
use Filament\Forms\Components\Checkbox;
@ -18,17 +16,12 @@
class Users extends Page implements HasSecondSubNav
{
use PageHasServer;
use Traits\Navigation;
protected static ?string $slug = 'servers/{server}/databases/users';
protected static bool $shouldRegisterNavigation = false;
protected static ?string $title = 'Database Users';
public Server $server;
public static function canAccess(): bool
{
return auth()->user()?->can('viewAny', [DatabaseUser::class, static::getServerFromRoute()]) ?? false;

View File

@ -5,7 +5,7 @@
use App\Actions\Database\RestoreBackup;
use App\Models\Backup;
use App\Models\BackupFile;
use Exception;
use App\Models\Database;
use Filament\Forms\Components\Select;
use Filament\Notifications\Notification;
use Filament\Support\Enums\MaxWidth;
@ -63,7 +63,7 @@ public function getTable(): Table
->icon('heroicon-o-arrow-path')
->modalHeading('Restore Backup')
->tooltip('Restore Backup')
->authorize(fn (BackupFile $record) => auth()->user()->can('update', $record->backup->database))
->authorize(fn (BackupFile $record) => auth()->user()->can('update', $record->backup))
->form([
Select::make('database')
->label('Restore to')
@ -73,23 +73,23 @@ public function getTable(): Table
])
->modalWidth(MaxWidth::Large)
->action(function (BackupFile $record, array $data) {
try {
run_action($this, function () use ($record, $data) {
$this->validate();
/** @var Database $database */
$database = Database::query()->findOrFail($data['database']);
$this->authorize('update', $database);
app(RestoreBackup::class)->restore($record, $data);
Notification::make()
->success()
->title('Backup is being restored')
->send();
} catch (Exception $e) {
Notification::make()
->danger()
->title($e->getMessage())
->send();
throw $e;
}
$this->dispatch('$refresh');
$this->dispatch('$refresh');
});
}),
Action::make('delete')
->hiddenLabel()
@ -100,18 +100,10 @@ public function getTable(): Table
->authorize(fn (BackupFile $record) => auth()->user()->can('delete', $record))
->requiresConfirmation()
->action(function (BackupFile $record) {
try {
run_action($this, function () use ($record) {
$record->delete();
} catch (Exception $e) {
Notification::make()
->danger()
->title($e->getMessage())
->send();
throw $e;
}
$this->dispatch('$refresh');
$this->dispatch('$refresh');
});
}),
]);
}