From fea2736148e06a21cea8fc4e17905e4ee95992c5 Mon Sep 17 00:00:00 2001 From: Craig Peterson Date: Fri, 14 Apr 2017 13:53:02 -0600 Subject: [PATCH] wire into js REVERSE function --- js/error_tests/01-oldDSP.js | 1 - js/js.go | 28 ++++++++++++++++++++++++++-- js/js_test.go | 1 + transform/arpa_test.go | 2 ++ 4 files changed, 29 insertions(+), 3 deletions(-) delete mode 100644 js/error_tests/01-oldDSP.js diff --git a/js/error_tests/01-oldDSP.js b/js/error_tests/01-oldDSP.js deleted file mode 100644 index 4d47e66c4..000000000 --- a/js/error_tests/01-oldDSP.js +++ /dev/null @@ -1 +0,0 @@ -D("foo.com","reg","dsp") \ No newline at end of file diff --git a/js/js.go b/js/js.go index 115ffd675..b8e95acfe 100644 --- a/js/js.go +++ b/js/js.go @@ -6,9 +6,11 @@ import ( "io/ioutil" "github.com/StackExchange/dnscontrol/models" + "github.com/StackExchange/dnscontrol/transform" "github.com/robertkrimen/otto" //load underscore js into vm by default + _ "github.com/robertkrimen/otto/underscore" ) @@ -17,6 +19,7 @@ func ExecuteJavascript(script string, devMode bool) (*models.DNSConfig, error) { vm := otto.New() vm.Set("require", require) + vm.Set("REVERSE", reverse) helperJs := GetHelpers(devMode) // run helper script to prime vm and initialize variables @@ -50,15 +53,36 @@ func GetHelpers(devMode bool) string { } func require(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) != 1 { + throw(call.Otto, "require takes exactly one argument") + } file := call.Argument(0).String() fmt.Printf("requiring: %s\n", file) data, err := ioutil.ReadFile(file) if err != nil { - panic(err) + throw(call.Otto, err.Error()) } _, err = call.Otto.Run(string(data)) if err != nil { - panic(err) + throw(call.Otto, err.Error()) } return otto.TrueValue() } + +func throw(vm *otto.Otto, str string) { + panic(vm.MakeCustomError("Error", str)) +} + +func reverse(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) != 1 { + throw(call.Otto, "REVERSE takes exactly one argument") + } + dom := call.Argument(0).String() + rev, err := transform.ReverseDomainName(dom) + fmt.Println(dom, rev, err) + if err != nil { + throw(call.Otto, err.Error()) + } + v, _ := otto.ToValue(rev) + return v +} diff --git a/js/js_test.go b/js/js_test.go index 61a90f7be..80558e1a5 100644 --- a/js/js_test.go +++ b/js/js_test.go @@ -71,6 +71,7 @@ func TestErrors(t *testing.T) { {"old dsp style", `D("foo.com","reg","dsp")`}, {"MX no priority", `D("foo.com","reg",MX("@","test."))`}, {"MX reversed", `D("foo.com","reg",MX("@","test.", 5))`}, + {"Bad cidr", `D(reverse("foo.com"), "reg")`}, } for _, tst := range tests { t.Run(tst.desc, func(t *testing.T) { diff --git a/transform/arpa_test.go b/transform/arpa_test.go index 86bdc85b3..42078688c 100644 --- a/transform/arpa_test.go +++ b/transform/arpa_test.go @@ -27,6 +27,8 @@ func TestReverse(t *testing.T) { //Errror Cases: {"0.0.0.0/0", true, ""}, {"2001::/0", true, ""}, + {"4.5/16", true, ""}, + {"foo.com", true, ""}, } for i, tst := range tests { t.Run(fmt.Sprintf("%d--%s", i, tst.in), func(t *testing.T) {