Skip to content

Commit 8611ebb

Browse files
committed
Add /api/client/servers/{server}/files/chmod endpoint
1 parent 77abfd0 commit 8611ebb

File tree

4 files changed

+80
-0
lines changed

4 files changed

+80
-0
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\ListFilesRequest;
1717
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\DeleteFileRequest;
1818
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\RenameFileRequest;
19+
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\ChmodFilesRequest;
1920
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\CreateFolderRequest;
2021
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\CompressFilesRequest;
2122
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\DecompressFilesRequest;
@@ -263,6 +264,25 @@ public function delete(DeleteFileRequest $request, Server $server): JsonResponse
263264
return new JsonResponse([], Response::HTTP_NO_CONTENT);
264265
}
265266

267+
/**
268+
* Updates file permissions for file(s) in the given root directory.
269+
*
270+
* @param \Pterodactyl\Http\Requests\Api\Client\Servers\Files\ChmodFilesRequest $request
271+
* @param \Pterodactyl\Models\Server $server
272+
* @return \Illuminate\Http\JsonResponse
273+
*
274+
* @throws \Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException
275+
*/
276+
public function chmod(ChmodFilesRequest $request, Server $server): JsonResponse
277+
{
278+
$this->fileRepository->setServer($server)
279+
->chmodFiles(
280+
$request->input('root'), $request->input('files')
281+
);
282+
283+
return new JsonResponse([], Response::HTTP_NO_CONTENT);
284+
}
285+
266286
/**
267287
* Encodes a given file name & path in a format that should work for a good majority
268288
* of file names without too much confusing logic.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Requests\Api\Client\Servers\Files;
4+
5+
use Pterodactyl\Models\Permission;
6+
use Pterodactyl\Contracts\Http\ClientPermissionsRequest;
7+
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
8+
9+
class ChmodFilesRequest extends ClientApiRequest implements ClientPermissionsRequest
10+
{
11+
/**
12+
* @return string
13+
*/
14+
public function permission(): string
15+
{
16+
return Permission::ACTION_FILE_UPDATE;
17+
}
18+
19+
/**
20+
* @return array
21+
*/
22+
public function rules(): array
23+
{
24+
return [
25+
'root' => 'required|nullable|string',
26+
'files' => 'required|array',
27+
'files.file' => 'string',
28+
'files.mode' => 'integer',
29+
];
30+
}
31+
}

app/Repositories/Wings/DaemonFileRepository.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,4 +269,32 @@ public function decompressFile(?string $root, string $file): ResponseInterface
269269
throw new DaemonConnectionException($exception);
270270
}
271271
}
272+
273+
/**
274+
* Chmods the given files.
275+
*
276+
* @param string|null $root
277+
* @param array $files
278+
* @return \Psr\Http\Message\ResponseInterface
279+
*
280+
* @throws \Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException
281+
*/
282+
public function chmodFiles(?string $root, array $files): ResponseInterface
283+
{
284+
Assert::isInstanceOf($this->server, Server::class);
285+
286+
try {
287+
return $this->getHttpClient()->post(
288+
sprintf('/api/servers/%s/files/chmod', $this->server->uuid),
289+
[
290+
'json' => [
291+
'root' => $root ?? '/',
292+
'files' => $files,
293+
],
294+
]
295+
);
296+
} catch (TransferException $exception) {
297+
throw new DaemonConnectionException($exception);
298+
}
299+
}
272300
}

routes/api-client.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
Route::post('/decompress', 'Servers\FileController@decompress');
6565
Route::post('/delete', 'Servers\FileController@delete');
6666
Route::post('/create-folder', 'Servers\FileController@create');
67+
Route::post('/chmod', 'Servers\FileController@chmod');
6768
Route::get('/upload', 'Servers\FileUploadController');
6869
});
6970

0 commit comments

Comments
 (0)