diff --git a/rest-api/main.go b/rest-api/main.go index d556ad4..3a8de89 100644 --- a/rest-api/main.go +++ b/rest-api/main.go @@ -42,7 +42,12 @@ func DynUpdate(w http.ResponseWriter, r *http.Request) { return sharedSecret }, - Domain: func(r *http.Request) string { return r.URL.Query().Get("hostname") }, + Domain: func(r *http.Request) string { + confDomain := "." + appConfig.Domain + srcDomain := r.URL.Query().Get("hostname") + srcDomain = strings.Replace(srcDomain, confDomain, "", -1) + return srcDomain + }, } response := BuildWebserviceResponseFromRequest(r, appConfig, extractor) @@ -77,7 +82,12 @@ func Update(w http.ResponseWriter, r *http.Request) { extractor := RequestDataExtractor{ Address: func(r *http.Request) string { return r.URL.Query().Get("addr") }, Secret: func(r *http.Request) string { return r.URL.Query().Get("secret") }, - Domain: func(r *http.Request) string { return r.URL.Query().Get("domain") }, + Domain: func(r *http.Request) string { + confDomain := "." + appConfig.Domain + srcDomain := r.URL.Query().Get("domain") + srcDomain = strings.Replace(srcDomain, confDomain, "", -1) + return srcDomain + }, } response := BuildWebserviceResponseFromRequest(r, appConfig, extractor) diff --git a/rest-api/request_handler_test.go b/rest-api/request_handler_test.go index ba6681a..47b9e29 100644 --- a/rest-api/request_handler_test.go +++ b/rest-api/request_handler_test.go @@ -3,12 +3,18 @@ package main import ( "net/http" "testing" + "strings" ) var defaultExtractor = RequestDataExtractor{ Address: func(r *http.Request) string { return r.URL.Query().Get("addr") }, Secret: func(r *http.Request) string { return r.URL.Query().Get("secret") }, - Domain: func(r *http.Request) string { return r.URL.Query().Get("domain") }, + Domain: func(r *http.Request) string { + confDomain := "." + appConfig.Domain + srcDomain := r.URL.Query().Get("domain") + srcDomain = strings.Replace(srcDomain, confDomain, "", -1) + return srcDomain + }, } var dynExtractor = RequestDataExtractor{ @@ -21,7 +27,12 @@ var dynExtractor = RequestDataExtractor{ return sharedSecret }, - Domain: func(r *http.Request) string { return r.URL.Query().Get("hostname") }, + Domain: func(r *http.Request) string { + confDomain := "." + appConfig.Domain + srcDomain := r.URL.Query().Get("hostname") + srcDomain = strings.Replace(srcDomain, confDomain, "", -1) + return srcDomain + }, } func TestBuildWebserviceResponseFromRequestToReturnValidObject(t *testing.T) { @@ -48,6 +59,31 @@ func TestBuildWebserviceResponseFromRequestToReturnValidObject(t *testing.T) { } } +func TestBuildWebserviceResponseFromRequestToReturnValidObjectLongDom(t *testing.T) { + var appConfig = &Config{} + appConfig.SharedSecret = "changeme" + + req, _ := http.NewRequest("GET", "/update?secret=changeme&domain=foo.example.org&addr=1.2.3.4", nil) + result := BuildWebserviceResponseFromRequest(req, appConfig, defaultExtractor) + + if result.Success != true { + t.Fatalf("Expected WebserviceResponse.Success to be true") + } + + if result.Domain != "foo" { + t.Fatalf("Expected WebserviceResponse.Domain to be foo") + } + + if result.Address != "1.2.3.4" { + t.Fatalf("Expected WebserviceResponse.Address to be 1.2.3.4") + } + + if result.AddrType != "A" { + t.Fatalf("Expected WebserviceResponse.AddrType to be A") + } +} + + func TestBuildWebserviceResponseFromRequestWithXRealIPHeaderToReturnValidObject(t *testing.T) { var appConfig = &Config{} appConfig.SharedSecret = "changeme" @@ -73,6 +109,30 @@ func TestBuildWebserviceResponseFromRequestWithXRealIPHeaderToReturnValidObject( } } +func TestBuildWebserviceResponseFromRequestWithXRealIPHeaderToReturnValidObjectLongDom(t *testing.T) { + var appConfig = &Config{} + appConfig.SharedSecret = "changeme" + + req, _ := http.NewRequest("GET", "/update?secret=changeme&domain=foo.example.org", nil) + req.Header.Add("X-Real-Ip", "1.2.3.4") + result := BuildWebserviceResponseFromRequest(req, appConfig, defaultExtractor) + + if result.Success != true { + t.Fatalf("Expected WebserviceResponse.Success to be true") + } + + if result.Domain != "foo" { + t.Fatalf("Expected WebserviceResponse.Domain to be foo") + } + + if result.Address != "1.2.3.4" { + t.Fatalf("Expected WebserviceResponse.Address to be 1.2.3.4") + } + + if result.AddrType != "A" { + t.Fatalf("Expected WebserviceResponse.AddrType to be A") + } +} func TestBuildWebserviceResponseFromRequestWithXForwardedForHeaderToReturnValidObject(t *testing.T) { var appConfig = &Config{} appConfig.SharedSecret = "changeme"