Do not build commit, pushing dev state
This commit is contained in:
parent
972eeae7d3
commit
854592232b
183
src/Tor/Controller/#GroupApi.php
Normal file
183
src/Tor/Controller/#GroupApi.php
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tor\Controller;
|
||||||
|
|
||||||
|
use Tor\Data\Group;
|
||||||
|
use Tor\Data\User;
|
||||||
|
use Tor\Data\Service;
|
||||||
|
|
||||||
|
use Gac\Routing\Request;
|
||||||
|
|
||||||
|
class GroupApi extends BaseApi {
|
||||||
|
|
||||||
|
// System: Provision new default status for group
|
||||||
|
// Create group if it doesn't exist
|
||||||
|
function provision(\Gac\Routing\Request $request, string $groupName) {
|
||||||
|
global $data, $api_service;
|
||||||
|
|
||||||
|
$exists = $data->exists(Group::class, $groupName);
|
||||||
|
|
||||||
|
$post_data = Utils::FetchPostData();
|
||||||
|
|
||||||
|
if ($post_data != false) {
|
||||||
|
$new_default = trim($post_data['default'] ?? "");
|
||||||
|
$new_service = trim($post_data['service'] ?? "");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$exists) {
|
||||||
|
$group = new Group();
|
||||||
|
$group->id = $groupName;
|
||||||
|
$group->default = false;
|
||||||
|
$group->service = $api_service;
|
||||||
|
} else {
|
||||||
|
$group = $data->load(Group::class, $groupName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($new_default))
|
||||||
|
$group->default = boolval($new_default);
|
||||||
|
|
||||||
|
if (!empty($new_service))
|
||||||
|
{
|
||||||
|
if ($data->exists(Service::class, $new_service))
|
||||||
|
$group->service = $data->load(Service::class, $new_service);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data->save($group);
|
||||||
|
|
||||||
|
$result = [
|
||||||
|
'group' => $group->flatIdentifier(),
|
||||||
|
'default' => $group->default,
|
||||||
|
'service' => $group->service->flatIdentifier(),
|
||||||
|
];
|
||||||
|
|
||||||
|
if (!$exists) {
|
||||||
|
$result['result'] = 'created';
|
||||||
|
$request->status(201, 'Created')
|
||||||
|
->send($result);
|
||||||
|
} else {
|
||||||
|
$result['result'] = 'provisioned';
|
||||||
|
$request->status(200, 'OK')
|
||||||
|
->send($result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// System: Delete a group and remove the permission from all users
|
||||||
|
function delete(\Gac\Routing\Request $request, string $groupName) {
|
||||||
|
global $data;
|
||||||
|
|
||||||
|
$exists = $data->exists(Group::class, $groupName);
|
||||||
|
|
||||||
|
if (!$exists) {
|
||||||
|
$request->status(404, 'Not Found')->send(["error" => ["message" => "not found"]]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$users = $data->fromIndex(Group::class, $groupName, findClass: User::class);
|
||||||
|
|
||||||
|
foreach ($users as $user)
|
||||||
|
{
|
||||||
|
foreach ($user->groups as $key => $value)
|
||||||
|
{
|
||||||
|
if ($value->flatIdentifier() == JsonDatabase::SanitizeIdentifier($groupName))
|
||||||
|
unset($user->groups[$key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data->save($user);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data->delete(Group::class, $groupName);
|
||||||
|
$request->status(200, 'OK')->send([ 'result' => 'destroyed' ]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// System: Fetch info about a Group
|
||||||
|
function info(\Gac\Routing\Request $request, string $groupName) {
|
||||||
|
global $data;
|
||||||
|
|
||||||
|
$exists = $data->exists(Group::class, $groupName);
|
||||||
|
|
||||||
|
if (!$exists) {
|
||||||
|
$request->status(404, 'Not Found')->send(["error" => ["message" => "not found"]]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$group = $data->load(Group::class, $groupName);
|
||||||
|
$users = $data->fromIndex(Group::class, $groupName, User::class);
|
||||||
|
|
||||||
|
$result = [
|
||||||
|
'group' => $group->flatIdentifier(),
|
||||||
|
'service' => $group->service->flatIdentifier(),
|
||||||
|
'default' => $group->default,
|
||||||
|
'users' => $users,
|
||||||
|
'result' => 'ok'
|
||||||
|
];
|
||||||
|
|
||||||
|
$request->status(200, 'OK')->send($result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// System: Assign user to a group
|
||||||
|
function assign(\Gac\Routing\Request $request, string $groupName, string $userName) {
|
||||||
|
global $data;
|
||||||
|
|
||||||
|
$exists = $data->exists(Group::class, $groupName);
|
||||||
|
$existsUser = $data->exists(User::class, $userName);
|
||||||
|
|
||||||
|
if (!$exists) {
|
||||||
|
$request->status(404, 'Not Found')->send(["error" => ["message" => "group not found"]]);
|
||||||
|
}
|
||||||
|
else if (!$existsUser) {
|
||||||
|
$request->status(404, 'Not Found')->send(["error" => ["message" => "user not found"]]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$group = $data->load(Group::class, $groupName);
|
||||||
|
$user = $data->load(User::class, $userName);
|
||||||
|
// TODO: Continue here <-----
|
||||||
|
$users = $data->fromIndex(Group::class, $groupName, User::class);
|
||||||
|
|
||||||
|
$result = [
|
||||||
|
'group' => $group->flatIdentifier(),
|
||||||
|
'service' => $group->service->flatIdentifier(),
|
||||||
|
'default' => $group->default,
|
||||||
|
'users' => $users,
|
||||||
|
'result' => 'ok'
|
||||||
|
];
|
||||||
|
|
||||||
|
$request->status(200, 'OK')->send($result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// System: List all Groups
|
||||||
|
function list(\Gac\Routing\Request $request) {
|
||||||
|
global $data;
|
||||||
|
|
||||||
|
$groups = $data->listAll(Group::class);
|
||||||
|
|
||||||
|
$result = [
|
||||||
|
'services' => $groups,
|
||||||
|
'result' => 'ok'
|
||||||
|
];
|
||||||
|
|
||||||
|
$request->status(200, 'OK')
|
||||||
|
->send($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// System: List all Groups by service
|
||||||
|
function listByService(\Gac\Routing\Request $request, string $serviceName) {
|
||||||
|
global $data;
|
||||||
|
|
||||||
|
$groups = $data->fromIndex(Service::class, $serviceName, Group::class);
|
||||||
|
|
||||||
|
$result = [
|
||||||
|
'groups' => $groups,
|
||||||
|
'result' => 'ok'
|
||||||
|
];
|
||||||
|
|
||||||
|
$request->status(200, 'OK')
|
||||||
|
->send($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default response if no action is defined
|
||||||
|
function response(\Gac\Routing\Request $request) {
|
||||||
|
$request->status(200, 'OK')->send([ 'result' => 'ok' ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user