diff --git a/.gitignore b/.gitignore index f2d877a..2b336a9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -build/run-phar.sh -build/debug/* -build/release/* -src/vendor/ \ No newline at end of file +build/* +src/vendor/ +run +build-phar \ No newline at end of file diff --git a/build/build-phar.php b/build/build-phar.php index 0fdddfd..b26cd5e 100644 --- a/build/build-phar.php +++ b/build/build-phar.php @@ -66,7 +66,10 @@ try { $phar->setAlias($filename."-".$version.".phar"); builderLog("[BUILD] Set signature algorithm"); - $phar->setSignatureAlgorithm(Phar::SHA512); + $phar->setSignatureAlgorithm(Phar::SHA1); + + builderLog("[BUILD] Compress files"); + $phar->compressFiles(Phar::GZ); builderLog("[BUILD] Saving the new Phar archive"); $phar->stopBuffering(); diff --git a/build/run-phar.sh b/build/run-phar.sh index 2a3068b..da7f6a2 100755 --- a/build/run-phar.sh +++ b/build/run-phar.sh @@ -1 +1 @@ -cd build/release ; printf "test\n" | php -dphar.readonly=0 LonaDB-4.5.0-stable.phar \ No newline at end of file +cd build/debug ; printf "test\n" | php -dphar.readonly=0 LonaDB-4.6.0-debug.phar \ No newline at end of file diff --git a/build_config.json b/build_config.json index edb179a..8b7a321 100644 --- a/build_config.json +++ b/build_config.json @@ -1,6 +1,6 @@ { "filename": "LonaDB", - "version": "4.5.0-stable", + "version": "4.6.0-debug", "path": "build", - "debug": false + "debug": true } \ No newline at end of file diff --git a/src/LonaDB/Actions/add_function.php b/src/LonaDB/Actions/add_function.php index b79cd9e..206503b 100644 --- a/src/LonaDB/Actions/add_function.php +++ b/src/LonaDB/Actions/add_function.php @@ -14,5 +14,8 @@ return new class { $response = json_encode(["success" => true, "process" => $data['process']]); socket_write($client, $response); socket_close($client); + + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "functionCreate", [ "name" => $data['function']['name'], "content" => $data['function']['content'] ]); } }; diff --git a/src/LonaDB/Actions/add_permission.php b/src/LonaDB/Actions/add_permission.php index 2ecd60e..82986d3 100644 --- a/src/LonaDB/Actions/add_permission.php +++ b/src/LonaDB/Actions/add_permission.php @@ -1,7 +1,7 @@ false, "err" => "missing_user", "process" => $data['process']]); socket_write($client, $response); @@ -9,17 +9,20 @@ return new class { return; } - if(!$lona->UserManager->CheckPermission($data['login']['name'], "permission_add")) { - $lona->Logger->Error("User '".$data['login']['name']."' tried to add a permission without permission"); + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_add")) { + $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to add a permission without permission"); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - $lona->UserManager->AddPermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); + $LonaDB->UserManager->AddPermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); $response = json_encode(["success" => true, "process" => $data['process']]); socket_write($client, $response); socket_close($client); + + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "permissionAdd", [ "user" => $data['permission']['user'], "name" => $data['permission']['name'] ]); } }; diff --git a/src/LonaDB/Actions/check_password.php b/src/LonaDB/Actions/check_password.php index 4306d83..b5d3da1 100644 --- a/src/LonaDB/Actions/check_password.php +++ b/src/LonaDB/Actions/check_password.php @@ -1,7 +1,7 @@ false, "err" => "missing_arguments", "process" => $data['process']]); socket_write($client, $response); @@ -15,15 +15,15 @@ return new class { $ciphertext = hex2bin($parts[1]); $password = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); - if(!$lona->UserManager->CheckPermission($data['login']['name'], "password_check")) { - $lona->Logger->Error("User '".$data['login']['name']."' tried to check a password without permission"); + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "password_check")) { + $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to check a password without permission"); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - $checkPassword = $lona->UserManager->CheckPassword($data['checkPass']['name'], $password); + $checkPassword = $LonaDB->UserManager->CheckPassword($data['checkPass']['name'], $password); $response = json_encode(["success" => true, "passCheck" => $checkPassword, "process" => $data['process']]); socket_write($client, $response); diff --git a/src/LonaDB/Actions/check_permission.php b/src/LonaDB/Actions/check_permission.php index 0087ea8..4202a50 100644 --- a/src/LonaDB/Actions/check_permission.php +++ b/src/LonaDB/Actions/check_permission.php @@ -1,7 +1,7 @@ false, "err" => "missing_arguments", "process" => $data['process']]); socket_write($client, $response); @@ -9,15 +9,15 @@ return new class { return; } - if(!$lona->UserManager->CheckPermission($data['login']['name'], "permission_check")) { - $lona->Logger->Error("User '".$data['login']['name']."' tried to check a permission without permission"); + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_check")) { + $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to check a permission without permission"); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - $permission = $lona->UserManager->CheckPermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); + $permission = $LonaDB->UserManager->CheckPermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); $response = json_encode(["success" => true, "result" => $permission, "process" => $data['process']]); socket_write($client, $response); diff --git a/src/LonaDB/Actions/create_table.php b/src/LonaDB/Actions/create_table.php index d8e47f5..5ff66c4 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"); + public function run($LonaDB, $data, $client) : void { + if (!$LonaDB->UserManager->CheckPermission($data['login']['name'], "table_create")) { + $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to create a table without permission"); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); socket_write($client, $response); socket_close($client); @@ -24,7 +24,7 @@ return new class { return; } - $table = $lona->TableManager->CreateTable($data['table']['name'], $data['login']['name']); + $table = $LonaDB->TableManager->CreateTable($data['table']['name'], $data['login']['name']); if(!$table){ $response = json_encode(["success" => false, "err" => "table_exists", "process" => $data['process']]); @@ -36,5 +36,8 @@ return new class { $response = json_encode(["success" => true, "process" => $data['process']]); socket_write($client, $response); socket_close($client); + + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "tableCreate", [ "name" => $data['table']['name'] ]); } }; diff --git a/src/LonaDB/Actions/create_user.php b/src/LonaDB/Actions/create_user.php index fdb7e77..0089a99 100644 --- a/src/LonaDB/Actions/create_user.php +++ b/src/LonaDB/Actions/create_user.php @@ -1,7 +1,7 @@ false, "err" => "missing_arguments", "process" => $data['process']]); socket_write($client, $response); @@ -15,8 +15,8 @@ return new class { $ciphertext = hex2bin($parts[1]); $password = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); - if(!$lona->UserManager->CheckPermission($data['login']['name'], "user_create")){ - $lona->Logger->Error("User '".$data['login']['name']."' tried to create a user without permission"); + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "user_create")){ + $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to create a user without permission"); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); socket_write($client, $response); socket_close($client); @@ -24,14 +24,14 @@ return new class { } - if($lona->UserManager->CheckUser($data['user']['name'])){ + if($LonaDB->UserManager->CheckUser($data['user']['name'])){ $response = json_encode(["success" => false, "err" => "user_exist", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - $result = $lona->UserManager->CreateUser($data['user']['name'], $password); + $result = $LonaDB->UserManager->CreateUser($data['user']['name'], $password); $response = json_encode(["success" => $result, "process" => $data['process']]); @@ -39,5 +39,8 @@ return new class { socket_write($client, $response); socket_close($client); + + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "userCreate", [ "name" => $data['user']['name'] ]); } }; diff --git a/src/LonaDB/Actions/delete_function.php b/src/LonaDB/Actions/delete_function.php index 879cb6b..3d9392a 100644 --- a/src/LonaDB/Actions/delete_function.php +++ b/src/LonaDB/Actions/delete_function.php @@ -14,5 +14,8 @@ return new class { $response = json_encode(["success" => true, "process" => $data['process']]); socket_write($client, $response); socket_close($client); + + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "functionDelete", [ "name" => $data['function']['name'] ]); } }; diff --git a/src/LonaDB/Actions/delete_table.php b/src/LonaDB/Actions/delete_table.php index 9a84f9c..312e827 100644 --- a/src/LonaDB/Actions/delete_table.php +++ b/src/LonaDB/Actions/delete_table.php @@ -1,9 +1,9 @@ UserManager->CheckPermission($data['login']['name'], "table_delete")) { - $lona->Logger->Error("User '".$data['login']['name']."' tried to delete a table without permission"); + public function run($LonaDB, $data, $client) : void { + if (!$LonaDB->UserManager->CheckPermission($data['login']['name'], "table_delete")) { + $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to delete a table without permission"); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); socket_write($client, $response); socket_close($client); @@ -17,21 +17,21 @@ return new class { return; } - if(!$lona->TableManager->GetTable($data['table']['name'])) { + if(!$LonaDB->TableManager->GetTable($data['table']['name'])) { $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - if($lona->TableManager->GetTable($data['table']['name'])->GetOwner() !== $data['login']['name'] && $lona->UserManager->GetRole($data['login']['name']) !== "Administrator" && $lona->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") { $response = json_encode(["success" => false, "err" => "not_table_owner", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - $table = $lona->TableManager->DeleteTable($data['table']['name'], $data['login']['name']); + $table = $LonaDB->TableManager->DeleteTable($data['table']['name'], $data['login']['name']); if(!$table){ $response = json_encode(["success" => false, "err" => "table_doesnt_exist", "process" => $data['process']]); @@ -43,5 +43,8 @@ return new class { $response = json_encode(["success" => true, "process" => $data['process']]); socket_write($client, $response); socket_close($client); + + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "tableDelete", [ "name" => $data['table']['name'] ]); } }; diff --git a/src/LonaDB/Actions/delete_user.php b/src/LonaDB/Actions/delete_user.php index 4e51500..6a7e72c 100644 --- a/src/LonaDB/Actions/delete_user.php +++ b/src/LonaDB/Actions/delete_user.php @@ -1,7 +1,7 @@ false, "err" => "missing_arguments", "process" => $data['process']]); socket_write($client, $response); @@ -9,22 +9,22 @@ return new class { return; } - if(!$lona->UserManager->CheckPermission($data['login']['name'], "user_delete")){ - $lona->Logger->Error("User '".$data['login']['name']."' tried to delete a user without permission"); + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "user_delete")){ + $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to delete a user without permission"); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - if(!$lona->UserManager->CheckUser($data['user']['name'])){ + if(!$LonaDB->UserManager->CheckUser($data['user']['name'])){ $response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - $result = $lona->UserManager->DeleteUser($data['user']['name'], $data['user']['password']); + $result = $LonaDB->UserManager->DeleteUser($data['user']['name'], $data['user']['password']); $response = json_encode(["success" => $result, "process" => $data['process']]); @@ -32,5 +32,8 @@ return new class { socket_write($client, $response); socket_close($client); + + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "userDelete", [ "name" => $data['table']['name'] ]); } }; diff --git a/src/LonaDB/Actions/eval.php b/src/LonaDB/Actions/eval.php index 561f881..124a22a 100644 --- a/src/LonaDB/Actions/eval.php +++ b/src/LonaDB/Actions/eval.php @@ -36,6 +36,9 @@ return new class { // Remove the function from the $functions array unset($functions[$functionName]); + + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "eval", [ "content" => $data['function'] ]); } private function sendErrorResponse($client, $error, $process): void { diff --git a/src/LonaDB/Actions/execute_function.php b/src/LonaDB/Actions/execute_function.php index b7fe1a4..78eaf4e 100644 --- a/src/LonaDB/Actions/execute_function.php +++ b/src/LonaDB/Actions/execute_function.php @@ -5,5 +5,8 @@ return new class { $function = $LonaDB->FunctionManager->GetFunction($data['name']); $function->Execute($LonaDB, $data, $client); + + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "functionExecute", [ "name" => $data['name'] ]); } }; diff --git a/src/LonaDB/Actions/get_permissions_raw.php b/src/LonaDB/Actions/get_permissions_raw.php index 5ab57d3..87a75de 100644 --- a/src/LonaDB/Actions/get_permissions_raw.php +++ b/src/LonaDB/Actions/get_permissions_raw.php @@ -1,25 +1,25 @@ UserManager->GetRole($data['login']['name']) !== "Administrator"){ + public function run($LonaDB, $data, $client) : void { + if($data['login']['name'] !== "root" && $LonaDB->UserManager->GetRole($data['login']['name']) !== "Administrator"){ $response = json_encode(["success" => false, "err" => "not_allowed", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - if(!$lona->UserManager->CheckUser($data['user'])){ + if(!$LonaDB->UserManager->CheckUser($data['user'])){ $response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - $permissions = $lona->UserManager->GetPermissions($data['user']); + $permissions = $LonaDB->UserManager->GetPermissions($data['user']); - if($permissions === []) $response = '{ "success": true, "list": {}, "role": "' . $lona->UserManager->GetRole($data['user']) . '", "process": "'.$data['process'].'" }'; - else $response = json_encode(["success" => true, "list" => $permissions, "role" => $lona->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']]); socket_write($client, $response); socket_close($client); } diff --git a/src/LonaDB/Actions/get_table_data.php b/src/LonaDB/Actions/get_table_data.php index 5e51d4b..bcd7729 100644 --- a/src/LonaDB/Actions/get_table_data.php +++ b/src/LonaDB/Actions/get_table_data.php @@ -1,22 +1,22 @@ TableManager->GetTable($data['table'])) { + public function run($LonaDB, $data, $client) : void { + if(!$LonaDB->TableManager->GetTable($data['table'])) { $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - if(!$lona->TableManager->GetTable($data['table'])->CheckPermission($data['login']['name'], "read")) { + if(!$LonaDB->TableManager->GetTable($data['table'])->CheckPermission($data['login']['name'], "read")) { $response = json_encode(["success" => false, "err" => "missing_permissions", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - $tableData = $lona->TableManager->getTable($data['table'])->GetData(); + $tableData = $LonaDB->TableManager->getTable($data['table'])->GetData(); if($tableData === []) $response = '{ "success": true, "data": {}, "process": "'.$data['process'].'" }'; else $response = json_encode(["success" => true, "data" => $tableData, "process" => $data['process']]); diff --git a/src/LonaDB/Actions/get_tables.php b/src/LonaDB/Actions/get_tables.php index 1d9659d..56bdaa5 100644 --- a/src/LonaDB/Actions/get_tables.php +++ b/src/LonaDB/Actions/get_tables.php @@ -1,9 +1,13 @@ UserManager->CheckPermission($data['login']['name'], "get_tables")){ + public function run($LonaDB, $data, $client) : void { + $user = null; + if(!$data['user']) $user = $data['login']['name']; + else $user = $data['user']; + + if($user !== $data['login']['name']){ + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "get_tables")){ $response = json_encode(["success" => false, "err" => "missing_permission", "process" => $data['process']]); socket_write($client, $response); socket_close($client); @@ -11,14 +15,14 @@ return new class { } } - if(!$lona->UserManager->CheckUser($data['user'])){ + if(!$LonaDB->UserManager->CheckUser($user)){ $response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - $tables = $lona->TableManager->ListTables($data['user']); + $tables = $LonaDB->TableManager->ListTables($user); $response = json_encode(["success" => true, "tables" => $tables, "process" => $data['process']]); socket_write($client, $response); diff --git a/src/LonaDB/Actions/get_users.php b/src/LonaDB/Actions/get_users.php index 0c9ec82..185e440 100644 --- a/src/LonaDB/Actions/get_users.php +++ b/src/LonaDB/Actions/get_users.php @@ -1,15 +1,15 @@ UserManager->CheckPermission($data['login']['name'], "get_users")){ + public function run($LonaDB, $data, $client) : void { + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "get_users")){ $response = json_encode(["success" => false, "err" => "missing_permission", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - $users = $lona->UserManager->ListUsers(); + $users = $LonaDB->UserManager->ListUsers(); $response = json_encode(["success" => true, "users" => $users, "process" => $data['process']]); socket_write($client, $response); diff --git a/src/LonaDB/Actions/get_variable.php b/src/LonaDB/Actions/get_variable.php index 3c57166..25aec22 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']]); socket_write($client, $response); @@ -9,14 +9,14 @@ return new class { return; } - if(!$lona->TableManager->GetTable($data['table']['name'])) { + if(!$LonaDB->TableManager->GetTable($data['table']['name'])) { $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - if (!$lona->TableManager->GetTable($data['table']['name'])->CheckPermission($data['login']['name'], "read")){ + if (!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckPermission($data['login']['name'], "read")){ $response = json_encode(["success" => false, "err" => "missing_permissions", "process" => $data['process']]); socket_write($client, $response); socket_close($client); @@ -30,7 +30,7 @@ return new class { return; } - $value = $lona->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']); $response = [ "variable" => [ diff --git a/src/LonaDB/Actions/remove_permission.php b/src/LonaDB/Actions/remove_permission.php index 301b0cd..33de6a7 100644 --- a/src/LonaDB/Actions/remove_permission.php +++ b/src/LonaDB/Actions/remove_permission.php @@ -1,7 +1,7 @@ false, "err" => "missing_user", "process" => $data['process']]); socket_write($client, $response); @@ -9,17 +9,20 @@ return new class { return; } - if(!$lona->UserManager->CheckPermission($data['login']['name'], "permission_remove")) { - $lona->Logger->Error("User '".$data['login']['name']."' tried to add a permission without permission"); + if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_remove")) { + $LonaDB->Logger->Error("User '".$data['login']['name']."' tried to add a permission without permission"); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - $lona->UserManager->RemovePermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); + $LonaDB->UserManager->RemovePermission($data['permission']['user'], $data['permission']['name'], $data['login']['name']); $response = json_encode(["success" => true, "process" => $data['process']]); socket_write($client, $response); socket_close($client); + + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "permissionRemove", [ "user" => $data['permission']['user'], "name" => $data['permission']['name'] ]); } }; diff --git a/src/LonaDB/Actions/remove_variable.php b/src/LonaDB/Actions/remove_variable.php index b6a3504..c3dc478 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']]); socket_write($client, $response); @@ -9,7 +9,7 @@ return new class { return; } - if(!$lona->TableManager->GetTable($data['table']['name'])) { + if(!$LonaDB->TableManager->GetTable($data['table']['name'])) { $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]); socket_write($client, $response); socket_close($client); @@ -23,21 +23,21 @@ return new class { return; } - if (!$lona->TableManager->GetTable($data['table']['name'])->CheckPermission($data['login']['name'], "read")) { + if (!$LonaDB->TableManager->GetTable($data['table']['name'])->CheckPermission($data['login']['name'], "read")) { $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - if(!$lona->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'])){ $response = json_encode(["success" => false, "err" => "missing_variable", "process" => $data['process']]); socket_write($client, $response); socket_close($client); return; } - $lona->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']); $response = [ "success" => true, @@ -46,6 +46,9 @@ return new class { socket_write($client, json_encode($response)); socket_close($client); + + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "valueRemove", [ "name" => $data['variable']['name'] ]); return; } }; diff --git a/src/LonaDB/Actions/set_variable.php b/src/LonaDB/Actions/set_variable.php index 5b1589c..1ea683e 100644 --- a/src/LonaDB/Actions/set_variable.php +++ b/src/LonaDB/Actions/set_variable.php @@ -49,5 +49,8 @@ return new class { $response = json_encode(["success" => true, "process" => $data['process']]); socket_write($client, $response); socket_close($client); + + //Run plugin event + $LonaDB->PluginManager->RunEvent($data['login']['name'], "valueSet", [ "name" => $data['variable']['name'], "value" => $data['variable']['value'] ]); } }; diff --git a/src/LonaDB/Logger.php b/src/LonaDB/Logger.php index ef09ed3..4650717 100644 --- a/src/LonaDB/Logger.php +++ b/src/LonaDB/Logger.php @@ -16,7 +16,7 @@ class Logger{ } private function log(string $message) : void { - echo($message); + echo($message."\e[0m"); if($this->LonaDB->config["logging"]) fwrite($this->LogFile, $message); } @@ -25,17 +25,17 @@ class Logger{ } public function Warning($msg) : void { - $log = date("Y-m-d h:i:s")." [WARNING] ".$msg."\n"; + $log = "\033[33m" . date("Y-m-d h:i:s")." [WARNING] ".$msg."\n"; $this->log($log); } public function Error($msg) : void { - $log = date("Y-m-d h:i:s")." [ERROR] ".$msg."\n"; + $log = "\033[31m" . date("Y-m-d h:i:s")." [ERROR] ".$msg."\n"; $this->log($log); } public function Create($msg) : void { - $log = date("Y-m-d h:i:s")." [CREATE] ".$msg."\n"; + $log = "\033[32m" . date("Y-m-d h:i:s")." [CREATE] ".$msg."\n"; $this->log($log); } @@ -45,7 +45,7 @@ class Logger{ } public function Info($msg) : void { - $log = date("Y-m-d h:i:s")." [INFO] ".$msg."\n"; + $log = "\033[34m" . date("Y-m-d h:i:s")." [INFO] ".$msg."\n"; $this->log($log); } @@ -59,6 +59,11 @@ class Logger{ $this->log($log); } + public function Plugin($name, $msg) : void { + $log = "\033[35m" . date("Y-m-d h:i:s")." [Plugin] ".$name.": ".$msg."\n"; + $this->log($log); + } + public function Start($msg) : void { if(!$this->Start){ $this->Start = true; diff --git a/src/LonaDB/Plugins/PluginBase.php b/src/LonaDB/Plugins/PluginBase.php index 3332385..79ee860 100644 --- a/src/LonaDB/Plugins/PluginBase.php +++ b/src/LonaDB/Plugins/PluginBase.php @@ -26,5 +26,20 @@ class PluginBase{ final public function GetName() : string { return $this->Name; } - final public function GetLogger() : Logger { return $this->LonaDB->Logger; } + final public function GetLogger() : Logger { return $this->LonaDB->Logger; } + + //Events + public function onTableCreate(string $executor, string $name) : void {} + public function onTableDelete(string $executor, string $name) : void {} + public function onValueSet(string $executor, string $name, string $value) : void {} + public function onValueRemove(string $executor, string $name) : void {} + public function onFunctionCreate(string $executor, string $name, string $content) : void {} + public function onFunctionDelete(string $executor, string $name) : void {} + public function onFunctionExecute(string $executor, string $name) : void {} + public function onUserCreate(string $executor, string $name) : void {} + public function onUserDelete(string $executor, string $name) : void {} + public function onEval(string $executor, string $content) : void {} + public function onPermissionAdd(string $executor, string $user, string $permission) : void {} + public function onPermissionRemove(string $executor, string $user, string $permission) : void {} + } \ No newline at end of file diff --git a/src/LonaDB/Plugins/PluginManager.php b/src/LonaDB/Plugins/PluginManager.php index 5e28af7..678555a 100644 --- a/src/LonaDB/Plugins/PluginManager.php +++ b/src/LonaDB/Plugins/PluginManager.php @@ -144,4 +144,47 @@ class PluginManager{ } } } + + public function RunEvent(string $executor, string $event, Array $arguments) : void { + foreach($this->Plugins as $pluginName => $pluginInstance) { + switch($event){ + case "tableCreate": + $pluginInstance->onTableCreate($executor, $arguments['name']); + break; + case "tableDelete": + $pluginInstance->onTableDelete($executor, $arguments['name']); + break; + case "valueSet": + $pluginInstance->onValueSet($executor, $arguments['name'], $arguments['value']); + break; + case "valueRemove": + $pluginInstance->onValueRemove($executor, $arguments['name']); + break; + case "functionCreate": + $pluginInstance->onFunctionCreate($executor, $arguments['name'], $arguments['content']); + break; + case "functionDelete": + $pluginInstance->onFunctionDelete($executor, $arguments['name']); + break; + case "functionExecute": + $pluginInstance->onFunctionExecute($executor, $arguments['name']); + break; + case "userCreate": + $pluginInstance->onUserCreate($executor, $arguments['name']); + break; + case "userDelete": + $pluginInstance->onUserDelete($executor, $arguments['name']); + break; + case "eval": + $pluginInstance->onEval($executor, $arguments['content']); + break; + case "permissionAdd": + $pluginInstance->onPermissionAdd($executor, $arguments['user'], $arguments['permission']); + break; + case "permissionRemove": + $pluginInstance->onPermissionRemove($executor, $arguments['user'], $arguments['permission']); + break; + } + } + } } \ No newline at end of file diff --git a/src/LonaDB/Server.php b/src/LonaDB/Server.php index e02db91..4406130 100644 --- a/src/LonaDB/Server.php +++ b/src/LonaDB/Server.php @@ -98,6 +98,9 @@ class Server { private function handleData(string $dataString, $client) : void { try { $data = json_decode($dataString, true); + + if(!is_array($data)) return; + if(!array_key_exists('action', $data)) return; $key = hash('sha256', $data['process'], true); $parts = explode(':', $data['login']['password']);