1
0
mirror of https://github.com/StackExchange/dnscontrol.git synced 2024-05-11 05:55:12 +00:00

allowing multiple newBase ips (#1)

* allowing multiple newBase ips

* generate

* only bundle helpers

* generate change
This commit is contained in:
Craig Peterson
2016-09-27 11:35:28 -06:00
committed by GitHub
parent 9ed733ac97
commit c747498b87
7 changed files with 156 additions and 93 deletions

View File

@ -156,10 +156,18 @@ function format_tt(transform_table) {
newIP = num2dot(newIP); newIP = num2dot(newIP);
} }
} }
var newBase = ip.newBase;
if (newBase){
if(_.isArray(newBase)){
newBase = _.map(newBase,function(i){return num2dot(i)}).join(",")
}else{
newBase = num2dot(newBase);
}
}
var row = [ var row = [
num2dot(ip.low), num2dot(ip.low),
num2dot(ip.high), num2dot(ip.high),
num2dot(ip.newBase), newBase,
newIP newIP
] ]
lines.push(row.join(" ~ ")) lines.push(row.join(" ~ "))

View File

@ -0,0 +1,12 @@
var REG = NewRegistrar("Third-Party","NONE");
var CF = NewDSP("Cloudflare", "CLOUDFLAREAPI")
var TRANSFORM_INT = [
{low: "0.0.0.0", high: "1.1.1.1", newBase: "2.2.2.2" },
{low: "1.1.1.1", high: IP("2.2.2.2"), newBase: ["3.3.3.3","4.4.4.4",IP("5.5.5.5")]} ,
{low: "1.1.1.1", high: IP("2.2.2.2"), newIP: ["3.3.3.3","4.4.4.4",IP("5.5.5.5")]}
]
D("foo.com",REG,CF,
A("@","1.2.3.4",{transform: TRANSFORM_INT})
);

View File

@ -0,0 +1,34 @@
{
"registrars": [
{
"name": "Third-Party",
"type": "NONE"
}
],
"dns_service_providers": [
{
"name": "Cloudflare",
"type": "CLOUDFLAREAPI"
}
],
"domains": [
{
"name": "foo.com",
"registrar": "Third-Party",
"dsps": [
"Cloudflare"
],
"records": [
{
"type": "A",
"name": "@",
"target": "1.2.3.4",
"meta": {
"transform": "0.0.0.0 ~ 1.1.1.1 ~ 2.2.2.2 ~ ; 1.1.1.1 ~ 2.2.2.2 ~ 3.3.3.3,4.4.4.4,5.5.5.5 ~ ; 1.1.1.1 ~ 2.2.2.2 ~ ~ 3.3.3.3,4.4.4.4,5.5.5.5"
}
}
],
"keepunknown": false
}
]
}

View File

@ -190,59 +190,43 @@ var _escData = map[string]*_escFile{
"/helpers.js": { "/helpers.js": {
local: "js/helpers.js", local: "js/helpers.js",
size: 6427, size: 6644,
modtime: 0, modtime: 0,
compressed: ` compressed: `
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
`, s4d6VuFgSYcj6AZdOIKo3y5YEZrkfwEAAP//7nFu6fQZAAA=
},
"/tester.html": {
local: "js/tester.html",
size: 953,
modtime: 0,
compressed: `
H4sIAAAJbogA/2yST2/bPAzG7/4UhN73YCOr1TrrOjSWDwM6YD10w1AM6IocHFmJ6SliJsnZsiLffZD/
NAmykynqx4cPKee1X+siymtVVkUEAJA7aXHjwVkpWO39xt1yLqlSafOzVXaXSlrzPrzI0iydpms0aeMY
oPFqZdHvBHN1mV2/uyiz6erqwb+t/N3T5+Zm8XWyfWxvJo/vv325mtbt+vvHD/cPn57o7p4EA2nJObK4
QiNYacjs1tQ6VuS8t1REOe995guqdoPdelpUxkky3pKGxoFXziub83o6EF799qVVJWAlGBoGln45wa4v
GUjSTrDs8jJ0GblR2PIhWrTekwEyUqP8IVjocO/ihBWPyvmc9/dnZRVuu5ZWuVb7bpAKt0UUna34lvPW
VMo6SVY1LiW7OkpcDAs+XsSJgtIbZd2/kSJatkZ6JAOj7ZfOHhr0WGr8o+Jk1mW2pYXw0CDg/5j9h4Yl
6bbU47Uk40irVNMqDtiQVgE5Op9iZjmkg+K4iCQNf13cODJZF3VcMov2gTwYPgAhSuDl1Sa+Aas8CGCs
lw+niQCWt7oYUkuyMSBgrzNWn8AaCzbBCbuFoaZbzDIGv9soWnaFzzgHIQQwWjRKepaM5afunnGeHDSU
duqYe8b57Lw9D/37/P50Cn4YwyrfWhM+s2gfvb7v3wAAAP//jV4zrLkDAAA=
`, `,
}, },

View File

@ -29,7 +29,7 @@ import (
_ "github.com/StackExchange/dnscontrol/providers/route53" _ "github.com/StackExchange/dnscontrol/providers/route53"
) )
//go:generate esc -modtime 0 -o js/static.go -pkg js -ignore go -prefix js js //go:generate esc -modtime 0 -o js/static.go -pkg js -include helpers\.js -ignore go -prefix js js
//go:generate esc -modtime 0 -o web/static.go -pkg web -include=bundle\.js -ignore node_modules -prefix web web //go:generate esc -modtime 0 -o web/static.go -pkg web -include=bundle\.js -ignore node_modules -prefix web web
// One of these config options must be set. // One of these config options must be set.

