Release 1 upload

This commit is contained in:
Collin 2024-02-02 23:59:53 +00:00
parent af6b95d2db
commit ecf99ca0bc
25 changed files with 449 additions and 66 deletions

View File

@ -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");

View File

@ -1 +1 @@
cd build/debug ; printf "test\n" | php -dextension=openswoole.so LonaDB-4.0.0-beta.phar
cd build/release ; printf "test\n" | php -dextension=openswoole.so LonaDB-4.0.0-stable.phar

View File

@ -1,6 +1,6 @@
{
"filename": "LonaDB",
"version": "4.0.0-beta",
"version": "4.0.0-stable",
"path": "build",
"debug": true
"debug": false
}

View File

@ -0,0 +1,25 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) : void {
if(!$data['permission']['user']) {
$response = json_encode(["success" => 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);
}
};

View File

@ -0,0 +1,26 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) : void {
if(!$data['checkPass']['name'] || !$data['checkPass']['pass']) {
$response = json_encode(["success" => 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);
}
};

View File

@ -0,0 +1,26 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) : void {
if(!$data['permission'] || !$data['permission']['name'] || !$data['permission']['user']){
$response = json_encode(["success" => 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);
}
};

View File

@ -1,9 +1,9 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) {
public function run($lona, $data, $server, $fd) : void {
if (!$lona->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);

View File

@ -0,0 +1,37 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) : void {
if(!$data['user']['name'] || !$data['user']['password']){
$response = json_encode(["success" => 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);
}
};

View File

@ -0,0 +1,47 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) : void {
if (!$lona->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);
}
};

View File

@ -0,0 +1,36 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) : void {
if(!$data['user']['name']){
$response = json_encode(["success" => 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);
}
};

View File

@ -0,0 +1,25 @@
<?php
return new class {
public function run($lonaEval, $data, $server, $fd) : void {
if($data['login']['name'] !== 'root') {
$response = json_encode(["success" => false, "err" => "not_root", "process" => $data['process']]);
$server->send($fd, $response);
$server->close($fd);
}
$evalFunc = "function evaluate_".$data['process']."(\$lona) { ";
$evalFunc .= $data['function'];
$evalFunc .= " }";
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);
}
};

View File

@ -0,0 +1,19 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) : void {
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;
}
$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);
}
};

View File

@ -0,0 +1,26 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) : void {
if(!$lona->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);
}
};

View File

@ -0,0 +1,27 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) : void {
if($data['user'] !== $data['login']['name']){
if(!$lona->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);
}
};

View File

@ -0,0 +1,18 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) : void {
if(!$lona->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);
}
};

View File

@ -1,7 +1,7 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) {
public function run($lona, $data, $server, $fd) : void {
if (!$data['table']['name']) {
$response = json_encode(["success" => false, "err" => "bad_table_name", "process" => $data['process']]);
$server->send($fd, $response);

View File

@ -0,0 +1,25 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) : void {
if(!$data['permission']['user']) {
$response = json_encode(["success" => 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);
}
};

View File

@ -1,7 +1,7 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) {
public function run($lona, $data, $server, $fd) : void {
if (!$data['table']['name']) {
$response = json_encode(["success" => false, "err" => "bad_table_name", "process" => $data['process']]);
$server->send($fd, $response);

View File

@ -1,7 +1,7 @@
<?php
return new class {
public function run($lona, $data, $server, $fd) {
public function run($lona, $data, $server, $fd) : void {
if(!$data['table']['name']) {
$response = json_encode(["success" => false, "err" => "bad_table_name", "process" => $data['process']]);
$server->send($fd, $response);

View File

@ -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);
}
}

View File

@ -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");

View File

@ -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;
}

View File

@ -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]);

View File

@ -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;
}
}

View File

@ -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);