Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Http/Controllers/Api/Client/ApiKeyController.php
10279 views
1
<?php
2
3
namespace Pterodactyl\Http\Controllers\Api\Client;
4
5
use Pterodactyl\Models\ApiKey;
6
use Illuminate\Http\JsonResponse;
7
use Pterodactyl\Facades\Activity;
8
use Pterodactyl\Exceptions\DisplayException;
9
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
10
use Pterodactyl\Transformers\Api\Client\ApiKeyTransformer;
11
use Pterodactyl\Http\Requests\Api\Client\Account\StoreApiKeyRequest;
12
13
class ApiKeyController extends ClientApiController
14
{
15
/**
16
* Returns all the API keys that exist for the given client.
17
*/
18
public function index(ClientApiRequest $request): array
19
{
20
return $this->fractal->collection($request->user()->apiKeys)
21
->transformWith($this->getTransformer(ApiKeyTransformer::class))
22
->toArray();
23
}
24
25
/**
26
* Store a new API key for a user's account.
27
*
28
* @throws DisplayException
29
*/
30
public function store(StoreApiKeyRequest $request): array
31
{
32
if ($request->user()->apiKeys->count() >= 25) {
33
throw new DisplayException('You have reached the account limit for number of API keys.');
34
}
35
36
$token = $request->user()->createToken(
37
$request->input('description'),
38
$request->input('allowed_ips')
39
);
40
41
Activity::event('user:api-key.create')
42
->subject($token->accessToken)
43
->property('identifier', $token->accessToken->identifier)
44
->log();
45
46
return $this->fractal->item($token->accessToken)
47
->transformWith($this->getTransformer(ApiKeyTransformer::class))
48
->addMeta(['secret_token' => $token->plainTextToken])
49
->toArray();
50
}
51
52
/**
53
* Deletes a given API key.
54
*/
55
public function delete(ClientApiRequest $request, string $identifier): JsonResponse
56
{
57
/** @var ApiKey $key */
58
$key = $request->user()->apiKeys()
59
->where('key_type', ApiKey::TYPE_ACCOUNT)
60
->where('identifier', $identifier)
61
->firstOrFail();
62
63
Activity::event('user:api-key.delete')
64
->property('identifier', $key->identifier)
65
->log();
66
67
$key->delete();
68
69
return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT);
70
}
71
}
72
73