add customizable dns over https provider

This commit is contained in:
checktheroads 2020-02-01 01:13:26 -10:00
parent bba0fa6cb6
commit 707f84ae79
3 changed files with 30 additions and 2 deletions

View file

@ -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()

View file

@ -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 \

View file

@ -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