Release 1 upload
This commit is contained in:
parent
af6b95d2db
commit
ecf99ca0bc
@ -35,7 +35,7 @@ if(trim(strtolower($line)) === 'no' || trim(strtolower($line)) === "n"){
|
|||||||
$start = time();
|
$start = time();
|
||||||
|
|
||||||
builderLog("[COMPOSER] Running 'composer install'");
|
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")){
|
if(file_exists($path."/".$filename."-".$version.".phar")){
|
||||||
unlink($path."/".$filename."-".$version.".phar");
|
unlink($path."/".$filename."-".$version.".phar");
|
||||||
@ -64,7 +64,7 @@ try {
|
|||||||
builderLog("[INFO] Phar archive created successfully");
|
builderLog("[INFO] Phar archive created successfully");
|
||||||
|
|
||||||
builderLog("[RUN] Generating run script");
|
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");
|
builderLog("[RUN] Adding Permissions to run script");
|
||||||
exec("chmod 777 ./build/run-phar.sh");
|
exec("chmod 777 ./build/run-phar.sh");
|
||||||
|
@ -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
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"filename": "LonaDB",
|
"filename": "LonaDB",
|
||||||
"version": "4.0.0-beta",
|
"version": "4.0.0-stable",
|
||||||
"path": "build",
|
"path": "build",
|
||||||
"debug": true
|
"debug": false
|
||||||
}
|
}
|
25
src/LonaDB/Actions/add_permission.php
Normal file
25
src/LonaDB/Actions/add_permission.php
Normal 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);
|
||||||
|
}
|
||||||
|
};
|
26
src/LonaDB/Actions/check_password.php
Normal file
26
src/LonaDB/Actions/check_password.php
Normal 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);
|
||||||
|
}
|
||||||
|
};
|
26
src/LonaDB/Actions/check_permission.php
Normal file
26
src/LonaDB/Actions/check_permission.php
Normal 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);
|
||||||
|
}
|
||||||
|
};
|
@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return new class {
|
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")) {
|
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']]);
|
$response = json_encode(["success" => false, "err" => "no_permission", "process" => $data['process']]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
$server->close($fd);
|
$server->close($fd);
|
||||||
|
37
src/LonaDB/Actions/create_user.php
Normal file
37
src/LonaDB/Actions/create_user.php
Normal 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);
|
||||||
|
}
|
||||||
|
};
|
47
src/LonaDB/Actions/delete_table.php
Normal file
47
src/LonaDB/Actions/delete_table.php
Normal 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);
|
||||||
|
}
|
||||||
|
};
|
36
src/LonaDB/Actions/delete_user.php
Normal file
36
src/LonaDB/Actions/delete_user.php
Normal 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);
|
||||||
|
}
|
||||||
|
};
|
25
src/LonaDB/Actions/eval.php
Normal file
25
src/LonaDB/Actions/eval.php
Normal 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);
|
||||||
|
}
|
||||||
|
};
|
19
src/LonaDB/Actions/get_permissions_raw.php
Normal file
19
src/LonaDB/Actions/get_permissions_raw.php
Normal 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);
|
||||||
|
}
|
||||||
|
};
|
26
src/LonaDB/Actions/get_table_data.php
Normal file
26
src/LonaDB/Actions/get_table_data.php
Normal 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);
|
||||||
|
}
|
||||||
|
};
|
27
src/LonaDB/Actions/get_tables.php
Normal file
27
src/LonaDB/Actions/get_tables.php
Normal 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);
|
||||||
|
}
|
||||||
|
};
|
18
src/LonaDB/Actions/get_users.php
Normal file
18
src/LonaDB/Actions/get_users.php
Normal 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);
|
||||||
|
}
|
||||||
|
};
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return new class {
|
return new class {
|
||||||
public function run($lona, $data, $server, $fd) {
|
public function run($lona, $data, $server, $fd) : 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']]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
|
25
src/LonaDB/Actions/remove_permission.php
Normal file
25
src/LonaDB/Actions/remove_permission.php
Normal 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);
|
||||||
|
}
|
||||||
|
};
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return new class {
|
return new class {
|
||||||
public function run($lona, $data, $server, $fd) {
|
public function run($lona, $data, $server, $fd) : 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']]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return new class {
|
return new class {
|
||||||
public function run($lona, $data, $server, $fd) {
|
public function run($lona, $data, $server, $fd) : 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']]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
|
@ -14,57 +14,57 @@ class Logger{
|
|||||||
$this->LonaDB = $lonaDB;
|
$this->LonaDB = $lonaDB;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function log(string $message){
|
private function log(string $message) : void {
|
||||||
echo($message);
|
echo($message);
|
||||||
if($this->LonaDB->config["logging"]) fwrite($this->LogFile, $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');
|
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";
|
$log = date("Y-m-d h:i:s")." [WARNING] ".$msg."\n";
|
||||||
$this->log($log);
|
$this->log($log);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Error($msg){
|
public function Error($msg) : void {
|
||||||
$log = date("Y-m-d h:i:s")." [ERROR] ".$msg."\n";
|
$log = date("Y-m-d h:i:s")." [ERROR] ".$msg."\n";
|
||||||
$this->log($log);
|
$this->log($log);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Create($msg){
|
public function Create($msg) : void {
|
||||||
$log = date("Y-m-d h:i:s")." [CREATE] ".$msg."\n";
|
$log = date("Y-m-d h:i:s")." [CREATE] ".$msg."\n";
|
||||||
$this->log($log);
|
$this->log($log);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Load($msg){
|
public function Load($msg) : void {
|
||||||
$log = date("Y-m-d h:i:s")." [LOAD] ".$msg."\n";
|
$log = date("Y-m-d h:i:s")." [LOAD] ".$msg."\n";
|
||||||
$this->log($log);
|
$this->log($log);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Info($msg){
|
public function Info($msg) : void {
|
||||||
$log = date("Y-m-d h:i:s")." [INFO] ".$msg."\n";
|
$log = date("Y-m-d h:i:s")." [INFO] ".$msg."\n";
|
||||||
$this->log($log);
|
$this->log($log);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Table($msg){
|
public function Table($msg) : void {
|
||||||
$log = date("Y-m-d h:i:s")." [TABLE] ".$msg."\n";
|
$log = date("Y-m-d h:i:s")." [TABLE] ".$msg."\n";
|
||||||
$this->log($log);
|
$this->log($log);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function User($msg){
|
public function User($msg) : void {
|
||||||
$log = date("Y-m-d h:i:s")." [USER] ".$msg."\n";
|
$log = date("Y-m-d h:i:s")." [USER] ".$msg."\n";
|
||||||
$this->log($log);
|
$this->log($log);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function InfoCache($msg){
|
public function InfoCache($msg) : void {
|
||||||
$log = date("Y-m-d h:i:s")." [INFO] ".$msg."\n";
|
$log = date("Y-m-d h:i:s")." [INFO] ".$msg."\n";
|
||||||
echo($log);
|
echo($log);
|
||||||
$this->infoCache = $this->infoCache.$log;
|
$this->infoCache = $this->infoCache.$log;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function DropCache(){
|
public function DropCache() : void {
|
||||||
if($this->LonaDB->config["logging"]) fwrite($this->LogFile, $this->infoCache);
|
if($this->LonaDB->config["logging"]) fwrite($this->LogFile, $this->infoCache);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -74,7 +74,7 @@ class LonaDB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function setup() {
|
private function setup() : void {
|
||||||
$this->Logger->InfoCache("Invalid or missing config. Starting setup.");
|
$this->Logger->InfoCache("Invalid or missing config. Starting setup.");
|
||||||
echo "Database port:\n";
|
echo "Database port:\n";
|
||||||
$portHandle = fopen ("php://stdin","r");
|
$portHandle = fopen ("php://stdin","r");
|
||||||
|
@ -27,7 +27,7 @@ class Server {
|
|||||||
$this->startSocket();
|
$this->startSocket();
|
||||||
}
|
}
|
||||||
|
|
||||||
private function loadActions() {
|
private function loadActions() : void {
|
||||||
$actionFiles = scandir(__DIR__ . "/Actions/");
|
$actionFiles = scandir(__DIR__ . "/Actions/");
|
||||||
foreach ($actionFiles as $file) {
|
foreach ($actionFiles as $file) {
|
||||||
if (pathinfo($file, PATHINFO_EXTENSION) === 'php') {
|
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 = new TCPServer($this->address, $this->port);
|
||||||
|
|
||||||
$this->server->on('start', function ($server)
|
$this->server->on('start', function ($server)
|
||||||
@ -53,7 +53,7 @@ class Server {
|
|||||||
$this->server->start();
|
$this->server->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handleData(string $dataString, TCPServer $server, int $fd) {
|
private function handleData(string $dataString, TCPServer $server, int $fd) : void {
|
||||||
try {
|
try {
|
||||||
$data = json_decode($dataString, true);
|
$data = json_decode($dataString, true);
|
||||||
|
|
||||||
@ -64,18 +64,21 @@ class Server {
|
|||||||
if (!$login) {
|
if (!$login) {
|
||||||
$response = json_encode(["success" => false, "err" => "login_error", "process" => $data['process']]);
|
$response = json_encode(["success" => false, "err" => "login_error", "process" => $data['process']]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
|
$server->close($fd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$data['process']) {
|
if (!$data['process']) {
|
||||||
$response = json_encode(["success" => false, "err" => "bad_process_id", "process" => $data['process']]);
|
$response = json_encode(["success" => false, "err" => "bad_process_id", "process" => $data['process']]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
|
$server->close($fd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->actions[$data['action']]) {
|
if (!$this->actions[$data['action']]) {
|
||||||
$response = json_encode(["success" => false, "err" => "action_not_found"]);
|
$response = json_encode(["success" => false, "err" => "action_not_found"]);
|
||||||
$server->send($fd, $response);
|
$server->send($fd, $response);
|
||||||
|
$server->close($fd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,48 +43,55 @@ class Table{
|
|||||||
$this->Name = $this->file;
|
$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;
|
if($user === "") return $this->Owner;
|
||||||
|
|
||||||
$this->LonaDB->Logger->Table("(".$this->file.") User '".$user."' is trying to get the owner name.");
|
$this->LonaDB->Logger->Table("(".$this->file.") User '".$user."' is trying to get the owner name.");
|
||||||
if($this->CheckPermission($user, "read")) return;
|
|
||||||
return $this->Owner;
|
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."'");
|
$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->Owner = $name;
|
||||||
$this->Save();
|
$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)."'");
|
$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->data[$name] = $value;
|
||||||
$this->Save();
|
$this->Save();
|
||||||
$this->LonaDB->Logger->Table("(".$this->file.") User '".$user."' set the variable '".$name."' to '".strval($value)."'");
|
$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."'");
|
$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]);
|
unset($this->data[$name]);
|
||||||
$this->Save();
|
$this->Save();
|
||||||
$this->LonaDB->Logger->Table("(".$this->file.") User '".$user."' deleted the variable '".$name."'");
|
$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."'");
|
$this->LonaDB->Logger->Table("(".$this->file.") User '".$user."' is trying to get the variable '".$name."'");
|
||||||
if(!$this->CheckPermission($user, "read")) return null;
|
if(!$this->CheckPermission($user, "read")) return null;
|
||||||
|
|
||||||
return $this->data[$name];
|
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."'");
|
$this->LonaDB->Logger->Table("(".$this->file.") Checkin permission '".$permission."' for user '".$user."'");
|
||||||
|
|
||||||
if($user === $this->Owner) return true;
|
if($user === $this->Owner) return true;
|
||||||
@ -94,7 +101,7 @@ class Table{
|
|||||||
return true;
|
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."'");
|
$this->LonaDB->Logger->Table("(".$this->file.") Checkin if variable '".$name."' exists for user '".$user."'");
|
||||||
|
|
||||||
if(!$this->CheckPermission($user, 'read')) return false;
|
if(!$this->CheckPermission($user, 'read')) return false;
|
||||||
@ -103,25 +110,33 @@ class Table{
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function AddPermission(string $name, string $permission, string $user){
|
public function AddPermission(string $name, string $permission, string $user) : bool {
|
||||||
if($user !== $this->Owner && !$this->permissions[$user]["admin"]) return
|
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."'");
|
$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") return
|
}
|
||||||
|
if($user !== $this->Owner && $permission === "admin") {
|
||||||
$this->LonaDB->Logger->Table("(".$this->file.") Not the Owner! Adding permission '".$permission."' for user '".$name."', requested by '".$user."'");
|
$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->LonaDB->Logger->Table("(".$this->file.") Adding permission '".$permission."' for user '".$name."', requested by '".$user."'");
|
||||||
|
|
||||||
$this->permissions[$name][$permission] = true;
|
$this->permissions[$name][$permission] = true;
|
||||||
$this->Save();
|
$this->Save();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function RemovePermission(string $name, string $permission, string $user){
|
public function RemovePermission(string $name, string $permission, string $user) : bool {
|
||||||
if($user !== $this->Owner && !$this->permissions[$user]["admin"]) return
|
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."'");
|
$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") return
|
if($user !== $this->Owner && $permission === "admin") {
|
||||||
$this->LonaDB->Logger->Table("(".$this->file.") Not the Owner! Removing permission '".$permission."' for user '".$name."', requested by '".$user."'");
|
$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."'");
|
$this->LonaDB->Logger->Table("(".$this->file.") Removing permission '".$permission."' for user '".$name."', requested by '".$user."'");
|
||||||
|
|
||||||
|
@ -30,13 +30,14 @@ class TableManager{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function GetTable(string $name){
|
public function GetTable(string $name) : mixed {
|
||||||
if(!$this->Tables[$name]) return false;
|
if(!$this->Tables[$name]) return false;
|
||||||
return $this->Tables[$name];
|
return $this->Tables[$name];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function ListTables(string $user = ""){
|
public function ListTables(string $user = "") : array {
|
||||||
$tables = array();
|
$tables = array();
|
||||||
|
|
||||||
if($user !== ""){
|
if($user !== ""){
|
||||||
foreach($this->Tables as $table){
|
foreach($this->Tables as $table){
|
||||||
if($table->CheckPermission($user, "write")) array_push($tables, $table->Name);
|
if($table->CheckPermission($user, "write")) array_push($tables, $table->Name);
|
||||||
@ -52,7 +53,7 @@ class TableManager{
|
|||||||
return $tables;
|
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 . "'");
|
$this->LonaDB->Logger->Table("Trying to create table '" . $name . "', owned by user '" . $owner . "'");
|
||||||
if($this->Tables[$name]) {
|
if($this->Tables[$name]) {
|
||||||
$this->LonaDB->Logger->Error("Table '" . $name . "' already exists");
|
$this->LonaDB->Logger->Error("Table '" . $name . "' already exists");
|
||||||
@ -63,18 +64,21 @@ class TableManager{
|
|||||||
return true;
|
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 . "'");
|
$this->LonaDB->Logger->Table("Trying to delete table '" . $name . "', requested by user '" . $user . "'");
|
||||||
if(!$this->Tables[$name]) {
|
if(!$this->Tables[$name]) {
|
||||||
$this->LonaDB->Logger->Error("Table '" . $name . "' doesn't exist");
|
$this->LonaDB->Logger->Error("Table '" . $name . "' doesn't exist");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($user !== $this->Tables[$name]->GetOwner()) return
|
if($user !== $this->Tables[$name]->GetOwner()) {
|
||||||
$this->LonaDB->Logger->Table("Not the owner! Trying to delete table '" . $name . "', requested by user '" . $user . "'");
|
$this->LonaDB->Logger->Table("Not the owner! Trying to delete table '" . $name . "', requested by user '" . $user . "'");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
unlink("data/".$name.".json");
|
unlink("data/".$name.".json");
|
||||||
unset($this->Tables[$name]);
|
unset($this->Tables[$name]);
|
||||||
$this->LonaDB->Logger->Table("Deleted table '" . $name . "', requested by user '" . $user . "'");
|
$this->LonaDB->Logger->Table("Deleted table '" . $name . "', requested by user '" . $user . "'");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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);
|
$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 . "'");
|
$this->LonaDB->Logger->User("Trying to check password for user '" . $name . "'");
|
||||||
if($name === "root" && $password === $this->LonaDB->config["root"]) return true;
|
if($name === "root" && $password === $this->LonaDB->config["root"]) return true;
|
||||||
|
|
||||||
@ -44,8 +44,24 @@ class UserManager{
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function CreateUser(string $name, string $password){
|
public function CheckUser(string $name) : bool {
|
||||||
if($name === "root") return;
|
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 . "'");
|
$this->LonaDB->Logger->User("Trying to create user '" . $name . "'");
|
||||||
if($this->Users[$name]) {
|
if($this->Users[$name]) {
|
||||||
$this->LonaDB->Logger->Error("User '" . $name . "' already exists");
|
$this->LonaDB->Logger->Error("User '" . $name . "' already exists");
|
||||||
@ -55,33 +71,41 @@ class UserManager{
|
|||||||
$this->Users[$name] = array(
|
$this->Users[$name] = array(
|
||||||
"role" => "user",
|
"role" => "user",
|
||||||
"password" => $password,
|
"password" => $password,
|
||||||
"permissions" => []
|
"permissions" => [
|
||||||
|
"default" => true
|
||||||
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->LonaDB->Logger->User("User '" . $name . "' has been created");
|
$this->LonaDB->Logger->User("User '" . $name . "' has been created");
|
||||||
|
|
||||||
$this->Save();
|
$this->Save();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function DeleteUser(string $name){
|
public function DeleteUser(string $name) : bool {
|
||||||
if($name === "root") return;
|
if($name === "root") return false;
|
||||||
$this->LonaDB->Logger->User("Trying to delete user '" . $name . "'");
|
$this->LonaDB->Logger->User("Trying to delete user '" . $name . "'");
|
||||||
|
|
||||||
if(!$this->Users[$name]) {
|
if(!$this->Users[$name]) {
|
||||||
$this->LonaDB->Logger->Error("User '" . $name . "' doesn't exist");
|
$this->LonaDB->Logger->Error("User '" . $name . "' doesn't exist");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($this->Users[$name]);
|
unset($this->Users[$name]);
|
||||||
$this->LonaDB->Logger->User("Deleted user '" . $name . "'");
|
$this->LonaDB->Logger->User("Deleted user '" . $name . "'");
|
||||||
$this->Save();
|
$this->Save();
|
||||||
}
|
|
||||||
|
|
||||||
public function CheckPermission(string $name){
|
|
||||||
return true;
|
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));
|
$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);
|
$encrypted = openssl_encrypt(json_encode($this->Users), AES_256_CBC, $this->LonaDB->config["encryptionKey"], 0, $iv);
|
||||||
|
Loading…
Reference in New Issue
Block a user