From 037c8e596195b74226371a00fe2592f43336982c Mon Sep 17 00:00:00 2001 From: Noah Stefano Date: Sat, 9 May 2026 19:34:51 +0100 Subject: [PATCH 1/2] fetch upload urls via the client api --- .../filament/server/pages/file-upload.blade.php | 12 +++++++++++- .../views/filament/server/pages/list-files.blade.php | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/resources/views/filament/server/pages/file-upload.blade.php b/resources/views/filament/server/pages/file-upload.blade.php index cffa0364e1..c5fc889fc4 100644 --- a/resources/views/filament/server/pages/file-upload.blade.php +++ b/resources/views/filament/server/pages/file-upload.blade.php @@ -1,11 +1,21 @@
uuid), isDragging: false, dragCounter: 0, isUploading: false, @@ -10,6 +11,15 @@ totalFiles: 0, autoCloseTimer: 1000, + async fetchUploadUrl() { + const r = await fetch(`/api/client/servers/${this.serverUuid}/files/upload`, { + headers: { Accept: 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, + credentials: 'same-origin', + }); + if (!r.ok) throw new Error(`upload url request failed (${r.status})`); + return (await r.json()).attributes.url; + }, + handleDragEnter(e) { e.preventDefault(); e.stopPropagation(); @@ -259,7 +269,7 @@ const fileData = this.uploadQueue[index]; fileData.status = 'uploading'; try { - const uploadUrl = await $wire.getUploadUrl(); + const uploadUrl = await this.fetchUploadUrl(); const url = new URL(uploadUrl); let basePath = @js($this->path); From f7996d838b04871a130945d8354c00963f8eccc7 Mon Sep 17 00:00:00 2001 From: Noah Stefano Date: Sat, 9 May 2026 19:34:57 +0100 Subject: [PATCH 2/2] drop the livewire upload-url helper, unused after the blade switch --- .../Resources/Files/Pages/ListFiles.php | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/app/Filament/Server/Resources/Files/Pages/ListFiles.php b/app/Filament/Server/Resources/Files/Pages/ListFiles.php index 9cfa9c7976..08ad375430 100644 --- a/app/Filament/Server/Resources/Files/Pages/ListFiles.php +++ b/app/Filament/Server/Resources/Files/Pages/ListFiles.php @@ -16,10 +16,8 @@ use App\Models\File; use App\Models\Server; use App\Repositories\Daemon\DaemonFileRepository; -use App\Services\Nodes\NodeJWTService; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Carbon\CarbonImmutable; use Exception; use Filament\Actions\Action; use Filament\Actions\ActionGroup; @@ -616,28 +614,6 @@ private function getPermissionsFromModeBit(int $mode): array }; } - public function getUploadUrl(NodeJWTService $jwtService): string - { - /** @var Server $server */ - $server = Filament::getTenant(); - - if (!user()?->can(SubuserPermission::FileCreate, $server)) { - abort(403, 'You do not have permission to upload files.'); - } - - $token = $jwtService - ->setExpiresAt(CarbonImmutable::now()->addMinutes(15)) - ->setUser(user()) - ->setClaims(['server_uuid' => $server->uuid]) - ->handle($server->node, user()->id . $server->uuid); - - return sprintf( - '%s/upload/file?token=%s', - $server->node->getConnectionAddress(), - $token->toString() - ); - } - public function getUploadSizeLimit(): int { /** @var Server $server */