Refactoring

This commit is contained in:
Collin 2024-09-25 09:24:57 +00:00
parent b13106ee54
commit 8017133abb
21 changed files with 325 additions and 433 deletions

View File

@ -1,24 +1,27 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if the user is allowed to create functions //Check if the user is allowed to create functions
if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "create_function")) { if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "create_function"))
//Create response array return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Create function //Create function
$function = $LonaDB->FunctionManager->Create($data['function']['name'], $data['function']['content']); $function = $LonaDB->FunctionManager->Create($data['function']['name'], $data['function']['content']);
//Create response array //Run plugin event
$response = json_encode(["success" => true, "process" => $data['process']]); $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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event //Return state
$LonaDB->PluginManager->RunEvent($data['login']['name'], "functionCreate", [ "name" => $data['function']['name'], "content" => $data['function']['content'] ]); $bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,34 +1,30 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if user has been defined //Check if user has been defined
if(!$data['permission']['user']) { if(!$data['permission']['user'])
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_user", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_user", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if user has the permission so add permissions to others //Check if user has the permission so add permissions to others
if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_add")) { if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_add"))
$LonaDB->Logger->Error("User '".$data['login']['name']."' tried to add a permission without permission"); return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]);
//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;
}
//Add permission to user //Add permission to user
$LonaDB->UserManager->AddPermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); $LonaDB->UserManager->AddPermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']);
//Create response array //Run plugin event
$response = json_encode(["success" => true, "process" => $data['process']]); $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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event //Return state
$LonaDB->PluginManager->RunEvent($data['login']['name'], "permissionAdd", [ "user" => $data['permission']['user'], "name" => $data['permission']['name'] ]); $bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,17 +1,10 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if the user and password to check have been set //Check if the user and password to check have been set
if(!$data['checkPass']['name'] || !$data['checkPass']['pass']) { if(!$data['checkPass']['name'] || !$data['checkPass']['pass'])
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_arguments", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_arguments", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Hash the process ID //Hash the process ID
$key = hash('sha256', $data['process'], true); $key = hash('sha256', $data['process'], true);
//Split encrypted password from IV //Split encrypted password from IV
@ -20,23 +13,24 @@ return new class {
$ciphertext = hex2bin($parts[1]); $ciphertext = hex2bin($parts[1]);
//Decrypt password //Decrypt password
$password = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); $password = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
//Check if user has permission to check passwords //Check if user has permission to check passwords
if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "password_check")) { if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "password_check"))
$LonaDB->Logger->Error("User '".$data['login']['name']."' tried to check a password without permission"); return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]);
//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;
}
//Check the password //Check the password
$checkPassword = $LonaDB->UserManager->CheckPassword($data['checkPass']['name'], $password); $checkPassword = $LonaDB->UserManager->CheckPassword($data['checkPass']['name'], $password);
//Create response array //Send response
$response = json_encode(["success" => true, "passCheck" => $checkPassword, "process" => $data['process']]); 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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Return state
$bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,32 +1,28 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if needed parameters have been set //Check if needed parameters have been set
if(!$data['permission'] || !$data['permission']['name'] || !$data['permission']['user']){ if(!$data['permission'] || !$data['permission']['name'] || !$data['permission']['user'])
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_arguments", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_arguments", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if user has the needed permissions //Check if user has the needed permissions
if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_check")) { if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_check"))
$LonaDB->Logger->Error("User '".$data['login']['name']."' tried to check a permission without permission"); return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]);
//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;
}
//Check if the user has the permission //Check if the user has the permission
$permission = $LonaDB->UserManager->CheckPermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); $permission = $LonaDB->UserManager->CheckPermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']);
//Create response array //Send response
$response = json_encode(["success" => true, "result" => $permission, "process" => $data['process']]); 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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Return state
$bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,51 +1,34 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if user is allowed to create tables //Check if user is allowed to create tables
if (!$LonaDB->UserManager->CheckPermission($data['login']['name'], "table_create")) { if (!$LonaDB->UserManager->CheckPermission($data['login']['name'], "table_create"))
$LonaDB->Logger->Error("User '".$data['login']['name']."' tried to create a table without permission"); return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]);
//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;
}
//Check if table name has been set //Check if table name has been set
if (empty($data['table']['name'])) { if (empty($data['table']['name']))
//Create response array return $this->Send($client, ["success" => false, "err" => "bad_table_name", "process" => $data['process']]);
$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;
}
//Check if user is trying to create a system table and if they are root //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"){ if(str_starts_with($data['table']['name'], "system.") && $data['login']['name'] !== "root")
//Create response array return $LonaDB->Sever->Send($client, ["success" => false, "err" => "not_root", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "not_root", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if table already exists //Check if table already exists
$table = $LonaDB->TableManager->CreateTable($data['table']['name'], $data['login']['name']); $table = $LonaDB->TableManager->CreateTable($data['table']['name'], $data['login']['name']);
if(!$table){ if(!$table)
//Create response array return $this->Send($client, ["success" => false, "err" => "table_exists", "process" => $data['process']]);
$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']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
//Run plugin event //Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "tableCreate", [ "name" => $data['table']['name'] ]); $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);
//Return state
$bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,16 +1,10 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if username and password have been set //Check if username and password have been set
if(!$data['user']['name'] || !$data['user']['password']){ if(!$data['user']['name'] || !$data['user']['password'])
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_arguments", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_arguments", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Hash process ID //Hash process ID
$key = hash('sha256', $data['process'], true); $key = hash('sha256', $data['process'], true);
//Split encrypted password from IV //Split encrypted password from IV
@ -20,32 +14,28 @@ return new class {
//Decrypt password //Decrypt password
$password = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); $password = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
//Check if user is allowed to create new users //Check if user is allowed to create new users
if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "user_create")){ if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "user_create"))
$LonaDB->Logger->Error("User '".$data['login']['name']."' tried to create a user without permission"); return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]);
//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;
}
//Check if a user with that name already exists //Check if a user with that name already exists
if($LonaDB->UserManager->CheckUser($data['user']['name'])){ if($LonaDB->UserManager->CheckUser($data['user']['name']))
//Create response array return $this->Send($client, ["success" => false, "err" => "user_exist", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "user_exist", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Create user //Create user
$result = $LonaDB->UserManager->CreateUser($data['user']['name'], $password); $result = $LonaDB->UserManager->CreateUser($data['user']['name'], $password);
//Create response array //Run plugin event
$response = json_encode(["success" => $result, "process" => $data['process']]); $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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event //Return state
$LonaDB->PluginManager->RunEvent($data['login']['name'], "userCreate", [ "name" => $data['user']['name'] ]); $bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,24 +1,27 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if user is allowed to delete functions //Check if user is allowed to delete functions
if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "delete_function")) { if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "delete_function"))
//Create response array return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Delete the function //Delete the function
$function = $LonaDB->FunctionManager->Delete($data['function']['name']); $function = $LonaDB->FunctionManager->Delete($data['function']['name']);
//Create response array //Run plugin event
$response = json_encode(["success" => true, "process" => $data['process']]); $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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event //Return state
$LonaDB->PluginManager->RunEvent($data['login']['name'], "functionDelete", [ "name" => $data['function']['name'] ]); $bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,51 +1,36 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if the table name is in the parameters //Check if the table name is in the parameters
if (empty($data['table']['name'])) { if (empty($data['table']['name']))
//Create response array return $this->Send($client, ["success" => false, "err" => "bad_table_name", "process" => $data['process']]);
$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;
}
//Check if user is allowed to delete tables //Check if user is allowed to delete tables
if (!$LonaDB->UserManager->CheckPermission($data['login']['name'], "table_delete")) { if (!$LonaDB->UserManager->CheckPermission($data['login']['name'], "table_delete"))
//Create response array return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if the table exists //Check if the table exists
if(!$LonaDB->TableManager->GetTable($data['table']['name'])) { if(!$LonaDB->TableManager->GetTable($data['table']['name']))
//Create response array return $this->Send($client, ["success" => false, "err" => "table_missing", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if user owns the table //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") { 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 return $this->Send($client, ["success" => false, "err" => "not_table_owner", "process" => $data['process']]);
$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;
}
//Delete the table //Delete the table
$table = $LonaDB->TableManager->DeleteTable($data['table']['name'], $data['login']['name']); $table = $LonaDB->TableManager->DeleteTable($data['table']['name'], $data['login']['name']);
//Create response array //Run plugin event
$response = json_encode(["success" => true, "process" => $data['process']]); $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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event //Return state
$LonaDB->PluginManager->RunEvent($data['login']['name'], "tableDelete", [ "name" => $data['table']['name'] ]); $bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,42 +1,33 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if name has been set //Check if name has been set
if(!$data['user']['name']){ if(!$data['user']['name'])
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_arguments", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_arguments", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if user is allowed to delete users //Check if user is allowed to delete users
if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "user_delete")){ if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "user_delete"))
//Create response array return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if user exists //Check if user exists
if(!$LonaDB->UserManager->CheckUser($data['user']['name'])){ if(!$LonaDB->UserManager->CheckUser($data['user']['name']))
//Create response array return $this->Send($client, ["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]);
$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;
}
//Delete user //Delete user
$result = $LonaDB->UserManager->DeleteUser($data['user']['name'], $data['user']['password']); $result = $LonaDB->UserManager->DeleteUser($data['user']['name'], $data['user']['password']);
//Create response array //Run plugin event
$response = json_encode(["success" => $result, "process" => $data['process']]); $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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event //Return state
$LonaDB->PluginManager->RunEvent($data['login']['name'], "userDelete", [ "name" => $data['table']['name'] ]); $bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -3,6 +3,9 @@
require 'vendor/autoload.php'; require 'vendor/autoload.php';
use LonaDB\LonaDB; use LonaDB\LonaDB;
//TODO: Refactoring the eval action
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
//Check if user is root (only root is allowed to use eval) //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']); $this->sendErrorResponse($client, "not_root", $data['process']);
return; return;
} }
//Generate eval script to create a class with the desired function //Generate eval script to create a class with the desired function
$functionName = $data['process']; $functionName = $data['process'];
$evalFunction = " $evalFunction = "
@ -21,11 +23,9 @@ return new class {
} }
}; };
"; ";
try { try {
//Run the script //Run the script
eval($evalFunction); eval($evalFunction);
try { try {
//Execute the function //Execute the function
$answer = $functions[$functionName]->Execute($LonaDB); $answer = $functions[$functionName]->Execute($LonaDB);
@ -37,7 +37,6 @@ return new class {
//Catch errors //Catch errors
$answer = $e->getMessage(); $answer = $e->getMessage();
} }
//Send response and close socket //Send response and close socket
$this->sendSuccessResponse($client, $answer, $data['process']); $this->sendSuccessResponse($client, $answer, $data['process']);
// Remove the function from the $functions array // Remove the function from the $functions array

View File

@ -1,32 +1,31 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if user is Administrator or Superuser //Check if user is Administrator or Superuser
if($LonaDB->UserManager->GetRole($data['login']['name']) !== "Superuser" && $LonaDB->UserManager->GetRole($data['login']['name']) !== "Administrator"){ if($LonaDB->UserManager->GetRole($data['login']['name']) !== "Superuser" && $LonaDB->UserManager->GetRole($data['login']['name']) !== "Administrator")
//Create response array return $this->Send($client, ["success" => false, "err" => "not_allowed", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "not_allowed", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if user exists //Check if user exists
if(!$LonaDB->UserManager->CheckUser($data['user'])){ if(!$LonaDB->UserManager->CheckUser($data['user']))
//Create response array return $this->Send($client, ["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]);
$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;
}
//Get permissions array //Get permissions array
$permissions = $LonaDB->UserManager->GetPermissions($data['user']); $permissions = $LonaDB->UserManager->GetPermissions($data['user']);
//Create response array //Create response array
if($permissions === []) $response = '{ "success": true, "list": {}, "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 = json_encode(["success" => true, "list" => $permissions, "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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Return state
$bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,32 +1,31 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if table exists //Check if table exists
if(!$LonaDB->TableManager->GetTable($data['table'])) { if(!$LonaDB->TableManager->GetTable($data['table']))
//Create response array return $this->Send($client, ["success" => false, "err" => "table_missing", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if user has read permissions on desired table //Check if user has read permissions on desired table
if(!$LonaDB->TableManager->GetTable($data['table'])->CheckPermission($data['login']['name'], "read")) { if(!$LonaDB->TableManager->GetTable($data['table'])->CheckPermission($data['login']['name'], "read"))
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_permissions", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_permissions", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Get table data array //Get table data array
$tableData = $LonaDB->TableManager->getTable($data['table'])->GetData(); $tableData = $LonaDB->TableManager->getTable($data['table'])->GetData();
//Create response array //Create response array
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 = ["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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Return state
$bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,7 +1,7 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if tables for executing user have been requested //Check if tables for executing user have been requested
$user = null; $user = null;
if(!$data['user']) $user = $data['login']['name']; if(!$data['user']) $user = $data['login']['name'];
@ -9,28 +9,27 @@ return new class {
//If checking for someone else //If checking for someone else
if($user !== $data['login']['name']){ if($user !== $data['login']['name']){
//If user isn't allowed to request table array //If user isn't allowed to request table array
if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "get_tables")){ if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "get_tables"))
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_permission", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_permission", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if requested user exists //Check if requested user exists
if(!$LonaDB->UserManager->CheckUser($user)){ if(!$LonaDB->UserManager->CheckUser($user))
$response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); return $this->Send($client, ["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]);
socket_write($client, $response);
socket_close($client);
return;
}
} }
//Get tables array //Get tables array
$tables = $LonaDB->TableManager->ListTables($user); $tables = $LonaDB->TableManager->ListTables($user);
//Create response array //Send response
$response = json_encode(["success" => true, "tables" => $tables, "process" => $data['process']]); 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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Return state
$bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,22 +1,25 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if user is allowed to request a users array //Check if user is allowed to request a users array
if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "get_users")){ if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "get_users"))
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_permission", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_permission", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Get users array //Get users array
$users = $LonaDB->UserManager->ListUsers(); $users = $LonaDB->UserManager->ListUsers();
//Create response array //Send response
$response = json_encode(["success" => true, "users" => $users, "process" => $data['process']]); 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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Return state
$bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,34 +1,16 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if parameters have been set //Check if parameters have been set
if (!$data['table']['name'] || !$data['variable']['name']) { if (!$data['table']['name'] || !$data['variable']['name'])
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_parameters", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_parameters", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if table exists //Check if table exists
if(!$LonaDB->TableManager->GetTable($data['table']['name'])) { if(!$LonaDB->TableManager->GetTable($data['table']['name']))
//Create response array return $this->Send($client, ["success" => false, "err" => "table_missing", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if user is allowed to read in desired table //Check if user is allowed to read in desired table
if (!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckPermission($data['login']['name'], "read")){ if (!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckPermission($data['login']['name'], "read"))
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_permissions", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_permissions", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Get variable value //Get variable value
$value = $LonaDB->TableManager->GetTable($data['table']['name'])->Get($data['variable']['name'], $data['login']['name']); $value = $LonaDB->TableManager->GetTable($data['table']['name'])->Get($data['variable']['name'], $data['login']['name']);
//Create response array //Create response array
@ -43,30 +25,33 @@ return new class {
//Check if there has been an error //Check if there has been an error
if (is_array($value) && isset($value['err'])) { if (is_array($value) && isset($value['err'])) {
$value['process'] = $data['process']; $value['process'] = $data['process'];
//Send response and close socket //Send response
socket_write($client, json_encode($value)); return $this->Send($client, $value);
socket_close($client);
return;
} }
//Check if variable exists //Check if variable exists
if ($value === null) { if ($value === null)
//Create response array
$response = [ $response = [
"success" => false, "success" => false,
"err" => "variable_undefined", "err" => "variable_undefined",
"process" => $data['process'] "process" => $data['process']
]; ];
//Send response and close socket else {
socket_write($client, json_encode($response));
socket_close($client);
return;
} else {
$response['variable']['value'] = $value; $response['variable']['value'] = $value;
$response['success'] = true; $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;
} }
}; };

View File

@ -1,33 +1,30 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if username has been set //Check if username has been set
if(!$data['permission']['user']) { if(!$data['permission']['user'])
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_user", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_user", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if user is allowed to remove permissions //Check if user is allowed to remove permissions
if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_remove")) { if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_remove"))
//Create response array return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Remove permission //Remove permission
$LonaDB->UserManager->RemovePermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); $LonaDB->UserManager->RemovePermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']);
//Create response array //Run plugin event
$response = json_encode(["success" => true, "process" => $data['process']]); $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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event //Return state
$LonaDB->PluginManager->RunEvent($data['login']['name'], "permissionRemove", [ "user" => $data['permission']['user'], "name" => $data['permission']['name'] ]); $bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -1,55 +1,36 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if parameters exist //Check if parameters exist
if (!$data['table']['name'] || !$data['variable']['name']) { if (!$data['table']['name'] || !$data['variable']['name'])
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_parameters", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_parameters", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if table exists //Check if table exists
if(!$LonaDB->TableManager->GetTable($data['table']['name'])) { if(!$LonaDB->TableManager->GetTable($data['table']['name']))
//Create response array return $this->Send($client, ["success" => false, "err" => "table_missing", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if user has read permissions on the desired table //Check if user has read permissions on the desired table
if (!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckPermission($data['login']['name'], "read")) { if (!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckPermission($data['login']['name'], "read"))
//Create response array return $this->Send($client, ["success" => false, "err" => "no_permission", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Check if variable exists //Check if variable exists
if(!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckVariable($data['variable']['name'], $data['login']['name'])){ if(!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckVariable($data['variable']['name'], $data['login']['name']))
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_variable", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_variable", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Delete variable //Delete variable
$LonaDB->TableManager->GetTable($data['table']['name'])->Delete($data['variable']['name'], $data['login']['name']); $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 //Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "valueRemove", [ "name" => $data['variable']['name'] ]); $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;
} }
}; };

View File

@ -1,49 +1,40 @@
<?php <?php
return new class { return new class {
public function run($LonaDB, $data, $client) : void { public function run($LonaDB, $data, $client) : bool {
//Check if parameter has been set //Check if parameter has been set
if (empty($data['table']['name']) || empty($data['variable']['name']) || empty($data['variable']['value'])) { if (empty($data['table']['name']) || empty($data['variable']['name']) || empty($data['variable']['value']))
//Create response array return $this->Send($client, ["success" => false, "err" => "bad_table_name", "process" => $data['process']]);
$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;
}
//Grab table name //Grab table name
$tableName = $data['table']['name']; $tableName = $data['table']['name'];
//Check if table exists //Check if table exists
if (!$LonaDB->TableManager->GetTable($tableName)) { if (!$LonaDB->TableManager->GetTable($tableName))
//Create response array return $this->Send($client, ["success" => false, "err" => "table_missing", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Get table instance //Get table instance
$table = $LonaDB->TableManager->GetTable($tableName); $table = $LonaDB->TableManager->GetTable($tableName);
//Check if user has write permissions on desired table //Check if user has write permissions on desired table
if (!$table->CheckPermission($data['login']['name'], "write")) { if (!$table->CheckPermission($data['login']['name'], "write"))
//Create response array return $this->Send($client, ["success" => false, "err" => "missing_permissions", "process" => $data['process']]);
$response = json_encode(["success" => false, "err" => "missing_permissions", "process" => $data['process']]);
//Send response and close socket
socket_write($client, $response);
socket_close($client);
return;
}
//Prepare variable //Prepare variable
$variableName = $data['variable']['name']; $variableName = $data['variable']['name'];
$variableValue = $data['variable']['value']; $variableValue = $data['variable']['value'];
//Push to table //Push to table
$table->Set($variableName, $variableValue, $data['login']['name']); $table->Set($variableName, $variableValue, $data['login']['name']);
//Create response array //Run plugin event
$response = json_encode(["success" => true, "process" => $data['process']]); $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 //Send response and close socket
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event //Return state
$LonaDB->PluginManager->RunEvent($data['login']['name'], "valueSet", [ "name" => $data['variable']['name'], "value" => $data['variable']['value'] ]); $bool = false;
if($responseArray['success']) $bool = true;
return $bool;
} }
}; };

View File

@ -122,7 +122,7 @@ class Table{
public function AddPermission(string $name, string $permission, string $user) : bool { public function AddPermission(string $name, string $permission, string $user) : bool {
//Check if user is table owner/administrator, global administrator or superuser //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 //Add permission and save
$this->permissions[$name][$permission] = true; $this->permissions[$name][$permission] = true;
@ -132,7 +132,7 @@ class Table{
public function RemovePermission(string $name, string $permission, string $user) : bool { public function RemovePermission(string $name, string $permission, string $user) : bool {
//Check if user is table owner/administrator, global administrator or superuser //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 //Remove permission and save
unset($this->permissions[$name][$permission]); unset($this->permissions[$name][$permission]);

View File

@ -77,7 +77,7 @@ class TableManager{
public function CreateTable(string $name, string $owner) : bool { public function CreateTable(string $name, string $owner) : bool {
//Check if there already is a table with the exact same name //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 //Create table instance
$this->Tables[$name] = new Table($this->LonaDB, true, $name, $owner); $this->Tables[$name] = new Table($this->LonaDB, true, $name, $owner);
@ -86,7 +86,7 @@ class TableManager{
public function DeleteTable(string $name, string $user) : bool { public function DeleteTable(string $name, string $user) : bool {
//Check if the table exists //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 //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; if($user !== $this->Tables[$name]->GetOwner() && $this->LonaDB->UserManager->GetRole($user) !== "Administrator" && $this->LonaDB->UserManager->GetRole($user) !== "Superuser") return false;

View File

@ -49,9 +49,7 @@ class UserManager{
//If username is root, check for the root password //If username is root, check for the root password
if($name === "root" && $password === $this->LonaDB->config["root"]) return true; if($name === "root" && $password === $this->LonaDB->config["root"]) return true;
//Check if the user exists //Check if the user exists
if(!$this->Users[$name]) { if(!$this->CheckUsers($name)) return false;
return false;
}
//Check if the password is correct //Check if the password is correct
if($this->Users[$name]["password"] !== $password) return false; if($this->Users[$name]["password"] !== $password) return false;
//All checks successfull //All checks successfull