diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 4dfa3cc..32ce8cf 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -17,6 +17,8 @@ $routes->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes) $routes->cli('reload/(:num)', 'Cloudflare::reload/$1'); $routes->cli('auditlog', 'Cloudflare::auditlog'); $routes->cli('auditlog/(:num)', 'Cloudflare::auditlog/$1'); + $routes->cli('expire/(:any)', 'Cloudflare::expire/$1'); + $routes->cli('hosts/(:any)', 'Cloudflare::hosts/$1'); }); }); $routes->get('/', 'Home::index'); diff --git a/app/Controllers/CLI/Cloudflare.php b/app/Controllers/CLI/Cloudflare.php index c4c87ab..9434f89 100644 --- a/app/Controllers/CLI/Cloudflare.php +++ b/app/Controllers/CLI/Cloudflare.php @@ -7,6 +7,8 @@ use App\Entities\Cloudflare\AccountEntity; use App\Entities\Cloudflare\AuthEntity; use App\Entities\Cloudflare\ZoneEntity; use App\Models\Cloudflare\AuthModel; +use App\Models\Cloudflare\RecordModel; +use App\Models\Cloudflare\ZoneModel; use App\Services\Cloudflare\AccountService; use App\Services\Cloudflare\AuditLogService; use App\Services\Cloudflare\FirewallService; @@ -103,4 +105,53 @@ class Cloudflare extends BaseController ); } } + public function expire(string $domain): void + { + //Transaction Start + // $this->_db->transStart(); + try { + $zone_model = model(ZoneModel::class); + $zone_model->where(['domain' => $domain]); + $zone_entity = $zone_model->getEntity(); + $zone = new ZoneService(); + $zone->expire($zone_entity); + log_message("notice", "Expire 작업을 완료하였습니다."); + // $this->_db->transCommit(); + } catch (\Exception $e) { + //Transaction Rollback + // $this->_db->transRollback(); + log_message( + "error", + "Expire 작업을 실패하였습니다.\n--------------\n" . + $e->getMessage() . + "\n--------------\n" + ); + } + } + + public function hosts(string $ip): void + { + //Transaction Start + // $this->_db->transStart(); + try { + $record_model = model(RecordModel::class); + $record_model->where(['content' => $ip]); + $hosts = []; + foreach ($record_model->getEntitys() as $entity) { + $hosts[] = $entity->host; + } + echo implode("\n", $hosts); + log_message("notice", "Expire 작업을 완료하였습니다."); + // $this->_db->transCommit(); + } catch (\Exception $e) { + //Transaction Rollback + // $this->_db->transRollback(); + log_message( + "error", + "Expire 작업을 실패하였습니다.\n--------------\n" . + $e->getMessage() . + "\n--------------\n" + ); + } + } } diff --git a/app/Services/Cloudflare/ZoneService.php b/app/Services/Cloudflare/ZoneService.php index 5eba86c..c720f02 100644 --- a/app/Services/Cloudflare/ZoneService.php +++ b/app/Services/Cloudflare/ZoneService.php @@ -5,6 +5,7 @@ namespace App\Services\Cloudflare; use App\Entities\Cloudflare\AccountEntity; use App\Entities\Cloudflare\ZoneEntity; use App\Models\Cloudflare\ZoneModel; +use Iodev\Whois\Factory; class ZoneService extends CloudflareService { @@ -158,6 +159,17 @@ class ZoneService extends CloudflareService // log_message("debug", $this->getModel()->getLastQuery()); return $entity; } + public function expire(ZoneEntity $entity) + { + $whois = Factory::get()->createWhois(); + $info = $whois->loadDomainInfo($entity->getTitle()); + print_r([ + 'Domain created' => date("Y-m-d", $info->creationDate), + 'Domain expires' => date("Y-m-d", $info->expirationDate), + 'Domain owner' => $info->owner, + ]); + } + //Reload public function reload(AccountEntity $parent_entity): array { diff --git a/composer.json b/composer.json index 2dd91b8..59c9b58 100644 --- a/composer.json +++ b/composer.json @@ -15,6 +15,7 @@ "codeigniter4/framework": "^4.5", "google/apiclient": "^2.15.0", "guzzlehttp/guzzle": "^7.9", + "io-developer/php-whois": "4.0", "phpoffice/phpspreadsheet": "^1.27", "symfony/css-selector": "^7.1", "symfony/dom-crawler": "^7.1", @@ -48,4 +49,4 @@ "scripts": { "test": "phpunit" } -} \ No newline at end of file +}