View File

@ -7,7 +7,8 @@ import (
) )
type IpConversion struct { type IpConversion struct {
Low, High, NewBase net.IP Low, High net.IP
NewBases []net.IP
NewIPs []net.IP NewIPs []net.IP
} }
@ -44,9 +45,11 @@ func DecodeTransformTable(transforms string) ([]IpConversion, error) {
con := IpConversion{ con := IpConversion{
Low: net.ParseIP(items[0]), Low: net.ParseIP(items[0]),
High: net.ParseIP(items[1]), High: net.ParseIP(items[1]),
NewBase: net.ParseIP(items[2]),
} }
for _, ip := range strings.Split(items[3], ",") { parseList := func(s string) ([]net.IP, error) {
ips := []net.IP{}
for _, ip := range strings.Split(s, ",") {
if ip == "" { if ip == "" {
continue continue
} }
@ -54,7 +57,16 @@ func DecodeTransformTable(transforms string) ([]IpConversion, error) {
if addr == nil { if addr == nil {
return nil, fmt.Errorf("%s is not a valid ip address", ip) return nil, fmt.Errorf("%s is not a valid ip address", ip)
} }
con.NewIPs = append(con.NewIPs, addr) ips = append(ips, addr)
}
return ips, nil
}
var err error
if con.NewBases, err = parseList(items[2]); err != nil {
return nil, err
}
if con.NewIPs, err = parseList(items[3]); err != nil {
return nil, err
} }
low, _ := ipToUint(con.Low) low, _ := ipToUint(con.Low)
@ -62,8 +74,8 @@ func DecodeTransformTable(transforms string) ([]IpConversion, error) {
if low > high { if low > high {
return nil, fmt.Errorf("transform_table Low should be less than High. row (%v) %v>%v (%v)\n", ri, con.Low, con.High, transforms) return nil, fmt.Errorf("transform_table Low should be less than High. row (%v) %v>%v (%v)\n", ri, con.Low, con.High, transforms)
} }
if con.NewBase != nil && con.NewIPs != nil { if len(con.NewBases) > 0 && len(con.NewIPs) > 0 {
return nil, fmt.Errorf("transform_table_rows should only specify one of NewBase or NewIP. Not both.") return nil, fmt.Errorf("transform_table_rows should only specify one of NewBases or NewIPs, Not both")
} }
result = append(result, con) result = append(result, con)
} }
@ -102,11 +114,15 @@ func TransformIPToList(address net.IP, transforms []IpConversion) ([]net.IP, err
if conv.NewIPs != nil { if conv.NewIPs != nil {
return conv.NewIPs, nil return conv.NewIPs, nil
} }
newbase, err := ipToUint(conv.NewBase) list := []net.IP{}
for _, nb := range conv.NewBases {
newbase, err := ipToUint(nb)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return []net.IP{UintToIP(newbase + (thisIP - min))}, nil list = append(list, UintToIP(newbase+(thisIP-min)))
}
return list, nil
} }
} }
return []net.IP{address}, nil return []net.IP{address}, nil

View File

