Compare commits

..

No commits in common. "123d054c8d971cdda77347487e01dee360600f2f" and "72e973156258a424ac403d6715236135bf597789" have entirely different histories.

3 changed files with 56 additions and 86 deletions

View File

@ -68,11 +68,11 @@ class BindAPI
* @throws \DI\DependencyException
* @throws \DI\NotFoundException
*/
public function runCommand(array $arguments): void
public function runCommand(int $argumentsCount, array $arguments): void
{
$this->logger->debug(message: 'runCommand()');
$cliController = $this->container->get(name: CLIController::class);
$cliController->runCommand(arguments: $arguments);
$cliController->runCommand(argumentsCount: $argumentsCount, arguments: $arguments);
}

View File

@ -12,7 +12,6 @@ define(constant_name: 'COLOR_WHITE', value: "\033[37m");
define(constant_name: 'COLOR_DEFAULT', value: "\033[39m");
use App\Entity\Domain;
use App\Entity\DynDNS;
use App\Entity\Nameserver;
use App\Entity\Panel;
use App\Repository\ApikeyRepository;
@ -21,7 +20,6 @@ use App\Repository\DynDNSRepository;
use App\Repository\NameserverRepository;
use App\Repository\PanelRepository;
use Arubacao\TldChecker\Validator;
use Exception;
use LucidFrame\Console\ConsoleTable;
if (php_sapi_name() !== 'cli') {
@ -34,10 +32,11 @@ if (php_sapi_name() !== 'cli') {
*/
class CLIController
{
private array $arguments;
private int $argumentsCount;
private array $arguments;
/**
* @throws Exception
* @throws \Exception
*/
public function __construct(
private readonly ApiController $apiController,
@ -55,7 +54,7 @@ class CLIController
function checkSetup(): void
{
if (!$this->domainController->checkPermissions(disableVerbose: true)) {
if (!$this->domainController->checkPermissions()) {
echo 'You need to setup the bindAPI first.' . PHP_EOL;
exit(1);
}
@ -78,24 +77,23 @@ class CLIController
// TODO encrypt the password in the config file, key in config
function runCommand(array $arguments): void
function runCommand(int $argumentsCount, array $arguments): void
{
if (count($arguments) < 1) {
$this->showUsage();
exit(0);
}
$this->argumentsCount = $argumentsCount;
$this->arguments = $arguments;
$this->logger->debug(message: "runCommand()");
if (str_contains(haystack: $arguments[0], needle: ':')) {
[$command, $subcommand] = explode(separator: ':', string: $arguments[0]);
} else {
$command = $arguments[0];
$subcommand = '';
if ($this->argumentsCount < 1) {
$this->showUsage();
exit(0);
}
$this->arguments = $this->parseArguments(arguments: $arguments);
if (str_contains(haystack: $this->arguments[0], needle: ':')) {
[$command, $subcommand] = explode(separator: ':', string: $this->arguments[0]);
} else {
$command = $this->arguments[0];
$subcommand = '';
}
match ($command) {
'check' => $this->handleChecks(subcommand: $subcommand),
@ -104,7 +102,7 @@ class CLIController
'domains' => $this->handleDomains(subcommand: $subcommand),
'dyndns' => $this->handleDynDns(subcommand: $subcommand),
'nameservers' => $this->handleNameservers(subcommand: $subcommand),
default => $this->unknownCommand(command: $command)
default => $this->unknownSubcommand(subcommand: $subcommand)
};
}
@ -182,12 +180,6 @@ class CLIController
}
function unknownCommand(string $command): void
{
echo COLOR_DEFAULT . 'Unknown command: ' . COLOR_YELLOW . $command . COLOR_DEFAULT . PHP_EOL;
}
function unknownSubcommand(string $subcommand): void
{
if ($subcommand) {
@ -217,7 +209,7 @@ class CLIController
function handleCheckSetup(): void
{
if (count($this->arguments) < 2) {
if ($this->argumentsCount < 2) {
echo 'You need to supply a username.' . PHP_EOL;
exit(1);
}
@ -484,7 +476,8 @@ class CLIController
break;
case 404:
echo COLOR_RED . ' ' . $result['header'] . COLOR_DEFAULT;
if (!empty($this->arguments['fix']) && $this->arguments['fix'] == 'yes') {
$arguments = $this->parseArguments();
if (!empty($arguments['fix']) && $arguments['fix'] == 'yes') {
echo ' trying to fix …';
$body = [
'name' => $domainName,
@ -525,27 +518,23 @@ class CLIController
echo PHP_EOL;
}
/**
* @param array $arguments
* @return array
*/
public function parseArguments(array $arguments): array
/**
* @return array
*/
public function parseArguments(): array
{
$this->logger->debug(message: "parseArguments()");
$parsedArguments = [];
$parseCount = 0;
foreach ($arguments as $argument) {
$arguments = [];
foreach ($this->arguments as $argument) {
if (str_contains(haystack: $argument, needle: '=')) {
[$key, $value] = explode(separator: '=', string: $argument);
$parsedArguments[strtolower(string: $key)] = $value;
$parsedArguments[$parseCount++] = $value;
$arguments[strtolower(string: $key)] = $value;
} else {
$parsedArguments[strtolower(string: $argument)] = $argument;
$parsedArguments[$parseCount++] = $argument;
$arguments[strtolower(string: $argument)] = $argument;
}
}
return $parsedArguments;
return $arguments;
}
/**
@ -588,14 +577,16 @@ class CLIController
exit(1);
}
$a = $this->arguments['a'] ?? '';
$aaaa = $this->arguments['aaaa'] ?? '';
$arguments = $this->parseArguments();
$a = $arguments['a'] ?? '';
$aaaa = $arguments['aaaa'] ?? '';
if (empty($a) && empty($aaaa)) {
echo 'At least one IP address is required.' . PHP_EOL;
exit(0);
}
$apikey = $this->arguments['apikey'] ?? '';
$self = intval(value: $this->arguments['self'] ?? 0);
$apikey = $arguments['apikey'] ?? '';
$self = intval(value: $arguments['self'] ?? 0);
if ($this->panelRepository->findByName(name: $name)) {
@ -652,14 +643,15 @@ class CLIController
{
$this->logger->debug(message: "handlePanelsUpdate()");
$id = intval(value: $this->arguments[1] ?? 0);
$name = $this->arguments['name'] ?? '';
$a = $this->arguments['a'] ?? '';
$aaaa = $this->arguments['aaaa'] ?? '';
$apikey = $this->arguments['apikey'] ?? '';
$self = intval(value: $this->arguments['self'] ?? 0);
$arguments = $this->parseArguments();
$id = intval(value: $this->arguments[1] ?? 0);
$name = $arguments['name'] ?? '';
$a = $arguments['a'] ?? '';
$aaaa = $arguments['aaaa'] ?? '';
$apikey = $arguments['apikey'] ?? '';
$self = intval(value: $arguments['self'] ?? 0);
// a workaround for 0 being equal to false …
if ($self == 0) {
$self = -1;
}
@ -867,7 +859,8 @@ class CLIController
*/
function handleApikeysCreate(): void
{
$name = $this->arguments['name'] ?? '';
$arguments = $this->parseArguments();
$name = $arguments['name'] ?? '';
$result = $this->apikeyRepository->create(name: $name);
echo 'API key ' . COLOR_YELLOW . $result['row'] . COLOR_DEFAULT . ' has been generated. Store it in a save place, it cannot be recovered.' . PHP_EOL;
@ -905,10 +898,10 @@ class CLIController
*/
function handleApikeysUpdate(): void
{
$arguments = $this->parseArguments();
// TODO check for use of id instead of number, mind for all occurences
$id = $this->arguments[1] ?? 0;
$name = $this->arguments['name'] ?? '';
$name = $arguments['name'] ?? '';
if ($id == 0) {
echo 'An ID is required' . PHP_EOL;
@ -1022,7 +1015,7 @@ class CLIController
*/
function handleDynDnsCreate(): void
{
$name = $this->arguments[1] ?? '';
$name = $this->arguments[1] ?? "";
if (empty($name)) {
echo 'You need to supply the FQDN (hostname).' . PHP_EOL;
exit(1);
@ -1036,11 +1029,8 @@ class CLIController
exit(1);
}
$password = $this->arguments[2] ?? '';
echo 'fqdn: ' . $name;
var_dump($this->arguments);
die();
$domainParts = explode(separator: '.', string: $name);
$reversedParts = array_reverse(array: $domainParts);
$testDomain = '';
@ -1062,26 +1052,11 @@ class CLIController
}
if ($this->configController->getConfig(configKey: 'verbose')) {
echo "Found domain: " . COLOR_YELLOW . $foundDomain . COLOR_DEFAULT . PHP_EOL;
}
echo "found domian" . $foundDomain . PHP_EOL;
// get host
if ($this->dynDNSRepository->findByName(name: $name)) {
if ($this->configController->getConfig(configKey: 'verbose')) {
echo "DynDNS host " . COLOR_YELLOW . $name . COLOR_DEFAULT . "already exists.". PHP_EOL;
exit(0);
}
} else {
if ($this->configController->getConfig(configKey: 'verbose')) {
echo "DynDNS host " . COLOR_YELLOW . $name . COLOR_DEFAULT . "will be created.". PHP_EOL;
// insert in db
$dyndnsHost = new DynDNS();
$dyndnsHost->setName($name);
}
}
// inset in db
// check on NS
// => add if missing

View File

@ -127,15 +127,10 @@ class DomainController
/**
* @return bool
*/
function checkPermissions(bool $disableVerbose = false): bool
function checkPermissions(): bool
{
$setupIsValid = true;
if (!$disableVerbose) {
$verbose = $this->configController->getConfig(configKey: 'verbose');
} else {
$verbose = false;
}
$verbose = $this->configController->getConfig(configKey: 'verbose');
$this->logger->debug(message: "checkPermissions()");