diff --git a/DnsServerCore/www/js/main.js b/DnsServerCore/www/js/main.js index 1e52e959..3b77aaf7 100644 --- a/DnsServerCore/www/js/main.js +++ b/DnsServerCore/www/js/main.js @@ -290,14 +290,8 @@ $(function () { $("input[type=radio][name=rdRecursion]").change(function () { var recursion = $('input[name=rdRecursion]:checked').val(); - if (recursion === "UseSpecifiedNetworks") { - $("#txtRecursionDeniedNetworks").prop("disabled", false); - $("#txtRecursionAllowedNetworks").prop("disabled", false); - } - else { - $("#txtRecursionDeniedNetworks").prop("disabled", true); - $("#txtRecursionAllowedNetworks").prop("disabled", true); - } + + $("#txtRecursionNetworkACL").prop("disabled", recursion !== "UseSpecifiedNetworkACL"); }); $("input[type=radio][name=rdBlockingType]").change(function () { @@ -353,6 +347,7 @@ $(function () { var enableDnsOverHttps = $("#chkEnableDnsOverHttps").prop("checked"); var enableDnsOverQuic = $("#chkEnableDnsOverQuic").prop("checked"); + $("#chkEnableDnsOverHttp3").prop("disabled", !enableDnsOverHttps); $("#txtDnsOverHttpsPort").prop("disabled", !enableDnsOverHttps); $("#txtDnsTlsCertificatePath").prop("disabled", !enableDnsOverTls && !enableDnsOverHttps && !enableDnsOverQuic); $("#txtDnsTlsCertificatePassword").prop("disabled", !enableDnsOverTls && !enableDnsOverHttps && !enableDnsOverQuic); @@ -368,6 +363,11 @@ $(function () { $("#txtDnsTlsCertificatePassword").prop("disabled", !enableDnsOverTls && !enableDnsOverHttps && !enableDnsOverQuic); }); + $("#chkEnableConcurrentForwarding").click(function () { + var concurrentForwarding = $("#chkEnableConcurrentForwarding").prop("checked"); + $("#txtForwarderConcurrency").prop("disabled", !concurrentForwarding) + }); + $("#chkEnableLogging").click(function () { var enableLogging = $("#chkEnableLogging").prop("checked"); $("#chkIgnoreResolverLogs").prop("disabled", !enableLogging); @@ -1053,6 +1053,8 @@ function loadDnsSettings(responseJSON) { $("#chkEnableDnsOverHttp").prop("checked", responseJSON.response.enableDnsOverHttp); $("#chkEnableDnsOverTls").prop("checked", responseJSON.response.enableDnsOverTls); $("#chkEnableDnsOverHttps").prop("checked", responseJSON.response.enableDnsOverHttps); + $("#chkEnableDnsOverHttp3").prop("disabled", !responseJSON.response.enableDnsOverHttps); + $("#chkEnableDnsOverHttp3").prop("checked", responseJSON.response.enableDnsOverHttp3); $("#chkEnableDnsOverQuic").prop("checked", responseJSON.response.enableDnsOverQuic); $("#txtDnsOverUdpProxyPort").prop("disabled", !responseJSON.response.enableDnsOverUdpProxy); @@ -1094,8 +1096,7 @@ function loadDnsSettings(responseJSON) { } //recursion - $("#txtRecursionDeniedNetworks").prop("disabled", true); - $("#txtRecursionAllowedNetworks").prop("disabled", true); + $("#txtRecursionNetworkACL").prop("disabled", true); switch (responseJSON.response.recursion) { case "Allow": @@ -1106,10 +1107,9 @@ function loadDnsSettings(responseJSON) { $("#rdRecursionAllowOnlyForPrivateNetworks").prop("checked", true); break; - case "UseSpecifiedNetworks": - $("#rdRecursionUseSpecifiedNetworks").prop("checked", true); - $("#txtRecursionDeniedNetworks").prop("disabled", false); - $("#txtRecursionAllowedNetworks").prop("disabled", false); + case "UseSpecifiedNetworkACL": + $("#rdRecursionUseSpecifiedNetworkACL").prop("checked", true); + $("#txtRecursionNetworkACL").prop("disabled", false); break; case "Deny": @@ -1118,8 +1118,7 @@ function loadDnsSettings(responseJSON) { break; } - $("#txtRecursionDeniedNetworks").val(getArrayAsString(responseJSON.response.recursionDeniedNetworks)); - $("#txtRecursionAllowedNetworks").val(getArrayAsString(responseJSON.response.recursionAllowedNetworks)); + $("#txtRecursionNetworkACL").val(getArrayAsString(responseJSON.response.recursionNetworkACL)); $("#chkRandomizeName").prop("checked", responseJSON.response.randomizeName); $("#chkQnameMinimization").prop("checked", responseJSON.response.qnameMinimization); @@ -1127,6 +1126,7 @@ function loadDnsSettings(responseJSON) { $("#txtResolverRetries").val(responseJSON.response.resolverRetries); $("#txtResolverTimeout").val(responseJSON.response.resolverTimeout); + $("#txtResolverConcurrency").val(responseJSON.response.resolverConcurrency); $("#txtResolverMaxStackCount").val(responseJSON.response.resolverMaxStackCount); //cache @@ -1296,6 +1296,9 @@ function loadDnsSettings(responseJSON) { break; } + $("#chkEnableConcurrentForwarding").prop("checked", responseJSON.response.concurrentForwarding); + $("#txtForwarderConcurrency").prop("disabled", !responseJSON.response.concurrentForwarding) + $("#txtForwarderRetries").val(responseJSON.response.forwarderRetries); $("#txtForwarderTimeout").val(responseJSON.response.forwarderTimeout); $("#txtForwarderConcurrency").val(responseJSON.response.forwarderConcurrency); @@ -1493,6 +1496,7 @@ function saveDnsSettings() { var enableDnsOverHttp = $("#chkEnableDnsOverHttp").prop("checked"); var enableDnsOverTls = $("#chkEnableDnsOverTls").prop("checked"); var enableDnsOverHttps = $("#chkEnableDnsOverHttps").prop("checked"); + var enableDnsOverHttp3 = $("#chkEnableDnsOverHttp3").prop("checked"); var enableDnsOverQuic = $("#chkEnableDnsOverQuic").prop("checked"); var dnsOverUdpProxyPort = $("#txtDnsOverUdpProxyPort").val(); @@ -1551,19 +1555,12 @@ function saveDnsSettings() { //recursion var recursion = $("input[name=rdRecursion]:checked").val(); - var recursionDeniedNetworks = cleanTextList($("#txtRecursionDeniedNetworks").val()); + var recursionNetworkACL = cleanTextList($("#txtRecursionNetworkACL").val()); - if ((recursionDeniedNetworks.length === 0) || (recursionDeniedNetworks === ",")) - recursionDeniedNetworks = false; + if ((recursionNetworkACL.length === 0) || (recursionNetworkACL === ",")) + recursionNetworkACL = false; else - $("#txtRecursionDeniedNetworks").val(recursionDeniedNetworks.replace(/,/g, "\n")); - - var recursionAllowedNetworks = cleanTextList($("#txtRecursionAllowedNetworks").val()); - - if ((recursionAllowedNetworks.length === 0) || (recursionAllowedNetworks === ",")) - recursionAllowedNetworks = false; - else - $("#txtRecursionAllowedNetworks").val(recursionAllowedNetworks.replace(/,/g, "\n")); + $("#txtRecursionNetworkACL").val(recursionNetworkACL.replace(/,/g, "\n")); var randomizeName = $("#chkRandomizeName").prop('checked'); var qnameMinimization = $("#chkQnameMinimization").prop('checked'); @@ -1583,6 +1580,13 @@ function saveDnsSettings() { return; } + var resolverConcurrency = $("#txtResolverConcurrency").val(); + if ((resolverConcurrency == null) || (resolverConcurrency === "")) { + showAlert("warning", "Missing!", "Please enter a value for Resolver Concurrency."); + $("#txtResolverConcurrency").focus(); + return; + } + var resolverMaxStackCount = $("#txtResolverMaxStackCount").val(); if ((resolverMaxStackCount == null) || (resolverMaxStackCount === "")) { showAlert("warning", "Missing!", "Please enter a value for Resolver Max Stack Count."); @@ -1731,6 +1735,8 @@ function saveDnsSettings() { var forwarderProtocol = $('input[name=rdForwarderProtocol]:checked').val(); + var concurrentForwarding = $("#chkEnableConcurrentForwarding").prop("checked"); + var forwarderRetries = $("#txtForwarderRetries").val(); if ((forwarderRetries == null) || (forwarderRetries === "")) { showAlert("warning", "Missing!", "Please enter a value for Forwarder Retries."); @@ -1775,12 +1781,12 @@ function saveDnsSettings() { + "&qpmLimitRequests=" + qpmLimitRequests + "&qpmLimitErrors=" + qpmLimitErrors + "&qpmLimitSampleMinutes=" + qpmLimitSampleMinutes + "&qpmLimitIPv4PrefixLength=" + qpmLimitIPv4PrefixLength + "&qpmLimitIPv6PrefixLength=" + qpmLimitIPv6PrefixLength + "&qpmLimitBypassList=" + encodeURIComponent(qpmLimitBypassList) + "&clientTimeout=" + clientTimeout + "&tcpSendTimeout=" + tcpSendTimeout + "&tcpReceiveTimeout=" + tcpReceiveTimeout + "&quicIdleTimeout=" + quicIdleTimeout + "&quicMaxInboundStreams=" + quicMaxInboundStreams + "&listenBacklog=" + listenBacklog + "&webServiceLocalAddresses=" + encodeURIComponent(webServiceLocalAddresses) + "&webServiceHttpPort=" + webServiceHttpPort + "&webServiceEnableTls=" + webServiceEnableTls + "&webServiceEnableHttp3=" + webServiceEnableHttp3 + "&webServiceHttpToTlsRedirect=" + webServiceHttpToTlsRedirect + "&webServiceUseSelfSignedTlsCertificate=" + webServiceUseSelfSignedTlsCertificate + "&webServiceTlsPort=" + webServiceTlsPort + "&webServiceTlsCertificatePath=" + encodeURIComponent(webServiceTlsCertificatePath) + "&webServiceTlsCertificatePassword=" + encodeURIComponent(webServiceTlsCertificatePassword) - + "&enableDnsOverUdpProxy=" + enableDnsOverUdpProxy + "&enableDnsOverTcpProxy=" + enableDnsOverTcpProxy + "&enableDnsOverHttp=" + enableDnsOverHttp + "&enableDnsOverTls=" + enableDnsOverTls + "&enableDnsOverHttps=" + enableDnsOverHttps + "&enableDnsOverQuic=" + enableDnsOverQuic + "&dnsOverUdpProxyPort=" + dnsOverUdpProxyPort + "&dnsOverTcpProxyPort=" + dnsOverTcpProxyPort + "&dnsOverHttpPort=" + dnsOverHttpPort + "&dnsOverTlsPort=" + dnsOverTlsPort + "&dnsOverHttpsPort=" + dnsOverHttpsPort + "&dnsOverQuicPort=" + dnsOverQuicPort + "&dnsTlsCertificatePath=" + encodeURIComponent(dnsTlsCertificatePath) + "&dnsTlsCertificatePassword=" + encodeURIComponent(dnsTlsCertificatePassword) + + "&enableDnsOverUdpProxy=" + enableDnsOverUdpProxy + "&enableDnsOverTcpProxy=" + enableDnsOverTcpProxy + "&enableDnsOverHttp=" + enableDnsOverHttp + "&enableDnsOverTls=" + enableDnsOverTls + "&enableDnsOverHttps=" + enableDnsOverHttps + "&enableDnsOverHttp3=" + enableDnsOverHttp3 + "&enableDnsOverQuic=" + enableDnsOverQuic + "&dnsOverUdpProxyPort=" + dnsOverUdpProxyPort + "&dnsOverTcpProxyPort=" + dnsOverTcpProxyPort + "&dnsOverHttpPort=" + dnsOverHttpPort + "&dnsOverTlsPort=" + dnsOverTlsPort + "&dnsOverHttpsPort=" + dnsOverHttpsPort + "&dnsOverQuicPort=" + dnsOverQuicPort + "&dnsTlsCertificatePath=" + encodeURIComponent(dnsTlsCertificatePath) + "&dnsTlsCertificatePassword=" + encodeURIComponent(dnsTlsCertificatePassword) + "&tsigKeys=" + encodeURIComponent(tsigKeys) - + "&recursion=" + recursion + "&recursionDeniedNetworks=" + encodeURIComponent(recursionDeniedNetworks) + "&recursionAllowedNetworks=" + encodeURIComponent(recursionAllowedNetworks) + "&randomizeName=" + randomizeName + "&qnameMinimization=" + qnameMinimization + "&nsRevalidation=" + nsRevalidation + "&resolverRetries=" + resolverRetries + "&resolverTimeout=" + resolverTimeout + "&resolverMaxStackCount=" + resolverMaxStackCount + + "&recursion=" + recursion + "&recursionNetworkACL=" + encodeURIComponent(recursionNetworkACL) + "&randomizeName=" + randomizeName + "&qnameMinimization=" + qnameMinimization + "&nsRevalidation=" + nsRevalidation + "&resolverRetries=" + resolverRetries + "&resolverTimeout=" + resolverTimeout + "&resolverConcurrency=" + resolverConcurrency + "&resolverMaxStackCount=" + resolverMaxStackCount + "&saveCache=" + saveCache + "&serveStale=" + serveStale + "&serveStaleTtl=" + serveStaleTtl + "&serveStaleAnswerTtl=" + serveStaleAnswerTtl + "&serveStaleResetTtl=" + serveStaleResetTtl + "&serveStaleMaxWaitTime=" + serveStaleMaxWaitTime + "&cacheMaximumEntries=" + cacheMaximumEntries + "&cacheMinimumRecordTtl=" + cacheMinimumRecordTtl + "&cacheMaximumRecordTtl=" + cacheMaximumRecordTtl + "&cacheNegativeRecordTtl=" + cacheNegativeRecordTtl + "&cacheFailureRecordTtl=" + cacheFailureRecordTtl + "&cachePrefetchEligibility=" + cachePrefetchEligibility + "&cachePrefetchTrigger=" + cachePrefetchTrigger + "&cachePrefetchSampleIntervalInMinutes=" + cachePrefetchSampleIntervalInMinutes + "&cachePrefetchSampleEligibilityHitsPerHour=" + cachePrefetchSampleEligibilityHitsPerHour + "&enableBlocking=" + enableBlocking + "&allowTxtBlockingReport=" + allowTxtBlockingReport + "&blockingBypassList=" + encodeURIComponent(blockingBypassList) + "&blockingType=" + blockingType + "&customBlockingAddresses=" + encodeURIComponent(customBlockingAddresses) + "&blockListUrls=" + encodeURIComponent(blockListUrls) + "&blockListUpdateIntervalHours=" + blockListUpdateIntervalHours - + proxy + "&forwarders=" + encodeURIComponent(forwarders) + "&forwarderProtocol=" + forwarderProtocol + "&forwarderRetries=" + forwarderRetries + "&forwarderTimeout=" + forwarderTimeout + "&forwarderConcurrency=" + forwarderConcurrency + + proxy + "&forwarders=" + encodeURIComponent(forwarders) + "&forwarderProtocol=" + forwarderProtocol + "&concurrentForwarding=" + concurrentForwarding + "&forwarderRetries=" + forwarderRetries + "&forwarderTimeout=" + forwarderTimeout + "&forwarderConcurrency=" + forwarderConcurrency + "&enableLogging=" + enableLogging + "&ignoreResolverLogs=" + ignoreResolverLogs + "&logQueries=" + logQueries + "&useLocalTime=" + useLocalTime + "&logFolder=" + encodeURIComponent(logFolder) + "&maxLogFileDays=" + maxLogFileDays + "&enableInMemoryStats=" + enableInMemoryStats + "&maxStatFileDays=" + maxStatFileDays, processData: false, showInnerError: true, @@ -2061,22 +2067,31 @@ function refreshDashboard(hideLoader) { var custom = ""; if (type === "custom") { - var start = $("#dpCustomDayWiseStart").val(); - if (start === null || (start === "")) { + var txtStart = $("#dpCustomDayWiseStart").val(); + if (txtStart === null || (txtStart === "")) { showAlert("warning", "Missing!", "Please select a start date."); $("#dpCustomDayWiseStart").focus(); return; } - var end = $("#dpCustomDayWiseEnd").val(); - if (end === null || (end === "")) { + var txtEnd = $("#dpCustomDayWiseEnd").val(); + if (txtEnd === null || (txtEnd === "")) { showAlert("warning", "Missing!", "Please select an end date."); $("#dpCustomDayWiseEnd").focus(); return; } - start = moment(start, "YYYY-MM-DD").toISOString(); - end = moment(end, "YYYY-MM-DD").toISOString(); + var start = moment(txtStart, "YYYY-MM-DD"); + var end = moment(txtEnd, "YYYY-MM-DD"); + + if ((end.diff(start, "days") + 1) > 7) { + start = moment.utc(txtStart, "YYYY-MM-DD").toISOString(); + end = moment.utc(txtEnd, "YYYY-MM-DD").toISOString(); + } + else { + start = start.toISOString(); + end = end.toISOString(); + } custom = "&start=" + encodeURIComponent(start) + "&end=" + encodeURIComponent(end); } @@ -2247,7 +2262,7 @@ function refreshDashboard(hideLoader) { tableHtmlRows = ""; for (var i = 0; i < topClients.length; i++) { - tableHtmlRows += "" + htmlEncode(topClients[i].name) + (topClients[i].rateLimited ? " (limited)" : "") + "
" + htmlEncode(topClients[i].domain == "" ? "." : topClients[i].domain) + "" + topClients[i].hits.toLocaleString(); + tableHtmlRows += "" + htmlEncode(topClients[i].name) + (topClients[i].rateLimited ? " (rate limited)" : "") + "
" + htmlEncode(topClients[i].domain == "" ? "." : topClients[i].domain) + "" + topClients[i].hits.toLocaleString(); tableHtmlRows += "
"; @@ -2388,7 +2403,7 @@ function showTopStats(statsType, limit) { tableHtmlRows = ""; for (var i = 0; i < topClients.length; i++) { - tableHtmlRows += "" + htmlEncode(topClients[i].name) + (topClients[i].rateLimited ? " (limited)" : "") + "
" + htmlEncode(topClients[i].domain == "" ? "." : topClients[i].domain) + "" + topClients[i].hits.toLocaleString(); + tableHtmlRows += "" + htmlEncode(topClients[i].name) + (topClients[i].rateLimited ? " (rate limited)" : "") + "
" + htmlEncode(topClients[i].domain == "" ? "." : topClients[i].domain) + "" + topClients[i].hits.toLocaleString(); tableHtmlRows += "
";