diff --git a/app/Filament/Server/Resources/FileResource/Pages/EditFiles.php b/app/Filament/Server/Resources/FileResource/Pages/EditFiles.php index b65b0a66c..2e4e9937e 100644 --- a/app/Filament/Server/Resources/FileResource/Pages/EditFiles.php +++ b/app/Filament/Server/Resources/FileResource/Pages/EditFiles.php @@ -24,6 +24,7 @@ use Filament\Panel; use Filament\Resources\Pages\Page; use Filament\Resources\Pages\PageRegistration; use Filament\Support\Enums\Alignment; +use Illuminate\Contracts\Filesystem\FileNotFoundException; use Illuminate\Routing\Route; use Illuminate\Support\Facades\Route as RouteFacade; use Livewire\Attributes\Locked; @@ -73,11 +74,10 @@ class EditFiles extends Page ->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_UPDATE, $server)) ->icon('tabler-device-floppy') ->keyBindings('mod+s') - ->action(function () use ($server) { + ->action(function (DaemonFileRepository $fileRepository) use ($server) { $data = $this->form->getState(); - // @phpstan-ignore-next-line - app(DaemonFileRepository::class) + $fileRepository ->setServer($server) ->putContent($this->path, $data['editor'] ?? ''); @@ -105,11 +105,14 @@ class EditFiles extends Page MonacoEditor::make('editor') ->label('') ->placeholderText('') - ->formatStateUsing(function () use ($server) { - // @phpstan-ignore-next-line - return app(DaemonFileRepository::class) - ->setServer($server) - ->getContent($this->path, config('panel.files.max_edit_size')); + ->formatStateUsing(function (DaemonFileRepository $fileRepository) use ($server) { + try { + return $fileRepository + ->setServer($server) + ->getContent($this->path, config('panel.files.max_edit_size')); + } catch (FileNotFoundException) { + abort(404, $this->path . ' not found.'); + } }) ->language(fn (Get $get) => $get('lang') ?? 'plaintext') ->view('filament.plugins.monaco-editor'), diff --git a/app/Repositories/Daemon/DaemonFileRepository.php b/app/Repositories/Daemon/DaemonFileRepository.php index 0c055c999..d58611374 100644 --- a/app/Repositories/Daemon/DaemonFileRepository.php +++ b/app/Repositories/Daemon/DaemonFileRepository.php @@ -3,6 +3,7 @@ namespace App\Repositories\Daemon; use Carbon\CarbonInterval; +use Illuminate\Contracts\Filesystem\FileNotFoundException; use Illuminate\Http\Client\Response; use Webmozart\Assert\Assert; use App\Models\Server; @@ -21,6 +22,7 @@ class DaemonFileRepository extends DaemonRepository * @throws \GuzzleHttp\Exception\TransferException * @throws \App\Exceptions\Http\Server\FileSizeTooLargeException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException + * @throws FileNotFoundException */ public function getContent(string $path, ?int $notLargerThan = null): string { @@ -40,6 +42,10 @@ class DaemonFileRepository extends DaemonRepository throw new FileSizeTooLargeException(); } + if ($response->getStatusCode() === 404) { + throw new FileNotFoundException(); + } + return $response; } diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php index 736e725d5..fecf29150 100644 --- a/resources/views/errors/404.blade.php +++ b/resources/views/errors/404.blade.php @@ -1,8 +1,8 @@ @props([ 'code' => '404', 'title' => 'Not found', -'subtitle' => 'The requested resource was not found.', +'subtitle' => $exception->getMessage() ?? 'The requested resource was not found.', 'icon' => 'tabler-zoom-question' ]) -@extends('errors::layout') \ No newline at end of file +@extends('errors::layout')