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