From 852be3087bc48199643b1e5c80b8116a9b1f8014 Mon Sep 17 00:00:00 2001 From: Netkas Date: Wed, 7 Dec 2022 21:56:02 -0500 Subject: [PATCH] Implemented Bash runner https://git.n64.cc/nosial/ncc/-/issues/32 --- src/ncc/Classes/BashExtension/BashRunner.php | 53 ++++++++++++++++++++ src/ncc/Managers/ExecutionPointerManager.php | 3 ++ src/ncc/Utilities/Functions.php | 2 + 3 files changed, 58 insertions(+) create mode 100644 src/ncc/Classes/BashExtension/BashRunner.php diff --git a/src/ncc/Classes/BashExtension/BashRunner.php b/src/ncc/Classes/BashExtension/BashRunner.php new file mode 100644 index 0000000..6a8e953 --- /dev/null +++ b/src/ncc/Classes/BashExtension/BashRunner.php @@ -0,0 +1,53 @@ +Execute->Target = null; + $execution_unit->ExecutionPolicy = $policy; + $execution_unit->Data = Base64::encode(IO::fread($path)); + + return $execution_unit; + } + + /** + * @inheritDoc + */ + public static function getFileExtension(): string + { + return '.bash'; + } + + /** + * @inheritDoc + */ + public static function prepareProcess(ExecutionPointer $pointer): Process + { + $bash_bin = PathFinder::findRunner(Runners::bash); + + if($pointer->ExecutionPolicy->Execute->Options !== null && count($pointer->ExecutionPolicy->Execute->Options) > 0) + return new Process(array_merge([$bash_bin, '-c', $pointer->FilePointer], $pointer->ExecutionPolicy->Execute->Options)); + return new Process([$bash_bin, '-c', $pointer->FilePointer]); + } + } \ No newline at end of file diff --git a/src/ncc/Managers/ExecutionPointerManager.php b/src/ncc/Managers/ExecutionPointerManager.php index c2f2dbb..775b439 100644 --- a/src/ncc/Managers/ExecutionPointerManager.php +++ b/src/ncc/Managers/ExecutionPointerManager.php @@ -7,6 +7,7 @@ use Exception; use ncc\Abstracts\Runners; use ncc\Abstracts\Scopes; + use ncc\Classes\BashExtension\BashRunner; use ncc\Classes\PhpExtension\PhpRunner; use ncc\Exceptions\AccessDeniedException; use ncc\Exceptions\ExecutionUnitNotFoundException; @@ -140,6 +141,7 @@ $bin_file = $package_bin_path . DIRECTORY_SEPARATOR . hash('haval128,4', $unit->ExecutionPolicy->Name); $bin_file .= match ($unit->ExecutionPolicy->Runner) { + Runners::bash => BashRunner::getFileExtension(), Runners::php => PhpRunner::getFileExtension(), default => throw new UnsupportedRunnerException('The runner \'' . $unit->ExecutionPolicy->Runner . '\' is not supported'), }; @@ -272,6 +274,7 @@ $process = match (strtolower($unit->ExecutionPolicy->Runner)) { + Runners::bash => BashRunner::prepareProcess($unit), Runners::php => PhpRunner::prepareProcess($unit), default => throw new UnsupportedRunnerException('The runner \'' . $unit->ExecutionPolicy->Runner . '\' is not supported'), }; diff --git a/src/ncc/Utilities/Functions.php b/src/ncc/Utilities/Functions.php index 8bf97b4..5e196c8 100644 --- a/src/ncc/Utilities/Functions.php +++ b/src/ncc/Utilities/Functions.php @@ -5,6 +5,7 @@ use Exception; use ncc\Abstracts\Runners; use ncc\Abstracts\Scopes; + use ncc\Classes\BashExtension\BashRunner; use ncc\Classes\PhpExtension\PhpRunner; use ncc\Exceptions\AccessDeniedException; use ncc\Exceptions\FileNotFoundException; @@ -257,6 +258,7 @@ public static function compileRunner(string $path, ExecutionPolicy $policy): ExecutionUnit { return match (strtolower($policy->Runner)) { + Runners::bash => BashRunner::processUnit($path, $policy), Runners::php => PhpRunner::processUnit($path, $policy), default => throw new UnsupportedRunnerException('The runner \'' . $policy->Runner . '\' is not supported'), };