AddPermission, RemovePermission, Fix errors, Add System Tables
This commit is contained in:
parent
ecf99ca0bc
commit
32b226bf41
@ -13,13 +13,18 @@ $filename = $config->{"filename"};
|
|||||||
$version = $config->{"version"};
|
$version = $config->{"version"};
|
||||||
$branch = "debug";
|
$branch = "debug";
|
||||||
|
|
||||||
if($config->{"debug"}) $path = $path."/debug";
|
if($config->{"debug"}) {
|
||||||
|
$path = $path."/debug";
|
||||||
|
$debug = "True";
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
|
$debug = "False";
|
||||||
$path = $path."/release";
|
$path = $path."/release";
|
||||||
$branch = "release";
|
$branch = "release";
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "[CONF] Debug=".$config->{"debug"}."\n";
|
|
||||||
|
echo "[CONF] Debug=".$debug."\n";
|
||||||
echo "[CONF] Path=".$path."\n";
|
echo "[CONF] Path=".$path."\n";
|
||||||
echo "[CONF] Filename=".$filename."\n";
|
echo "[CONF] Filename=".$filename."\n";
|
||||||
echo "[CONF] Version=".$version."\n";
|
echo "[CONF] Version=".$version."\n";
|
||||||
|
@ -17,7 +17,7 @@ return new class {
|
|||||||
return;
|
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']]);
|
$response = json_encode(["success" => true, "result" => $permission, "process" => $data['process']]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
|
@ -17,6 +17,13 @@ return new class {
|
|||||||
return;
|
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']);
|
$table = $lona->TableManager->CreateTable($data['table']['name'], $data['login']['name']);
|
||||||
|
|
||||||
if(!$table){
|
if(!$table){
|
||||||
|
@ -17,7 +17,7 @@ return new class {
|
|||||||
return;
|
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']]);
|
$response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
$server->close($fd);
|
$server->close($fd);
|
||||||
|
@ -1,22 +1,36 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
require 'vendor/autoload.php';
|
||||||
|
use LonaDB\LonaDB;
|
||||||
|
|
||||||
return new class {
|
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') {
|
if($data['login']['name'] !== 'root') {
|
||||||
$response = json_encode(["success" => false, "err" => "not_root", "process" => $data['process']]);
|
$response = json_encode(["success" => false, "err" => "not_root", "process" => $data['process']]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
$server->close($fd);
|
$server->close($fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
$evalFunc = "function evaluate_".$data['process']."(\$lona) { ";
|
$evalFunc = "\$functions['" . $data['process'] . "'] = new class { \n";
|
||||||
$evalFunc .= $data['function'];
|
$evalFunc .= "public function Execute(\$LonaDB) : mixed {\n";
|
||||||
$evalFunc .= " }";
|
$evalFunc .= $data['function'] . "\n";
|
||||||
|
$evalFunc .= "}\n};";
|
||||||
|
|
||||||
|
try{
|
||||||
eval($evalFunc);
|
eval($evalFunc);
|
||||||
|
|
||||||
eval("\$answer = evaluate_".$data['process']."(\$lonaEval);");
|
try{
|
||||||
|
$answer = $functions[$data['process']]->Execute($LonaDB);
|
||||||
echo $answer;
|
}
|
||||||
|
catch(e){
|
||||||
|
$answer = e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(e){
|
||||||
|
$answer = e;
|
||||||
|
}
|
||||||
|
|
||||||
$response = json_encode(["success" => true, "response" => $answer, "process" => $data['process']]);
|
$response = json_encode(["success" => true, "response" => $answer, "process" => $data['process']]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
|
@ -2,6 +2,13 @@
|
|||||||
|
|
||||||
return new class {
|
return new class {
|
||||||
public function run($lona, $data, $server, $fd) : void {
|
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'])){
|
if(!$lona->UserManager->CheckUser($data['user'])){
|
||||||
$response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]);
|
$response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
@ -11,8 +18,8 @@ return new class {
|
|||||||
|
|
||||||
$permissions = $lona->UserManager->GetPermissions($data['user']);
|
$permissions = $lona->UserManager->GetPermissions($data['user']);
|
||||||
|
|
||||||
if($permissions === []) $response = '{ "success": true, "list": {}, "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, "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->send($fd, $response);
|
||||||
$server->close($fd);
|
$server->close($fd);
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,9 @@ return new class {
|
|||||||
return;
|
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']]);
|
else $response = json_encode(["success" => true, "data" => $tableData, "process" => $data['process']]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
$server->close($fd);
|
$server->close($fd);
|
||||||
|
@ -76,7 +76,7 @@ class TableManager{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
unlink("data/".$name.".json");
|
unlink("data/tables/".$name.".lona");
|
||||||
unset($this->Tables[$name]);
|
unset($this->Tables[$name]);
|
||||||
$this->LonaDB->Logger->Table("Deleted table '" . $name . "', requested by user '" . $user . "'");
|
$this->LonaDB->Logger->Table("Deleted table '" . $name . "', requested by user '" . $user . "'");
|
||||||
return true;
|
return true;
|
||||||
|
@ -31,11 +31,9 @@ class UserManager{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function CheckPassword(string $name, string $password) : bool {
|
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($name === "root" && $password === $this->LonaDB->config["root"]) return true;
|
||||||
|
|
||||||
if(!$this->Users[$name]) {
|
if(!$this->Users[$name]) {
|
||||||
$this->LonaDB->Logger->User("User '".$name."'doesn't exist");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,7 +55,7 @@ class UserManager{
|
|||||||
array_push($users, $name);
|
array_push($users, $name);
|
||||||
}
|
}
|
||||||
|
|
||||||
return users;
|
return $users;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function CreateUser(string $name, string $password) : bool {
|
public function CreateUser(string $name, string $password) : bool {
|
||||||
@ -69,7 +67,7 @@ class UserManager{
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->Users[$name] = array(
|
$this->Users[$name] = array(
|
||||||
"role" => "user",
|
"role" => "User",
|
||||||
"password" => $password,
|
"password" => $password,
|
||||||
"permissions" => [
|
"permissions" => [
|
||||||
"default" => true
|
"default" => true
|
||||||
@ -97,14 +95,49 @@ class UserManager{
|
|||||||
return true;
|
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 {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function GetPermissions(string $name) : array {
|
public function GetPermissions(string $name) : array {
|
||||||
|
if($name === "root") return [];
|
||||||
return $this->Users[$name]['permissions'];
|
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 {
|
public function Save() : void {
|
||||||
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length(AES_256_CBC));
|
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length(AES_256_CBC));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user