Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Http/Controllers/Api/Client/Servers/FileUploadController.php
10280 views
1
<?php
2
3
namespace Pterodactyl\Http\Controllers\Api\Client\Servers;
4
5
use Carbon\CarbonImmutable;
6
use Pterodactyl\Models\User;
7
use Pterodactyl\Models\Server;
8
use Illuminate\Http\JsonResponse;
9
use Pterodactyl\Services\Nodes\NodeJWTService;
10
use Pterodactyl\Http\Controllers\Api\Client\ClientApiController;
11
use Pterodactyl\Http\Requests\Api\Client\Servers\Files\UploadFileRequest;
12
13
class FileUploadController extends ClientApiController
14
{
15
/**
16
* FileUploadController constructor.
17
*/
18
public function __construct(
19
private NodeJWTService $jwtService,
20
) {
21
parent::__construct();
22
}
23
24
/**
25
* Returns an url where files can be uploaded to.
26
*/
27
public function __invoke(UploadFileRequest $request, Server $server): JsonResponse
28
{
29
return new JsonResponse([
30
'object' => 'signed_url',
31
'attributes' => [
32
'url' => $this->getUploadUrl($server, $request->user()),
33
],
34
]);
35
}
36
37
/**
38
* Returns an url where files can be uploaded to.
39
*/
40
protected function getUploadUrl(Server $server, User $user): string
41
{
42
$token = $this->jwtService
43
->setExpiresAt(CarbonImmutable::now()->addMinutes(15))
44
->setUser($user)
45
->setClaims(['server_uuid' => $server->uuid])
46
->handle($server->node, $user->id . $server->uuid);
47
48
return sprintf(
49
'%s/upload/file?token=%s',
50
$server->node->getConnectionAddress(),
51
$token->toString()
52
);
53
}
54
}
55
56