diff --git a/build/build-phar.php b/build/build-phar.php index 15853da..6d3f0fe 100644 --- a/build/build-phar.php +++ b/build/build-phar.php @@ -35,7 +35,7 @@ if(trim(strtolower($line)) === 'no' || trim(strtolower($line)) === "n"){ $start = time(); builderLog("[COMPOSER] Running 'composer install'"); -exec("cd src ; ./composer.phar install"); +exec("cd src ; printf '\n' | ./composer.phar install"); if(file_exists($path."/".$filename."-".$version.".phar")){ unlink($path."/".$filename."-".$version.".phar"); @@ -64,7 +64,7 @@ try { builderLog("[INFO] Phar archive created successfully"); builderLog("[RUN] Generating run script"); - file_put_contents("./build/run-phar.sh", 'cd '.$path.' ; printf "test\n" php -dextension=openswoole.so '.$filename.'-'.$version.'.phar'); + file_put_contents("./build/run-phar.sh", 'cd '.$path.' ; printf "test\n" | php -dextension=openswoole.so '.$filename.'-'.$version.'.phar'); builderLog("[RUN] Adding Permissions to run script"); exec("chmod 777 ./build/run-phar.sh"); diff --git a/build/run-phar.sh b/build/run-phar.sh index 875e8a9..22d07fc 100755 --- a/build/run-phar.sh +++ b/build/run-phar.sh @@ -1 +1 @@ -cd build/debug ; printf "test\n" | php -dextension=openswoole.so LonaDB-4.0.0-beta.phar \ No newline at end of file +cd build/release ; printf "test\n" | php -dextension=openswoole.so LonaDB-4.0.0-stable.phar \ No newline at end of file diff --git a/build_config.json b/build_config.json index 3f11d88..c377240 100644 --- a/build_config.json +++ b/build_config.json @@ -1,6 +1,6 @@ { "filename": "LonaDB", - "version": "4.0.0-beta", + "version": "4.0.0-stable", "path": "build", - "debug": true + "debug": false } \ No newline at end of file diff --git a/src/LonaDB/Actions/add_permission.php b/src/LonaDB/Actions/add_permission.php new file mode 100644 index 0000000..ac99663 --- /dev/null +++ b/src/LonaDB/Actions/add_permission.php @@ -0,0 +1,25 @@ + false, "err" => "missing_user", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + if(!$lona->UserManager->CheckPermission($data['login']['name'], "permission_add")) { + $lona->Logger->Error("User '".$data['login']['name']."' tried to add a permission without permission"); + $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + $lona->UserManager->AddPermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); + $response = json_encode(["success" => true, "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + } +}; \ No newline at end of file diff --git a/src/LonaDB/Actions/check_password.php b/src/LonaDB/Actions/check_password.php new file mode 100644 index 0000000..449f2c2 --- /dev/null +++ b/src/LonaDB/Actions/check_password.php @@ -0,0 +1,26 @@ + false, "err" => "missing_arguments", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + if(!$lona->UserManager->CheckPermission($data['login']['name'], "password_check")) { + $lona->Logger->Error("User '".$data['login']['name']."' tried to check a password without permission"); + $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + $checkPassword = $lona->UserManager->CheckPassword($data['checkPass']['name'], $data['checkPass']['pass']); + + $response = json_encode(["success" => true, "passCheck" => $checkPassword, "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + } +}; \ No newline at end of file diff --git a/src/LonaDB/Actions/check_permission.php b/src/LonaDB/Actions/check_permission.php new file mode 100644 index 0000000..c17a147 --- /dev/null +++ b/src/LonaDB/Actions/check_permission.php @@ -0,0 +1,26 @@ + false, "err" => "missing_arguments", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + if(!$lona->UserManager->CheckPermission($data['login']['name'], "permission_check")) { + $lona->Logger->Error("User '".$data['login']['name']."' tried to check a permission without permission"); + $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + $permission = $lona->UserManager->CheckPermission($data['permission']['user'], $data['permission']['name']); + + $response = json_encode(["success" => true, "result" => $permission, "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + } +}; \ No newline at end of file diff --git a/src/LonaDB/Actions/create_table.php b/src/LonaDB/Actions/create_table.php index d5f16aa..2965fa0 100644 --- a/src/LonaDB/Actions/create_table.php +++ b/src/LonaDB/Actions/create_table.php @@ -1,9 +1,9 @@ UserManager->CheckPermission($data['login']['name'], "table_create")) { - $lona->Logger->Error("User '".$data['login']['name']."' tried to create a Table without permission"); + $lona->Logger->Error("User '".$data['login']['name']."' tried to create a table without permission"); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); $server->send($fd, $response); $server->close($fd); diff --git a/src/LonaDB/Actions/create_user.php b/src/LonaDB/Actions/create_user.php new file mode 100644 index 0000000..54dd6b9 --- /dev/null +++ b/src/LonaDB/Actions/create_user.php @@ -0,0 +1,37 @@ + false, "err" => "missing_arguments", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + if(!$lona->UserManager->CheckPermission($data['login']['name'], "user_create")){ + $lona->Logger->Error("User '".$data['login']['name']."' tried to create a user without permission"); + $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + + if($lona->UserManager->CheckUser($data['user']['name'])){ + $response = json_encode(["success" => false, "err" => "user_exist", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + $result = $lona->UserManager->CreateUser($data['user']['name'], $data['user']['password']); + + $response = json_encode(["success" => $result, "process" => $data['process']]); + + if(!$result) $response['err'] = "user_exists"; + + $server->send($fd, $response); + $server->close($fd); + } +}; \ No newline at end of file diff --git a/src/LonaDB/Actions/delete_table.php b/src/LonaDB/Actions/delete_table.php new file mode 100644 index 0000000..8cc1a68 --- /dev/null +++ b/src/LonaDB/Actions/delete_table.php @@ -0,0 +1,47 @@ +UserManager->CheckPermission($data['login']['name'], "table_delete")) { + $lona->Logger->Error("User '".$data['login']['name']."' tried to delete a table without permission"); + $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + if (empty($data['table']['name'])) { + $response = json_encode(["success" => false, "err" => "bad_table_name", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + if(!$lona->TableManager->GetTable($data['table']['name'])) { + $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + if($lona->TableManager->GetTable($data['table']['name'])->GetOwner() !== $data['login']['name']) { + $response = json_encode(["success" => false, "err" => "not_table_owner", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + $table = $lona->TableManager->DeleteTable($data['table']['name'], $data['login']['name']); + + if(!$table){ + $response = json_encode(["success" => false, "err" => "table_doesnt_exist", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + $response = json_encode(["success" => true, "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + } +}; diff --git a/src/LonaDB/Actions/delete_user.php b/src/LonaDB/Actions/delete_user.php new file mode 100644 index 0000000..eec368f --- /dev/null +++ b/src/LonaDB/Actions/delete_user.php @@ -0,0 +1,36 @@ + false, "err" => "missing_arguments", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + if(!$lona->UserManager->CheckPermission($data['login']['name'], "user_delete")){ + $lona->Logger->Error("User '".$data['login']['name']."' tried to delete a user without permission"); + $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + if(!$lona->UserManager->CheckUser($data['user'])){ + $response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + $result = $lona->UserManager->DeleteUser($data['user']['name'], $data['user']['password']); + + $response = json_encode(["success" => $result, "process" => $data['process']]); + + if(!$result) $response['err'] = "user_doesnt_exist"; + + $server->send($fd, $response); + $server->close($fd); + } +}; \ No newline at end of file diff --git a/src/LonaDB/Actions/eval.php b/src/LonaDB/Actions/eval.php new file mode 100644 index 0000000..a50cec5 --- /dev/null +++ b/src/LonaDB/Actions/eval.php @@ -0,0 +1,25 @@ + false, "err" => "not_root", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + } + + $evalFunc = "function evaluate_".$data['process']."(\$lona) { "; + $evalFunc .= $data['function']; + $evalFunc .= " }"; + + eval($evalFunc); + + eval("\$answer = evaluate_".$data['process']."(\$lonaEval);"); + + echo $answer; + + $response = json_encode(["success" => true, "response" => $answer, "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + } +}; diff --git a/src/LonaDB/Actions/get_permissions_raw.php b/src/LonaDB/Actions/get_permissions_raw.php new file mode 100644 index 0000000..d8149c9 --- /dev/null +++ b/src/LonaDB/Actions/get_permissions_raw.php @@ -0,0 +1,19 @@ +UserManager->CheckUser($data['user'])){ + $response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + $permissions = $lona->UserManager->GetPermissions($data['user']); + + if($permissions === []) $response = '{ "success": true, "list": {}, "process": "'.$data['process'].' }'; + else $response = json_encode(["success" => true, "list" => $permissions, "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + } +}; diff --git a/src/LonaDB/Actions/get_table_data.php b/src/LonaDB/Actions/get_table_data.php new file mode 100644 index 0000000..f3c5ef2 --- /dev/null +++ b/src/LonaDB/Actions/get_table_data.php @@ -0,0 +1,26 @@ +TableManager->GetTable($data['table'])) { + $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + if(!$lona->TableManager->GetTable($data['table'])->CheckPermission($data['login']['name'], "read")) { + $response = json_encode(["success" => false, "err" => "missing_permissions", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + $tableData = $lona->TableManager->GetData(); + + if($tableData === []) $response = '{ "success": true, "data": {}, "process": "'.$data['process'].' }'; + else $response = json_encode(["success" => true, "data" => $tableData, "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + } +}; diff --git a/src/LonaDB/Actions/get_tables.php b/src/LonaDB/Actions/get_tables.php new file mode 100644 index 0000000..06f056d --- /dev/null +++ b/src/LonaDB/Actions/get_tables.php @@ -0,0 +1,27 @@ +UserManager->CheckPermission($data['login']['name'], "get_tables")){ + $response = json_encode(["success" => false, "err" => "missing_permission", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + } + + if(!$lona->UserManager->CheckUser($data['user'])){ + $response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + $tables = $lona->TableManager->ListTables($data['user']); + + $response = json_encode(["success" => true, "tables" => $tables, "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + } +}; diff --git a/src/LonaDB/Actions/get_users.php b/src/LonaDB/Actions/get_users.php new file mode 100644 index 0000000..abf8906 --- /dev/null +++ b/src/LonaDB/Actions/get_users.php @@ -0,0 +1,18 @@ +UserManager->CheckPermission($data['login']['name'], "get_users")){ + $response = json_encode(["success" => false, "err" => "missing_permission", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + $users = $lona->UserManager->ListUsers(); + + $response = json_encode(["success" => true, "users" => $users, "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + } +}; diff --git a/src/LonaDB/Actions/get_variable.php b/src/LonaDB/Actions/get_variable.php index 0e9129b..a6007ac 100644 --- a/src/LonaDB/Actions/get_variable.php +++ b/src/LonaDB/Actions/get_variable.php @@ -1,7 +1,7 @@ false, "err" => "bad_table_name", "process" => $data['process']]); $server->send($fd, $response); diff --git a/src/LonaDB/Actions/remove_permission.php b/src/LonaDB/Actions/remove_permission.php new file mode 100644 index 0000000..31dcbbe --- /dev/null +++ b/src/LonaDB/Actions/remove_permission.php @@ -0,0 +1,25 @@ + false, "err" => "missing_user", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + if(!$lona->UserManager->CheckPermission($data['login']['name'], "permission_remove")) { + $lona->Logger->Error("User '".$data['login']['name']."' tried to add a permission without permission"); + $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + return; + } + + $lona->UserManager->RemovePermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); + $response = json_encode(["success" => true, "process" => $data['process']]); + $server->send($fd, $response); + $server->close($fd); + } +}; \ No newline at end of file diff --git a/src/LonaDB/Actions/remove_variable.php b/src/LonaDB/Actions/remove_variable.php index d2c4f95..34bc841 100644 --- a/src/LonaDB/Actions/remove_variable.php +++ b/src/LonaDB/Actions/remove_variable.php @@ -1,7 +1,7 @@ false, "err" => "bad_table_name", "process" => $data['process']]); $server->send($fd, $response); diff --git a/src/LonaDB/Actions/set_variable.php b/src/LonaDB/Actions/set_variable.php index 2eadd44..0c91bae 100644 --- a/src/LonaDB/Actions/set_variable.php +++ b/src/LonaDB/Actions/set_variable.php @@ -1,7 +1,7 @@ false, "err" => "bad_table_name", "process" => $data['process']]); $server->send($fd, $response); diff --git a/src/LonaDB/Logger.php b/src/LonaDB/Logger.php index 795741b..798080c 100644 --- a/src/LonaDB/Logger.php +++ b/src/LonaDB/Logger.php @@ -14,57 +14,57 @@ class Logger{ $this->LonaDB = $lonaDB; } - private function log(string $message){ + private function log(string $message) : void { echo($message); if($this->LonaDB->config["logging"]) fwrite($this->LogFile, $message); } - public function LoadLogger(){ + public function LoadLogger() : void { if($this->LonaDB->config["logging"]) $this->LogFile = fopen('log.txt','a'); } - public function Warning($msg){ + public function Warning($msg) : void { $log = date("Y-m-d h:i:s")." [WARNING] ".$msg."\n"; $this->log($log); } - public function Error($msg){ + public function Error($msg) : void { $log = date("Y-m-d h:i:s")." [ERROR] ".$msg."\n"; $this->log($log); } - public function Create($msg){ + public function Create($msg) : void { $log = date("Y-m-d h:i:s")." [CREATE] ".$msg."\n"; $this->log($log); } - public function Load($msg){ + public function Load($msg) : void { $log = date("Y-m-d h:i:s")." [LOAD] ".$msg."\n"; $this->log($log); } - public function Info($msg){ + public function Info($msg) : void { $log = date("Y-m-d h:i:s")." [INFO] ".$msg."\n"; $this->log($log); } - public function Table($msg){ + public function Table($msg) : void { $log = date("Y-m-d h:i:s")." [TABLE] ".$msg."\n"; $this->log($log); } - public function User($msg){ + public function User($msg) : void { $log = date("Y-m-d h:i:s")." [USER] ".$msg."\n"; $this->log($log); } - public function InfoCache($msg){ + public function InfoCache($msg) : void { $log = date("Y-m-d h:i:s")." [INFO] ".$msg."\n"; echo($log); $this->infoCache = $this->infoCache.$log; } - public function DropCache(){ + public function DropCache() : void { if($this->LonaDB->config["logging"]) fwrite($this->LogFile, $this->infoCache); } } \ No newline at end of file diff --git a/src/LonaDB/LonaDB.php b/src/LonaDB/LonaDB.php index fac59c1..f309e75 100644 --- a/src/LonaDB/LonaDB.php +++ b/src/LonaDB/LonaDB.php @@ -74,7 +74,7 @@ class LonaDB { } } - private function setup() { + private function setup() : void { $this->Logger->InfoCache("Invalid or missing config. Starting setup."); echo "Database port:\n"; $portHandle = fopen ("php://stdin","r"); diff --git a/src/LonaDB/Server.php b/src/LonaDB/Server.php index 9dea3ab..903680d 100644 --- a/src/LonaDB/Server.php +++ b/src/LonaDB/Server.php @@ -27,7 +27,7 @@ class Server { $this->startSocket(); } - private function loadActions() { + private function loadActions() : void { $actionFiles = scandir(__DIR__ . "/Actions/"); foreach ($actionFiles as $file) { if (pathinfo($file, PATHINFO_EXTENSION) === 'php') { @@ -38,7 +38,7 @@ class Server { } } - public function startSocket() { + public function startSocket() : void { $this->server = new TCPServer($this->address, $this->port); $this->server->on('start', function ($server) @@ -53,7 +53,7 @@ class Server { $this->server->start(); } - private function handleData(string $dataString, TCPServer $server, int $fd) { + private function handleData(string $dataString, TCPServer $server, int $fd) : void { try { $data = json_decode($dataString, true); @@ -64,18 +64,21 @@ class Server { if (!$login) { $response = json_encode(["success" => false, "err" => "login_error", "process" => $data['process']]); $server->send($fd, $response); + $server->close($fd); return; } if (!$data['process']) { $response = json_encode(["success" => false, "err" => "bad_process_id", "process" => $data['process']]); $server->send($fd, $response); + $server->close($fd); return; } if (!$this->actions[$data['action']]) { $response = json_encode(["success" => false, "err" => "action_not_found"]); $server->send($fd, $response); + $server->close($fd); return; } diff --git a/src/LonaDB/Tables/Table.php b/src/LonaDB/Tables/Table.php index e92ff70..11ef898 100644 --- a/src/LonaDB/Tables/Table.php +++ b/src/LonaDB/Tables/Table.php @@ -43,48 +43,55 @@ class Table{ $this->Name = $this->file; } - public function GetOwner(string $user = ""){ + public function GetData() : array { + return $this->data; + } + + public function GetOwner(string $user = "") : string { if($user === "") return $this->Owner; $this->LonaDB->Logger->Table("(".$this->file.") User '".$user."' is trying to get the owner name."); - if($this->CheckPermission($user, "read")) return; + return $this->Owner; } - public function SetOwner(string $name, string $user){ + public function SetOwner(string $name, string $user) : bool { $this->LonaDB->Logger->Table("(".$this->file.") User '".$user."' is trying to change the owner to '".$name."'"); - if($user !== "root" && $user !== $this->Owner) return; + if($user !== "root" && $user !== $this->Owner) return false; $this->Owner = $name; $this->Save(); + return true; } - public function Set(string $name, mixed $value, string $user){ + public function Set(string $name, mixed $value, string $user) : bool { $this->LonaDB->Logger->Table("(".$this->file.") User '".$user."' is trying to set the variable '".$name."' to '".strval($value)."'"); - if(!$this->CheckPermission($user, "write")) return; + if(!$this->CheckPermission($user, "write")) return false; $this->data[$name] = $value; $this->Save(); $this->LonaDB->Logger->Table("(".$this->file.") User '".$user."' set the variable '".$name."' to '".strval($value)."'"); + return true; } - public function Delete(string $name, string $user){ + public function Delete(string $name, string $user) : bool { $this->LonaDB->Logger->Table("(".$this->file.") User '".$user."' is trying to delete the variable '".$name."'"); - if(!$this->CheckPermission($user, "write")) return; + if(!$this->CheckPermission($user, "write")) return false; unset($this->data[$name]); $this->Save(); $this->LonaDB->Logger->Table("(".$this->file.") User '".$user."' deleted the variable '".$name."'"); + return true; } - public function Get(string $name, string $user){ + public function Get(string $name, string $user) : mixed { $this->LonaDB->Logger->Table("(".$this->file.") User '".$user."' is trying to get the variable '".$name."'"); if(!$this->CheckPermission($user, "read")) return null; return $this->data[$name]; } - public function CheckPermission(string $user, string $permission){ + public function CheckPermission(string $user, string $permission) : bool { $this->LonaDB->Logger->Table("(".$this->file.") Checkin permission '".$permission."' for user '".$user."'"); if($user === $this->Owner) return true; @@ -94,7 +101,7 @@ class Table{ return true; } - public function CheckVariable(string $name, string $user){ + public function CheckVariable(string $name, string $user) : bool { $this->LonaDB->Logger->Table("(".$this->file.") Checkin if variable '".$name."' exists for user '".$user."'"); if(!$this->CheckPermission($user, 'read')) return false; @@ -103,26 +110,34 @@ class Table{ return true; } - public function AddPermission(string $name, string $permission, string $user){ - if($user !== $this->Owner && !$this->permissions[$user]["admin"]) return - $this->LonaDB->Logger->Table("(".$this->file.") Missing permission! Adding permission '".$permission."' for user '".$name."', requested by '".$user."'"); - - if($user !== $this->Owner && $permission === "admin") return - $this->LonaDB->Logger->Table("(".$this->file.") Not the Owner! Adding permission '".$permission."' for user '".$name."', requested by '".$user."'"); + public function AddPermission(string $name, string $permission, string $user) : bool { + if($user !== $this->Owner && !$this->permissions[$user]["admin"]) { + $this->LonaDB->Logger->Table("(".$this->file.") Missing permission! Adding permission '".$permission."' for user '".$name."', requested by '".$user."'"); + return false; + } + if($user !== $this->Owner && $permission === "admin") { + $this->LonaDB->Logger->Table("(".$this->file.") Not the Owner! Adding permission '".$permission."' for user '".$name."', requested by '".$user."'"); + return false; + } $this->LonaDB->Logger->Table("(".$this->file.") Adding permission '".$permission."' for user '".$name."', requested by '".$user."'"); $this->permissions[$name][$permission] = true; $this->Save(); + return true; } - public function RemovePermission(string $name, string $permission, string $user){ - if($user !== $this->Owner && !$this->permissions[$user]["admin"]) return - $this->LonaDB->Logger->Table("(".$this->file.") Missing permission! Removing permission '".$permission."' for user '".$name."', requested by '".$user."'"); - - if($user !== $this->Owner && $permission === "admin") return - $this->LonaDB->Logger->Table("(".$this->file.") Not the Owner! Removing permission '".$permission."' for user '".$name."', requested by '".$user."'"); + public function RemovePermission(string $name, string $permission, string $user) : bool { + if($user !== $this->Owner && !$this->permissions[$user]["admin"]) { + $this->LonaDB->Logger->Table("(".$this->file.") Missing permission! Removing permission '".$permission."' for user '".$name."', requested by '".$user."'"); + return false; + } + if($user !== $this->Owner && $permission === "admin") { + $this->LonaDB->Logger->Table("(".$this->file.") Not the Owner! Removing permission '".$permission."' for user '".$name."', requested by '".$user."'"); + return galse; + } + $this->LonaDB->Logger->Table("(".$this->file.") Removing permission '".$permission."' for user '".$name."', requested by '".$user."'"); unset($this->permissions[$name][$permission]); diff --git a/src/LonaDB/Tables/TableManager.php b/src/LonaDB/Tables/TableManager.php index 7249d23..6d2640f 100644 --- a/src/LonaDB/Tables/TableManager.php +++ b/src/LonaDB/Tables/TableManager.php @@ -30,13 +30,14 @@ class TableManager{ } } - public function GetTable(string $name){ + public function GetTable(string $name) : mixed { if(!$this->Tables[$name]) return false; return $this->Tables[$name]; } - public function ListTables(string $user = ""){ + public function ListTables(string $user = "") : array { $tables = array(); + if($user !== ""){ foreach($this->Tables as $table){ if($table->CheckPermission($user, "write")) array_push($tables, $table->Name); @@ -52,7 +53,7 @@ class TableManager{ return $tables; } - public function CreateTable(string $name, string $owner){ + public function CreateTable(string $name, string $owner) : bool { $this->LonaDB->Logger->Table("Trying to create table '" . $name . "', owned by user '" . $owner . "'"); if($this->Tables[$name]) { $this->LonaDB->Logger->Error("Table '" . $name . "' already exists"); @@ -63,18 +64,21 @@ class TableManager{ return true; } - public function DeleteTable(string $name, string $user){ + public function DeleteTable(string $name, string $user) : bool { $this->LonaDB->Logger->Table("Trying to delete table '" . $name . "', requested by user '" . $user . "'"); if(!$this->Tables[$name]) { $this->LonaDB->Logger->Error("Table '" . $name . "' doesn't exist"); - return; + return false; } - if($user !== $this->Tables[$name]->GetOwner()) return - $this->LonaDB->Logger->Table("Not the owner! Trying to delete table '" . $name . "', requested by user '" . $user . "'"); + if($user !== $this->Tables[$name]->GetOwner()) { + $this->LonaDB->Logger->Table("Not the owner! Trying to delete table '" . $name . "', requested by user '" . $user . "'"); + return false; + } unlink("data/".$name.".json"); unset($this->Tables[$name]); $this->LonaDB->Logger->Table("Deleted table '" . $name . "', requested by user '" . $user . "'"); + return true; } } \ No newline at end of file diff --git a/src/LonaDB/Users/UserManager.php b/src/LonaDB/Users/UserManager.php index 890727a..819e52c 100644 --- a/src/LonaDB/Users/UserManager.php +++ b/src/LonaDB/Users/UserManager.php @@ -30,7 +30,7 @@ class UserManager{ $this->Users = json_decode(openssl_decrypt($parts[0], AES_256_CBC, $this->LonaDB->config["encryptionKey"], 0, base64_decode($parts[1])), true); } - public function CheckPassword(string $name, string $password){ + public function CheckPassword(string $name, string $password) : bool { $this->LonaDB->Logger->User("Trying to check password for user '" . $name . "'"); if($name === "root" && $password === $this->LonaDB->config["root"]) return true; @@ -44,8 +44,24 @@ class UserManager{ return true; } - public function CreateUser(string $name, string $password){ - if($name === "root") return; + public function CheckUser(string $name) : bool { + if($name === "root") return true; + if(!$this->Users[$name]) return false; + return true; + } + + public function ListUsers() : array { + $users = []; + + foreach($this->Users as $name => $user){ + array_push($users, $name); + } + + return users; + } + + public function CreateUser(string $name, string $password) : bool { + if($name === "root") return false; $this->LonaDB->Logger->User("Trying to create user '" . $name . "'"); if($this->Users[$name]) { $this->LonaDB->Logger->Error("User '" . $name . "' already exists"); @@ -55,33 +71,41 @@ class UserManager{ $this->Users[$name] = array( "role" => "user", "password" => $password, - "permissions" => [] + "permissions" => [ + "default" => true + ] ); $this->LonaDB->Logger->User("User '" . $name . "' has been created"); $this->Save(); + return true; } - public function DeleteUser(string $name){ - if($name === "root") return; + public function DeleteUser(string $name) : bool { + if($name === "root") return false; $this->LonaDB->Logger->User("Trying to delete user '" . $name . "'"); if(!$this->Users[$name]) { $this->LonaDB->Logger->Error("User '" . $name . "' doesn't exist"); - return; + return false; } unset($this->Users[$name]); $this->LonaDB->Logger->User("Deleted user '" . $name . "'"); $this->Save(); - } - - public function CheckPermission(string $name){ return true; } - public function Save(){ + public function CheckPermission(string $name, string $permission, string $user = "") : bool { + return true; + } + + public function GetPermissions(string $name) : array { + return $this->Users[$name]['permissions']; + } + + public function Save() : void { $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length(AES_256_CBC)); $encrypted = openssl_encrypt(json_encode($this->Users), AES_256_CBC, $this->LonaDB->config["encryptionKey"], 0, $iv);