vito/app/Http/Controllers/ConsoleController.php
2024-11-01 16:49:57 +01:00

46 lines
1.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Server;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Post;
#[Middleware('auth')]
class ConsoleController extends Controller
{
#[Post('/{server}/console', name: 'servers.console.run')]
public function run(Server $server, Request $request)
{
$this->authorize('update', $server);
$this->validate($request, [
'user' => [
'required',
Rule::in(['root', $server->ssh_user]),
],
'command' => 'required|string',
]);
return response()->stream(
function () use ($server, $request) {
$ssh = $server->ssh($request->user);
$log = 'console-'.time();
$ssh->exec(command: $request->command, log: $log, stream: true, streamCallback: function ($output) {
echo $output;
ob_flush();
flush();
});
},
200,
[
'Cache-Control' => 'no-cache',
'X-Accel-Buffering' => 'no',
'Content-Type' => 'text/event-stream',
]
);
}
}