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

WIP > Job dispatch added to the sandbox.

üst b50c90e6
......@@ -18,7 +18,7 @@ CACHE_DRIVER=array
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync
QUEUE_DRIVER=database
SERVER_CONNECTION_TIMEOUT=5000
USER_WIDGET_COUNT=10
......
......@@ -20,6 +20,7 @@ use Illuminate\Support\Facades\DB;
use Illuminate\View\View;
use Illuminate\Support\Str;
use App\ServerLog;
use App\Jobs\ExtensionJob;
/**
* Class OneController
......@@ -172,6 +173,72 @@ class OneController extends Controller
return response($output, $code);
}
public function internalAddJob()
{
if ($_SERVER['SERVER_ADDR'] != $_SERVER['REMOTE_ADDR']) {
system_log(5,"EXTENSION_INTERNAL_NO_PERMISSION",[
"extension_id" => extension()->id,
]);
abort(403, 'Not Allowed');
}
$token = Token::where('token', request('token'))->first() or abort(403, "Token gecersiz");
$server = Server::find(request('server_id')) or abort(404, 'Sunucu Bulunamadi');
if (!Permission::can($token->user_id, 'server','id', $server->id)) {
system_log(7,"EXTENSION_NO_PERMISSION_SERVER",[
"extension_id" => extension()->id,
"server_id" => request('server_id')
]);
return "Sunucu icin yetkiniz yok.";
}
$extension = Extension::find(request('extension_id')) or abort(404, 'Eklenti Bulunamadi');
if (!Permission::can($token->user_id, 'extension','id', $extension->id)) {
system_log(7,"EXTENSION_NO_PERMISSION_SERVER",[
"extension_id" => extension()->id,
"server_id" => request('server_id')
]);
return "Eklenti için yetkiniz yok.";
}
ExtensionJob::dispatch($server,$extension,user(),request('function_name'),request('parameters'))->onQueue('extension_queue');
return "ok";
}
public function internalJobsList()
{
if ($_SERVER['SERVER_ADDR'] != $_SERVER['REMOTE_ADDR']) {
system_log(5,"EXTENSION_INTERNAL_NO_PERMISSION",[
"extension_id" => extension()->id,
]);
abort(403, 'Not Allowed');
}
$token = Token::where('token', request('token'))->first() or abort(403, "Token gecersiz");
$server = Server::find(request('server_id')) or abort(404, 'Sunucu Bulunamadi');
if (!Permission::can($token->user_id, 'server','id', $server->id)) {
system_log(7,"EXTENSION_NO_PERMISSION_SERVER",[
"extension_id" => extension()->id,
"server_id" => request('server_id')
]);
return "Sunucu icin yetkiniz yok.";
}
$extension = Extension::find(request('extension_id')) or abort(404, 'Eklenti Bulunamadi');
if (!Permission::can($token->user_id, 'extension','id', $extension->id)) {
system_log(7,"EXTENSION_NO_PERMISSION_SERVER",[
"extension_id" => extension()->id,
"server_id" => request('server_id')
]);
return "Eklenti icin yetkiniz yok.";
}
$job = (new ExtensionJob($server,$extension,user(),request('function_name')));
$id = dispatch($job);
return $id;
}
public function internalExtensionApi()
{
if ($_SERVER['SERVER_ADDR'] != $_SERVER['REMOTE_ADDR']) {
......
......@@ -352,12 +352,12 @@ function generateSandboxCommand($serverObj, $extensionObj, $extension_id, $user_
$request = json_encode($request);
$apiRoute = route('extension_function_api', [
"extension_id" => extension()->id
"extension_id" => $extension_id
]);
$navigationRoute = route('extension_server_route', [
"server_id" => $serverObj->id,
"extension_id" => extension()->id,
"extension_id" => $extension_id,
"city" => $serverObj->city
]);
......
......@@ -25,6 +25,7 @@ class VerifyCsrfToken extends Middleware
"/lmn/private/getFileApi",
"/lmn/private/runScriptApi",
"/lmn/private/putSession",
"/lmn/private/reverseProxyRequest"
"/lmn/private/reverseProxyRequest",
"/lmn/private/dispatchJob"
];
}
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class ExtensionJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $extension,$server,$user,$function,$parameters;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($server,$extension,$user,$function,$parameters)
{
$this->extension = $extension;
$this->server = $server;
$this->user = $user;
$this->function = $function;
$this->parameters = $parameters;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$parameters = json_decode($this->parameters);
foreach($parameters as $key=>$param){
request()->add([$key=>$param]);
}
$command = generateSandboxCommand($this->server, $this->extension, $this->extension->id,$this->user->id, "null", "null", $this->function);
$output = shell_exec($command);
system_log(7,"EXTENSION_BACKGROUND_RUN",[
"extension_id" => $this->extension->id,
"server_id" => $this->server->id,
"target_name" => $this->function
]);
$code = 200;
try{
$json = json_decode($output,true);
if(array_key_exists("status",$json)){
$code = intval($json["status"]);
}
}catch (\Exception $exception){};
if(strval($code) == "200" && $json["message"] != ""){
return true;
}else{
return false;
}
}
}
......@@ -8,7 +8,7 @@ use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\BroadcastMessage;
class NotificationSent extends Notification
class NotificationSent extends Notification implements ShouldQueue
{
use Queueable;
......
This diff is collapsed.
......@@ -35,10 +35,10 @@ return [
],
'database' => [
'driver' => 'sync',
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'expire' => 60,
'retry_after' => 90,
],
'beanstalkd' => [
......
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateJobsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('jobs', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('queue')->index();
$table->longText('payload');
$table->unsignedTinyInteger('attempts');
$table->unsignedInteger('reserved_at')->nullable();
$table->unsignedInteger('available_at');
$table->unsignedInteger('created_at');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('jobs');
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateFailedJobsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('failed_jobs', function (Blueprint $table) {
$table->bigIncrements('id');
$table->text('connection');
$table->text('queue');
$table->longText('payload');
$table->longText('exception');
$table->timestamp('failed_at')->useCurrent();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('failed_jobs');
}
}
......@@ -115,6 +115,8 @@ Route::post('/lmn/private/putSession','Extension\OneController@internalPutSessio
Route::post('/lmn/private/reverseProxyRequest','Extension\OneController@internalAddProxyConfig')->middleware(['auth', 'permissions']);
Route::post('/lmn/private/dispatchJob','Extension\OneController@internalAddJob')->middleware(['auth', 'permissions']);
Route::any('/upload/{any?}', function () {
$server = app('tus-server');
$extension_id = request("extension_id");
......
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