From 8017133abbf73bfc3a32bca1c4c15496124b86ab Mon Sep 17 00:00:00 2001 From: Collin Date: Wed, 25 Sep 2024 09:24:57 +0000 Subject: [PATCH] Refactoring --- src/LonaDB/Actions/add_function.php | 29 +++++----- src/LonaDB/Actions/add_permission.php | 40 ++++++------- src/LonaDB/Actions/check_password.php | 38 ++++++------- src/LonaDB/Actions/check_permission.php | 36 ++++++------ src/LonaDB/Actions/create_table.php | 59 +++++++------------- src/LonaDB/Actions/create_user.php | 50 +++++++---------- src/LonaDB/Actions/delete_function.php | 29 +++++----- src/LonaDB/Actions/delete_table.php | 59 ++++++++------------ src/LonaDB/Actions/delete_user.php | 49 +++++++--------- src/LonaDB/Actions/eval.php | 7 +-- src/LonaDB/Actions/get_permissions_raw.php | 37 ++++++------ src/LonaDB/Actions/get_table_data.php | 37 ++++++------ src/LonaDB/Actions/get_tables.php | 33 ++++++----- src/LonaDB/Actions/get_users.php | 25 +++++---- src/LonaDB/Actions/get_variable.php | 65 +++++++++------------- src/LonaDB/Actions/remove_permission.php | 39 ++++++------- src/LonaDB/Actions/remove_variable.php | 65 ++++++++-------------- src/LonaDB/Actions/set_variable.php | 49 +++++++--------- src/LonaDB/Tables/Table.php | 4 +- src/LonaDB/Tables/TableManager.php | 4 +- src/LonaDB/Users/UserManager.php | 4 +- 21 files changed, 325 insertions(+), 433 deletions(-) diff --git a/src/LonaDB/Actions/add_function.php b/src/LonaDB/Actions/add_function.php index 35bf611..494c30d 100644 --- a/src/LonaDB/Actions/add_function.php +++ b/src/LonaDB/Actions/add_function.php @@ -1,24 +1,27 @@ UserManager->CheckPermission($data['login']['name'], "create_function")) { - //Create response array - $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "create_function")) + return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]); //Create function $function = $LonaDB->FunctionManager->Create($data['function']['name'], $data['function']['content']); - //Create response array - $response = json_encode(["success" => true, "process" => $data['process']]); + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "functionCreate", [ "name" => $data['function']['name'], "content" => $data['function']['content'] ]); + //Send response + return $this->Send($client, ["success" => true, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); - //Run plugin event - $LonaDB->PluginManager->RunEvent($data['login']['name'], "functionCreate", [ "name" => $data['function']['name'], "content" => $data['function']['content'] ]); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/add_permission.php b/src/LonaDB/Actions/add_permission.php index 2c98987..96faa8a 100644 --- a/src/LonaDB/Actions/add_permission.php +++ b/src/LonaDB/Actions/add_permission.php @@ -1,34 +1,30 @@ false, "err" => "missing_user", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$data['permission']['user']) + return $this->Send($client, ["success" => false, "err" => "missing_user", "process" => $data['process']]); //Check if user has the permission so add permissions to others - if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_add")) { - $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to add a permission without permission"); - //Create response array - $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_add")) + return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]); //Add permission to user $LonaDB->UserManager->AddPermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); - //Create response array - $response = json_encode(["success" => true, "process" => $data['process']]); + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "permissionAdd", [ "user" => $data['permission']['user'], "name" => $data['permission']['name'] ]); + //Send response + return $this->Send($client, ["success" => true, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); - //Run plugin event - $LonaDB->PluginManager->RunEvent($data['login']['name'], "permissionAdd", [ "user" => $data['permission']['user'], "name" => $data['permission']['name'] ]); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/check_password.php b/src/LonaDB/Actions/check_password.php index ec2801e..421452d 100644 --- a/src/LonaDB/Actions/check_password.php +++ b/src/LonaDB/Actions/check_password.php @@ -1,17 +1,10 @@ false, "err" => "missing_arguments", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } - + if(!$data['checkPass']['name'] || !$data['checkPass']['pass']) + return $this->Send($client, ["success" => false, "err" => "missing_arguments", "process" => $data['process']]); //Hash the process ID $key = hash('sha256', $data['process'], true); //Split encrypted password from IV @@ -20,23 +13,24 @@ return new class { $ciphertext = hex2bin($parts[1]); //Decrypt password $password = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); - //Check if user has permission to check passwords - if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "password_check")) { - $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to check a password without permission"); - //Create response array - $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "password_check")) + return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]); //Check the password $checkPassword = $LonaDB->UserManager->CheckPassword($data['checkPass']['name'], $password); - //Create response array - $response = json_encode(["success" => true, "passCheck" => $checkPassword, "process" => $data['process']]); + //Send response + return $this->Send($client, ["success" => true, "passCheck" => $checkPassword, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/check_permission.php b/src/LonaDB/Actions/check_permission.php index 63f6c0c..24b030d 100644 --- a/src/LonaDB/Actions/check_permission.php +++ b/src/LonaDB/Actions/check_permission.php @@ -1,32 +1,28 @@ false, "err" => "missing_arguments", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$data['permission'] || !$data['permission']['name'] || !$data['permission']['user']) + return $this->Send($client, ["success" => false, "err" => "missing_arguments", "process" => $data['process']]); //Check if user has the needed permissions - if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_check")) { - $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to check a permission without permission"); - //Create response array - $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_check")) + return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]); //Check if the user has the permission $permission = $LonaDB->UserManager->CheckPermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); - //Create response array - $response = json_encode(["success" => true, "result" => $permission, "process" => $data['process']]); + //Send response + return $this->Send($client, ["success" => true, "result" => $permission, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/create_table.php b/src/LonaDB/Actions/create_table.php index 0820bc9..8bac103 100644 --- a/src/LonaDB/Actions/create_table.php +++ b/src/LonaDB/Actions/create_table.php @@ -1,51 +1,34 @@ UserManager->CheckPermission($data['login']['name'], "table_create")) { - $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to create a table without permission"); - //Create response array - $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if (!$LonaDB->UserManager->CheckPermission($data['login']['name'], "table_create")) + return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]); //Check if table name has been set - if (empty($data['table']['name'])) { - //Create response array - $response = json_encode(["success" => false, "err" => "bad_table_name", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if (empty($data['table']['name'])) + return $this->Send($client, ["success" => false, "err" => "bad_table_name", "process" => $data['process']]); //Check if user is trying to create a system table and if they are root - if(str_starts_with($data['table']['name'], "system.") && $data['login']['name'] !== "root"){ - //Create response array - $response = json_encode(["success" => false, "err" => "not_root", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(str_starts_with($data['table']['name'], "system.") && $data['login']['name'] !== "root") + return $LonaDB->Sever->Send($client, ["success" => false, "err" => "not_root", "process" => $data['process']]); //Check if table already exists $table = $LonaDB->TableManager->CreateTable($data['table']['name'], $data['login']['name']); - if(!$table){ - //Create response array - $response = json_encode(["success" => false, "err" => "table_exists", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } - //Create response array - $response = json_encode(["success" => true, "process" => $data['process']]); + if(!$table) + return $this->Send($client, ["success" => false, "err" => "table_exists", "process" => $data['process']]); + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "tableCreate", [ "name" => $data['table']['name'] ]); + return $this->Send($client, ["success" => true, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); - //Run plugin event - $LonaDB->PluginManager->RunEvent($data['login']['name'], "tableCreate", [ "name" => $data['table']['name'] ]); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/create_user.php b/src/LonaDB/Actions/create_user.php index c24fdc0..765fea3 100644 --- a/src/LonaDB/Actions/create_user.php +++ b/src/LonaDB/Actions/create_user.php @@ -1,16 +1,10 @@ false, "err" => "missing_arguments", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$data['user']['name'] || !$data['user']['password']) + return $this->Send($client, ["success" => false, "err" => "missing_arguments", "process" => $data['process']]); //Hash process ID $key = hash('sha256', $data['process'], true); //Split encrypted password from IV @@ -20,32 +14,28 @@ return new class { //Decrypt password $password = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); //Check if user is allowed to create new users - if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "user_create")){ - $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to create a user without permission"); - //Create response array - $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "user_create")) + return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]); //Check if a user with that name already exists - if($LonaDB->UserManager->CheckUser($data['user']['name'])){ - //Create response array - $response = json_encode(["success" => false, "err" => "user_exist", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if($LonaDB->UserManager->CheckUser($data['user']['name'])) + return $this->Send($client, ["success" => false, "err" => "user_exist", "process" => $data['process']]); //Create user $result = $LonaDB->UserManager->CreateUser($data['user']['name'], $password); - //Create response array - $response = json_encode(["success" => $result, "process" => $data['process']]); + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "userCreate", [ "name" => $data['user']['name'] ]); + //Send response + return $this->Send($client, ["success" => $result, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); - //Run plugin event - $LonaDB->PluginManager->RunEvent($data['login']['name'], "userCreate", [ "name" => $data['user']['name'] ]); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/delete_function.php b/src/LonaDB/Actions/delete_function.php index ebe07fa..87dc64d 100644 --- a/src/LonaDB/Actions/delete_function.php +++ b/src/LonaDB/Actions/delete_function.php @@ -1,24 +1,27 @@ UserManager->CheckPermission($data['login']['name'], "delete_function")) { - //Create response array - $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "delete_function")) + return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]); //Delete the function $function = $LonaDB->FunctionManager->Delete($data['function']['name']); - //Create response array - $response = json_encode(["success" => true, "process" => $data['process']]); + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "functionDelete", [ "name" => $data['function']['name'] ]); + //Send response + return $this->Send($client, ["success" => true, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); - //Run plugin event - $LonaDB->PluginManager->RunEvent($data['login']['name'], "functionDelete", [ "name" => $data['function']['name'] ]); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/delete_table.php b/src/LonaDB/Actions/delete_table.php index eda5f67..b3ee5e0 100644 --- a/src/LonaDB/Actions/delete_table.php +++ b/src/LonaDB/Actions/delete_table.php @@ -1,51 +1,36 @@ false, "err" => "bad_table_name", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if (empty($data['table']['name'])) + return $this->Send($client, ["success" => false, "err" => "bad_table_name", "process" => $data['process']]); //Check if user is allowed to delete tables - if (!$LonaDB->UserManager->CheckPermission($data['login']['name'], "table_delete")) { - //Create response array - $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if (!$LonaDB->UserManager->CheckPermission($data['login']['name'], "table_delete")) + return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]); //Check if the table exists - if(!$LonaDB->TableManager->GetTable($data['table']['name'])) { - //Create response array - $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->TableManager->GetTable($data['table']['name'])) + return $this->Send($client, ["success" => false, "err" => "table_missing", "process" => $data['process']]); //Check if user owns the table - if($LonaDB->TableManager->GetTable($data['table']['name'])->GetOwner() !== $data['login']['name'] && $LonaDB->UserManager->GetRole($data['login']['name']) !== "Administrator" && $LonaDB->UserManager->GetRole($data['login']['name']) !== "Superuser") { - //Create response array - $response = json_encode(["success" => false, "err" => "not_table_owner", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if($LonaDB->TableManager->GetTable($data['table']['name'])->GetOwner() !== $data['login']['name'] && $LonaDB->UserManager->GetRole($data['login']['name']) !== "Administrator" && $LonaDB->UserManager->GetRole($data['login']['name']) !== "Superuser") + return $this->Send($client, ["success" => false, "err" => "not_table_owner", "process" => $data['process']]); //Delete the table $table = $LonaDB->TableManager->DeleteTable($data['table']['name'], $data['login']['name']); - //Create response array - $response = json_encode(["success" => true, "process" => $data['process']]); + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "tableDelete", [ "name" => $data['table']['name'] ]); + //Send response + return $this->Send($client, ["success" => true, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); - //Run plugin event - $LonaDB->PluginManager->RunEvent($data['login']['name'], "tableDelete", [ "name" => $data['table']['name'] ]); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/delete_user.php b/src/LonaDB/Actions/delete_user.php index 1260876..d3e8e45 100644 --- a/src/LonaDB/Actions/delete_user.php +++ b/src/LonaDB/Actions/delete_user.php @@ -1,42 +1,33 @@ false, "err" => "missing_arguments", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$data['user']['name']) + return $this->Send($client, ["success" => false, "err" => "missing_arguments", "process" => $data['process']]); //Check if user is allowed to delete users - if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "user_delete")){ - //Create response array - $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "user_delete")) + return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]); //Check if user exists - if(!$LonaDB->UserManager->CheckUser($data['user']['name'])){ - //Create response array - $response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckUser($data['user']['name'])) + return $this->Send($client, ["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); //Delete user $result = $LonaDB->UserManager->DeleteUser($data['user']['name'], $data['user']['password']); - //Create response array - $response = json_encode(["success" => $result, "process" => $data['process']]); + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "userDelete", [ "name" => $data['table']['name'] ]); + //Send response + return $this->Send($client, ["success" => $result, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); - //Run plugin event - $LonaDB->PluginManager->RunEvent($data['login']['name'], "userDelete", [ "name" => $data['table']['name'] ]); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/eval.php b/src/LonaDB/Actions/eval.php index 2e4293b..be855bc 100644 --- a/src/LonaDB/Actions/eval.php +++ b/src/LonaDB/Actions/eval.php @@ -3,6 +3,9 @@ require 'vendor/autoload.php'; use LonaDB\LonaDB; +//TODO: Refactoring the eval action + + return new class { public function run($LonaDB, $data, $client) : void { //Check if user is root (only root is allowed to use eval) @@ -11,7 +14,6 @@ return new class { $this->sendErrorResponse($client, "not_root", $data['process']); return; } - //Generate eval script to create a class with the desired function $functionName = $data['process']; $evalFunction = " @@ -21,11 +23,9 @@ return new class { } }; "; - try { //Run the script eval($evalFunction); - try { //Execute the function $answer = $functions[$functionName]->Execute($LonaDB); @@ -37,7 +37,6 @@ return new class { //Catch errors $answer = $e->getMessage(); } - //Send response and close socket $this->sendSuccessResponse($client, $answer, $data['process']); // Remove the function from the $functions array diff --git a/src/LonaDB/Actions/get_permissions_raw.php b/src/LonaDB/Actions/get_permissions_raw.php index f43fd3d..b34bbff 100644 --- a/src/LonaDB/Actions/get_permissions_raw.php +++ b/src/LonaDB/Actions/get_permissions_raw.php @@ -1,32 +1,31 @@ UserManager->GetRole($data['login']['name']) !== "Superuser" && $LonaDB->UserManager->GetRole($data['login']['name']) !== "Administrator"){ - //Create response array - $response = json_encode(["success" => false, "err" => "not_allowed", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if($LonaDB->UserManager->GetRole($data['login']['name']) !== "Superuser" && $LonaDB->UserManager->GetRole($data['login']['name']) !== "Administrator") + return $this->Send($client, ["success" => false, "err" => "not_allowed", "process" => $data['process']]); //Check if user exists - if(!$LonaDB->UserManager->CheckUser($data['user'])){ - //Create response array - $response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckUser($data['user'])) + return $this->Send($client, ["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); //Get permissions array $permissions = $LonaDB->UserManager->GetPermissions($data['user']); //Create response array - if($permissions === []) $response = '{ "success": true, "list": {}, "role": "' . $LonaDB->UserManager->GetRole($data['user']) . '", "process": "'.$data['process'].'" }'; - else $response = json_encode(["success" => true, "list" => $permissions, "role" => $LonaDB->UserManager->GetRole($data['user']), "process" => $data['process']]); + if($permissions === []) $response = ["success" => true, "list" => [], "role" => $LonaDB->UserManager->GetRole($data['user']), "process" => $data['process']]; + else $response = ["success" => true, "list" => $permissions, "role" => $LonaDB->UserManager->GetRole($data['user']), "process" => $data['process']]; + //Send response + return $this->Send($client, $response); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/get_table_data.php b/src/LonaDB/Actions/get_table_data.php index a342cf5..ce7ae5f 100644 --- a/src/LonaDB/Actions/get_table_data.php +++ b/src/LonaDB/Actions/get_table_data.php @@ -1,32 +1,31 @@ TableManager->GetTable($data['table'])) { - //Create response array - $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->TableManager->GetTable($data['table'])) + return $this->Send($client, ["success" => false, "err" => "table_missing", "process" => $data['process']]); //Check if user has read permissions on desired table - if(!$LonaDB->TableManager->GetTable($data['table'])->CheckPermission($data['login']['name'], "read")) { - //Create response array - $response = json_encode(["success" => false, "err" => "missing_permissions", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->TableManager->GetTable($data['table'])->CheckPermission($data['login']['name'], "read")) + return $this->Send($client, ["success" => false, "err" => "missing_permissions", "process" => $data['process']]); //Get table data array $tableData = $LonaDB->TableManager->getTable($data['table'])->GetData(); //Create response array - if($tableData === []) $response = '{ "success": true, "data": {}, "process": "'.$data['process'].'" }'; - else $response = json_encode(["success" => true, "data" => $tableData, "process" => $data['process']]); + if($tableData === []) $response = ["success" => true, "data" => [], "process" => $data['process']]; + else $response = ["success" => true, "data" => $tableData, "process" => $data['process']]; + //Send response + return $this->Send($client, $response); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/get_tables.php b/src/LonaDB/Actions/get_tables.php index 47220a6..ab852c3 100644 --- a/src/LonaDB/Actions/get_tables.php +++ b/src/LonaDB/Actions/get_tables.php @@ -1,7 +1,7 @@ UserManager->CheckPermission($data['login']['name'], "get_tables")){ - //Create response array - $response = json_encode(["success" => false, "err" => "missing_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "get_tables")) + return $this->Send($client, ["success" => false, "err" => "missing_permission", "process" => $data['process']]); //Check if requested user exists - if(!$LonaDB->UserManager->CheckUser($user)){ - $response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckUser($user)) + return $this->Send($client, ["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); } //Get tables array $tables = $LonaDB->TableManager->ListTables($user); - //Create response array - $response = json_encode(["success" => true, "tables" => $tables, "process" => $data['process']]); + //Send response + return $this->Send($client, ["success" => true, "tables" => $tables, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/get_users.php b/src/LonaDB/Actions/get_users.php index 4e5238b..b1379c0 100644 --- a/src/LonaDB/Actions/get_users.php +++ b/src/LonaDB/Actions/get_users.php @@ -1,22 +1,25 @@ UserManager->CheckPermission($data['login']['name'], "get_users")){ - //Create response array - $response = json_encode(["success" => false, "err" => "missing_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "get_users")) + return $this->Send($client, ["success" => false, "err" => "missing_permission", "process" => $data['process']]); //Get users array $users = $LonaDB->UserManager->ListUsers(); - //Create response array - $response = json_encode(["success" => true, "users" => $users, "process" => $data['process']]); + //Send response + return $this->Send($client, ["success" => true, "users" => $users, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/get_variable.php b/src/LonaDB/Actions/get_variable.php index 85f7d07..ebaa137 100644 --- a/src/LonaDB/Actions/get_variable.php +++ b/src/LonaDB/Actions/get_variable.php @@ -1,34 +1,16 @@ false, "err" => "missing_parameters", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if (!$data['table']['name'] || !$data['variable']['name']) + return $this->Send($client, ["success" => false, "err" => "missing_parameters", "process" => $data['process']]); //Check if table exists - if(!$LonaDB->TableManager->GetTable($data['table']['name'])) { - //Create response array - $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->TableManager->GetTable($data['table']['name'])) + return $this->Send($client, ["success" => false, "err" => "table_missing", "process" => $data['process']]); //Check if user is allowed to read in desired table - if (!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckPermission($data['login']['name'], "read")){ - //Create response array - $response = json_encode(["success" => false, "err" => "missing_permissions", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if (!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckPermission($data['login']['name'], "read")) + return $this->Send($client, ["success" => false, "err" => "missing_permissions", "process" => $data['process']]); //Get variable value $value = $LonaDB->TableManager->GetTable($data['table']['name'])->Get($data['variable']['name'], $data['login']['name']); //Create response array @@ -43,30 +25,33 @@ return new class { //Check if there has been an error if (is_array($value) && isset($value['err'])) { $value['process'] = $data['process']; - //Send response and close socket - socket_write($client, json_encode($value)); - socket_close($client); - return; + //Send response + return $this->Send($client, $value); } //Check if variable exists - if ($value === null) { - //Create response array + if ($value === null) $response = [ "success" => false, "err" => "variable_undefined", "process" => $data['process'] ]; - //Send response and close socket - socket_write($client, json_encode($response)); - socket_close($client); - return; - } else { + else { $response['variable']['value'] = $value; $response['success'] = true; - //Send response and close socket - socket_write($client, json_encode($response)); - socket_close($client); - return; } + //Send response + return $this->Send($client, $response); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); + //Send response and close socket + socket_write($client, $response); + socket_close($client); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/remove_permission.php b/src/LonaDB/Actions/remove_permission.php index 190408c..83a43f5 100644 --- a/src/LonaDB/Actions/remove_permission.php +++ b/src/LonaDB/Actions/remove_permission.php @@ -1,33 +1,30 @@ false, "err" => "missing_user", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$data['permission']['user']) + return $this->Send($client, ["success" => false, "err" => "missing_user", "process" => $data['process']]); //Check if user is allowed to remove permissions - if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_remove")) { - //Create response array - $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_remove")) + return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]); //Remove permission $LonaDB->UserManager->RemovePermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); - //Create response array - $response = json_encode(["success" => true, "process" => $data['process']]); + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "permissionRemove", [ "user" => $data['permission']['user'], "name" => $data['permission']['name'] ]); + //Send response + return $this->Send($client, ["success" => true, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); - //Run plugin event - $LonaDB->PluginManager->RunEvent($data['login']['name'], "permissionRemove", [ "user" => $data['permission']['user'], "name" => $data['permission']['name'] ]); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/remove_variable.php b/src/LonaDB/Actions/remove_variable.php index 58c13bf..74a4845 100644 --- a/src/LonaDB/Actions/remove_variable.php +++ b/src/LonaDB/Actions/remove_variable.php @@ -1,55 +1,36 @@ false, "err" => "missing_parameters", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if (!$data['table']['name'] || !$data['variable']['name']) + return $this->Send($client, ["success" => false, "err" => "missing_parameters", "process" => $data['process']]); //Check if table exists - if(!$LonaDB->TableManager->GetTable($data['table']['name'])) { - //Create response array - $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->TableManager->GetTable($data['table']['name'])) + return $this->Send($client, ["success" => false, "err" => "table_missing", "process" => $data['process']]); //Check if user has read permissions on the desired table - if (!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckPermission($data['login']['name'], "read")) { - //Create response array - $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if (!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckPermission($data['login']['name'], "read")) + return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]); //Check if variable exists - if(!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckVariable($data['variable']['name'], $data['login']['name'])){ - //Create response array - $response = json_encode(["success" => false, "err" => "missing_variable", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if(!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckVariable($data['variable']['name'], $data['login']['name'])) + return $this->Send($client, ["success" => false, "err" => "missing_variable", "process" => $data['process']]); //Delete variable $LonaDB->TableManager->GetTable($data['table']['name'])->Delete($data['variable']['name'], $data['login']['name']); - //Create response array - $response = [ - "success" => true, - "process" => $data['process'] - ]; - //Send response and close socket - socket_write($client, json_encode($response)); - socket_close($client); //Run plugin event $LonaDB->PluginManager->RunEvent($data['login']['name'], "valueRemove", [ "name" => $data['variable']['name'] ]); - return; + //Send response + return $this->Send($client, ["success" => true, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); + //Send response and close socket + socket_write($client, $response); + socket_close($client); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Actions/set_variable.php b/src/LonaDB/Actions/set_variable.php index c9c2c03..c50419a 100644 --- a/src/LonaDB/Actions/set_variable.php +++ b/src/LonaDB/Actions/set_variable.php @@ -1,49 +1,40 @@ false, "err" => "bad_table_name", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if (empty($data['table']['name']) || empty($data['variable']['name']) || empty($data['variable']['value'])) + return $this->Send($client, ["success" => false, "err" => "bad_table_name", "process" => $data['process']]); //Grab table name $tableName = $data['table']['name']; //Check if table exists - if (!$LonaDB->TableManager->GetTable($tableName)) { - //Create response array - $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if (!$LonaDB->TableManager->GetTable($tableName)) + return $this->Send($client, ["success" => false, "err" => "table_missing", "process" => $data['process']]); //Get table instance $table = $LonaDB->TableManager->GetTable($tableName); //Check if user has write permissions on desired table - if (!$table->CheckPermission($data['login']['name'], "write")) { - //Create response array - $response = json_encode(["success" => false, "err" => "missing_permissions", "process" => $data['process']]); - //Send response and close socket - socket_write($client, $response); - socket_close($client); - return; - } + if (!$table->CheckPermission($data['login']['name'], "write")) + return $this->Send($client, ["success" => false, "err" => "missing_permissions", "process" => $data['process']]); //Prepare variable $variableName = $data['variable']['name']; $variableValue = $data['variable']['value']; //Push to table $table->Set($variableName, $variableValue, $data['login']['name']); - //Create response array - $response = json_encode(["success" => true, "process" => $data['process']]); + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "valueSet", [ "name" => $data['variable']['name'], "value" => $data['variable']['value'] ]); + //Send response + return $this->Send($client, ["success" => true, "process" => $data['process']]); + } + + private function Send ($client, $responseArray) : bool { + //Convert response array to JSON object + $response = json_encode($responseArray); //Send response and close socket socket_write($client, $response); socket_close($client); - //Run plugin event - $LonaDB->PluginManager->RunEvent($data['login']['name'], "valueSet", [ "name" => $data['variable']['name'], "value" => $data['variable']['value'] ]); + //Return state + $bool = false; + if($responseArray['success']) $bool = true; + return $bool; } }; diff --git a/src/LonaDB/Tables/Table.php b/src/LonaDB/Tables/Table.php index d325913..3a1c711 100644 --- a/src/LonaDB/Tables/Table.php +++ b/src/LonaDB/Tables/Table.php @@ -122,7 +122,7 @@ class Table{ public function AddPermission(string $name, string $permission, string $user) : bool { //Check if user is table owner/administrator, global administrator or superuser - if($user !== $this->Owner && !$this->permissions[$user]["admin"] && $this->LonaDB->UserManager->GetRole($user) !== "Administrator" && $this->LonaDB->UserManager->GetRole($user) !== "Superuser") return false; + if($user !== $this->Owner && !$this->CheckPermission($user, "admin") && $this->LonaDB->UserManager->GetRole($user) !== "Administrator" && $this->LonaDB->UserManager->GetRole($user) !== "Superuser") return false; //Add permission and save $this->permissions[$name][$permission] = true; @@ -132,7 +132,7 @@ class Table{ public function RemovePermission(string $name, string $permission, string $user) : bool { //Check if user is table owner/administrator, global administrator or superuser - if($user !== $this->Owner && !$this->permissions[$user]["admin"] && $this->LonaDB->UserManager->GetRole($user) !== "Administrator" && $this->LonaDB->UserManager->GetRole($user) !== "Superuser") return false; + if($user !== $this->Owner && !$this->CheckPermission($user, "admin") && $this->LonaDB->UserManager->GetRole($user) !== "Administrator" && $this->LonaDB->UserManager->GetRole($user) !== "Superuser") return false; //Remove permission and save unset($this->permissions[$name][$permission]); diff --git a/src/LonaDB/Tables/TableManager.php b/src/LonaDB/Tables/TableManager.php index 8377be2..227c4de 100644 --- a/src/LonaDB/Tables/TableManager.php +++ b/src/LonaDB/Tables/TableManager.php @@ -77,7 +77,7 @@ class TableManager{ public function CreateTable(string $name, string $owner) : bool { //Check if there already is a table with the exact same name - if($this->Tables[$name]) return false; + if($this->GetTable($name)) return false; //Create table instance $this->Tables[$name] = new Table($this->LonaDB, true, $name, $owner); @@ -86,7 +86,7 @@ class TableManager{ public function DeleteTable(string $name, string $user) : bool { //Check if the table exists - if(!$this->Tables[$name]) return false; + if(!$this->GetTable($name)) return false; //Check if deleting user is the table owner, a global administrator or superuser if($user !== $this->Tables[$name]->GetOwner() && $this->LonaDB->UserManager->GetRole($user) !== "Administrator" && $this->LonaDB->UserManager->GetRole($user) !== "Superuser") return false; diff --git a/src/LonaDB/Users/UserManager.php b/src/LonaDB/Users/UserManager.php index a2eb961..9319994 100644 --- a/src/LonaDB/Users/UserManager.php +++ b/src/LonaDB/Users/UserManager.php @@ -49,9 +49,7 @@ class UserManager{ //If username is root, check for the root password if($name === "root" && $password === $this->LonaDB->config["root"]) return true; //Check if the user exists - if(!$this->Users[$name]) { - return false; - } + if(!$this->CheckUsers($name)) return false; //Check if the password is correct if($this->Users[$name]["password"] !== $password) return false; //All checks successfull