misc_pterodactyl-panel/app/Http/Controllers/Admin/ApiController.php

88 lines
2.6 KiB
PHP
Raw Normal View History

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;
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;
class ApiController extends Controller
2018-01-19 03:36:15 +00:00
{
/**
* ApiController constructor.
2018-01-19 03:36:15 +00:00
*/
public function __construct(
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
{
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);
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);
}
}