About command, Domain list command, Domain add command, Domain remove command
This commit is contained in:
parent
ad50503662
commit
f10e1349d2
67
src/Deblan/PowerDNS/Command/AboutCommand.php
Normal file
67
src/Deblan/PowerDNS/Command/AboutCommand.php
Normal file
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
|
||||
namespace Deblan\PowerDNS\Command;
|
||||
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
|
||||
class AboutCommand extends Command
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('about')
|
||||
->setDescription('')
|
||||
->setHelp("The <info>%command.name%</info> ");
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$output->writeln(<<<EOF
|
||||
<info>PDNS-CONSOLE</info>
|
||||
|
||||
PDNS-Console provided a CLI to manage PowerDNS application and improved it by adding a powerfull DNS zone versionning.
|
||||
|
||||
<info>AUTHOR</info>
|
||||
|
||||
* Simon Vieille
|
||||
* http://www.deblan.fr/
|
||||
* simon+github@deblan.fr
|
||||
* IRC: irc.neutralnetwork.org (6667, SSL: 6668)
|
||||
|
||||
<info>LICENCE</info>
|
||||
|
||||
Copyright (c) 2015, Simon Vieille
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of pdns-console nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
EOF
|
||||
);
|
||||
}
|
||||
}
|
89
src/Deblan/PowerDNS/Command/DomainAddCommand.php
Normal file
89
src/Deblan/PowerDNS/Command/DomainAddCommand.php
Normal file
|
@ -0,0 +1,89 @@
|
|||
<?php
|
||||
|
||||
namespace Deblan\PowerDNS\Command;
|
||||
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Deblan\Console\Command\AbstractCommand;
|
||||
use Deblan\PowerDNS\Model\Domain;
|
||||
use Deblan\PowerDNS\Model\DomainQuery;
|
||||
|
||||
class DomainAddCommand extends AbstractCommand
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
parent::configure();
|
||||
|
||||
$this
|
||||
->setName('domain:add')
|
||||
->setDescription('Add a domain')
|
||||
->addOption('name', null, InputOption::VALUE_REQUIRED, '')
|
||||
->addOption('type', null, InputOption::VALUE_REQUIRED, '')
|
||||
->addOption('master', null, InputOption::VALUE_REQUIRED, '')
|
||||
->setHelp("The <info>%command.name%</info> ");
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
parent::execute($input, $output);
|
||||
|
||||
$name = $this->getInput()->getOption('name');
|
||||
|
||||
while (null === $name || trim($name) === '') {
|
||||
$name = $this->getHelper('dialog')->ask($this->getOutput(), 'Name: ', null);
|
||||
}
|
||||
|
||||
$master = $this->getInput()->getOption('master');
|
||||
|
||||
if ($master === 'null') {
|
||||
$master = null;
|
||||
} elseif (null === $master || trim($master) === '') {
|
||||
$response = $this->getHelper('dialog')->ask($this->getOutput(), 'MASTER [null]: ', null);
|
||||
$master = empty($response) ? null : $response;
|
||||
}
|
||||
|
||||
$type = $this->getInput()->getOption('type');
|
||||
|
||||
if ($type === 'null') {
|
||||
$type = null;
|
||||
} elseif (null === $type) {
|
||||
$response = $this->getHelper('dialog')->ask($this->getOutput(), 'Type [NATIVE]: ', null);
|
||||
$type = empty($response) ? 'NATIVE' : $response;
|
||||
}
|
||||
|
||||
if (!$this->getHelper('validator')->isDomainMaster($master)) {
|
||||
$this->getOutput()->writeln('<error>Invalid master.</error>');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!$this->getHelper('validator')->isDomainName($name)) {
|
||||
$this->getOutput()->writeln('<error>Invalid name.</error>');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!$this->getHelper('validator')->isDomainType($type)) {
|
||||
$this->getOutput()->writeln('<error>Invalid type.</error>');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (DomainQuery::create()->findOneByName($name)) {
|
||||
$this->getOutput()->writeln('<error>The domain already exists.</error>');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$domain = (new Domain())
|
||||
->setName($name)
|
||||
->setMaster($master)
|
||||
->setType($type);
|
||||
|
||||
$domain->save();
|
||||
|
||||
$this->getOutput()->writeln('<info>Domain added.</info>');
|
||||
}
|
||||
}
|
|
@ -43,7 +43,7 @@ class DomainListCommand extends AbstractCommand
|
|||
|
||||
if ($this->getInput()->getOption('zone') && $domain->getZone()) {
|
||||
$this->getOutput()->writeln('');
|
||||
$this->getHelper('zone')->showZone($domain->getZone());
|
||||
$this->getHelper('zone')->showZone($domain->getZone(), 0, true);
|
||||
$this->getOutput()->writeln('');
|
||||
$this->getOutput()->writeln('');
|
||||
}
|
||||
|
|
72
src/Deblan/PowerDNS/Command/DomainRemoveCommand.php
Normal file
72
src/Deblan/PowerDNS/Command/DomainRemoveCommand.php
Normal file
|
@ -0,0 +1,72 @@
|
|||
<?php
|
||||
|
||||
namespace Deblan\PowerDNS\Command;
|
||||
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Deblan\PowerDNS\Model\DomainQuery;
|
||||
use Deblan\Console\Command\AbstractCommand;
|
||||
|
||||
class DomainRemoveCommand extends AbstractCommand
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
parent::configure();
|
||||
|
||||
$this
|
||||
->setName('domain:remove')
|
||||
->setDescription('Remove a domain')
|
||||
->addOption('name', null, InputOption::VALUE_REQUIRED, '')
|
||||
->addOption('id', null, InputOption::VALUE_REQUIRED, '')
|
||||
->addOption('confirm', null, InputOption::VALUE_NONE, '')
|
||||
->setHelp("The <info>%command.name%</info> ");
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
parent::execute($input, $output);
|
||||
|
||||
$name = $this->getInput()->getOption('name');
|
||||
$id = $this->getInput()->getOption('id');
|
||||
$id = $this->getInput()->getOption('id');
|
||||
|
||||
if (null === $name && null === $id) {
|
||||
$this->getOutput()->writeln('<error>You must give a name or an id.</error>');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ($name) {
|
||||
$domain = $this->getQuery()->findOneByName($name);
|
||||
} else {
|
||||
$domain = $this->getQuery()->findOneById($id);
|
||||
}
|
||||
|
||||
if (null === $domain) {
|
||||
$this->getOutput()->writeln('<error>No domain found.</error>');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$confirm = $this->getInput()->getOption('confirm');
|
||||
|
||||
if (false === $confirm) {
|
||||
$confirm = $this->getHelper('dialog')->askConfirmation($this->getOutput(), '<info>Do you confirm? [<comment>no</comment>] ', false);
|
||||
}
|
||||
|
||||
if ($confirm) {
|
||||
$domain->delete();
|
||||
|
||||
$this->getOutput()->writeln('<info>Domain removed.</info>');
|
||||
} else {
|
||||
$this->getOutput()->writeln('<info>Aborted.</info>');
|
||||
}
|
||||
}
|
||||
|
||||
protected function getQuery()
|
||||
{
|
||||
return DomainQuery::create();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue