diff --git a/lib/Froxlor/Api/Commands/Domains.php b/lib/Froxlor/Api/Commands/Domains.php index 79009efd..550d7da3 100644 --- a/lib/Froxlor/Api/Commands/Domains.php +++ b/lib/Froxlor/Api/Commands/Domains.php @@ -1619,6 +1619,9 @@ class Domains extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEn // remove domains DNS from powerDNS if used, #581 \Froxlor\System\Cronjob::inserttask('11', $result['domain']); + // remove domain from acme.sh / lets encrypt if used + \Froxlor\System\Cronjob::inserttask('12', $result['domain']); + $this->logger()->logAction(\Froxlor\FroxlorLogger::ADM_ACTION, LOG_INFO, "[API] deleted domain/subdomains (#" . $result['id'] . ")"); \Froxlor\User::updateCounters(); \Froxlor\System\Cronjob::inserttask('1'); diff --git a/lib/Froxlor/Api/Commands/SubDomains.php b/lib/Froxlor/Api/Commands/SubDomains.php index 4588a73d..59eb8298 100644 --- a/lib/Froxlor/Api/Commands/SubDomains.php +++ b/lib/Froxlor/Api/Commands/SubDomains.php @@ -828,6 +828,8 @@ class SubDomains extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc \Froxlor\System\Cronjob::inserttask('4'); // remove domains DNS from powerDNS if used, #581 \Froxlor\System\Cronjob::inserttask('11', $result['domain']); + // remove domain from acme.sh / lets encrypt if used + \Froxlor\System\Cronjob::inserttask('12', $result['domain']); // reduce subdomain-usage-counter Customers::decreaseUsage($customer['customerid'], 'subdomains_used'); diff --git a/lib/Froxlor/Cron/System/TasksCron.php b/lib/Froxlor/Cron/System/TasksCron.php index 6cf0ea7e..ffa10f5c 100644 --- a/lib/Froxlor/Cron/System/TasksCron.php +++ b/lib/Froxlor/Cron/System/TasksCron.php @@ -92,6 +92,12 @@ class TasksCron extends \Froxlor\Cron\FroxlorCron */ \Froxlor\FroxlorLogger::getInstanceOf()->logAction(\Froxlor\FroxlorLogger::CRON_ACTION, LOG_NOTICE, "Removing PowerDNS entries for domain " . $row['data']['domain']); \Froxlor\Dns\PowerDNS::cleanDomainZone($row['data']['domain']); + } elseif ($row['type'] == '12') { + /** + * TYPE=12 domain has been deleted, remove from acme.sh/let's encrypt directory if used + */ + \Froxlor\FroxlorLogger::getInstanceOf()->logAction(\Froxlor\FroxlorLogger::CRON_ACTION, LOG_NOTICE, "Removing Let's Encrypt entries for domain " . $row['data']['domain']); + \Froxlor\Domain\Domain::doLetsEncryptCleanUp($row['data']['domain']); } } diff --git a/lib/Froxlor/Domain/Domain.php b/lib/Froxlor/Domain/Domain.php index b952e467..34e38238 100644 --- a/lib/Froxlor/Domain/Domain.php +++ b/lib/Froxlor/Domain/Domain.php @@ -291,6 +291,30 @@ class Domain } } + public static function doLetsEncryptCleanUp($domainname = null) + { + // @ see \Froxlor\Cron\Http\LetsEncrypt\AcmeSh.php + $acmesh = "/root/.acme.sh/acme.sh"; + if (file_exists($acmesh)) { + $certificate_folder = dirname($acmesh) . "/" . $domainname; + if (\Froxlor\Settings::Get('system.leecc') > 0) { + $certificate_folder .= "_ecc"; + } + $certificate_folder = \Froxlor\FileDir::makeCorrectDir($certificate_folder); + if (file_exists($certificate_folder)) { + $params = " --remove -d " . $domainname; + if (\Froxlor\Settings::Get('system.leecc') > 0) { + $params .= " -ecc"; + } + // run remove command + \Froxlor\FileDir::safe_exec($acmesh . $params); + // remove certificates directory + @unlink($certificate_folder); + } + } + return true; + } + /** * checks give path for security issues * and returns a string that can be appended diff --git a/lib/Froxlor/System/Cronjob.php b/lib/Froxlor/System/Cronjob.php index bf7debfa..f5b32fe1 100644 --- a/lib/Froxlor/System/Cronjob.php +++ b/lib/Froxlor/System/Cronjob.php @@ -178,6 +178,14 @@ class Cronjob 'type' => '11', 'data' => $data )); + } elseif ($type == '12' && $param1 != '') { + $data = array(); + $data['domain'] = $param1; + $data = json_encode($data); + Database::pexecute($ins_stmt, array( + 'type' => '12', + 'data' => $data + )); } elseif ($type == '20' && is_array($param1)) { $data = json_encode($param1); Database::pexecute($ins_stmt, array(