diff --git a/app/Exceptions/Repository/FileNotEditableException.php b/app/Exceptions/Repository/FileNotEditableException.php
new file mode 100644
index 000000000..7963161b3
--- /dev/null
+++ b/app/Exceptions/Repository/FileNotEditableException.php
@@ -0,0 +1,7 @@
+ */
public ?array $data = [];
@@ -66,11 +70,9 @@ class EditFiles extends Page
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_UPDATE, $server))
->icon('tabler-device-floppy')
->keyBindings('mod+shift+s')
- ->action(function (DaemonFileRepository $fileRepository) use ($server) {
- $data = $this->form->getState();
+ ->action(function (array $data) {
- $fileRepository
- ->setServer($server)
+ $this->getDaemonFileRepository()
->putContent($this->path, $data['editor'] ?? '');
Activity::event('server:file.write')
@@ -90,11 +92,9 @@ class EditFiles extends Page
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_UPDATE, $server))
->icon('tabler-device-floppy')
->keyBindings('mod+s')
- ->action(function (DaemonFileRepository $fileRepository) use ($server) {
- $data = $this->form->getState();
+ ->action(function (array $data) {
- $fileRepository
- ->setServer($server)
+ $this->getDaemonFileRepository()
->putContent($this->path, $data['editor'] ?? '');
Activity::event('server:file.write')
@@ -123,15 +123,36 @@ class EditFiles extends Page
->afterStateUpdated(fn ($state) => $this->dispatch('setLanguage', lang: $state))
->default(fn () => EditorLanguages::fromWithAlias(pathinfo($this->path, PATHINFO_EXTENSION))),
MonacoEditor::make('editor')
- ->label('')
- ->placeholderText('')
- ->default(function (DaemonFileRepository $fileRepository) use ($server) {
+ ->hiddenLabel()
+ ->showPlaceholder(false)
+ ->default(function () {
try {
- return $fileRepository
- ->setServer($server)
+ return $this->getDaemonFileRepository()
->getContent($this->path, config('panel.files.max_edit_size'));
+ } catch (FileSizeTooLargeException) {
+ AlertBanner::make()
+ ->title('File too large!')
+ ->body('' . $this->path . '
Max is ' . convert_bytes_to_readable(config('panel.files.max_edit_size')))
+ ->danger()
+ ->closable()
+ ->send();
+ $this->redirect(ListFiles::getUrl());
} catch (FileNotFoundException) {
- abort(404, $this->path . ' not found.');
+ AlertBanner::make()
+ ->title('File Not found!')
+ ->body('' . $this->path . '
')
+ ->danger()
+ ->closable()
+ ->send();
+ $this->redirect(ListFiles::getUrl());
+ } catch (FileNotEditableException) {
+ AlertBanner::make()
+ ->title('Could not edit directory!')
+ ->body('' . $this->path . '
')
+ ->danger()
+ ->closable()
+ ->send();
+ $this->redirect(ListFiles::getUrl());
}
})
->language(fn (Get $get) => $get('lang'))
@@ -200,6 +221,15 @@ class EditFiles extends Page
return $breadcrumbs;
}
+ private function getDaemonFileRepository(): DaemonFileRepository
+ {
+ /** @var Server $server */
+ $server = Filament::getTenant();
+ $this->fileRepository ??= (new DaemonFileRepository())->setServer($server);
+
+ return $this->fileRepository;
+ }
+
public static function route(string $path): PageRegistration
{
return new PageRegistration(
diff --git a/app/Repositories/Daemon/DaemonFileRepository.php b/app/Repositories/Daemon/DaemonFileRepository.php
index 70cba278c..5cf1be031 100644
--- a/app/Repositories/Daemon/DaemonFileRepository.php
+++ b/app/Repositories/Daemon/DaemonFileRepository.php
@@ -5,6 +5,7 @@ namespace App\Repositories\Daemon;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
use Illuminate\Http\Client\Response;
use App\Exceptions\Http\Server\FileSizeTooLargeException;
+use App\Exceptions\Repository\FileNotEditableException;
use Illuminate\Http\Client\ConnectionException;
class DaemonFileRepository extends DaemonRepository
@@ -29,6 +30,10 @@ class DaemonFileRepository extends DaemonRepository
throw new FileSizeTooLargeException();
}
+ if ($response->getStatusCode() === 400) {
+ throw new FileNotEditableException();
+ }
+
if ($response->getStatusCode() === 404) {
throw new FileNotFoundException();
}
diff --git a/resources/views/errors/400.blade.php b/resources/views/errors/400.blade.php
new file mode 100644
index 000000000..4d8dd2876
--- /dev/null
+++ b/resources/views/errors/400.blade.php
@@ -0,0 +1,8 @@
+@props([
+'code' => '400',
+'title' => 'Bad request',
+'subtitle' => $exception->getMessage(),
+'icon' => 'tabler-exclamation-circle'
+])
+
+@extends('errors::layout')
\ No newline at end of file