throw an error if a domain name is declared more than once (#247)

* throw an error if a domain name is declared more than once in the js file
This commit is contained in:
Pat Moroney 2017-11-14 21:14:45 -07:00 committed by Tom Limoncelli
parent 2ef1fc42f8
commit 106790b0d5
5 changed files with 74 additions and 109 deletions

View file

@ -4,6 +4,7 @@ var conf = {
registrars: [],
dns_providers: [],
domains: [],
domain_names: [],
};
var defaultArgs = [];
@ -78,7 +79,11 @@ function D(name, registrar) {
var m = arguments[i];
processDargs(m, domain);
}
if(conf.domain_names.indexOf(name) !== -1) {
throw name + " is declared more than once"
}
conf.domains.push(domain);
conf.domain_names.push(name);
}
// DEFAULTS provides a set of default arguments to apply to all future domains.

View file

@ -77,6 +77,7 @@ func TestErrors(t *testing.T) {
{"CF_REDIRECT With comma", `D("foo.com","reg",CF_REDIRECT("foo.com,","baaa"))`},
{"CF_TEMP_REDIRECT With comma", `D("foo.com","reg",CF_TEMP_REDIRECT("foo.com","baa,a"))`},
{"Bad cidr", `D(reverse("foo.com"), "reg")`},
{"Dup domains", `D("example.org", "reg"); D("example.org", "reg")`},
}
for _, tst := range tests {
t.Run(tst.desc, func(t *testing.T) {

View file

@ -1,7 +0,0 @@
var REG = NewRegistrar("Third-Party","NONE");
var CF = NewDnsProvider("Cloudflare", "CLOUDFLAREAPI")
D("foo.com",REG,DnsProvider(CF,2),
A("@","1.2.3.4")
);
D("foo.com",REG);

View file

@ -1,35 +0,0 @@
{ "registrars": [
{
"name": "Third-Party",
"type": "NONE"
}
],
"dns_providers": [
{
"name": "Cloudflare",
"type": "CLOUDFLAREAPI"
}
],
"domains": [
{
"name": "foo.com",
"registrar": "Third-Party",
"dnsProviders": {
"Cloudflare":2
},
"records": [
{
"type": "A",
"name": "@",
"target": "1.2.3.4"
}
]
},
{
"name": "foo.com",
"registrar": "Third-Party",
"dnsProviders": {},
"records": []
}
]
}

View file

@ -192,75 +192,76 @@ var _escData = map[string]*_escFile{
"/helpers.js": {
local: "pkg/js/helpers.js",
size: 14786,
size: 14948,
modtime: 0,
compressed: `
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
Xf9IA12Mvd2PcjjotP4vAAD//6EjD2vCOQAA
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
NdDlyNv9KIeDsPV/AQAA//+AFZySZDoAAA==
`,
},