@ -2,6 +2,7 @@ package transform
import ( import (
"net" "net"
"strings"
"testing" "testing"
) )
@ -46,7 +47,7 @@ func Test_DecodeTransformTable_0(t *testing.T) {
} }
test_ip(t, "low", "1.2.3.4", result[0].Low) test_ip(t, "low", "1.2.3.4", result[0].Low)
test_ip(t, "high", "2.3.4.5", result[0].High) test_ip(t, "high", "2.3.4.5", result[0].High)
test_ip(t, "newBase", "3.4.5.6", result[0].NewBase) test_ip(t, "newBase", "3.4.5.6", result[0].NewBases[0])
//test_ip(t, "newIP", "", result[0].NewIPs) //test_ip(t, "newIP", "", result[0].NewIPs)
} }
@ -60,11 +61,11 @@ func Test_DecodeTransformTable_1(t *testing.T) {
} }
test_ip(t, "Low[0]", "1.2.3.4", result[0].Low) test_ip(t, "Low[0]", "1.2.3.4", result[0].Low)
test_ip(t, "High[0]", "2.3.4.5", result[0].High) test_ip(t, "High[0]", "2.3.4.5", result[0].High)
test_ip(t, "NewBase[0]", "3.4.5.6", result[0].NewBase) test_ip(t, "NewBase[0]", "3.4.5.6", result[0].NewBases[0])
//test_ip(t, "newIP[0]", "", result[0].NewIP) //test_ip(t, "newIP[0]", "", result[0].NewIP)
test_ip(t, "Low[1]", "8.7.6.5", result[1].Low) test_ip(t, "Low[1]", "8.7.6.5", result[1].Low)
test_ip(t, "High[1]", "9.8.7.6", result[1].High) test_ip(t, "High[1]", "9.8.7.6", result[1].High)
test_ip(t, "NewBase[1]", "7.6.5.4", result[1].NewBase) test_ip(t, "NewBase[1]", "7.6.5.4", result[1].NewBases[0])
//test_ip(t, "newIP[1]", "", result[0].NewIP) //test_ip(t, "newIP[1]", "", result[0].NewIP)
} }
func Test_DecodeTransformTable_NewIP(t *testing.T) { func Test_DecodeTransformTable_NewIP(t *testing.T) {
@ -77,8 +78,7 @@ func Test_DecodeTransformTable_NewIP(t *testing.T) {
} }
test_ip(t, "low", "1.2.3.4", result[0].Low) test_ip(t, "low", "1.2.3.4", result[0].Low)
test_ip(t, "high", "2.3.4.5", result[0].High) test_ip(t, "high", "2.3.4.5", result[0].High)
//test_ip(t, "newIP", "3.4.5.6", result[0].NewIP) test_ip(t, "newIP", "3.4.5.6", result[0].NewIPs[0])
test_ip(t, "newBase", "", result[0].NewBase)
} }
func Test_DecodeTransformTable_order(t *testing.T) { func Test_DecodeTransformTable_order(t *testing.T) {
@ -108,19 +108,23 @@ func Test_TransformIP(t *testing.T) {
var transforms1 = []IpConversion{{ var transforms1 = []IpConversion{{
Low: net.ParseIP("11.11.11.0"), Low: net.ParseIP("11.11.11.0"),
High: net.ParseIP("11.11.11.20"), High: net.ParseIP("11.11.11.20"),
NewBase: net.ParseIP("99.99.99.0"), NewBases: []net.IP{net.ParseIP("99.99.99.0")},
}, { }, {
Low: net.ParseIP("22.22.22.0"), Low: net.ParseIP("22.22.22.0"),
High: net.ParseIP("22.22.22.40"), High: net.ParseIP("22.22.22.40"),
NewBase: net.ParseIP("99.99.99.100"), NewBases: []net.IP{net.ParseIP("99.99.99.100")},
}, { }, {
Low: net.ParseIP("33.33.33.20"), Low: net.ParseIP("33.33.33.20"),
High: net.ParseIP("33.33.35.40"), High: net.ParseIP("33.33.35.40"),
NewBase: net.ParseIP("100.100.100.0"), NewBases: []net.IP{net.ParseIP("100.100.100.0")},
}, { }, {
Low: net.ParseIP("44.44.44.20"), Low: net.ParseIP("44.44.44.20"),
High: net.ParseIP("44.44.44.40"), High: net.ParseIP("44.44.44.40"),
NewBase: net.ParseIP("100.100.100.40"), NewBases: []net.IP{net.ParseIP("100.100.100.40")},
}, {
Low: net.ParseIP("55.0.0.0"),
High: net.ParseIP("55.255.0.0"),
NewBases: []net.IP{net.ParseIP("66.0.0.0"), net.ParseIP("77.0.0.0")},
}} }}
var tests = []struct { var tests = []struct {
@ -145,17 +149,22 @@ func Test_TransformIP(t *testing.T) {
{"33.33.35.41", "33.33.35.41"}, {"33.33.35.41", "33.33.35.41"},
{"44.44.44.24", "100.100.100.44"}, {"44.44.44.24", "100.100.100.44"},
{"44.44.44.44", "44.44.44.44"}, {"44.44.44.44", "44.44.44.44"},
{"55.0.42.42", "66.0.42.42,77.0.42.42"},
} }
for _, test := range tests { for _, test := range tests {
experiment := net.ParseIP(test.experiment) experiment := net.ParseIP(test.experiment)
expected := net.ParseIP(test.expected) actual, err := TransformIPToList(experiment, transforms1)
actual, err := TransformIP(experiment, transforms1)
if err != nil { if err != nil {
t.Errorf("%v: got an err: %v\n", experiment, err) t.Errorf("%v: got an err: %v\n", experiment, err)
} }
if !expected.Equal(actual) { list := []string{}
t.Errorf("%v: expected (%v) got (%v)\n", experiment, expected, actual) for _, ip := range actual {
list = append(list, ip.String())
}
act := strings.Join(list, ",")
if test.expected != act {
t.Errorf("%v: expected (%v) got (%v)\n", experiment, test.expected, act)
} }
} }
} }