Skip to content

Commit c14c7b4

Browse files
committed
Pass along new fields to Wings instance when endpoint is used; closes pterodactyl#4048
1 parent 3fceb58 commit c14c7b4

File tree

3 files changed

+60
-36
lines changed

3 files changed

+60
-36
lines changed

app/Http/Controllers/Api/Client/Servers/FileController.php

Lines changed: 46 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -97,17 +97,20 @@ public function contents(GetFileContentsRequest $request, Server $server): Respo
9797
*/
9898
public function download(GetFileContentsRequest $request, Server $server)
9999
{
100-
$token = $server->audit(AuditLog::SERVER__FILESYSTEM_DOWNLOAD, function (AuditLog $audit, Server $server) use ($request) {
101-
$audit->metadata = ['file' => $request->get('file')];
102-
103-
return $this->jwtService
104-
->setExpiresAt(CarbonImmutable::now()->addMinutes(15))
105-
->setClaims([
106-
'file_path' => rawurldecode($request->get('file')),
107-
'server_uuid' => $server->uuid,
108-
])
109-
->handle($server->node, $request->user()->id . $server->uuid);
110-
});
100+
$token = $server->audit(
101+
AuditLog::SERVER__FILESYSTEM_DOWNLOAD,
102+
function (AuditLog $audit, Server $server) use ($request) {
103+
$audit->metadata = ['file' => $request->get('file')];
104+
105+
return $this->jwtService
106+
->setExpiresAt(CarbonImmutable::now()->addMinutes(15))
107+
->setClaims([
108+
'file_path' => rawurldecode($request->get('file')),
109+
'server_uuid' => $server->uuid,
110+
])
111+
->handle($server->node, $request->user()->id . $server->uuid);
112+
}
113+
);
111114

112115
return [
113116
'object' => 'signed_url',
@@ -201,18 +204,21 @@ public function copy(CopyFileRequest $request, Server $server): JsonResponse
201204
*/
202205
public function compress(CompressFilesRequest $request, Server $server): array
203206
{
204-
$file = $server->audit(AuditLog::SERVER__FILESYSTEM_COMPRESS, function (AuditLog $audit, Server $server) use ($request) {
205-
// Allow up to five minutes for this request to process before timing out.
206-
set_time_limit(300);
207-
208-
$audit->metadata = ['root' => $request->input('root'), 'files' => $request->input('files')];
209-
210-
return $this->fileRepository->setServer($server)
211-
->compressFiles(
212-
$request->input('root'),
213-
$request->input('files')
214-
);
215-
});
207+
$file = $server->audit(
208+
AuditLog::SERVER__FILESYSTEM_COMPRESS,
209+
function (AuditLog $audit, Server $server) use ($request) {
210+
// Allow up to five minutes for this request to process before timing out.
211+
set_time_limit(300);
212+
213+
$audit->metadata = ['root' => $request->input('root'), 'files' => $request->input('files')];
214+
215+
return $this->fileRepository->setServer($server)
216+
->compressFiles(
217+
$request->input('root'),
218+
$request->input('files')
219+
);
220+
}
221+
);
216222

217223
return $this->fractal->item($file)
218224
->transformWith($this->getTransformer(FileObjectTransformer::class))
@@ -224,15 +230,18 @@ public function compress(CompressFilesRequest $request, Server $server): array
224230
*/
225231
public function decompress(DecompressFilesRequest $request, Server $server): JsonResponse
226232
{
227-
$file = $server->audit(AuditLog::SERVER__FILESYSTEM_DECOMPRESS, function (AuditLog $audit, Server $server) use ($request) {
228-
// Allow up to five minutes for this request to process before timing out.
229-
set_time_limit(300);
233+
$file = $server->audit(
234+
AuditLog::SERVER__FILESYSTEM_DECOMPRESS,
235+
function (AuditLog $audit, Server $server) use ($request) {
236+
// Allow up to five minutes for this request to process before timing out.
237+
set_time_limit(300);
230238

231-
$audit->metadata = ['root' => $request->input('root'), 'files' => $request->input('file')];
239+
$audit->metadata = ['root' => $request->input('root'), 'files' => $request->input('file')];
232240

233-
$this->fileRepository->setServer($server)
234-
->decompressFile($request->input('root'), $request->input('file'));
235-
});
241+
$this->fileRepository->setServer($server)
242+
->decompressFile($request->input('root'), $request->input('file'));
243+
}
244+
);
236245

237246
return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT);
238247
}
@@ -276,16 +285,20 @@ public function chmod(ChmodFilesRequest $request, Server $server): JsonResponse
276285
/**
277286
* Requests that a file be downloaded from a remote location by Wings.
278287
*
279-
* @param $request
280-
*
281288
* @throws \Throwable
282289
*/
283290
public function pull(PullFileRequest $request, Server $server): JsonResponse
284291
{
285292
$server->audit(AuditLog::SERVER__FILESYSTEM_PULL, function (AuditLog $audit, Server $server) use ($request) {
286293
$audit->metadata = ['directory' => $request->input('directory'), 'url' => $request->input('url')];
287294

288-
$this->fileRepository->setServer($server)->pull($request->input('url'), $request->input('directory'));
295+
$this->fileRepository
296+
->setServer($server)
297+
->pull(
298+
$request->input('url'),
299+
$request->input('directory'),
300+
$request->safe(['filename', 'use_header', 'foreground'])
301+
);
289302
});
290303

291304
return new JsonResponse([], Response::HTTP_NO_CONTENT);

app/Http/Requests/Api/Client/Servers/Files/PullFileRequest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ public function rules(): array
2020
{
2121
return [
2222
'url' => 'required|string|url',
23-
'directory' => 'sometimes|nullable|string',
23+
'directory' => 'nullable|string',
24+
'filename' => 'nullable|string',
25+
'use_header' => 'boolean',
26+
'foreground' => 'boolean',
2427
];
2528
}
2629
}

app/Repositories/Wings/DaemonFileRepository.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,15 +267,23 @@ public function chmodFiles(?string $root, array $files): ResponseInterface
267267
*
268268
* @throws \Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException
269269
*/
270-
public function pull(string $url, ?string $directory): ResponseInterface
270+
public function pull(string $url, ?string $directory, array $params = []): ResponseInterface
271271
{
272272
Assert::isInstanceOf($this->server, Server::class);
273273

274+
$attributes = [
275+
'url' => $url,
276+
'root' => $directory ?? '/',
277+
'file_name' => $params['filename'] ?? null,
278+
'use_header' => $params['use_header'] ?? null,
279+
'foreground' => $params['foreground'] ?? null,
280+
];
281+
274282
try {
275283
return $this->getHttpClient()->post(
276284
sprintf('/api/servers/%s/files/pull', $this->server->uuid),
277285
[
278-
'json' => ['url' => $url, 'directory' => $directory ?? '/'],
286+
'json' => array_filter($attributes, fn ($value) => !is_null($value)),
279287
]
280288
);
281289
} catch (TransferException $exception) {

0 commit comments

Comments
 (0)