PluginManager update

This commit is contained in:
Collin 2024-09-12 08:45:59 +00:00
parent afe6f30b3d
commit 4aed224685
27 changed files with 186 additions and 77 deletions

8
.gitignore vendored
View File

@ -1,4 +1,4 @@
build/run-phar.sh build/*
build/debug/* src/vendor/
build/release/* run
src/vendor/ build-phar

View File

@ -66,7 +66,10 @@ try {
$phar->setAlias($filename."-".$version.".phar"); $phar->setAlias($filename."-".$version.".phar");
builderLog("[BUILD] Set signature algorithm"); 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"); builderLog("[BUILD] Saving the new Phar archive");
$phar->stopBuffering(); $phar->stopBuffering();

View File

@ -1 +1 @@
cd build/release ; printf "test\n" | php -dphar.readonly=0 LonaDB-4.5.0-stable.phar cd build/debug ; printf "test\n" | php -dphar.readonly=0 LonaDB-4.6.0-debug.phar

View File

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

View File

@ -14,5 +14,8 @@ return new class {
$response = json_encode(["success" => true, "process" => $data['process']]); $response = json_encode(["success" => true, "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "functionCreate", [ "name" => $data['function']['name'], "content" => $data['function']['content'] ]);
} }
}; };

View File

@ -1,7 +1,7 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if(!$data['permission']['user']) { if(!$data['permission']['user']) {
$response = json_encode(["success" => false, "err" => "missing_user", "process" => $data['process']]); $response = json_encode(["success" => false, "err" => "missing_user", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
@ -9,17 +9,20 @@ return new class {
return; return;
} }
if(!$lona->UserManager->CheckPermission($data['login']['name'], "permission_add")) { if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_add")) {
$lona->Logger->Error("User '".$data['login']['name']."' tried to add a permission without permission"); $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']]); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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']]); $response = json_encode(["success" => true, "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "permissionAdd", [ "user" => $data['permission']['user'], "name" => $data['permission']['name'] ]);
} }
}; };

View File

@ -1,7 +1,7 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if(!$data['checkPass']['name'] || !$data['checkPass']['pass']) { if(!$data['checkPass']['name'] || !$data['checkPass']['pass']) {
$response = json_encode(["success" => false, "err" => "missing_arguments", "process" => $data['process']]); $response = json_encode(["success" => false, "err" => "missing_arguments", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
@ -15,15 +15,15 @@ return new class {
$ciphertext = hex2bin($parts[1]); $ciphertext = hex2bin($parts[1]);
$password = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); $password = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
if(!$lona->UserManager->CheckPermission($data['login']['name'], "password_check")) { if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "password_check")) {
$lona->Logger->Error("User '".$data['login']['name']."' tried to check a password without permission"); $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']]); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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']]); $response = json_encode(["success" => true, "passCheck" => $checkPassword, "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);

View File

@ -1,7 +1,7 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if(!$data['permission'] || !$data['permission']['name'] || !$data['permission']['user']){ if(!$data['permission'] || !$data['permission']['name'] || !$data['permission']['user']){
$response = json_encode(["success" => false, "err" => "missing_arguments", "process" => $data['process']]); $response = json_encode(["success" => false, "err" => "missing_arguments", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
@ -9,15 +9,15 @@ return new class {
return; return;
} }
if(!$lona->UserManager->CheckPermission($data['login']['name'], "permission_check")) { if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_check")) {
$lona->Logger->Error("User '".$data['login']['name']."' tried to check a permission without permission"); $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']]); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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']]); $response = json_encode(["success" => true, "result" => $permission, "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);

View File

@ -1,9 +1,9 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if (!$lona->UserManager->CheckPermission($data['login']['name'], "table_create")) { if (!$LonaDB->UserManager->CheckPermission($data['login']['name'], "table_create")) {
$lona->Logger->Error("User '".$data['login']['name']."' tried to create a table without permission"); $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']]); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
@ -24,7 +24,7 @@ return new class {
return; return;
} }
$table = $lona->TableManager->CreateTable($data['table']['name'], $data['login']['name']); $table = $LonaDB->TableManager->CreateTable($data['table']['name'], $data['login']['name']);
if(!$table){ if(!$table){
$response = json_encode(["success" => false, "err" => "table_exists", "process" => $data['process']]); $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']]); $response = json_encode(["success" => true, "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "tableCreate", [ "name" => $data['table']['name'] ]);
} }
}; };

View File

@ -1,7 +1,7 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if(!$data['user']['name'] || !$data['user']['password']){ if(!$data['user']['name'] || !$data['user']['password']){
$response = json_encode(["success" => false, "err" => "missing_arguments", "process" => $data['process']]); $response = json_encode(["success" => false, "err" => "missing_arguments", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
@ -15,8 +15,8 @@ return new class {
$ciphertext = hex2bin($parts[1]); $ciphertext = hex2bin($parts[1]);
$password = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); $password = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
if(!$lona->UserManager->CheckPermission($data['login']['name'], "user_create")){ if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "user_create")){
$lona->Logger->Error("User '".$data['login']['name']."' tried to create a user without permission"); $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']]); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); 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']]); $response = json_encode(["success" => false, "err" => "user_exist", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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']]); $response = json_encode(["success" => $result, "process" => $data['process']]);
@ -39,5 +39,8 @@ return new class {
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "userCreate", [ "name" => $data['user']['name'] ]);
} }
}; };

View File

@ -14,5 +14,8 @@ return new class {
$response = json_encode(["success" => true, "process" => $data['process']]); $response = json_encode(["success" => true, "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "functionDelete", [ "name" => $data['function']['name'] ]);
} }
}; };

View File

@ -1,9 +1,9 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if (!$lona->UserManager->CheckPermission($data['login']['name'], "table_delete")) { if (!$LonaDB->UserManager->CheckPermission($data['login']['name'], "table_delete")) {
$lona->Logger->Error("User '".$data['login']['name']."' tried to delete a table without permission"); $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']]); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
@ -17,21 +17,21 @@ return new class {
return; 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']]); $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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']]); $response = json_encode(["success" => false, "err" => "not_table_owner", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; return;
} }
$table = $lona->TableManager->DeleteTable($data['table']['name'], $data['login']['name']); $table = $LonaDB->TableManager->DeleteTable($data['table']['name'], $data['login']['name']);
if(!$table){ if(!$table){
$response = json_encode(["success" => false, "err" => "table_doesnt_exist", "process" => $data['process']]); $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']]); $response = json_encode(["success" => true, "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "tableDelete", [ "name" => $data['table']['name'] ]);
} }
}; };

View File

@ -1,7 +1,7 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if(!$data['user']['name']){ if(!$data['user']['name']){
$response = json_encode(["success" => false, "err" => "missing_arguments", "process" => $data['process']]); $response = json_encode(["success" => false, "err" => "missing_arguments", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
@ -9,22 +9,22 @@ return new class {
return; return;
} }
if(!$lona->UserManager->CheckPermission($data['login']['name'], "user_delete")){ if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "user_delete")){
$lona->Logger->Error("User '".$data['login']['name']."' tried to delete a user without permission"); $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']]); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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']]); $response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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']]); $response = json_encode(["success" => $result, "process" => $data['process']]);
@ -32,5 +32,8 @@ return new class {
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "userDelete", [ "name" => $data['table']['name'] ]);
} }
}; };

View File

@ -36,6 +36,9 @@ return new class {
// Remove the function from the $functions array // Remove the function from the $functions array
unset($functions[$functionName]); unset($functions[$functionName]);
//Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "eval", [ "content" => $data['function'] ]);
} }
private function sendErrorResponse($client, $error, $process): void { private function sendErrorResponse($client, $error, $process): void {

View File

@ -5,5 +5,8 @@ return new class {
$function = $LonaDB->FunctionManager->GetFunction($data['name']); $function = $LonaDB->FunctionManager->GetFunction($data['name']);
$function->Execute($LonaDB, $data, $client); $function->Execute($LonaDB, $data, $client);
//Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "functionExecute", [ "name" => $data['name'] ]);
} }
}; };

View File

@ -1,25 +1,25 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if($data['login']['name'] !== "root" && $lona->UserManager->GetRole($data['login']['name']) !== "Administrator"){ if($data['login']['name'] !== "root" && $LonaDB->UserManager->GetRole($data['login']['name']) !== "Administrator"){
$response = json_encode(["success" => false, "err" => "not_allowed", "process" => $data['process']]); $response = json_encode(["success" => false, "err" => "not_allowed", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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']]); $response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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'].'" }'; if($permissions === []) $response = '{ "success": true, "list": {}, "role": "' . $LonaDB->UserManager->GetRole($data['user']) . '", "process": "'.$data['process'].'" }';
else $response = json_encode(["success" => true, "list" => $permissions, "role" => $lona->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_write($client, $response);
socket_close($client); socket_close($client);
} }

View File

@ -1,22 +1,22 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if(!$lona->TableManager->GetTable($data['table'])) { if(!$LonaDB->TableManager->GetTable($data['table'])) {
$response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]); $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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']]); $response = json_encode(["success" => false, "err" => "missing_permissions", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; return;
} }
$tableData = $lona->TableManager->getTable($data['table'])->GetData(); $tableData = $LonaDB->TableManager->getTable($data['table'])->GetData();
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 = json_encode(["success" => true, "data" => $tableData, "process" => $data['process']]);

View File

@ -1,9 +1,13 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if($data['user'] !== $data['login']['name']){ $user = null;
if(!$lona->UserManager->CheckPermission($data['login']['name'], "get_tables")){ 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']]); $response = json_encode(["success" => false, "err" => "missing_permission", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); 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']]); $response = json_encode(["success" => false, "err" => "user_doesnt_exist", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; return;
} }
$tables = $lona->TableManager->ListTables($data['user']); $tables = $LonaDB->TableManager->ListTables($user);
$response = json_encode(["success" => true, "tables" => $tables, "process" => $data['process']]); $response = json_encode(["success" => true, "tables" => $tables, "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);

View File

@ -1,15 +1,15 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if(!$lona->UserManager->CheckPermission($data['login']['name'], "get_users")){ if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "get_users")){
$response = json_encode(["success" => false, "err" => "missing_permission", "process" => $data['process']]); $response = json_encode(["success" => false, "err" => "missing_permission", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; return;
} }
$users = $lona->UserManager->ListUsers(); $users = $LonaDB->UserManager->ListUsers();
$response = json_encode(["success" => true, "users" => $users, "process" => $data['process']]); $response = json_encode(["success" => true, "users" => $users, "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);

View File

@ -1,7 +1,7 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if (!$data['table']['name']) { if (!$data['table']['name']) {
$response = json_encode(["success" => false, "err" => "bad_table_name", "process" => $data['process']]); $response = json_encode(["success" => false, "err" => "bad_table_name", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
@ -9,14 +9,14 @@ return new class {
return; 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']]); $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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']]); $response = json_encode(["success" => false, "err" => "missing_permissions", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
@ -30,7 +30,7 @@ return new class {
return; 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 = [ $response = [
"variable" => [ "variable" => [

View File

@ -1,7 +1,7 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if(!$data['permission']['user']) { if(!$data['permission']['user']) {
$response = json_encode(["success" => false, "err" => "missing_user", "process" => $data['process']]); $response = json_encode(["success" => false, "err" => "missing_user", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
@ -9,17 +9,20 @@ return new class {
return; return;
} }
if(!$lona->UserManager->CheckPermission($data['login']['name'], "permission_remove")) { if(!$LonaDB->UserManager->CheckPermission($data['login']['name'], "permission_remove")) {
$lona->Logger->Error("User '".$data['login']['name']."' tried to add a permission without permission"); $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']]); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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']]); $response = json_encode(["success" => true, "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "permissionRemove", [ "user" => $data['permission']['user'], "name" => $data['permission']['name'] ]);
} }
}; };

View File

@ -1,7 +1,7 @@
<?php <?php
return new class { return new class {
public function run($lona, $data, $client) : void { public function run($LonaDB, $data, $client) : void {
if (!$data['table']['name']) { if (!$data['table']['name']) {
$response = json_encode(["success" => false, "err" => "bad_table_name", "process" => $data['process']]); $response = json_encode(["success" => false, "err" => "bad_table_name", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
@ -9,7 +9,7 @@ return new class {
return; 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']]); $response = json_encode(["success" => false, "err" => "table_missing", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
@ -23,21 +23,21 @@ return new class {
return; 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']]); $response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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']]); $response = json_encode(["success" => false, "err" => "missing_variable", "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
return; 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 = [ $response = [
"success" => true, "success" => true,
@ -46,6 +46,9 @@ return new class {
socket_write($client, json_encode($response)); socket_write($client, json_encode($response));
socket_close($client); socket_close($client);
//Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "valueRemove", [ "name" => $data['variable']['name'] ]);
return; return;
} }
}; };

View File

@ -49,5 +49,8 @@ return new class {
$response = json_encode(["success" => true, "process" => $data['process']]); $response = json_encode(["success" => true, "process" => $data['process']]);
socket_write($client, $response); socket_write($client, $response);
socket_close($client); socket_close($client);
//Run plugin event
$LonaDB->PluginManager->RunEvent($data['login']['name'], "valueSet", [ "name" => $data['variable']['name'], "value" => $data['variable']['value'] ]);
} }
}; };

View File

@ -16,7 +16,7 @@ class Logger{
} }
private function log(string $message) : void { private function log(string $message) : void {
echo($message); echo($message."\e[0m");
if($this->LonaDB->config["logging"]) fwrite($this->LogFile, $message); if($this->LonaDB->config["logging"]) fwrite($this->LogFile, $message);
} }
@ -25,17 +25,17 @@ class Logger{
} }
public function Warning($msg) : void { 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); $this->log($log);
} }
public function Error($msg) : void { 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); $this->log($log);
} }
public function Create($msg) : void { 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); $this->log($log);
} }
@ -45,7 +45,7 @@ class Logger{
} }
public function Info($msg) : void { 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); $this->log($log);
} }
@ -59,6 +59,11 @@ class Logger{
$this->log($log); $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 { public function Start($msg) : void {
if(!$this->Start){ if(!$this->Start){
$this->Start = true; $this->Start = true;

View File

@ -26,5 +26,20 @@ class PluginBase{
final public function GetName() : string { return $this->Name; } 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 {}
} }

View File

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

View File

@ -98,6 +98,9 @@ class Server {
private function handleData(string $dataString, $client) : void { private function handleData(string $dataString, $client) : void {
try { try {
$data = json_decode($dataString, true); $data = json_decode($dataString, true);
if(!is_array($data)) return;
if(!array_key_exists('action', $data)) return;
$key = hash('sha256', $data['process'], true); $key = hash('sha256', $data['process'], true);
$parts = explode(':', $data['login']['password']); $parts = explode(':', $data['login']['password']);