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 */ 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);