diff --git a/hyperglass/configuration/models/web.py b/hyperglass/configuration/models/web.py index 8b4d902..45d5a2f 100644 --- a/hyperglass/configuration/models/web.py +++ b/hyperglass/configuration/models/web.py @@ -18,6 +18,7 @@ from pydantic.color import Color # Project Imports from hyperglass.configuration.models._utils import HyperglassModel from hyperglass.configuration.models.opengraph import OpenGraph +from hyperglass.constants import DNS_OVER_HTTPS from hyperglass.constants import FUNC_COLOR_MAP @@ -251,10 +252,31 @@ class Theme(HyperglassModel): fonts: Fonts = Fonts() +class DnsOverHttps(HyperglassModel): + """Validation model for DNS over HTTPS resolution.""" + + name: constr(regex="|".join(DNS_OVER_HTTPS.keys())) = "cloudflare" + + @root_validator + def validate_dns(cls, values): + """Assign url field to model based on selected provider. + + Arguments: + values {dict} -- Dict of selected provider + + Returns: + {dict} -- Dict with url attribute + """ + provider = values["name"] + values["url"] = DNS_OVER_HTTPS[provider] + return values + + class Web(HyperglassModel): """Validation model for all web/browser-related configuration.""" credit: Credit = Credit() + dns_provider: DnsOverHttps = DnsOverHttps() external_link: ExternalLink = ExternalLink() font: Font = Font() help_menu: HelpMenu = HelpMenu() diff --git a/hyperglass/constants.py b/hyperglass/constants.py index 58fb671..4dd97d6 100644 --- a/hyperglass/constants.py +++ b/hyperglass/constants.py @@ -36,6 +36,11 @@ LOG_HANDLER_FILE = {"format": LOG_FMT, "level": "INFO"} STATUS_CODE_MAP = {"warning": 400, "error": 400, "danger": 500} +DNS_OVER_HTTPS = { + "google": "https://dns.google/resolve", + "cloudflare": "https://cloudflare-dns.com/dns-query", +} + CREDIT = """ Powered by [**hyperglass**](https://github.com/checktheroads/hyperglass). Source code \ licensed \ diff --git a/ui/components/ResolvedTarget.js b/ui/components/ResolvedTarget.js index 149514f..518f078 100644 --- a/ui/components/ResolvedTarget.js +++ b/ui/components/ResolvedTarget.js @@ -13,14 +13,15 @@ const ResolvedTarget = React.forwardRef(({ fqdnTarget, setTarget, queryTarget }, const { colorMode } = useColorMode(); const config = useConfig(); const labelBgStatus = { true: labelBgSuccess[colorMode], false: labelBg[colorMode] }; + const dnsUrl = config.web.dns_provider.url; const params4 = { - url: "https://cloudflare-dns.com/dns-query", + url: dnsUrl, params: { name: fqdnTarget, type: "A" }, headers: { accept: "application/dns-json" }, timeout: 1000 }; const params6 = { - url: "https://cloudflare-dns.com/dns-query", + url: dnsUrl, params: { name: fqdnTarget, type: "AAAA" }, headers: { accept: "application/dns-json" }, timeout: 1000