2018-01-19 03:36:15 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Pterodactyl\Http\Controllers\Admin;
|
|
|
|
|
|
|
|
use Illuminate\View\View;
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
use Illuminate\Http\Response;
|
|
|
|
use Pterodactyl\Models\ApiKey;
|
|
|
|
use Illuminate\Http\RedirectResponse;
|
|
|
|
use Prologue\Alerts\AlertsMessageBag;
|
|
|
|
use Pterodactyl\Services\Acl\Api\AdminAcl;
|
2022-10-14 16:59:20 +00:00
|
|
|
use Illuminate\View\Factory as ViewFactory;
|
2018-01-19 03:36:15 +00:00
|
|
|
use Pterodactyl\Http\Controllers\Controller;
|
|
|
|
use Pterodactyl\Services\Api\KeyCreationService;
|
|
|
|
use Pterodactyl\Contracts\Repository\ApiKeyRepositoryInterface;
|
|
|
|
use Pterodactyl\Http\Requests\Admin\Api\StoreApplicationApiKeyRequest;
|
|
|
|
|
2018-01-20 03:47:06 +00:00
|
|
|
class ApiController extends Controller
|
2018-01-19 03:36:15 +00:00
|
|
|
{
|
|
|
|
/**
|
2022-10-14 16:59:20 +00:00
|
|
|
* ApiController constructor.
|
2018-01-19 03:36:15 +00:00
|
|
|
*/
|
|
|
|
public function __construct(
|
2022-10-14 16:59:20 +00:00
|
|
|
private AlertsMessageBag $alert,
|
|
|
|
private ApiKeyRepositoryInterface $repository,
|
|
|
|
private KeyCreationService $keyCreationService,
|
|
|
|
private ViewFactory $view,
|
2018-01-19 03:36:15 +00:00
|
|
|
) {
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Render view showing all of a user's application API keys.
|
|
|
|
*/
|
|
|
|
public function index(Request $request): View
|
|
|
|
{
|
2022-10-14 16:59:20 +00:00
|
|
|
return $this->view->make('admin.api.index', [
|
2018-01-19 03:36:15 +00:00
|
|
|
'keys' => $this->repository->getApplicationKeys($request->user()),
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Render view allowing an admin to create a new application API key.
|
|
|
|
*
|
2018-05-13 16:30:53 +00:00
|
|
|
* @throws \ReflectionException
|
2018-01-19 03:36:15 +00:00
|
|
|
*/
|
|
|
|
public function create(): View
|
|
|
|
{
|
|
|
|
$resources = AdminAcl::getResourceList();
|
|
|
|
sort($resources);
|
|
|
|
|
2022-10-14 16:59:20 +00:00
|
|
|
return $this->view->make('admin.api.new', [
|
2018-01-19 03:36:15 +00:00
|
|
|
'resources' => $resources,
|
|
|
|
'permissions' => [
|
|
|
|
'r' => AdminAcl::READ,
|
|
|
|
'rw' => AdminAcl::READ | AdminAcl::WRITE,
|
|
|
|
'n' => AdminAcl::NONE,
|
|
|
|
],
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Store the new key and redirect the user back to the application key listing.
|
|
|
|
*
|
|
|
|
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
|
|
|
|
*/
|
|
|
|
public function store(StoreApplicationApiKeyRequest $request): RedirectResponse
|
|
|
|
{
|
|
|
|
$this->keyCreationService->setKeyType(ApiKey::TYPE_APPLICATION)->handle([
|
|
|
|
'memo' => $request->input('memo'),
|
|
|
|
'user_id' => $request->user()->id,
|
|
|
|
], $request->getKeyPermissions());
|
|
|
|
|
|
|
|
$this->alert->success('A new application API key has been generated for your account.')->flash();
|
|
|
|
|
|
|
|
return redirect()->route('admin.api.index');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Delete an application API key from the database.
|
|
|
|
*/
|
|
|
|
public function delete(Request $request, string $identifier): Response
|
|
|
|
{
|
|
|
|
$this->repository->deleteApplicationKey($request->user(), $identifier);
|
|
|
|
|
|
|
|
return response('', 204);
|
|
|
|
}
|
|
|
|
}
|