Compare commits
2 Commits
8784acbed9
...
94334694d4
Author | SHA1 | Date |
---|---|---|
tracer | 94334694d4 | |
tracer | 6fc85b8692 |
|
@ -2,7 +2,7 @@
|
||||||
"name": "24unix/bindapi",
|
"name": "24unix/bindapi",
|
||||||
"description": "manage Bind9 DNS server via REST API",
|
"description": "manage Bind9 DNS server via REST API",
|
||||||
"version": "1.0.7",
|
"version": "1.0.7",
|
||||||
"build_number": "349",
|
"build_number": "351",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Micha Espey",
|
"name": "Micha Espey",
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
Copy this files to /etc/systems/system, adapt the path in the service unit and enable the timer by issuing:
|
||||||
|
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable bindAPI.timer
|
||||||
|
systemctl start bindAPI.timer
|
||||||
|
systemctl list-timers
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Unit]
|
||||||
|
Description=BindAPI Service to check zone file and reload configuration
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/home/users/<user>/<bindApi>/bin/console cron:run -q
|
|
@ -0,0 +1,10 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Runs BindAPI every minute
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnBootSec=1min
|
||||||
|
OnUnitActiveSec=1min
|
||||||
|
Unit=bindAPI.service
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
|
@ -94,7 +94,12 @@ class CLIController
|
||||||
$this->apikeysDelete();
|
$this->apikeysDelete();
|
||||||
},
|
},
|
||||||
mandatoryParameters: ['ID'])))
|
mandatoryParameters: ['ID'])))
|
||||||
|
->addCommandGroup(commandGroup: (new CommandGroup(name: 'cron', description: 'Run zone fle maintenance'))
|
||||||
|
->addCommand(command: new Command(
|
||||||
|
name: 'run',
|
||||||
|
callback: function () {
|
||||||
|
$this->cronRun();
|
||||||
|
})))
|
||||||
->addCommandGroup(commandGroup: (new CommandGroup(name: 'check', description: 'health checks the system can perform'))
|
->addCommandGroup(commandGroup: (new CommandGroup(name: 'check', description: 'health checks the system can perform'))
|
||||||
->addCommand(command: new Command(
|
->addCommand(command: new Command(
|
||||||
name: 'permissions',
|
name: 'permissions',
|
||||||
|
@ -919,13 +924,34 @@ class CLIController
|
||||||
}
|
}
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->panelRepository->findByID(id: $id)) {
|
if (!$this->panelRepository->findByID(id: $id)) {
|
||||||
if (!$this->quiet) {
|
if (!$this->quiet) {
|
||||||
echo "Panel with ID : $id doesn't exist." . PHP_EOL;
|
echo "Panel with ID : $id doesn't exist." . PHP_EOL;
|
||||||
}
|
}
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($apikey) {
|
if ($apikey) {
|
||||||
|
// sanity check for panel apikey
|
||||||
|
if (!str_contains(haystack: $apikey, needle: '.')) {
|
||||||
|
$this->exitInvalidPanelApiKey();
|
||||||
|
} else {
|
||||||
|
[$prefix, $key] = explode(separator: '.', string: $apikey);
|
||||||
|
|
||||||
|
$prefixLen = strlen(string: $prefix);
|
||||||
|
if ($prefixLen != 8) {
|
||||||
|
$errorMessage = 'The prefix must be 8 characters long';
|
||||||
|
$this->exitInvalidPanelApiKey(details: $errorMessage);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var_dump($prefix, $key);
|
||||||
|
echo 'Length of prefix: ' . strlen($prefix) . PHP_EOL;
|
||||||
|
echo 'Length of key: ' . strlen($key) . PHP_EOL;
|
||||||
|
|
||||||
|
die();
|
||||||
|
}
|
||||||
$panel = new Panel(name: $name, id: $id, a: $a, aaaa: $aaaa, passphrase: $apikey, self: $self);
|
$panel = new Panel(name: $name, id: $id, a: $a, aaaa: $aaaa, passphrase: $apikey, self: $self);
|
||||||
} else {
|
} else {
|
||||||
$panel = new Panel(name: $name, id: $id, a: $a, aaaa: $aaaa, self: $self);
|
$panel = new Panel(name: $name, id: $id, a: $a, aaaa: $aaaa, self: $self);
|
||||||
|
@ -1100,7 +1126,9 @@ class CLIController
|
||||||
if ($result['data'] == 'pong') {
|
if ($result['data'] == 'pong') {
|
||||||
echo ' ' . COLOR_GREEN . $result['data'];
|
echo ' ' . COLOR_GREEN . $result['data'];
|
||||||
} else {
|
} else {
|
||||||
echo COLOR_BLUE . ' skip' . COLOR_DEFAULT;
|
var_dump($result);
|
||||||
|
die;
|
||||||
|
echo COLOR_BLUE . ' xxskip' . COLOR_DEFAULT;
|
||||||
if (!$this->configController->getConfig(configKey: 'quiet')) {
|
if (!$this->configController->getConfig(configKey: 'quiet')) {
|
||||||
echo ' ' . $result['data'];
|
echo ' ' . $result['data'];
|
||||||
}
|
}
|
||||||
|
@ -1657,8 +1685,24 @@ class CLIController
|
||||||
$this->domainController->checkDomains();
|
$this->domainController->checkDomains();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function exitInvalidPanelApiKey(string $details = null): void
|
||||||
|
{
|
||||||
|
if (!$this->quiet) {
|
||||||
|
if ($details) {
|
||||||
|
echo COLOR_YELLOW . $details . COLOR_DEFAULT . PHP_EOL;
|
||||||
|
}
|
||||||
|
echo 'This is no valid panel apikey. A valid key looks like this one:' . PHP_EOL;
|
||||||
|
echo COLOR_YELLOW . 'A7hjZx52.u8Rzj2S5KUvqozPlQwh4k3eDCrLikL8ZYlcdPr488QkbOW2JaS6Hg5syNllgnNOpQv6TntNMzt62LiH5CTlrMovRQhMcwZzM5dOfLKzqEePFRv1y6qZ7CT9' . PHP_EOL;
|
||||||
|
}
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
public function exitInvalidNameserverApiKey(string $details = null): void
|
||||||
|
{
|
||||||
|
echo 'fixme';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
*/
|
*/
|
||||||
private function dynDnsPush(): void
|
private function dynDnsPush(): void
|
||||||
{
|
{
|
||||||
|
@ -1775,7 +1819,7 @@ class CLIController
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($result['error'])) {
|
if (!empty($result['error'])) {
|
||||||
echo $result['data'] . PHP_EOL;
|
echo 'Error: ' . $result['data'] . PHP_EOL;
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
if (!empty($result['data'])) {
|
if (!empty($result['data'])) {
|
||||||
|
@ -2142,4 +2186,10 @@ class CLIController
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function cronRun()
|
||||||
|
{
|
||||||
|
$this->logger->debug(message: 'cronRun()');
|
||||||
|
$this->domainsUpdate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,10 +111,15 @@ class DomainController
|
||||||
if (!$this->quiet) {
|
if (!$this->quiet) {
|
||||||
echo 'Removing stale zone: ' . COLOR_YELLOW . $zone . COLOR_DEFAULT . PHP_EOL;
|
echo 'Removing stale zone: ' . COLOR_YELLOW . $zone . COLOR_DEFAULT . PHP_EOL;
|
||||||
}
|
}
|
||||||
|
echo $zone . PHP_EOL;
|
||||||
unlink(filename: $zone);
|
unlink(filename: $zone);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->createIncludeFile();
|
$semaphore = $this->localZonesDir . 'zones.flag';
|
||||||
|
if (file_exists(filename: $semaphore)) {
|
||||||
|
unlink(filename: $semaphore);
|
||||||
|
$this->createIncludeFile();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -323,7 +328,9 @@ class DomainController
|
||||||
*/
|
*/
|
||||||
public function createSlaveZoneFile(Domain $domain): bool
|
public function createSlaveZoneFile(Domain $domain): bool
|
||||||
{
|
{
|
||||||
$domainName = $domain->getName();
|
touch(filename: $this->localZonesDir . 'zones.flag');
|
||||||
|
|
||||||
|
$domainName = $domain->getName();
|
||||||
$this->logger->info(message: "createZoneFile($domainName)");
|
$this->logger->info(message: "createZoneFile($domainName)");
|
||||||
|
|
||||||
// check if we're a master zone
|
// check if we're a master zone
|
||||||
|
|
Loading…
Reference in New Issue