diff --git a/app/Filament/Server/Resources/Files/Pages/ListFiles.php b/app/Filament/Server/Resources/Files/Pages/ListFiles.php index 6dcb77151..ca8991e9e 100644 --- a/app/Filament/Server/Resources/Files/Pages/ListFiles.php +++ b/app/Filament/Server/Resources/Files/Pages/ListFiles.php @@ -12,8 +12,10 @@ use App\Models\File; use App\Models\Permission; 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; @@ -56,6 +58,8 @@ class ListFiles extends ListRecords protected static string $resource = FileResource::class; + protected string $view = 'filament.server.pages.list-files'; + #[Locked] public string $path = '/'; @@ -627,6 +631,42 @@ class ListFiles extends ListRecords }; } + public function getUploadUrl(): string + { + /** @var Server $server */ + $server = Filament::getTenant(); + + // Check if user has permission to upload files + if (!user()?->can(Permission::ACTION_FILE_CREATE, $server)) { + abort(403, 'You do not have permission to upload files.'); + } + + // Use the FileUploadController's logic to generate the upload URL + $jwtService = app(NodeJWTService::class); + $user = user(); + + $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 */ + $server = Filament::getTenant(); + + // Return upload size limit in bytes (stored as MB in database) + return $server->node->upload_size * 1024 * 1024; + } + private function getDaemonFileRepository(): DaemonFileRepository { /** @var Server $server */ diff --git a/lang/en/server/file.php b/lang/en/server/file.php index dc936a477..4e60121f8 100644 --- a/lang/en/server/file.php +++ b/lang/en/server/file.php @@ -17,6 +17,10 @@ return [ 'from_files' => 'Upload Files', 'from_url' => 'Upload from URL', 'url' => 'URL', + 'drop_files' => 'Drop files to upload', + 'success' => 'Files uploaded successfully', + 'failed' => 'Failed to upload files', + 'header' => 'Uploading Files', ], 'rename' => [ 'title' => 'Rename', diff --git a/resources/views/filament/server/pages/list-files.blade.php b/resources/views/filament/server/pages/list-files.blade.php new file mode 100644 index 000000000..886480b5c --- /dev/null +++ b/resources/views/filament/server/pages/list-files.blade.php @@ -0,0 +1,315 @@ + +
+ +
+
+
+ + + + + + +

+ {{ trans('server/file.actions.upload.drop_files') }} +

+
+
+
+ +
+
+
+

+ {{ trans('server/file.actions.upload.header') }} - + + Of + +

+
+ +
+
+ + + + +
+
+
+
+
+ + {{ $this->table }} +
+ + +