Skip to content

Commit edb2af4

Browse files
authored
Merge pull request #482 from openprovider/INTGRTNS-410-WHMCS-Domain-Module-Refactor-DNSSEC-Management-Storage-Using-WHMCS-Domain-Extra
Updated the logic for enabling/disabling DNSSEC
2 parents 792d9d3 + a966b63 commit edb2af4

3 files changed

Lines changed: 75 additions & 40 deletions

File tree

modules/registrars/openprovider/Controllers/Hooks/ClientAreaPrimarySidebarController.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use OpenProvider\API\ApiHelper;
66
use OpenProvider\WhmcsRegistrar\helpers\DNS;
77
use OpenProvider\WhmcsRegistrar\helpers\DomainFullNameToDomainObject;
8+
use OpenProvider\WhmcsRegistrar\helpers\DnssecManagement;
89
use WHMCS\Database\Capsule;
910

1011
/**
@@ -82,10 +83,15 @@ private function addDNSSECMenuItem($primarySidebar)
8283
$domainId = isset($_REQUEST['domainid']) ? $_REQUEST['domainid'] : $_REQUEST['id'];
8384
$isDomainEnabled = Capsule::table('tbldomains')
8485
->where('id', $domainId)
85-
->select('status', 'dnssecmanagement', 'domain')
86+
->select('status','domain')
8687
->first();
8788

88-
if ($isDomainEnabled->dnssecmanagement != 1){
89+
if (!$isDomainEnabled) {
90+
return;
91+
}
92+
93+
$dnssecMgmt = DnssecManagement::getFlag((int)$domainId); // 0/1
94+
if ($dnssecMgmt !== 1) {
8995
return;
9096
}
9197

modules/registrars/openprovider/Controllers/Hooks/DnssecToggleController.php

Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use OpenProvider\API\ApiHelper;
66
use WHMCS\Database\Capsule;
7+
use OpenProvider\WhmcsRegistrar\helpers\DnssecManagement;
78

89
/**
910
* Class DnssecToggleController
@@ -35,10 +36,8 @@ public function output($vars)
3536
return [];
3637
}
3738

38-
$this->ensureDnssecColumn();
39-
4039
$row = Capsule::table('tbldomains')
41-
->select('id','domain','dnssecmanagement')
40+
->select('id','domain')
4241
->where('id', $domainId)
4342
->first();
4443

@@ -51,8 +50,7 @@ public function output($vars)
5150
$tld_enabled = false;
5251
}
5352

54-
$admin_enabled = $row && (int)($row->dnssecmanagement ?? 0) === 1;
55-
53+
$admin_enabled = DnssecManagement::getFlag((int)$row->id) === 1;
5654
$enabled = $tld_enabled && $admin_enabled;
5755

5856
$html = '
@@ -78,18 +76,16 @@ public function save($vars)
7876

7977
unset($_SESSION['op_dnssec_popup']);
8078

81-
$this->ensureDnssecColumn();
82-
8379
$row = Capsule::table('tbldomains')
84-
->select('id','domain','dnssecmanagement')
80+
->select('id','domain')
8581
->where('id', $domainId)
8682
->first();
8783

8884
if (!$row) {
8985
return;
9086
}
9187

92-
$current = (int)($row->dnssecmanagement ?? 0);
88+
$current = DnssecManagement::getFlag((int)$row->id);
9389
$checkEnable = isset($_REQUEST['op_dnssec_management']) && $_REQUEST['op_dnssec_management'] == '1';
9490
$wantsEnable = $checkEnable ? 1 : 0;
9591
$tld = $this->extractTldFromFqdn((string)$row->domain);
@@ -102,7 +98,7 @@ public function save($vars)
10298

10399
if ($wantsEnable === $current) {
104100
if ($wantsEnable === 1 && !$allowed) {
105-
$this->updateDnssecFlag((int) $row->id, 0);
101+
DnssecManagement::setFlag((int) $row->id, 0);
106102
$this->setDnssecPopup(
107103
(int) $row->id,
108104
'warning',
@@ -116,12 +112,12 @@ public function save($vars)
116112
}
117113

118114
if (!$allowed && $wantsEnable === 0 && $current === 1) {
119-
$this->updateDnssecFlag((int) $row->id, 0);
115+
DnssecManagement::setFlag((int) $row->id, 0);
120116
return;
121117
}
122118

123119
if ($wantsEnable === 0) {
124-
$this->updateDnssecFlag((int) $row->id, 0);
120+
DnssecManagement::setFlag((int) $row->id, 0);
125121
$this->setDnssecPopup(
126122
(int) $row->id,
127123
'success',
@@ -132,15 +128,15 @@ public function save($vars)
132128
}
133129

134130
if ($allowed) {
135-
$this->updateDnssecFlag((int) $row->id, 1);
131+
DnssecManagement::setFlag((int) $row->id, 1);
136132
$this->setDnssecPopup(
137133
(int) $row->id,
138134
'success',
139135
'enabled',
140136
'DNSSEC management has been successfully enabled for the domain. The client can now manage DNSSEC from the client area.'
141137
);
142138
} else {
143-
$this->updateDnssecFlag((int) $row->id, 0);
139+
DnssecManagement::setFlag((int) $row->id, 0);
144140
$this->setDnssecPopup(
145141
(int) $row->id,
146142
'warning',
@@ -261,30 +257,6 @@ private function jsonInline($str)
261257
return json_encode((string)$str, JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_AMP|JSON_HEX_QUOT);
262258
}
263259

264-
private function ensureDnssecColumn(): void
265-
{
266-
$table = 'tbldomains';
267-
$col = 'dnssecmanagement';
268-
269-
try {
270-
if (!Capsule::schema()->hasTable($table) || Capsule::schema()->hasColumn($table, $col)) {
271-
return;
272-
}
273-
Capsule::schema()->table($table, function ($t) use ($col) {
274-
$t->tinyInteger($col)->unsigned()->default(1);
275-
});
276-
} catch (\Exception $e) {}
277-
}
278-
279-
private function updateDnssecFlag(int $domainId, int $value): void
280-
{
281-
try {
282-
Capsule::table('tbldomains')
283-
->where('id', $domainId)
284-
->update(['dnssecmanagement' => $value]);
285-
} catch (\Exception $e) {}
286-
}
287-
288260
private function setDnssecPopup(
289261
int $domainId,
290262
string $type,
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
namespace OpenProvider\WhmcsRegistrar\helpers;
4+
5+
use WHMCS\Database\Capsule;
6+
7+
class DnssecManagement
8+
{
9+
public const EXTRA_KEY = 'openprovider_dnssecmanagement';
10+
public const DEFAULT_DNSSEC_MGMT = 1;
11+
12+
public static function getFlag(int $domainId): int
13+
{
14+
try {
15+
$val = Capsule::table('tbldomains_extra')
16+
->where('domain_id', $domainId)
17+
->where('name', self::EXTRA_KEY)
18+
->value('value');
19+
20+
// No row = default behavior
21+
if ($val === null) {
22+
return self::DEFAULT_DNSSEC_MGMT;
23+
}
24+
25+
return ((string)$val === '1') ? 1 : 0;
26+
} catch (\Exception $e) {
27+
return self::DEFAULT_DNSSEC_MGMT;
28+
}
29+
}
30+
31+
public static function setFlag(int $domainId, int $value): void
32+
{
33+
$value = ($value === 1) ? '1' : '0';
34+
$now = date('Y-m-d H:i:s');
35+
36+
try {
37+
$query = Capsule::table('tbldomains_extra')
38+
->where('domain_id', $domainId)
39+
->where('name', self::EXTRA_KEY);
40+
41+
if ($query->exists()) {
42+
$query->update([
43+
'value' => $value,
44+
'updated_at' => $now,
45+
]);
46+
} else {
47+
Capsule::table('tbldomains_extra')->insert([
48+
'domain_id' => $domainId,
49+
'name' => self::EXTRA_KEY,
50+
'value' => $value,
51+
'created_at' => $now,
52+
'updated_at' => $now,
53+
]);
54+
}
55+
} catch (\Exception $e) {}
56+
}
57+
}

0 commit comments

Comments
 (0)