This commit is contained in:
Simon Vieille 2019-04-24 10:47:44 +02:00
revīzija 13439890f0
Parakstījis: deblan
GPG atslēgas ID: 03383D15A1D31745
5 mainīti faili ar 157 papildinājumiem un 0 dzēšanām

2
.gitignore ārējs Normal file
Parādīt failu

@ -0,0 +1,2 @@
/vendor
/composer.lock

24
README.md Normal file
Parādīt failu

@ -0,0 +1,24 @@
Domain expiration
=================
Checks the expiration dates of domains.
## Installation and usage
PHP 7.3 and [composer](https://getcomposer.org/) required.
```
$ git clone https://gitnet.fr/deblan/domain-expiration.git
$ cd domain-expiration
$ composer install
```
```
$ php7.3 ./domain-expiration check example.com,other-example.com
+------------------------+---------------------+
| Domain | Date |
+------------------------+---------------------+
| example.com | YYYY-MM-DD HH:MM:SS |
| other-example.com | YYYY-MM-DD HH:MM:SS |
+------------------------+---------------------+
```

10
composer.json Normal file
Parādīt failu

@ -0,0 +1,10 @@
{
"autoload": {
"psr-4": {
"Deblan\\": "src/Deblan"
}
},
"require": {
"symfony/console": "^4.2"
}
}

11
domain-expiration Executable file
Parādīt failu

@ -0,0 +1,11 @@
#!/usr/bin/env php7.3
<?php
require __DIR__.'/vendor/autoload.php';
use Symfony\Component\Console\Application;
use Deblan\Command\CheckCommand;
$application = new Application();
$application->add(new CheckCommand());
$application->run();

Parādīt failu

@ -0,0 +1,110 @@
<?php
namespace Deblan\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Command\Command as BaseCommand;
use Symfony\Component\Console\Helper\Table;
/**
* class CheckCommand.
*
* @author Simon Vieille <simon@deblan.fr>
*/
class CheckCommand extends BaseCommand
{
/**
* @var array
*/
protected $successes = [];
/**
* @var array
*/
protected $fails = [];
/**
* {@inheritdoc}
*/
protected function configure()
{
$this
->setName('check')
->addArgument('domains', InputArgument::REQUIRED, '');
}
/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$domains = explode(',', $input->getArgument('domains'));
$domains = array_map(function ($v) {
return trim($v);
}, $domains);
sort($domains);
foreach ($domains as $domain) {
$this->check($domain);
}
usort($this->successes, function($a, $b) {
if ($a[2] > $b[2]) {
return 1;
}
if ($a[2] === $b[2]) {
if ($a[0] > $b[0]) {
return 1;
}
return -1;
}
return 0;
});
foreach ($this->successes as $k => $v) {
unset($this->successes[$k][2]);
}
$results = array_merge($this->successes, $this->fails);
$table = new Table($output);
$table
->setHeaders(['Domain', 'Date'])
->setRows($results);
$table->render();
}
protected function check($domain)
{
$whois = shell_exec(sprintf('whois %s', escapeshellarg($domain)));
preg_match('/Expiry Date: ([^\s]+)/i', $whois, $match);
if (!isset($match[0])) {
$this->fails[] = [$domain, 'FAIL'];
return;
}
$date = new \DateTime($match[1]);
if ($date->getTimestamp() - time() < 3600*24*14) {
$color = 'red';
} elseif ($date->getTimestamp() - time() < 3600*24*30) {
$color = 'yellow';
} else {
$color = 'green';
}
$content = sprintf('<fg=%s>%s</>', $color, $date->format('Y-m-d H:i:s'));
$this->successes[] = [$domain, $content, $date->format('Y-m-d H:i:s')];
}
}