diff --git a/DnsServerCore/www/js/zone.js b/DnsServerCore/www/js/zone.js index f790116e..c50f6716 100644 --- a/DnsServerCore/www/js/zone.js +++ b/DnsServerCore/www/js/zone.js @@ -1317,6 +1317,8 @@ function showEditZone(zone) { case "Forwarder": $("#btnEditZoneAddRecord").show(); $("#optAddEditRecordTypeDs").hide(); + $("#optAddEditRecordTypeSshfp").hide(); + $("#optAddEditRecordTypeTlsa").hide(); $("#optAddEditRecordTypeAName").show(); $("#optAddEditRecordTypeFwd").show(); $("#optAddEditRecordTypeApp").show(); @@ -1330,12 +1332,16 @@ function showEditZone(zone) { 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; @@ -1716,6 +1722,23 @@ function getZoneRecordRowHtml(id, zone, zoneType, record) { "data-record-digest=\"" + htmlEncode(record.rData.digest) + "\" "; break; + case "SSHFP": + tableHtmlRow += "Algorithm: " + htmlEncode(record.rData.algorithm) + + "
Fingerprint Type: " + htmlEncode(record.rData.fingerprintType) + + "
Fingerprint: " + htmlEncode(record.rData.fingerprint); + + tableHtmlRow += "

Last Used: " + lastUsedOn; + + if ((record.comments != null) && (record.comments.length > 0)) + tableHtmlRow += "
Comments:
" + htmlEncode(record.comments) + "
"; + + tableHtmlRow += ""; + + additionalDataAttributes = "data-record-algorithm=\"" + htmlEncode(record.rData.algorithm) + "\" " + + "data-record-fingerprint-type=\"" + htmlEncode(record.rData.fingerprintType) + "\" " + + "data-record-fingerprint=\"" + htmlEncode(record.rData.fingerprint) + "\" "; + break; + case "RRSIG": tableHtmlRow += "Type Covered: " + htmlEncode(record.rData.typeCovered) + "
Algorithm: " + htmlEncode(record.rData.algorithm) + @@ -1839,6 +1862,25 @@ function getZoneRecordRowHtml(id, zone, zoneType, record) { additionalDataAttributes = ""; break; + case "TLSA": + tableHtmlRow += "Certificate Usage: " + htmlEncode(record.rData.certificateUsage) + + "
Selector: " + htmlEncode(record.rData.selector) + + "
Matching Type: " + htmlEncode(record.rData.matchingType) + + "
Certificate Association Data: " + (record.rData.certificateAssociationData == "" ? "
" : "
" + htmlEncode(record.rData.certificateAssociationData) + "
"); + + tableHtmlRow += "
Last Used: " + lastUsedOn; + + if ((record.comments != null) && (record.comments.length > 0)) + tableHtmlRow += "
Comments:
" + htmlEncode(record.comments) + "
"; + + tableHtmlRow += ""; + + additionalDataAttributes = "data-record-certificate-usage=\"" + htmlEncode(record.rData.certificateUsage) + "\" " + + "data-record-selector=\"" + htmlEncode(record.rData.selector) + "\" " + + "data-record-matching-type=\"" + htmlEncode(record.rData.matchingType) + "\" " + + "data-record-certificate-association-data=\"" + htmlEncode(record.rData.certificateAssociationData) + "\" "; + break; + case "CAA": tableHtmlRow += "Flags: " + htmlEncode(record.rData.flags) + "
Tag: " + htmlEncode(record.rData.tag) + @@ -1992,7 +2034,7 @@ function getZoneRecordRowHtml(id, zone, zoneType, record) { return tableHtmlRow; } -function clearAddEditForm() { +function clearAddEditRecordForm() { $("#divAddEditRecordAlert").html(""); $("#txtAddEditRecordName").prop("placeholder", "@"); @@ -2051,6 +2093,17 @@ function clearAddEditForm() { $("#optAddEditRecordDataDsDigestType").val(""); $("#txtAddEditRecordDataDsDigest").val(""); + $("#divAddEditRecordDataSshfp").hide(); + $("#optAddEditRecordDataSshfpAlgorithm").val(""); + $("#optAddEditRecordDataSshfpFingerprintType").val(""); + $("#txtAddEditRecordDataSshfpFingerprint").val(""); + + $("#divAddEditRecordDataTlsa").hide(); + $("#optAddEditRecordDataTlsaCertificateUsage").val(""); + $("#optAddEditRecordDataTlsaSelector").val(""); + $("#optAddEditRecordDataTlsaMatchingType").val(""); + $("#txtAddEditRecordDataTlsaCertificateAssociationData").val(""); + $("#divAddEditRecordDataCaa").hide(); $("#txtAddEditRecordDataCaaFlags").val(""); $("#txtAddEditRecordDataCaaTag").val(""); @@ -2092,7 +2145,7 @@ function clearAddEditForm() { function showAddRecordModal() { var zone = $("#titleEditZone").attr("data-zone"); - clearAddEditForm(); + clearAddEditRecordForm(); $("#titleAddEditRecord").text("Add Record"); $("#lblAddEditRecordZoneName").text(zone === "." ? "" : zone); @@ -2168,7 +2221,9 @@ function modifyAddRecordFormByType(addMode) { $("#divAddEditRecordDataMx").hide(); $("#divAddEditRecordDataSrv").hide(); $("#divAddEditRecordDataDs").hide(); - $("#divAddEditRecordDataCaa").hide(); + $("#divAddEditRecordDataDs").hide(); + $("#divAddEditRecordDataSshfp").hide(); + $("#divAddEditRecordDataTlsa").hide(); $("#divAddEditRecordDataForwarder").hide(); $("#divAddEditRecordDataApplication").hide(); @@ -2253,6 +2308,22 @@ function modifyAddRecordFormByType(addMode) { $("#divAddEditRecordDataDs").show(); break; + case "SSHFP": + $("#optAddEditRecordDataSshfpAlgorithm").val(""); + $("#optAddEditRecordDataSshfpFingerprintType").val(""); + $("#txtAddEditRecordDataSshfpFingerprint").val(""); + $("#divAddEditRecordDataSshfp").show(); + break; + + case "TLSA": + $("#txtAddEditRecordName").prop("placeholder", "_port._protocol.name"); + $("#optAddEditRecordDataTlsaCertificateUsage").val(""); + $("#optAddEditRecordDataTlsaSelector").val(""); + $("#optAddEditRecordDataTlsaMatchingType").val(""); + $("#txtAddEditRecordDataTlsaCertificateAssociationData").val(""); + $("#divAddEditRecordDataTlsa").show(); + break; + case "CAA": $("#txtAddEditRecordDataCaaFlags").val(""); $("#txtAddEditRecordDataCaaTag").val(""); @@ -2491,6 +2562,69 @@ function addRecord() { apiUrl += "&keyTag=" + keyTag + "&algorithm=" + algorithm + "&digestType=" + digestType + "&digest=" + encodeURIComponent(digest); break; + case "SSHFP": + var sshfpAlgorithm = $("#optAddEditRecordDataSshfpAlgorithm").val(); + if ((sshfpAlgorithm === null) || (sshfpAlgorithm === "")) { + showAlert("warning", "Missing!", "Please select an Algorithm to add the record.", divAddEditRecordAlert); + $("#optAddEditRecordDataSshfpAlgorithm").focus(); + return; + } + + var sshfpFingerprintType = $("#optAddEditRecordDataSshfpFingerprintType").val(); + if ((sshfpFingerprintType === null) || (sshfpFingerprintType === "")) { + showAlert("warning", "Missing!", "Please select a Fingerprint Type to add the record.", divAddEditRecordAlert); + $("#optAddEditRecordDataSshfpFingerprintType").focus(); + return; + } + + var sshfpFingerprint = $("#txtAddEditRecordDataSshfpFingerprint").val(); + if (sshfpFingerprint === "") { + showAlert("warning", "Missing!", "Please enter the Fingerprint hash in hex string format to add the record.", divAddEditRecordAlert); + $("#txtAddEditRecordDataSshfpFingerprint").focus(); + return; + } + + apiUrl += "&sshfpAlgorithm=" + sshfpAlgorithm + "&sshfpFingerprintType=" + sshfpFingerprintType + "&sshfpFingerprint=" + encodeURIComponent(sshfpFingerprint); + break; + + case "TLSA": + var tlsaCertificateUsage = $("#optAddEditRecordDataTlsaCertificateUsage").val(); + if ((tlsaCertificateUsage === null) || (tlsaCertificateUsage === "")) { + showAlert("warning", "Missing!", "Please select a Certificate Usage to add the record.", divAddEditRecordAlert); + $("#optAddEditRecordDataTlsaCertificateUsage").focus(); + return; + } + + var tlsaSelector = $("#optAddEditRecordDataTlsaSelector").val(); + if ((tlsaSelector === null) || (tlsaSelector === "")) { + showAlert("warning", "Missing!", "Please select a Selector to add the record.", divAddEditRecordAlert); + $("#optAddEditRecordDataTlsaSelector").focus(); + return; + } + + var tlsaMatchingType = $("#optAddEditRecordDataTlsaMatchingType").val(); + if ((tlsaMatchingType === null) || (tlsaMatchingType === "")) { + showAlert("warning", "Missing!", "Please select a Matching Type to add the record.", divAddEditRecordAlert); + $("#optAddEditRecordDataTlsaMatchingType").focus(); + return; + } + + var tlsaCertificateAssociationData = $("#txtAddEditRecordDataTlsaCertificateAssociationData").val(); + if (tlsaCertificateAssociationData === "") { + showAlert("warning", "Missing!", "Please enter the Certificate Association Data to add the record.", divAddEditRecordAlert); + $("#txtAddEditRecordDataTlsaCertificateAssociationData").focus(); + return; + } + + if ((tlsaMatchingType === "Full") && !tlsaCertificateAssociationData.startsWith("-")) { + showAlert("warning", "Missing!", "Please enter a complete certificate in PEM format as the Certificate Association Data to add the record.", divAddEditRecordAlert); + $("#txtAddEditRecordDataTlsaCertificateAssociationData").focus(); + return; + } + + apiUrl += "&tlsaCertificateUsage=" + tlsaCertificateUsage + "&tlsaSelector=" + tlsaSelector + "&tlsaMatchingType=" + tlsaMatchingType + "&tlsaCertificateAssociationData=" + encodeURIComponent(tlsaCertificateAssociationData); + break; + case "CAA": var flags = $("#txtAddEditRecordDataCaaFlags").val(); if (flags === "") @@ -2688,7 +2822,7 @@ function showEditRecordModal(objBtn) { else name = name.replace("." + zone, ""); - clearAddEditForm(); + clearAddEditRecordForm(); $("#titleAddEditRecord").text("Edit Record"); $("#lblAddEditRecordZoneName").text(zone === "." ? "" : zone); $("#optEditRecordTypeSoa").show(); @@ -2836,6 +2970,19 @@ function showEditRecordModal(objBtn) { $("#txtAddEditRecordDataDsDigest").val(divData.attr("data-record-digest")); break; + case "SSHFP": + $("#optAddEditRecordDataSshfpAlgorithm").val(divData.attr("data-record-algorithm")); + $("#optAddEditRecordDataSshfpFingerprintType").val(divData.attr("data-record-fingerprint-type")); + $("#txtAddEditRecordDataSshfpFingerprint").val(divData.attr("data-record-fingerprint")); + break; + + case "TLSA": + $("#optAddEditRecordDataTlsaCertificateUsage").val(divData.attr("data-record-certificate-usage")); + $("#optAddEditRecordDataTlsaSelector").val(divData.attr("data-record-selector")); + $("#optAddEditRecordDataTlsaMatchingType").val(divData.attr("data-record-matching-type")); + $("#txtAddEditRecordDataTlsaCertificateAssociationData").val(divData.attr("data-record-certificate-association-data")); + break; + case "CAA": $("#txtAddEditRecordDataCaaFlags").val(divData.attr("data-record-flags")); $("#txtAddEditRecordDataCaaTag").val(divData.attr("data-record-tag")); @@ -3207,6 +3354,72 @@ function updateRecord() { apiUrl += "&keyTag=" + keyTag + "&algorithm=" + algorithm + "&digestType=" + digestType + "&newKeyTag=" + newKeyTag + "&newAlgorithm=" + newAlgorithm + "&newDigestType=" + newDigestType + "&digest=" + encodeURIComponent(digest) + "&newDigest=" + encodeURIComponent(newDigest); break; + case "SSHFP": + var sshfpAlgorithm = divData.attr("data-record-algorithm"); + var sshfpFingerprintType = divData.attr("data-record-fingerprint-type"); + var sshfpFingerprint = divData.attr("data-record-fingerprint"); + + var newSshfpAlgorithm = $("#optAddEditRecordDataSshfpAlgorithm").val(); + if ((newSshfpAlgorithm === null) || (newSshfpAlgorithm === "")) { + showAlert("warning", "Missing!", "Please select an Algorithm to add the record.", divAddEditRecordAlert); + $("#optAddEditRecordDataSshfpAlgorithm").focus(); + return; + } + + var newSshfpFingerprintType = $("#optAddEditRecordDataSshfpFingerprintType").val(); + if ((newSshfpFingerprintType === null) || (newSshfpFingerprintType === "")) { + showAlert("warning", "Missing!", "Please select a Fingerprint Type to add the record.", divAddEditRecordAlert); + $("#optAddEditRecordDataSshfpFingerprintType").focus(); + return; + } + + var newSshfpFingerprint = $("#txtAddEditRecordDataSshfpFingerprint").val(); + if (newSshfpFingerprint === "") { + showAlert("warning", "Missing!", "Please enter the Fingerprint hash in hex string format to add the record.", divAddEditRecordAlert); + $("#txtAddEditRecordDataSshfpFingerprint").focus(); + return; + } + + apiUrl += "&sshfpAlgorithm=" + sshfpAlgorithm + "&newSshfpAlgorithm=" + newSshfpAlgorithm + "&sshfpFingerprintType=" + sshfpFingerprintType + "&newSshfpFingerprintType=" + newSshfpFingerprintType + "&sshfpFingerprint=" + encodeURIComponent(sshfpFingerprint) + "&newSshfpFingerprint=" + encodeURIComponent(newSshfpFingerprint); + break; + + case "TLSA": + var tlsaCertificateUsage = divData.attr("data-record-certificate-usage"); + var tlsaSelector = divData.attr("data-record-selector"); + var tlsaMatchingType = divData.attr("data-record-matching-type"); + var tlsaCertificateAssociationData = divData.attr("data-record-certificate-association-data"); + + var newTlsaCertificateUsage = $("#optAddEditRecordDataTlsaCertificateUsage").val(); + if ((newTlsaCertificateUsage === null) || (newTlsaCertificateUsage === "")) { + showAlert("warning", "Missing!", "Please select a Certificate Usage to add the record.", divAddEditRecordAlert); + $("#optAddEditRecordDataTlsaCertificateUsage").focus(); + return; + } + + var newTlsaSelector = $("#optAddEditRecordDataTlsaSelector").val(); + if ((newTlsaSelector === null) || (newTlsaSelector === "")) { + showAlert("warning", "Missing!", "Please select a Selector to add the record.", divAddEditRecordAlert); + $("#optAddEditRecordDataTlsaSelector").focus(); + return; + } + + var newTlsaMatchingType = $("#optAddEditRecordDataTlsaMatchingType").val(); + if ((newTlsaMatchingType === null) || (newTlsaMatchingType === "")) { + showAlert("warning", "Missing!", "Please select a Matching Type to add the record.", divAddEditRecordAlert); + $("#optAddEditRecordDataTlsaMatchingType").focus(); + return; + } + + var newTlsaCertificateAssociationData = $("#txtAddEditRecordDataTlsaCertificateAssociationData").val(); + if (newTlsaCertificateAssociationData === "") { + showAlert("warning", "Missing!", "Please enter the Certificate Association Data to add the record.", divAddEditRecordAlert); + $("#txtAddEditRecordDataTlsaCertificateAssociationData").focus(); + return; + } + + apiUrl += "&tlsaCertificateUsage=" + tlsaCertificateUsage + "&newTlsaCertificateUsage=" + newTlsaCertificateUsage + "&tlsaSelector=" + tlsaSelector + "&newTlsaSelector=" + newTlsaSelector + "&tlsaMatchingType=" + tlsaMatchingType + "&newTlsaMatchingType=" + newTlsaMatchingType + "&tlsaCertificateAssociationData=" + encodeURIComponent(tlsaCertificateAssociationData) + "&newTlsaCertificateAssociationData=" + encodeURIComponent(newTlsaCertificateAssociationData); + break; + case "CAA": var flags = divData.attr("data-record-flags"); var tag = divData.attr("data-record-tag"); @@ -3379,6 +3592,14 @@ function updateRecordState(objBtn, disable) { apiUrl += "&keyTag=" + divData.attr("data-record-key-tag") + "&algorithm=" + divData.attr("data-record-algorithm") + "&digestType=" + divData.attr("data-record-digest-type") + "&digest=" + encodeURIComponent(divData.attr("data-record-digest")); break; + case "SSHFP": + apiUrl += "&sshfpAlgorithm=" + divData.attr("data-record-algorithm") + "&sshfpFingerprintType=" + divData.attr("data-record-fingerprint-type") + "&sshfpFingerprint=" + encodeURIComponent(divData.attr("data-record-fingerprint")); + break; + + case "TLSA": + apiUrl += "&tlsaCertificateUsage=" + divData.attr("data-record-certificate-usage") + "&tlsaSelector=" + divData.attr("data-record-selector") + "&tlsaMatchingType=" + divData.attr("data-record-matching-type") + "&tlsaCertificateAssociationData=" + encodeURIComponent(divData.attr("data-record-certificate-association-data")); + break; + case "CAA": apiUrl += "&flags=" + divData.attr("data-record-flags") + "&tag=" + encodeURIComponent(divData.attr("data-record-tag")) + "&value=" + encodeURIComponent(divData.attr("data-record-value")); break; @@ -3483,6 +3704,14 @@ function deleteRecord(objBtn) { apiUrl += "&keyTag=" + divData.attr("data-record-key-tag") + "&algorithm=" + divData.attr("data-record-algorithm") + "&digestType=" + divData.attr("data-record-digest-type") + "&digest=" + encodeURIComponent(divData.attr("data-record-digest")); break; + case "SSHFP": + apiUrl += "&sshfpAlgorithm=" + divData.attr("data-record-algorithm") + "&sshfpFingerprintType=" + divData.attr("data-record-fingerprint-type") + "&sshfpFingerprint=" + encodeURIComponent(divData.attr("data-record-fingerprint")); + break; + + case "TLSA": + apiUrl += "&tlsaCertificateUsage=" + divData.attr("data-record-certificate-usage") + "&tlsaSelector=" + divData.attr("data-record-selector") + "&tlsaMatchingType=" + divData.attr("data-record-matching-type") + "&tlsaCertificateAssociationData=" + encodeURIComponent(divData.attr("data-record-certificate-association-data")); + break; + case "CAA": apiUrl += "&flags=" + divData.attr("data-record-flags") + "&tag=" + encodeURIComponent(divData.attr("data-record-tag")) + "&value=" + encodeURIComponent(divData.attr("data-record-value")); break; @@ -3529,7 +3758,7 @@ function showSignZoneModal(zoneName) { $("#divDnssecSignZoneRsaParameters").hide(); $("#optDnssecSignZoneRsaHashAlgorithm").val("SHA256"); $("#optDnssecSignZoneRsaKSKKeySize").val("2048"); - $("#optDnssecSignZoneRsaZSKKeySize").val("1024"); + $("#optDnssecSignZoneRsaZSKKeySize").val("1280"); $("#divDnssecSignZoneEcdsaParameters").show(); $("#optDnssecSignZoneEcdsaCurve").val("P256"); @@ -3599,6 +3828,12 @@ function signPrimaryZone() { $("#lnkZoneDnssecProperties").show(); $("#lnkZoneDnssecUnsignZone").show(); + + $("#optAddEditRecordTypeDs").show(); + $("#optAddEditRecordTypeSshfp").show(); + $("#optAddEditRecordTypeTlsa").show(); + $("#optAddEditRecordTypeAName").hide(); + $("#optAddEditRecordTypeApp").hide(); } else { showEditZone(zone); @@ -3650,6 +3885,12 @@ function unsignPrimaryZone() { $("#lnkZoneDnssecProperties").hide(); $("#lnkZoneDnssecUnsignZone").hide(); + + $("#optAddEditRecordTypeDs").hide(); + $("#optAddEditRecordTypeSshfp").hide(); + $("#optAddEditRecordTypeTlsa").hide(); + $("#optAddEditRecordTypeAName").show(); + $("#optAddEditRecordTypeApp").show(); } else { showEditZone(zone);