Kaydet (Commit) 8c28f704 authored tarafından mertcelen's avatar mertcelen

Module base system added.

üst c6374adb
......@@ -43,6 +43,10 @@ class LoginController extends Controller
$user->save();
system_log(7,"LOGIN_SUCCESS");
hook("login_successful",[
"user" => $user
]);
}
public function attemptLogin(Request $request)
......
......@@ -179,6 +179,8 @@ class AddController extends Controller
}
}
}
hook("server_add_successful",["server" => $this->server]);
return respond(route('server_one',$this->server->id),300);
}
}
......@@ -31,6 +31,14 @@ class MainController extends Controller
public function verifyKey()
{
hook("server_key_verify",["key" => [
"key_type" => request('key_type'),
"ip_address" => request('ip_address'),
"username" => request('username'),
"password" => request('password'),
"port" => request('port')
]]);
if(request('key_type') == "linux_ssh"){
return SSHConnector::verify(request('ip_address'),request('username'),request('password'),request('port'));
}else if (request('key_type') == "windows_powershell"){
......
......@@ -301,6 +301,29 @@ if (!function_exists('sandbox')) {
}
}
if (!function_exists('hook')) {
/**
* @param $name
* @param array $data
* @return void
*/
function hook($name, $data = [])
{
$hooks = App\ModuleHook::where('hook',$name)->get();
array_key_exists("user", $data) ? $data["user"] = user() : null;
array_key_exists("extension", $data) ? $data["extension"] = extension() : null;
array_key_exists("server", $data) ? $data["server"] = server() : null;
$data = base64_encode(json_encode($data));
foreach($hooks as $hook){
$command = "/liman/modules/" . strtolower($hook->module_name) . "/main $name $data";
shell_exec("bash -c '$command & disown'");
}
}
}
if (!function_exists('redirect_now')) {
function redirect_now($url, $code = 302)
{
......
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Module extends Model
{
use UsesUuid;
protected $fillable = [
"name", "enabled"
];
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* @method static where(string $string, $name)
*/
class ModuleHook extends Model
{
use UsesUuid;
protected $fillable = [
"module_id", "module_name", "hook", "enabled"
];
}
......@@ -49,4 +49,11 @@
0 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
),
),
'spatie/laravel-web-tinker' =>
array (
'providers' =>
array (
0 => 'Spatie\\WebTinker\\WebTinkerServiceProvider',
),
),
);
\ No newline at end of file
......@@ -29,12 +29,13 @@
25 => 'Laravel\\Tinker\\TinkerServiceProvider',
26 => 'Carbon\\Laravel\\ServiceProvider',
27 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
28 => 'App\\Providers\\AppServiceProvider',
29 => 'App\\Providers\\AuthServiceProvider',
30 => 'App\\Providers\\BroadcastServiceProvider',
31 => 'App\\Providers\\EventServiceProvider',
32 => 'App\\Providers\\RouteServiceProvider',
33 => 'App\\Providers\\TusServiceProvider',
28 => 'Spatie\\WebTinker\\WebTinkerServiceProvider',
29 => 'App\\Providers\\AppServiceProvider',
30 => 'App\\Providers\\AuthServiceProvider',
31 => 'App\\Providers\\BroadcastServiceProvider',
32 => 'App\\Providers\\EventServiceProvider',
33 => 'App\\Providers\\RouteServiceProvider',
34 => 'App\\Providers\\TusServiceProvider',
),
'eager' =>
array (
......@@ -54,12 +55,13 @@
13 => 'Laravel\\Tinker\\TinkerServiceProvider',
14 => 'Carbon\\Laravel\\ServiceProvider',
15 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
16 => 'App\\Providers\\AppServiceProvider',
17 => 'App\\Providers\\AuthServiceProvider',
18 => 'App\\Providers\\BroadcastServiceProvider',
19 => 'App\\Providers\\EventServiceProvider',
20 => 'App\\Providers\\RouteServiceProvider',
21 => 'App\\Providers\\TusServiceProvider',
16 => 'Spatie\\WebTinker\\WebTinkerServiceProvider',
17 => 'App\\Providers\\AppServiceProvider',
18 => 'App\\Providers\\AuthServiceProvider',
19 => 'App\\Providers\\BroadcastServiceProvider',
20 => 'App\\Providers\\EventServiceProvider',
21 => 'App\\Providers\\RouteServiceProvider',
22 => 'App\\Providers\\TusServiceProvider',
),
'deferred' =>
array (
......
......@@ -30,7 +30,8 @@
"laravel/tinker": "^1.0",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^3.0",
"phpunit/phpunit": "^8.0"
"phpunit/phpunit": "^8.0",
"spatie/laravel-web-tinker": "^1.7"
},
"autoload": {
"files": [
......
......@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "588ebc48136eff3be065d85973d8704d",
"content-hash": "85d1215f53f34d47a10b38ecec8d2e1a",
"packages": [
{
"name": "ankitpokhrel/tus-php",
......@@ -5338,6 +5338,7 @@
"email": "jakub.onderka@gmail.com"
}
],
"abandoned": "php-parallel-lint/php-console-color",
"time": "2018-09-29T17:23:10+00:00"
},
{
......@@ -5384,6 +5385,7 @@
}
],
"description": "Highlight PHP code in terminal",
"abandoned": "php-parallel-lint/php-console-highlighter",
"time": "2018-09-29T18:48:56+00:00"
},
{
......@@ -7246,6 +7248,68 @@
],
"time": "2020-02-14T15:25:33+00:00"
},
{
"name": "spatie/laravel-web-tinker",
"version": "1.7.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-web-tinker.git",
"reference": "be6f2dedf85beede027112dee630b391c8dd49ee"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-web-tinker/zipball/be6f2dedf85beede027112dee630b391c8dd49ee",
"reference": "be6f2dedf85beede027112dee630b391c8dd49ee",
"shasum": ""
},
"require": {
"illuminate/cookie": "^5.8|^6.0|^7.0",
"illuminate/session": "^5.8|^6.0|^7.0",
"illuminate/support": "^5.8|^6.0|^7.0",
"laravel/tinker": "^1.0|^2.0",
"php": "^7.2"
},
"require-dev": {
"orchestra/testbench": "^3.8|^4.0|^5.0",
"phpunit/phpunit": "^8.0|^9.0"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Spatie\\WebTinker\\WebTinkerServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Spatie\\WebTinker\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Freek Van der Herten",
"email": "freek@spatie.be",
"homepage": "https://spatie.be",
"role": "Developer"
}
],
"description": "Artisan Tinker in your browser",
"homepage": "https://github.com/spatie/laravel-web-tinker",
"keywords": [
"Tinker",
"debug",
"development",
"laravel",
"spatie",
"web-tinker"
],
"time": "2020-03-04T20:02:26+00:00"
},
{
"name": "symfony/filesystem",
"version": "v5.0.6",
......
<?php
return [
//Available Hooks
"senders" => [
"login_attempt",
"login_successful",
"login_failed",
"logout_attempt",
"logout_successful",
"server_key_verify",
"server_key_add",
"server_add_attempt",
"server_add_successful",
"server_update",
"server_delete",
"server_extension_add",
"server_extension_remove",
"extension_upload_attempt",
"extension_upload_successful",
"extension_delete_attempt",
"extension_delete_successful",
"user_add_attempt",
"user_add_successful",
"user_delete_attempt",
"user_delete_successful",
"user_password_reset_attempt",
"user_password_reset_successful",
"role_group_add_attempt",
"role_group_add_successful",
"user_to_role_group_attempt",
"user_to_role_group_successful",
"delete_user_from_role_group_attempt",
"delete_user_from_role_group_successful",
"role_group_extension_grant_attempt",
"role_group_extension_grant_successful",
"role_group_extension_revoke_attempt",
"role_group_extension_revoke_successful",
"role_group_server_grant_attempt",
"role_group_server_grant_successful",
"role_group_server_revoke_attempt",
"role_group_server_revoke_successful",
"role_group_function_grant_attempt",
"role_group_function_grant_successful",
"role_group_function_revoke_attempt",
"role_group_function_revoke_successful",
"server_group_create_attempt",
"server_group_create_successful",
"server_group_update_attempt",
"server_group_update_successful",
"server_group_remove_attempt",
"server_group_remove_successful",
"certificate_add_attempt",
"certificate_add_successful",
"certificate_renew_attempt",
"certificate_renew_successful",
"certificate_revoke_attempt",
"certificate_revoke_successful",
"health_problem",
"new_liman_update",
"wallet_cache_clear_attempt",
"wallet_cache_clear_successful",
"wallet_new_key_add_attempt",
"wallet_new_key_add_successful",
"wallet_setting_add_attempt",
"wallet_setting_add_successful",
"wallet_setting_update_attempt",
"wallet_setting_update_successful",
"wallet_setting_delete_attempt",
"wallet_setting_delete_successful"
],
"listeners" => [
"user_create",
"user_update",
"user_delete",
"server_add",
"server_update",
"server_delete",
"server_extension_add",
"server_extension_remove",
"extension_add",
"extension_remove",
"certificate_add",
"certificate_remove"
],
// Hooks execute timeout
"timeout" => 5
];
\ No newline at end of file
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateModulesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('modules', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('name');
$table->boolean('enabled')->default(false);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('modules');
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateModuleHooksTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('module_hooks', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->uuid('module_id');
$table->string('hook');
$table->string('module_name');
$table->boolean('enabled')->default(true);
$table->foreign("module_id")->references("id")->on("modules")->onDelete("cascade");
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('module_hooks');
}
}
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}strong{font-weight:bolder}code{font-family:monospace,monospace;font-size:1em}button,input,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[hidden],template{display:none}html{font-family:sans-serif}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}pre{margin:0}button{background:transparent;padding:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}*,:after,:before{border:0 solid currentColor}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:inherit;opacity:.5}input::-moz-placeholder,textarea::-moz-placeholder{color:inherit;opacity:.5}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:inherit;opacity:.5}input::placeholder,textarea::placeholder{color:inherit;opacity:.5}[role=button],button{cursor:pointer}:root{--color-text:#000;--color-warning:#ffffcf;--color-error:#d14;--color-keyword:#000;--color-operator:#000;--color-variable:#a09f91;--color-number:#099;--color-string:#d14;--color-dimmed:#a09f91;--color-background:#fff;--color-line:#f3f7f9;--color-gutter:#fafdfc}:root.theme-dark{--color-text:#fff;--color-warning:#eab21c;--color-error:#d14;--color-keyword:#fff;--color-operator:#d14;--color-variable:#a6e22e;--color-number:#ae81ff;--color-string:#e6db74;--color-dimmed:#706b5c;--color-background:#272822;--color-line:#3b3d34;--color-gutter:#2f3129}@media (prefers-color-scheme:dark){:root.theme-auto{--color-text:#fff;--color-warning:#eab21c;--color-error:#d14;--color-keyword:#fff;--color-operator:#d14;--color-variable:#a6e22e;--color-number:#ae81ff;--color-string:#e6db74;--color-dimmed:#706b5c;--color-background:#272822;--color-line:#3b3d34;--color-gutter:#2f3129}}*{position:relative;margin:0;padding:0;color:inherit;font:inherit}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}html{background-color:var(--color-background);font-family:IBM Plex Mono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;line-height:1.5;color:var(--color-text);-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px}code,pre{font-family:IBM Plex Mono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}::-moz-selection{background-color:rgba(150,120,200,.3)}::selection{background-color:rgba(150,120,200,.3)}.CodeMirror.cm-s-tinker{height:100%;font-family:IBM Plex Mono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;line-height:1.5;background-color:var(--color-background);color:inherit}.CodeMirror.cm-s-tinker .CodeMirror-cursor{border-color:var(--color-text)}.CodeMirror.cm-s-tinker .CodeMirror-lines{padding-top:1rem;padding-bottom:1rem}.CodeMirror.cm-s-tinker .CodeMirror-gutters{background-color:var(--color-gutter);padding-left:.5rem;border-right-width:2px;border-color:var(--color-line)}.CodeMirror.cm-s-tinker .CodeMirror-linenumber{color:var(--color-dimmed);font-size:1rem}.CodeMirror.cm-s-tinker .CodeMirror pre{font-family:IBM Plex Mono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;white-space:nowrap}.CodeMirror.cm-s-tinker .CodeMirror-selected{background:rgba(150,120,200,.2)}.CodeMirror.cm-s-tinker .CodeMirror-focused .CodeMirror-selected{background:rgba(150,120,200,.3)}.CodeMirror.cm-s-tinker .cm-comment{color:var(--color-dimmed);font-style:italic}.CodeMirror.cm-s-tinker .cm-number{color:var(--color-number)}.CodeMirror.cm-s-tinker .cm-string{color:var(--color-string)}.CodeMirror.cm-s-tinker .cm-variable-2{color:var(--color-variable)}.CodeMirror.cm-s-tinker .cm-operator{color:var(--color-operator)}.CodeMirror.cm-s-tinker .cm-keyword{color:var(--color-keyword);font-weight:600}.layout{position:fixed;height:100vh;width:100vw;display:grid;grid-template-columns:100vw}.layout-gutter{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background-color:var(--color-line);height:auto;cursor:ns-resize}.layout-gutter:after{color:var(--color-dimmed);text-align:center;content:"\2022\2022\2022";font-size:10px;line-height:6px;word-break:break-all}.layout-columns.layout{grid-template-rows:100vh}.layout-columns .layout-gutter{cursor:ew-resize}.output{background-color:var(--color-gutter);padding:1rem 2rem;overflow:scroll}.output warning{background-color:var(--color-warning)}.output error,.output warning{display:block;padding-left:.5rem;padding-right:.5rem;white-space:normal}.output error{background-color:var(--color-error)}.resize{resize:both}.text-dimmed{color:var(--color-dimmed)}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
.CodeMirror-lines {
padding: 8px 0;
}
.CodeMirror-gutters {
box-shadow: 1px 0 2px 0 rgba(0, 0, 0, .5);
-webkit-box-shadow: 1px 0 2px 0 rgba(0, 0, 0, .5);
background-color: #f8f8ff;
padding-right: 10px;
z-index: 3;
border: none;
}
div.CodeMirror-cursor {
border-left: 3px solid #000;
}
.CodeMirror-activeline-background {
background: #00000012;
}
.CodeMirror-selected {
background: #bcd5fa;
}
.cm-comment {
font-style: italic;
color: #998;
}
.cm-number {
color: null;
}
.cm-atom {
color: null;
}
.cm-string {
color: #e020a3;
}
.cm-variable-2 {
color: #099;
}
.cm-property {
color: null;
}
.cm-keyword {
color: null;
}
.cm-operator {
color: null;
}
{
"/app.js": "/app.js?id=54675ea5df087610508e",
"/app.css": "/app.css?id=1e19e507bfac7fe73255"
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment