fix(security): secure remote command secrets and clone volume data

This commit is contained in:
Andras Bacsai
2026-10-27 09:47:18 +01:00
parent 1d286427ad
commit 1a2a5362ad
203 changed files with 4315 additions and 1065 deletions
@@ -0,0 +1,36 @@
<?php
use Illuminate\Process\PendingProcess;
use Illuminate\Support\Facades\Process;
use Illuminate\Support\Str;
/**
* The text of a faked process: its command line and its stdin. SSH command batches go to the
* server on stdin, so assertions on remote commands must read both.
*/
function remoteProcessScript(PendingProcess $process): string
{
$command = is_array($process->command) ? implode(' ', $process->command) : (string) $process->command;
return is_string($process->input) && $process->input !== '' ? $command."\n".$process->input : $command;
}
/**
* Process::fake() with command patterns that also match the SSH command batch on stdin.
* Unmatched processes get an empty successful result.
*
* @param array<string, mixed> $handlers pattern => result or closure, as for Process::fake()
*/
function fakeRemoteProcesses(array $handlers): void
{
Process::fake(function (PendingProcess $process) use ($handlers) {
$script = remoteProcessScript($process);
foreach ($handlers as $pattern => $handler) {
if (is_numeric($pattern) || $pattern === '*' || Str::is($pattern, $script)) {
return $handler instanceof Closure ? $handler($process) : $handler;
}
}
return Process::result();
});
}