/*
Technitium DNS Server
Copyright (C) 2023 Shreyas Zare (shreyas@technitium.com)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see
");
HTTPRequest({
url: "/api/zones/enable?token=" + sessionData.token + "&zone=" + zone,
success: function (responseJSON) {
btn.prop("disabled", false);
btn.html(originalBtnHtml);
$("#mnuEnableZone" + id).hide();
$("#mnuDisableZone" + id).show();
$("#tdZoneStatus" + id).attr("class", "label label-success");
$("#tdZoneStatus" + id).html("Enabled");
showAlert("success", "Zone Enabled!", "Zone '" + zone + "' was enabled successfully.");
},
error: function () {
btn.prop("disabled", false);
btn.html(originalBtnHtml);
},
invalidToken: function () {
showPageLogin();
}
});
}
function enableZone(objBtn) {
var zone = $("#titleEditZone").attr("data-zone");
var btn = $(objBtn);
btn.button("loading");
HTTPRequest({
url: "/api/zones/enable?token=" + sessionData.token + "&zone=" + zone,
success: function (responseJSON) {
btn.button("reset");
$("#btnEnableZoneEditZone").hide();
$("#btnDisableZoneEditZone").show();
$("#titleStatusEditZone").attr("class", "label label-success");
$("#titleStatusEditZone").html("Enabled");
showAlert("success", "Zone Enabled!", "Zone '" + zone + "' was enabled successfully.");
},
error: function () {
btn.button("reset");
},
invalidToken: function () {
btn.button("reset");
showPageLogin();
}
});
}
function disableZoneMenu(objMenuItem) {
var mnuItem = $(objMenuItem);
var id = mnuItem.attr("data-id");
var zone = mnuItem.attr("data-zone");
if (!confirm("Are you sure you want to disable the zone '" + zone + "'?"))
return;
var btn = $("#btnZoneRowOption" + id);
var originalBtnHtml = btn.html();
btn.prop("disabled", true);
btn.html("
");
HTTPRequest({
url: "/api/zones/disable?token=" + sessionData.token + "&zone=" + zone,
success: function (responseJSON) {
btn.prop("disabled", false);
btn.html(originalBtnHtml);
$("#mnuEnableZone" + id).show();
$("#mnuDisableZone" + id).hide();
$("#tdZoneStatus" + id).attr("class", "label label-warning");
$("#tdZoneStatus" + id).html("Disabled");
showAlert("success", "Zone Disabled!", "Zone '" + zone + "' was disabled successfully.");
},
error: function () {
btn.prop("disabled", false);
btn.html(originalBtnHtml);
},
invalidToken: function () {
showPageLogin();
}
});
}
function disableZone(objBtn) {
var zone = $("#titleEditZone").attr("data-zone");
if (!confirm("Are you sure you want to disable the zone '" + zone + "'?"))
return;
var btn = $(objBtn);
btn.button("loading");
HTTPRequest({
url: "/api/zones/disable?token=" + sessionData.token + "&zone=" + zone,
success: function (responseJSON) {
btn.button("reset");
$("#btnEnableZoneEditZone").show();
$("#btnDisableZoneEditZone").hide();
$("#titleStatusEditZone").attr("class", "label label-warning");
$("#titleStatusEditZone").html("Disabled");
showAlert("success", "Zone Disabled!", "Zone '" + zone + "' was disabled successfully.");
},
error: function () {
btn.button("reset");
},
invalidToken: function () {
btn.button("reset");
showPageLogin();
}
});
}
function deleteZoneMenu(objMenuItem) {
var mnuItem = $(objMenuItem);
var id = mnuItem.attr("data-id");
var zone = mnuItem.attr("data-zone");
if (!confirm("Are you sure you want to permanently delete the zone '" + zone + "' and all its records?"))
return;
var btn = $("#btnZoneRowOption" + id);
var originalBtnHtml = btn.html();
btn.prop("disabled", true);
btn.html("
");
HTTPRequest({
url: "/api/zones/delete?token=" + sessionData.token + "&zone=" + zone,
success: function (responseJSON) {
refreshZones();
showAlert("success", "Zone Deleted!", "Zone '" + zone + "' was deleted successfully.");
},
error: function () {
btn.prop("disabled", false);
btn.html(originalBtnHtml);
},
invalidToken: function () {
showPageLogin();
}
});
}
function deleteZone(objBtn) {
var zone = $("#titleEditZone").attr("data-zone");
if (!confirm("Are you sure you want to permanently delete the zone '" + zone + "' and all its records?"))
return;
var btn = $(objBtn);
btn.button("loading");
HTTPRequest({
url: "/api/zones/delete?token=" + sessionData.token + "&zone=" + zone,
success: function (responseJSON) {
btn.button("reset");
refreshZones();
showAlert("success", "Zone Deleted!", "Zone '" + zone + "' was deleted successfully.");
},
error: function () {
btn.button("reset");
},
invalidToken: function () {
btn.button("reset");
showPageLogin();
}
});
}
function showCloneZoneModal(sourceZone) {
$("#lblCloneZoneZoneName").text(sourceZone === "." ? "
");
HTTPRequest({
url: "/api/zones/resync?token=" + sessionData.token + "&zone=" + zone,
success: function (responseJSON) {
btn.prop("disabled", false);
btn.html(originalBtnHtml);
showAlert("success", "Resync Triggered!", "Zone '" + zone + "' resync was triggered successfully. Please check the Logs for confirmation.");
},
error: function () {
btn.prop("disabled", false);
btn.html(originalBtnHtml);
},
invalidToken: function () {
showPageLogin();
}
});
}
function resyncZone(objBtn, zone) {
if ($("#titleEditZoneType").text() == "Secondary") {
if (!confirm("The resync action will perform a full zone transfer (AXFR). You will need to check the logs to confirm if the resync action was successful.\r\n\r\nAre you sure you want to resync the '" + zone + "' zone?"))
return;
}
else {
if (!confirm("The resync action will perform a full zone refresh. You will need to check the logs to confirm if the resync action was successful.\r\n\r\nAre you sure you want to resync the '" + zone + "' zone?"))
return;
}
var btn = $(objBtn);
btn.button("loading");
HTTPRequest({
url: "/api/zones/resync?token=" + sessionData.token + "&zone=" + zone,
success: function (responseJSON) {
btn.button("reset");
showAlert("success", "Resync Triggered!", "Zone '" + zone + "' resync was triggered successfully. Please check the Logs for confirmation.");
},
error: function () {
btn.button("reset");
},
invalidToken: function () {
btn.button("reset");
showPageLogin();
}
});
}
function showAddZoneModal() {
$("#divAddZoneAlert").html("");
$("#txtAddZone").val("");
$("#rdAddZoneTypePrimary").prop("checked", true);
$("#txtAddZonePrimaryNameServerAddresses").val("");
$("#rdAddZoneZoneTransferProtocolTcp").prop("checked", true);
$("#optAddZoneTsigKeyName").val("");
$("input[name=rdAddZoneForwarderProtocol]:radio").attr("disabled", false);
$("#rdAddZoneForwarderProtocolUdp").prop("checked", true);
$("#chkAddZoneForwarderThisServer").prop("checked", false);
$("#txtAddZoneForwarder").prop("disabled", false);
$("#txtAddZoneForwarder").attr("placeholder", "8.8.8.8 or [2620:fe::10]")
$("#txtAddZoneForwarder").val("");
$("#chkAddZoneForwarderDnssecValidation").prop("checked", $("#chkDnssecValidation").prop("checked"));
$("#rdAddZoneForwarderProxyTypeDefaultProxy").prop("checked", true);
$("#txtAddZoneForwarderProxyAddress").prop("disabled", true);
$("#txtAddZoneForwarderProxyPort").prop("disabled", true);
$("#txtAddZoneForwarderProxyUsername").prop("disabled", true);
$("#txtAddZoneForwarderProxyPassword").prop("disabled", true);
$("#txtAddZoneForwarderProxyAddress").val("");
$("#txtAddZoneForwarderProxyPort").val("");
$("#txtAddZoneForwarderProxyUsername").val("");
$("#txtAddZoneForwarderProxyPassword").val("");
$("#divAddZonePrimaryNameServerAddresses").hide();
$("#divAddZoneZoneTransferProtocol").hide();
$("#divAddZoneTsigKeyName").hide();
$("#divAddZoneForwarderProtocol").hide();
$("#divAddZoneForwarder").hide();
$("#divAddZoneForwarderDnssecValidation").hide();
$("#divAddZoneForwarderProxy").hide();
$("#btnAddZone").button('reset');
$("#modalAddZone").modal("show");
setTimeout(function () {
$("#txtAddZone").focus();
}, 1000);
}
function loadTsigKeyNames(jqDropDown, currentValue, divAlertPlaceholder) {
jqDropDown.prop("disabled", true);
if (currentValue == null)
currentValue = "";
if (currentValue.length == 0) {
jqDropDown.html("");
}
else {
jqDropDown.html("");
jqDropDown.val(currentValue);
}
HTTPRequest({
url: "/api/settings/getTsigKeyNames?token=" + sessionData.token,
success: function (responseJSON) {
var optionsHtml;
if (currentValue.length == 0)
optionsHtml = "";
else
optionsHtml = "";
for (var i = 0; i < responseJSON.response.tsigKeyNames.length; i++) {
optionsHtml += "";
}
jqDropDown.html(optionsHtml);
jqDropDown.prop("disabled", false);
},
error: function () {
jqDropDown.prop("disabled", false);
},
invalidToken: function () {
jqDropDown.prop("disabled", false);
showPageLogin();
},
objAlertPlaceholder: divAlertPlaceholder
});
}
function updateAddZoneFormForwarderThisServer() {
var useThisServer = $("#chkAddZoneForwarderThisServer").prop('checked');
if (useThisServer) {
$("input[name=rdAddZoneForwarderProtocol]:radio").attr("disabled", true);
$("#rdAddZoneForwarderProtocolUdp").prop("checked", true);
$("#txtAddZoneForwarder").attr("placeholder", "8.8.8.8 or [2620:fe::10]")
$("#txtAddZoneForwarder").prop("disabled", true);
$("#txtAddZoneForwarder").val("this-server");
$("#divAddZoneForwarderProxy").hide();
}
else {
$("input[name=rdAddZoneForwarderProtocol]:radio").attr("disabled", false);
$("#txtAddZoneForwarder").prop("disabled", false);
$("#txtAddZoneForwarder").val("");
$("#divAddZoneForwarderProxy").show();
}
}
function addZone() {
var divAddZoneAlert = $("#divAddZoneAlert");
var zone = $("#txtAddZone").val();
if ((zone == null) || (zone === "")) {
showAlert("warning", "Missing!", "Please enter a domain name to add zone.", divAddZoneAlert);
$("#txtAddZone").focus();
return;
}
var type = $('input[name=rdAddZoneType]:checked').val();
var parameters;
switch (type) {
case "Secondary":
var tsigKeyName = $("#optAddZoneTsigKeyName").val();
parameters = "&primaryNameServerAddresses=" + encodeURIComponent(cleanTextList($("#txtAddZonePrimaryNameServerAddresses").val()));
parameters += "&zoneTransferProtocol=" + $("input[name=rdAddZoneZoneTransferProtocol]:checked").val();
parameters += "&tsigKeyName=" + encodeURIComponent(tsigKeyName);
break;
case "Stub":
parameters = "&primaryNameServerAddresses=" + encodeURIComponent(cleanTextList($("#txtAddZonePrimaryNameServerAddresses").val()));
break;
case "Forwarder":
var forwarder = $("#txtAddZoneForwarder").val();
if ((forwarder == null) || (forwarder === "")) {
showAlert("warning", "Missing!", "Please enter a forwarder server name to add zone.", divAddZoneAlert);
$("#txtAddZoneForwarder").focus();
return;
}
var dnssecValidation = $("#chkAddZoneForwarderDnssecValidation").prop("checked");
parameters = "&protocol=" + $("input[name=rdAddZoneForwarderProtocol]:checked").val() + "&forwarder=" + encodeURIComponent(forwarder) + "&dnssecValidation=" + dnssecValidation;
if (forwarder !== "this-server") {
var proxyType = $("input[name=rdAddZoneForwarderProxyType]:checked").val();
parameters += "&proxyType=" + proxyType;
switch (proxyType) {
case "Http":
case "Socks5":
var proxyAddress = $("#txtAddZoneForwarderProxyAddress").val();
var proxyPort = $("#txtAddZoneForwarderProxyPort").val();
var proxyUsername = $("#txtAddZoneForwarderProxyUsername").val();
var proxyPassword = $("#txtAddZoneForwarderProxyPassword").val();
if ((proxyAddress == null) || (proxyAddress === "")) {
showAlert("warning", "Missing!", "Please enter a domain name or IP address for Proxy Server Address to add zone.", divAddZoneAlert);
$("#txtAddZoneForwarderProxyAddress").focus();
return;
}
if ((proxyPort == null) || (proxyPort === "")) {
showAlert("warning", "Missing!", "Please enter a port number for Proxy Server Port to add zone.", divAddZoneAlert);
$("#txtAddZoneForwarderProxyPort").focus();
return;
}
parameters += "&proxyAddress=" + encodeURIComponent(proxyAddress) + "&proxyPort=" + proxyPort + "&proxyUsername=" + encodeURIComponent(proxyUsername) + "&proxyPassword=" + encodeURIComponent(proxyPassword);
break;
}
}
break;
default:
parameters = "";
break;
}
var btn = $("#btnAddZone").button('loading');
HTTPRequest({
url: "/api/zones/create?token=" + sessionData.token + "&zone=" + zone + "&type=" + type + parameters,
success: function (responseJSON) {
$("#modalAddZone").modal("hide");
showEditZone(responseJSON.response.domain);
showAlert("success", "Zone Added!", "Zone was added successfully.");
},
error: function () {
btn.button("reset");
},
invalidToken: function () {
$("#modalAddZone").modal("hide");
showPageLogin();
},
objAlertPlaceholder: divAddZoneAlert
});
}
function toggleHideDnssecRecords(hideDnssecRecords) {
localStorage.setItem("zoneHideDnssecRecords", hideDnssecRecords);
showEditZone($("#titleEditZone").attr("data-zone"));
}
function showEditZone(zone, showPageNumber) {
if (zone == null) {
zone = $("#txtZonesEdit").val();
if (zone === "") {
showAlert("warning", "Missing!", "Please enter a zone name to start editing.");
$("#txtZonesEdit").focus();
return;
}
}
if (showPageNumber == null)
showPageNumber = 1;
var divViewZonesLoader = $("#divViewZonesLoader");
var divViewZones = $("#divViewZones");
var divEditZone = $("#divEditZone");
divViewZones.hide();
divEditZone.hide();
divViewZonesLoader.show();
HTTPRequest({
url: "/api/zones/records/get?token=" + sessionData.token + "&domain=" + zone + "&zone=" + zone + "&listZone=true",
success: function (responseJSON) {
zone = responseJSON.response.zone.name;
if (zone === "")
zone = ".";
var zoneType;
if (responseJSON.response.zone.internal)
zoneType = "Internal";
else
zoneType = responseJSON.response.zone.type;
switch (responseJSON.response.zone.dnssecStatus) {
case "SignedWithNSEC":
case "SignedWithNSEC3":
$("#titleDnssecStatusEditZone").show();
break;
default:
$("#titleDnssecStatusEditZone").hide();
break;
}
var status;
if (responseJSON.response.zone.disabled)
status = "Disabled";
else if (responseJSON.response.zone.isExpired)
status = "Expired";
else if (responseJSON.response.zone.syncFailed)
status = "Sync Failed";
else if (responseJSON.response.zone.notifyFailed)
status = "Notify Failed";
else
status = "Enabled";
var expiry = responseJSON.response.zone.expiry;
if (expiry == null)
expiry = " ";
else
expiry = "Expiry: " + moment(expiry).local().format("YYYY-MM-DD HH:mm:ss");
$("#titleEditZoneType").html(zoneType);
$("#titleStatusEditZone").html(status);
$("#titleEditZoneExpiry").html(expiry);
if (responseJSON.response.zone.internal)
$("#titleEditZoneType").attr("class", "label label-default");
else
$("#titleEditZoneType").attr("class", "label label-primary");
switch (status) {
case "Disabled":
case "Sync Failed":
case "Notify Failed":
$("#titleStatusEditZone").attr("class", "label label-warning");
break;
case "Expired":
$("#titleStatusEditZone").attr("class", "label label-danger");
break;
case "Enabled":
$("#titleStatusEditZone").attr("class", "label label-success");
break;
}
switch (zoneType) {
case "Internal":
case "Secondary":
case "Stub":
$("#btnEditZoneAddRecord").hide();
break;
case "Forwarder":
$("#btnEditZoneAddRecord").show();
$("#optAddEditRecordTypeDs").hide();
$("#optAddEditRecordTypeSshfp").hide();
$("#optAddEditRecordTypeTlsa").hide();
$("#optAddEditRecordTypeAName").show();
$("#optAddEditRecordTypeFwd").show();
$("#optAddEditRecordTypeApp").show();
break;
case "Primary":
$("#btnEditZoneAddRecord").show();
$("#optAddEditRecordTypeFwd").hide();
switch (responseJSON.response.zone.dnssecStatus) {
case "SignedWithNSEC":
case "SignedWithNSEC3":
$("#optAddEditRecordTypeDs").show();
$("#optAddEditRecordTypeSshfp").show();
$("#optAddEditRecordTypeTlsa").show();
$("#optAddEditRecordTypeAName").hide();
$("#optAddEditRecordTypeApp").hide();
break;
default:
$("#optAddEditRecordTypeDs").hide();
$("#optAddEditRecordTypeSshfp").hide();
$("#optAddEditRecordTypeTlsa").hide();
$("#optAddEditRecordTypeAName").show();
$("#optAddEditRecordTypeApp").show();
break;
}
break;
}
if (responseJSON.response.zone.internal) {
$("#btnEnableZoneEditZone").hide();
$("#btnDisableZoneEditZone").hide();
$("#btnEditZoneDeleteZone").hide();
}
else if (responseJSON.response.zone.disabled) {
$("#btnEnableZoneEditZone").show();
$("#btnDisableZoneEditZone").hide();
$("#btnEditZoneDeleteZone").show();
}
else {
$("#btnEnableZoneEditZone").hide();
$("#btnDisableZoneEditZone").show();
$("#btnEditZoneDeleteZone").show();
}
switch (zoneType) {
case "Secondary":
case "Stub":
$("#btnZoneResync").show();
break;
default:
$("#btnZoneResync").hide();
break;
}
switch (zoneType) {
case "Primary":
case "Secondary":
case "Forwarder":
$("#divZoneOptions").show();
break;
default:
$("#divZoneOptions").hide();
break;
}
switch (zoneType) {
case "Primary":
case "Secondary":
case "Forwarder":
$("#lnkZoneConvert").show();
break;
default:
$("#lnkZoneConvert").hide();
break;
}
switch (zoneType) {
case "Primary":
case "Secondary":
$("#lnkZoneOptions").show();
break;
default:
$("#lnkZoneOptions").hide();
break;
}
switch (zoneType) {
case "Primary":
case "Secondary":
case "Stub":
case "Forwarder":
$("#btnZonePermissions").show();
break;
default:
$("#btnZonePermissions").hide();
break;
}
var zoneHideDnssecRecords = (localStorage.getItem("zoneHideDnssecRecords") == "true");
switch (zoneType) {
case "Primary":
$("#divZoneDnssecOptions").show();
switch (responseJSON.response.zone.dnssecStatus) {
case "SignedWithNSEC":
case "SignedWithNSEC3":
$("#lnkZoneDnssecSignZone").hide();
if (zoneHideDnssecRecords) {
$("#lnkZoneDnssecHideRecords").hide();
$("#lnkZoneDnssecShowRecords").show();
}
else {
$("#lnkZoneDnssecHideRecords").show();
$("#lnkZoneDnssecShowRecords").hide();
}
$("#lnkZoneDnssecProperties").show();
$("#lnkZoneDnssecUnsignZone").show();
break;
default:
$("#lnkZoneDnssecSignZone").show();
$("#lnkZoneDnssecHideRecords").hide();
$("#lnkZoneDnssecShowRecords").hide();
$("#lnkZoneDnssecProperties").hide();
$("#lnkZoneDnssecUnsignZone").hide();
break;
}
break;
case "Secondary":
switch (responseJSON.response.zone.dnssecStatus) {
case "SignedWithNSEC":
case "SignedWithNSEC3":
$("#divZoneDnssecOptions").show();
$("#lnkZoneDnssecSignZone").hide();
if (zoneHideDnssecRecords) {
$("#lnkZoneDnssecHideRecords").hide();
$("#lnkZoneDnssecShowRecords").show();
}
else {
$("#lnkZoneDnssecHideRecords").show();
$("#lnkZoneDnssecShowRecords").hide();
}
$("#lnkZoneDnssecProperties").hide();
$("#lnkZoneDnssecUnsignZone").hide();
break;
default:
$("#divZoneDnssecOptions").hide();
break;
}
break;
default:
$("#divZoneDnssecOptions").hide();
break;
}
editZoneInfo = responseJSON.response.zone;
if (!zoneHideDnssecRecords || (responseJSON.response.zone.dnssecStatus === "Unsigned")) {
editZoneRecords = responseJSON.response.records;
}
else {
var records = responseJSON.response.records;
editZoneRecords = [];
for (var i = 0; i < records.length; i++) {
switch (records[i].type.toUpperCase()) {
case "RRSIG":
case "NSEC":
case "DNSKEY":
case "NSEC3":
case "NSEC3PARAM":
continue;
default:
editZoneRecords.push(records[i]);
break;
}
}
}
if (responseJSON.response.zone.nameIdn == null)
$("#titleEditZone").text(zone === "." ? "" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.rData.certificateAssociationData) + ""); tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
| Key | " + "Value | " + "
|---|---|
| " + htmlEncode(paramKey) + " | " + htmlEncode(record.rData.svcParams[paramKey]) + " |
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.rData.data) + ""); tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
" + htmlEncode(record.comments) + ""; tableHtmlRow += "
");
HTTPRequest({
url: "/api/zones/dnssec/properties/deletePrivateKey?token=" + sessionData.token + "&zone=" + zone + "&keyTag=" + keyTag,
success: function (responseJSON) {
$("#trDnssecPropertiesPrivateKey" + id).remove();
showAlert("success", "Private Key Deleted!", "The DNSSEC private key was deleted successfully.", divDnssecPropertiesAlert);
},
error: function () {
btn.prop("disabled", false);
btn.html(originalBtnHtml);
},
invalidToken: function () {
$("#modalDnssecProperties").modal("hide");
showPageLogin();
},
objAlertPlaceholder: divDnssecPropertiesAlert
});
}
function rolloverDnssecDnsKey(keyTag, id) {
if (!confirm("Are you sure you want to rollover the DNS Key (" + keyTag + ")?"))
return;
var divDnssecPropertiesAlert = $("#divDnssecPropertiesAlert");
var zone = $("#lblDnssecPropertiesZoneName").attr("data-zone");
var btn = $("#btnDnssecPropertiesDnsKeyRowOption" + id);
var originalBtnHtml = btn.html();
btn.prop("disabled", true);
btn.html("
");
HTTPRequest({
url: "/api/zones/dnssec/properties/rolloverDnsKey?token=" + sessionData.token + "&zone=" + zone + "&keyTag=" + keyTag,
success: function (responseJSON) {
refreshDnssecProperties();
showAlert("success", "Rollover Done!", "The DNS Key was rolled over successfully.", divDnssecPropertiesAlert);
},
error: function () {
btn.prop("disabled", false);
btn.html(originalBtnHtml);
},
invalidToken: function () {
$("#modalDnssecProperties").modal("hide");
showPageLogin();
},
objAlertPlaceholder: divDnssecPropertiesAlert
});
}
function retireDnssecDnsKey(keyTag, id) {
if (!confirm("Are you sure you want to retire the DNS Key (" + keyTag + ")?"))
return;
var divDnssecPropertiesAlert = $("#divDnssecPropertiesAlert");
var zone = $("#lblDnssecPropertiesZoneName").attr("data-zone");
var btn = $("#btnDnssecPropertiesDnsKeyRowOption" + id);
var originalBtnHtml = btn.html();
btn.prop("disabled", true);
btn.html("
");
HTTPRequest({
url: "/api/zones/dnssec/properties/retireDnsKey?token=" + sessionData.token + "&zone=" + zone + "&keyTag=" + keyTag,
success: function (responseJSON) {
refreshDnssecProperties();
showAlert("success", "DNS Key Retired!", "The DNS Key was retired successfully.", divDnssecPropertiesAlert);
},
error: function () {
btn.prop("disabled", false);
btn.html(originalBtnHtml);
},
invalidToken: function () {
$("#modalDnssecProperties").modal("hide");
showPageLogin();
},
objAlertPlaceholder: divDnssecPropertiesAlert
});
}
function publishAllDnssecPrivateKeys(objBtn) {
if (!confirm("Are you sure you want to publish all generated DNSSEC private keys?"))
return;
var btn = $(objBtn);
var divDnssecPropertiesAlert = $("#divDnssecPropertiesAlert");
var zone = $("#lblDnssecPropertiesZoneName").attr("data-zone");
btn.button("loading");
HTTPRequest({
url: "/api/zones/dnssec/properties/publishAllPrivateKeys?token=" + sessionData.token + "&zone=" + zone,
success: function (responseJSON) {
refreshDnssecProperties();
btn.button("reset");
showAlert("success", "Keys Published!", "All the generated DNSSEC private keys were published successfully.", divDnssecPropertiesAlert);
},
error: function () {
btn.button("reset");
},
invalidToken: function () {
btn.button("reset");
$("#modalDnssecProperties").modal("hide");
showPageLogin();
},
objAlertPlaceholder: divDnssecPropertiesAlert
});
}
function generateAndAddDnssecPrivateKey(objBtn) {
var btn = $(objBtn);
var divDnssecPropertiesAlert = $("#divDnssecPropertiesAlert");
var zone = $("#lblDnssecPropertiesZoneName").attr("data-zone");
var keyType = $("#optDnssecPropertiesGenerateKeyKeyType").val();
var algorithm = $("#optDnssecPropertiesGenerateKeyAlgorithm").val();
var rolloverDays = $("#txtDnssecPropertiesGenerateKeyAutomaticRollover").val();
var additionalParameters = "";
switch (algorithm) {
case "RSA":
var hashAlgorithm = $("#optDnssecPropertiesGenerateKeyRsaHashAlgorithm").val();
var keySize = $("#optDnssecPropertiesGenerateKeyRsaKeySize").val();
additionalParameters = "&hashAlgorithm=" + hashAlgorithm + "&keySize=" + keySize;
break;
case "ECDSA":
var curve = $("#optDnssecPropertiesGenerateKeyEcdsaCurve").val();
additionalParameters = "&curve=" + curve;
break;
}
btn.button("loading");
HTTPRequest({
url: "/api/zones/dnssec/properties/generatePrivateKey?token=" + sessionData.token + "&zone=" + zone + "&keyType=" + keyType + "&rolloverDays=" + rolloverDays + "&algorithm=" + algorithm + additionalParameters,
success: function (responseJSON) {
$("#divDnssecPropertiesGenerateKey").collapse("hide");
refreshDnssecProperties();
btn.button("reset");
showAlert("success", "Key Generated!", "The DNSSEC private key was generated successfully.", divDnssecPropertiesAlert);
},
error: function () {
btn.button("reset");
},
invalidToken: function () {
btn.button("reset");
$("#modalDnssecProperties").modal("hide");
showPageLogin();
},
objAlertPlaceholder: divDnssecPropertiesAlert
});
}
function changeDnssecNxProof(objBtn) {
var btn = $(objBtn);
var currentNxProof = btn.attr("data-nx-proof");
var currentIterations = btn.attr("data-nsec3-iterations");
var currentSaltLength = btn.attr("data-nsec3-salt-length");
var nxProof = $("input[name=rdDnssecPropertiesNxProof]:checked").val();
var iterations;
var saltLength;
var divDnssecPropertiesAlert = $("#divDnssecPropertiesAlert");
var zone = $("#lblDnssecPropertiesZoneName").attr("data-zone");
var apiUrl;
switch (currentNxProof) {
case "NSEC":
if (nxProof === "NSEC") {
showAlert("success", "Proof Changed!", "The proof of non-existence was changed successfully.", divDnssecPropertiesAlert)
return;
}
else {
var iterations = $("#txtDnssecPropertiesNSEC3Iterations").val();
var saltLength = $("#txtDnssecPropertiesNSEC3SaltLength").val();
apiUrl = "/api/zones/dnssec/properties/convertToNSEC3?token=" + sessionData.token + "&zone=" + zone + "&iterations=" + iterations + "&saltLength=" + saltLength;
}
break;
case "NSEC3":
if (nxProof === "NSEC3") {
iterations = $("#txtDnssecPropertiesNSEC3Iterations").val();
saltLength = $("#txtDnssecPropertiesNSEC3SaltLength").val();
if ((currentIterations == iterations) && (currentSaltLength == saltLength)) {
showAlert("success", "Proof Changed!", "The proof of non-existence was changed successfully.", divDnssecPropertiesAlert)
return;
}
else {
apiUrl = "/api/zones/dnssec/properties/updateNSEC3Params?token=" + sessionData.token + "&zone=" + zone + "&iterations=" + iterations + "&saltLength=" + saltLength;
}
} else {
apiUrl = "/api/zones/dnssec/properties/convertToNSEC?token=" + sessionData.token + "&zone=" + zone;
}
break;
default:
return;
}
if (!confirm("Are you sure you want to change the proof of non-existence options for the zone?"))
return;
btn.button("loading");
HTTPRequest({
url: apiUrl,
success: function (responseJSON) {
btn.attr("data-nx-proof", nxProof);
if (iterations != null)
btn.attr("data-nsec3-iterations", iterations);
if (saltLength != null)
btn.attr("data-nsec3-salt-length", saltLength);
btn.button("reset");
var zoneHideDnssecRecords = (localStorage.getItem("zoneHideDnssecRecords") == "true");
if (!zoneHideDnssecRecords)
showEditZone(zone);
showAlert("success", "Proof Changed!", "The proof of non-existence was changed successfully.", divDnssecPropertiesAlert);
},
error: function () {
btn.button("reset");
},
invalidToken: function () {
btn.button("reset");
$("#modalDnssecProperties").modal("hide");
showPageLogin();
},
objAlertPlaceholder: divDnssecPropertiesAlert
});
}
function updateDnssecDnsKeyTtl(objBtn) {
var btn = $(objBtn);
var divDnssecPropertiesAlert = $("#divDnssecPropertiesAlert");
var zone = $("#lblDnssecPropertiesZoneName").attr("data-zone");
var ttl = $("#txtDnssecPropertiesDnsKeyTtl").val();
btn.button("loading");
HTTPRequest({
url: "/api/zones/dnssec/properties/updateDnsKeyTtl?token=" + sessionData.token + "&zone=" + zone + "&ttl=" + ttl,
success: function (responseJSON) {
btn.button("reset");
showAlert("success", "TTL Updated!", "The DNSKEY TTL was updated successfully.", divDnssecPropertiesAlert);
},
error: function () {
btn.button("reset");
},
invalidToken: function () {
btn.button("reset");
$("#modalDnssecProperties").modal("hide");
showPageLogin();
},
objAlertPlaceholder: divDnssecPropertiesAlert
});
}