diff options
author | Daniel Weipert <code@drogueronin.de> | 2021-04-28 13:58:55 +0200 |
---|---|---|
committer | Daniel Weipert <code@drogueronin.de> | 2021-04-28 13:58:55 +0200 |
commit | 20d9f63918d3b2bd75853182063f43eb36d7cd8a (patch) | |
tree | b6f48898297f761dcec8532b524844cc968ec565 /src | |
parent | 11dc8c730dda2c5bd38cb386f96331c5ce3cac9c (diff) |
Adjusts modulesv1.0.0
Diffstat (limited to 'src')
-rw-r--r-- | src/AptModule.php | 4 | ||||
-rw-r--r-- | src/CopyModule.php | 14 | ||||
-rw-r--r-- | src/FileModule.php | 4 | ||||
-rw-r--r-- | src/GitModule.php | 18 | ||||
-rw-r--r-- | src/Support/HandlesFiles.php | 27 | ||||
-rw-r--r-- | src/TemplateModule.php | 16 | ||||
-rw-r--r-- | src/UfwModule.php | 28 | ||||
-rw-r--r-- | src/UserModule.php | 4 |
8 files changed, 78 insertions, 37 deletions
diff --git a/src/AptModule.php b/src/AptModule.php index c133521..8820a13 100644 --- a/src/AptModule.php +++ b/src/AptModule.php @@ -36,7 +36,7 @@ class AptModule extends Module /** * @inheritDoc */ - public function getCommands(): array + public function execute(): void { if ($this->state === State::PRESENT) { Connection::exec("sudo apt install -y $this->package"); @@ -44,7 +44,5 @@ class AptModule extends Module else if ($this->state === State::ABSENT) { Connection::exec("sudo apt remove -y $this->package"); } - - return []; } } diff --git a/src/CopyModule.php b/src/CopyModule.php index 069f594..1f0b5c3 100644 --- a/src/CopyModule.php +++ b/src/CopyModule.php @@ -4,15 +4,17 @@ namespace PHPIAC\Modules; use PHPIAC\Connection; use PHPIAC\Module\Module; +use PHPIAC\Modules\Support\HandlesFiles; use PHPIAC\Modules\Support\HasPermissions; class CopyModule extends Module { - use HasPermissions; + use HasPermissions, HandlesFiles; protected string $src; protected string $dest; + protected bool $force = false; protected bool $remoteSrc = false; /** @@ -28,13 +30,17 @@ class CopyModule extends Module */ public function checkState(): bool { - return false; + if ($this->force) { + return false; + } + + return $this->fileExists($this->dest); } /** * @inheritDoc */ - public function getCommands(): array + public function execute(): void { if ($this->remoteSrc) { Connection::exec("sudo cp -r $this->src $this->dest"); @@ -44,7 +50,5 @@ class CopyModule extends Module } Connection::exec($this->getPermissions($this->dest)); - - return []; } } diff --git a/src/FileModule.php b/src/FileModule.php index 95ba771..31efa82 100644 --- a/src/FileModule.php +++ b/src/FileModule.php @@ -26,7 +26,7 @@ class FileModule extends Module /** * @inheritDoc */ - public function getCommands(): array + public function execute(): void { if ($this->state === State::PRESENT) { Connection::exec( @@ -37,7 +37,5 @@ class FileModule extends Module else { Connection::exec("sudo rm -rf $this->path"); } - - return []; } } diff --git a/src/GitModule.php b/src/GitModule.php index 3927992..39112a2 100644 --- a/src/GitModule.php +++ b/src/GitModule.php @@ -4,11 +4,12 @@ namespace PHPIAC\Modules; use PHPIAC\Connection; use PHPIAC\Module\Module; +use PHPIAC\Modules\Support\HandlesFiles; use PHPIAC\Modules\Support\HasPermissions; class GitModule extends Module { - use HasPermissions; + use HasPermissions, HandlesFiles; protected string $repo; protected string $dest; @@ -18,28 +19,17 @@ class GitModule extends Module */ public function checkState(): bool { - Connection::enablePty(); - - Connection::exec("ls $this->dest"); - $ls = Connection::read(); - - $state = ! str_contains($ls, 'No such file or directory'); - - Connection::disablePty(); - - return $state; + return $this->fileExists($this->dest); } /** * @inheritDoc */ - public function getCommands(): array + public function execute(): void { Connection::exec( "sudo git clone $this->repo $this->dest" . PHP_EOL . $this->getPermissions($this->dest) ); - - return []; } } diff --git a/src/Support/HandlesFiles.php b/src/Support/HandlesFiles.php new file mode 100644 index 0000000..8db6975 --- /dev/null +++ b/src/Support/HandlesFiles.php @@ -0,0 +1,27 @@ +<?php + +namespace PHPIAC\Modules\Support; + +use PHPIAC\Connection; + +trait HandlesFiles +{ + /** + * @param string $path + * + * @return bool + */ + public function fileExists(string $path): bool + { + Connection::enablePty(); + + Connection::exec("ls $path"); + $ls = Connection::read(); + + $state = ! str_contains($ls, 'No such file or directory'); + + Connection::disablePty(); + + return $state; + } +} diff --git a/src/TemplateModule.php b/src/TemplateModule.php index 515d891..9bbb6f9 100644 --- a/src/TemplateModule.php +++ b/src/TemplateModule.php @@ -4,30 +4,38 @@ namespace PHPIAC\Modules; use PHPIAC\Connection; use PHPIAC\Module\Module; +use PHPIAC\Modules\Support\HandlesFiles; use PHPIAC\Modules\Support\HasPermissions; use Twig\Environment; use Twig\Loader\FilesystemLoader; class TemplateModule extends Module { - use HasPermissions; + use HasPermissions, HandlesFiles; protected string $src; protected string $dest; protected array $vars; + protected bool $force = false; + /** * @inheritDoc */ public function checkState(): bool { - return false; + if ($this->force) { + return false; + // TODO: ContentsEqual?(); + } + + return $this->fileExists($this->dest); } /** * @inheritDoc */ - public function getCommands(): array + public function execute(): void { $loader = new FilesystemLoader(dirname($this->src)); $twig = new Environment($loader); @@ -36,7 +44,5 @@ class TemplateModule extends Module Connection::put($this->dest, $rendered); Connection::exec($this->getPermissions($this->dest)); - - return []; } } diff --git a/src/UfwModule.php b/src/UfwModule.php index 1ec4452..02be515 100644 --- a/src/UfwModule.php +++ b/src/UfwModule.php @@ -18,13 +18,35 @@ class UfwModule extends Module */ public function checkState(): bool { - return false; + $state = false; + + Connection::enablePty(); + + Connection::exec('sudo ufw status'); + $status = Connection::read(); + + if ($this->state === State::ENABLED) { + $rule = strtoupper($this->rule); + Connection::exec("sudo ufw status | grep '$this->name\|$rule'"); + $statusGrep = Connection::read(); + + $state = + str_contains($status, 'Status: active') && + str_contains($statusGrep, $this->name) && str_contains($statusGrep, $rule); + } + else if ($this->state === State::DISABLED) { + $state = str_contains($status, 'Status: inactive'); + } + + Connection::disablePty(); + + return $state; } /** * @inheritDoc */ - public function getCommands(): array + public function execute(): void { Connection::exec(implode(PHP_EOL, [ "sudo ufw $this->rule $this->name", @@ -33,7 +55,5 @@ class UfwModule extends Module State::DISABLED => "sudo ufw disable", }, ])); - - return []; } } diff --git a/src/UserModule.php b/src/UserModule.php index c230976..7347fed 100644 --- a/src/UserModule.php +++ b/src/UserModule.php @@ -40,7 +40,7 @@ class UserModule extends Module /** * @inheritDoc */ - public function getCommands(): array + public function execute(): void { if ($this->state === State::PRESENT) { Connection::exec(implode(PHP_EOL, [ @@ -53,7 +53,5 @@ class UserModule extends Module else if ($this->state === State::ABSENT) { Connection::exec("sudo userdel $this->username"); } - - return []; } } |