diff --git a/app/Console/Commands/UpdateAll.php b/app/Console/Commands/UpdateAll.php index df4fc26b3..e69419beb 100644 --- a/app/Console/Commands/UpdateAll.php +++ b/app/Console/Commands/UpdateAll.php @@ -61,7 +61,7 @@ class UpdateAll extends Command $command = "update {$alias} {$company_id}"; - if (true !== $result = Console::run($command, true)) { + if (true !== $result = Console::run($command)) { $message = !empty($result) ? $result : trans('modules.errors.finish', ['module' => $alias]); $this->error($message); diff --git a/app/Utilities/Console.php b/app/Utilities/Console.php index 1ed13c947..dccab67f1 100644 --- a/app/Utilities/Console.php +++ b/app/Utilities/Console.php @@ -3,29 +3,48 @@ namespace App\Utilities; use Illuminate\Console\Application; +use Illuminate\Support\Str; +use Symfony\Component\Process\Exception\InvalidArgumentException; +use Symfony\Component\Process\Exception\LogicException; +use Symfony\Component\Process\Exception\ProcessFailedException; +use Symfony\Component\Process\Exception\RuntimeException; use Symfony\Component\Process\Process; class Console { - public static function run($string, $all_output = false, $timeout = 0) + public static function run($string, $timeout = 0) { $command = Application::formatCommandString($string); logger('Console command:: ' . $command); - $process = Process::fromShellCommandline($command, base_path()); - $process->setTimeout($timeout); + try { + $process = Process::fromShellCommandline($command, base_path()); + $process->setTimeout($timeout); - $process->run(); + $process->mustRun(); - if ($process->isSuccessful()) { - return true; + $output = $process->getOutput(); + + if (static::isValidOutput($output)) { + return true; + } + } catch (InvalidArgumentException | LogicException | ProcessFailedException | RuntimeException $e) { + $output = $e->getMessage(); } - $output = $all_output ? $process->getOutput() : $process->getErrorOutput(); - logger('Console output:: ' . $output); return $output; } + + public static function isValidOutput($output) + { + $errors = [ + 'Content-Type: application/json', + 'CSRF token mismatch', + ]; + + return !Str::contains($output, $errors); + } }