feat(admin): clients controller
This commit is contained in:
parent
7777628c8d
commit
cf2abfccf7
8 changed files with 116 additions and 7 deletions
|
@ -27,8 +27,12 @@ return [
|
||||||
|
|
||||||
(new Extend\Routes('forum'))
|
(new Extend\Routes('forum'))
|
||||||
->post('/oauth/authorize', 'oauth.authorize.post', Controllers\AuthorizeController::class),
|
->post('/oauth/authorize', 'oauth.authorize.post', Controllers\AuthorizeController::class),
|
||||||
|
|
||||||
(new Extend\Routes('api'))
|
(new Extend\Routes('api'))
|
||||||
->get('/oauth-clients', 'oauth.clients.list', Api\Controller\ListClientController::class),
|
->get('/oauth-clients', 'oauth.clients.list', Api\Controller\ListClientController::class)
|
||||||
|
->post('/oauth-clients', 'oauth.clients.create', Api\Controller\CreateClientController::class)
|
||||||
|
->patch('/oauth-clients/{id}', 'oauth.clients.update', Api\Controller\UpdateClientController::class)
|
||||||
|
->delete('/oauth-clients/{id}', 'oauth.clients.delete', Api\Controller\DeleteClientController::class),
|
||||||
|
|
||||||
(new Extend\Middleware('api'))->add(ResourceScopeMiddleware::class),
|
(new Extend\Middleware('api'))->add(ResourceScopeMiddleware::class),
|
||||||
];
|
];
|
||||||
|
|
BIN
js/dist/admin.js
generated
vendored
BIN
js/dist/admin.js
generated
vendored
Binary file not shown.
BIN
js/dist/admin.js.map
generated
vendored
BIN
js/dist/admin.js.map
generated
vendored
Binary file not shown.
|
@ -46,7 +46,7 @@ export default class ClientsPage extends Page {
|
||||||
type: 'text',
|
type: 'text',
|
||||||
value: client[key]() || '',
|
value: client[key]() || '',
|
||||||
onchange: (event) => {
|
onchange: (event) => {
|
||||||
this.saveClientInfo(client.id(), key, event.target.value);
|
this.saveClientInfo(index, key, event.target.value);
|
||||||
},
|
},
|
||||||
}))
|
}))
|
||||||
),
|
),
|
||||||
|
@ -98,7 +98,10 @@ export default class ClientsPage extends Page {
|
||||||
return pwd;
|
return pwd;
|
||||||
}
|
}
|
||||||
|
|
||||||
saveClientInfo(id, key, value) {
|
saveClientInfo(index, key, value) {
|
||||||
console.log(id, key, value);
|
console.log(index, key, value);
|
||||||
|
this.clients[index].save({
|
||||||
|
[key]: value,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
39
src/Api/Controller/CreateClientController.php
Normal file
39
src/Api/Controller/CreateClientController.php
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace FoskyM\OAuthCenter\Api\Controller;
|
||||||
|
|
||||||
|
use Flarum\Api\Controller\AbstractListController;
|
||||||
|
use Flarum\Http\RequestUtil;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Tobscure\JsonApi\Document;
|
||||||
|
use FoskyM\OAuthCenter\Models\Client;
|
||||||
|
use FoskyM\OAuthCenter\Api\Serializer\ClientSerializer;
|
||||||
|
|
||||||
|
class CreateClientController extends AbstractListController
|
||||||
|
{
|
||||||
|
public $serializer = ClientSerializer::class;
|
||||||
|
protected function data(ServerRequestInterface $request, Document $document)
|
||||||
|
{
|
||||||
|
$actor = RequestUtil::getActor($request);
|
||||||
|
$actor->assertAdmin();
|
||||||
|
|
||||||
|
$data = Arr::get($request->getParsedBody(), 'data', []);
|
||||||
|
|
||||||
|
$client = Client::build(
|
||||||
|
Arr::get($data, 'attributes.name'),
|
||||||
|
$actor->id,
|
||||||
|
Arr::get($data, 'attributes.icon'),
|
||||||
|
Arr::get($data, 'attributes.description'),
|
||||||
|
Arr::get($data, 'attributes.actions'),
|
||||||
|
Arr::get($data, 'attributes.metrics'),
|
||||||
|
Arr::get($data, 'attributes.requirements'),
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$client->save();
|
||||||
|
|
||||||
|
return $client;
|
||||||
|
}
|
||||||
|
}
|
28
src/Api/Controller/DeleteClientController.php
Normal file
28
src/Api/Controller/DeleteClientController.php
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace FoskyM\OAuthCenter\Api\Controller;
|
||||||
|
|
||||||
|
use Flarum\Api\Controller\AbstractListController;
|
||||||
|
use Flarum\Http\RequestUtil;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Tobscure\JsonApi\Document;
|
||||||
|
use FoskyM\OAuthCenter\Models\Client;
|
||||||
|
use FoskyM\OAuthCenter\Api\Serializer\ClientSerializer;
|
||||||
|
|
||||||
|
class DeleteClientController extends AbstractListController
|
||||||
|
{
|
||||||
|
public $serializer = ClientSerializer::class;
|
||||||
|
protected function data(ServerRequestInterface $request, Document $document)
|
||||||
|
{
|
||||||
|
$id = Arr::get($request->getQueryParams(), 'id');
|
||||||
|
RequestUtil::getActor($request)
|
||||||
|
->assertAdmin();
|
||||||
|
|
||||||
|
$client = Client::find($id);
|
||||||
|
|
||||||
|
$client->delete();
|
||||||
|
|
||||||
|
return $client;
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,9 +16,7 @@ class ListClientController extends AbstractListController
|
||||||
protected function data(ServerRequestInterface $request, Document $document)
|
protected function data(ServerRequestInterface $request, Document $document)
|
||||||
{
|
{
|
||||||
$actor = RequestUtil::getActor($request);
|
$actor = RequestUtil::getActor($request);
|
||||||
if (!$actor->isAdmin()) {
|
$actor->assertAdmin();
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
return Client::get();
|
return Client::get();
|
||||||
}
|
}
|
||||||
|
|
37
src/Api/Controller/UpdateClientController.php
Normal file
37
src/Api/Controller/UpdateClientController.php
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace FoskyM\OAuthCenter\Api\Controller;
|
||||||
|
|
||||||
|
use Flarum\Api\Controller\AbstractListController;
|
||||||
|
use Flarum\Http\RequestUtil;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Tobscure\JsonApi\Document;
|
||||||
|
use FoskyM\OAuthCenter\Models\Client;
|
||||||
|
use FoskyM\OAuthCenter\Api\Serializer\ClientSerializer;
|
||||||
|
|
||||||
|
class UpdateClientController extends AbstractListController
|
||||||
|
{
|
||||||
|
public $serializer = ClientSerializer::class;
|
||||||
|
protected function data(ServerRequestInterface $request, Document $document)
|
||||||
|
{
|
||||||
|
$actor = RequestUtil::getActor($request);
|
||||||
|
$actor->assertAdmin();
|
||||||
|
|
||||||
|
$id = Arr::get($request->getQueryParams(), 'id');
|
||||||
|
$client = Client::find($id);
|
||||||
|
|
||||||
|
$data = Arr::get($request->getParsedBody(), 'data', []);
|
||||||
|
|
||||||
|
collect(['client_id', 'client_secret', 'redirect_uri', 'grant_types', 'scope', 'client_name', 'client_desc', 'client_icon', 'client_home'])
|
||||||
|
->each(function (string $attribute) use ($client, $data) {
|
||||||
|
if (($val = Arr::get($data, "attributes.$attribute")) !== null) {
|
||||||
|
$client->$attribute = $val;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$client->save();
|
||||||
|
|
||||||
|
return $client;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue