diff options
author | Daniel Weipert <code@drogueronin.de> | 2021-04-19 11:00:50 +0200 |
---|---|---|
committer | Daniel Weipert <code@drogueronin.de> | 2021-04-19 11:00:50 +0200 |
commit | d4d5ae3bb6566311b2d42cf888e463b62f6cf0dc (patch) | |
tree | 6e60223291492e8e1f52739de9b8bd7ec36fb91b /src/UserModule.php |
Initial commit
Diffstat (limited to 'src/UserModule.php')
-rw-r--r-- | src/UserModule.php | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/UserModule.php b/src/UserModule.php new file mode 100644 index 0000000..fcab5a8 --- /dev/null +++ b/src/UserModule.php @@ -0,0 +1,70 @@ +<?php + +namespace PHPIAC\Modules; + +use PHPIAC\Module\Module; +use PHPIAC\Module\State; +use phpseclib3\Net\SSH2; + +class UserModule extends Module +{ + /** + * UserModule constructor. + * + * @param string $username + * @param array $options + * @param string $state + */ + public function __construct( + private string $username, + private array $options = [], + private string $state = State::PRESENT + ) { + $this->options = array_replace([ + 'append' => false, + 'create_home' => true, + 'groups' => [], + 'shell' => '/bin/bash', + ], $options); + } + + /** + * @inheritDoc + */ + public function checkState(): bool + { + global $ssh; + /**@var SSH2 $ssh*/ + $ssh->enablePTY(); + + $ssh->exec("cat /etc/passwd | grep $this->username:"); + $hasUser = $ssh->read(); + + $state = match ($this->state) { + State::PRESENT => str_starts_with($hasUser, "$this->username:"), + State::ABSENT => empty($hasUser), + }; + + $ssh->disablePTY(); + + return $state; + } + + /** + * @inheritDoc + */ + public function getCommands(): array + { + return match ($this->state) { + State::PRESENT => [ + "sudo adduser $this->username --quiet" . + " --shell " . $this->options['shell'] . + ($this->options['create_home'] ? '' : ' --no-create-home'), + "sudo usermod -" . ($this->options['append'] ? 'a' : '') . "G " . implode(',', $this->options['groups']) . " $this->username" + ], + State::ABSENT => [ + "sudo userdel $this->username", + ], + }; + } +} |