AddPermission, RemovePermission, Fix errors, Add System Tables

This commit is contained in:
Collin 2024-02-29 14:47:51 +00:00
parent ecf99ca0bc
commit 32b226bf41
9 changed files with 87 additions and 21 deletions

View File

@ -13,13 +13,18 @@ $filename = $config->{"filename"};
$version = $config->{"version"};
$branch = "debug";
if($config->{"debug"}) $path = $path."/debug";
if($config->{"debug"}) {
$path = $path."/debug";
$debug = "True";
}
else {
$debug = "False";
$path = $path."/release";
$branch = "release";
}
echo "[CONF] Debug=".$config->{"debug"}."\n";
echo "[CONF] Debug=".$debug."\n";
echo "[CONF] Path=".$path."\n";
echo "[CONF] Filename=".$filename."\n";
echo "[CONF] Version=".$version."\n";

View File

@ -17,7 +17,7 @@ return new class {
return;
}
$permission = $lona->UserManager->CheckPermission($data['permission']['user'], $data['permission']['name']);
$permission = $lona->UserManager->CheckPermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']);
$response = json_encode(["success" => true, "result" => $permission, "process" => $data['process']]);
$server->send($fd, $response);

View File

@ -17,6 +17,13 @@ return new class {
return;
}
if(str_starts_with($data['table']['name'], "system.") && $data['login']['name'] !== "root"){
$response = json_encode(["success" => false, "err" => "not_root", "process" => $data['process']]);
$server->send($fd, $response);
$server->close($fd);
return;
}
$table = $lona->TableManager->CreateTable($data['table']['name'], $data['login']['name']);
if(!$table){

View File

@ -17,7 +17,7 @@ return new class {
return;
}
if(!$lona->UserManager->CheckUser($data['user'])){
if(!$lona->UserManager->CheckUser($data['user']['name'])){
$response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]);
$server->send($fd, $response);
$server->close($fd);

View File

@ -1,22 +1,36 @@
<?php
require 'vendor/autoload.php';
use LonaDB\LonaDB;
return new class {
public function run($lonaEval, $data, $server, $fd) : void {
public function run($LonaDB, $data, $server, $fd) : void {
$functions = [];
if($data['login']['name'] !== 'root') {
$response = json_encode(["success" => false, "err" => "not_root", "process" => $data['process']]);
$server->send($fd, $response);
$server->close($fd);
}
$evalFunc = "function evaluate_".$data['process']."(\$lona) { ";
$evalFunc .= $data['function'];
$evalFunc .= " }";
$evalFunc = "\$functions['" . $data['process'] . "'] = new class { \n";
$evalFunc .= "public function Execute(\$LonaDB) : mixed {\n";
$evalFunc .= $data['function'] . "\n";
$evalFunc .= "}\n};";
eval($evalFunc);
try{
eval($evalFunc);
eval("\$answer = evaluate_".$data['process']."(\$lonaEval);");
echo $answer;
try{
$answer = $functions[$data['process']]->Execute($LonaDB);
}
catch(e){
$answer = e;
}
}
catch(e){
$answer = e;
}
$response = json_encode(["success" => true, "response" => $answer, "process" => $data['process']]);
$server->send($fd, $response);

View File

@ -2,6 +2,13 @@
return new class {
public function run($lona, $data, $server, $fd) : void {
if($data['login']['name'] !== "root" && $lona->UserManager->GetRole($data['login']['name']) !== "Administrator"){
$response = json_encode(["success" => false, "err" => "not_allowed", "process" => $data['process']]);
$server->send($fd, $response);
$server->close($fd);
return;
}
if(!$lona->UserManager->CheckUser($data['user'])){
$response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]);
$server->send($fd, $response);
@ -11,8 +18,8 @@ return new class {
$permissions = $lona->UserManager->GetPermissions($data['user']);
if($permissions === []) $response = '{ "success": true, "list": {}, "process": "'.$data['process'].' }';
else $response = json_encode(["success" => true, "list" => $permissions, "process" => $data['process']]);
if($permissions === []) $response = '{ "success": true, "list": {}, "role": "' . $lona->UserManager->GetRole($data['user']) . '", "process": "'.$data['process'].'" }';
else $response = json_encode(["success" => true, "list" => $permissions, "role" => $lona->UserManager->GetRole($data['user']), "process" => $data['process']]);
$server->send($fd, $response);
$server->close($fd);
}

View File

@ -16,9 +16,9 @@ return new class {
return;
}
$tableData = $lona->TableManager->GetData();
$tableData = $lona->TableManager->getTable($data['table'])->GetData();
if($tableData === []) $response = '{ "success": true, "data": {}, "process": "'.$data['process'].' }';
if($tableData === []) $response = '{ "success": true, "data": {}, "process": "'.$data['process'].'" }';
else $response = json_encode(["success" => true, "data" => $tableData, "process" => $data['process']]);
$server->send($fd, $response);
$server->close($fd);

View File

@ -76,7 +76,7 @@ class TableManager{
return false;
}
unlink("data/".$name.".json");
unlink("data/tables/".$name.".lona");
unset($this->Tables[$name]);
$this->LonaDB->Logger->Table("Deleted table '" . $name . "', requested by user '" . $user . "'");
return true;

View File

@ -31,11 +31,9 @@ class UserManager{
}
public function CheckPassword(string $name, string $password) : bool {
$this->LonaDB->Logger->User("Trying to check password for user '" . $name . "'");
if($name === "root" && $password === $this->LonaDB->config["root"]) return true;
if(!$this->Users[$name]) {
$this->LonaDB->Logger->User("User '".$name."'doesn't exist");
return false;
}
@ -57,7 +55,7 @@ class UserManager{
array_push($users, $name);
}
return users;
return $users;
}
public function CreateUser(string $name, string $password) : bool {
@ -69,7 +67,7 @@ class UserManager{
}
$this->Users[$name] = array(
"role" => "user",
"role" => "User",
"password" => $password,
"permissions" => [
"default" => true
@ -97,14 +95,49 @@ class UserManager{
return true;
}
public function GetRole(string $name) : string {
if($name === "root") return "Superuser";
if(!$this->CheckUser($name)) return "";
return $this->Users[$name]['role'];
}
public function CheckPermission(string $name, string $permission, string $user = "") : bool {
if(!$this->CheckUser($name)) return false;
if($this->GetRole($name) === "Administrator" || $this->GetRole($name) === "Superuser") return true;
if(!$this->Users[$name]['permissions'][$permission]) return false;
return true;
}
public function GetPermissions(string $name) : array {
if($name === "root") return [];
return $this->Users[$name]['permissions'];
}
public function AddPermission(string $name, string $permission) : bool {
if($name === "root") return false;
if(!$this->CheckUser($name)) return false;
$this->Users[$name]['permissions'][$permission] = true;
$this->LonaDB->Logger->User("Added permission '" . $permission . "' to user '" . $name . "'");
$this->Save();
return true;
}
public function RemovePermission(string $name, string $permission) : bool {
if($name === "root") return false;
if(!$this->CheckUser($name)) return false;
unset($this->Users[$name]['permissions'][$permission]);
$this->LonaDB->Logger->User("Removed permission '" . $permission . "' from user '" . $name . "'");
$this->Save();
return true;
}
public function Save() : void {
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length(AES_256_CBC));