aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-12-09 21:09:41 +0100
committerMartin Polden <mpolden@mpolden.no>2020-12-09 21:10:15 +0100
commit86b68bdf55d41a07f0b2c91e1bb9fbea6f2e9e22 (patch)
tree23df698da1ecf30964ec762a94ac8f4e653bb27b
parenta4808f1fa4470a384320382b72a9f280475a032e (diff)
http: Return bad request for invalid requests
-rw-r--r--http/http.go16
-rw-r--r--http/http_test.go1
2 files changed, 9 insertions, 8 deletions
diff --git a/http/http.go b/http/http.go
index 246d3bf..64260de 100644
--- a/http/http.go
+++ b/http/http.go
@@ -188,7 +188,7 @@ func (s *Server) newPortResponse(r *http.Request) (PortResponse, error) {
func (s *Server) CLIHandler(w http.ResponseWriter, r *http.Request) *appError {
ip, err := ipFromRequest(s.IPHeaders, r, true)
if err != nil {
- return internalServerError(err)
+ return badRequest(err).WithMessage(err.Error()).AsJSON()
}
fmt.Fprintln(w, ip.String())
return nil
@@ -197,7 +197,7 @@ func (s *Server) CLIHandler(w http.ResponseWriter, r *http.Request) *appError {
func (s *Server) CLICountryHandler(w http.ResponseWriter, r *http.Request) *appError {
response, err := s.newResponse(r)
if err != nil {
- return internalServerError(err)
+ return badRequest(err).WithMessage(err.Error()).AsJSON()
}
fmt.Fprintln(w, response.Country)
return nil
@@ -206,7 +206,7 @@ func (s *Server) CLICountryHandler(w http.ResponseWriter, r *http.Request) *appE
func (s *Server) CLICountryISOHandler(w http.ResponseWriter, r *http.Request) *appError {
response, err := s.newResponse(r)
if err != nil {
- return internalServerError(err)
+ return badRequest(err).WithMessage(err.Error()).AsJSON()
}
fmt.Fprintln(w, response.CountryISO)
return nil
@@ -215,7 +215,7 @@ func (s *Server) CLICountryISOHandler(w http.ResponseWriter, r *http.Request) *a
func (s *Server) CLICityHandler(w http.ResponseWriter, r *http.Request) *appError {
response, err := s.newResponse(r)
if err != nil {
- return internalServerError(err)
+ return badRequest(err).WithMessage(err.Error()).AsJSON()
}
fmt.Fprintln(w, response.City)
return nil
@@ -224,7 +224,7 @@ func (s *Server) CLICityHandler(w http.ResponseWriter, r *http.Request) *appErro
func (s *Server) CLICoordinatesHandler(w http.ResponseWriter, r *http.Request) *appError {
response, err := s.newResponse(r)
if err != nil {
- return internalServerError(err)
+ return badRequest(err).WithMessage(err.Error()).AsJSON()
}
fmt.Fprintf(w, "%s,%s\n", formatCoordinate(response.Latitude), formatCoordinate(response.Longitude))
return nil
@@ -233,7 +233,7 @@ func (s *Server) CLICoordinatesHandler(w http.ResponseWriter, r *http.Request) *
func (s *Server) CLIASNHandler(w http.ResponseWriter, r *http.Request) *appError {
response, err := s.newResponse(r)
if err != nil {
- return internalServerError(err)
+ return badRequest(err).WithMessage(err.Error()).AsJSON()
}
fmt.Fprintf(w, "%s\n", response.ASN)
return nil
@@ -242,7 +242,7 @@ func (s *Server) CLIASNHandler(w http.ResponseWriter, r *http.Request) *appError
func (s *Server) JSONHandler(w http.ResponseWriter, r *http.Request) *appError {
response, err := s.newResponse(r)
if err != nil {
- return internalServerError(err).AsJSON()
+ return badRequest(err).WithMessage(err.Error()).AsJSON()
}
b, err := json.MarshalIndent(response, "", " ")
if err != nil {
@@ -320,7 +320,7 @@ func (s *Server) cacheHandler(w http.ResponseWriter, r *http.Request) *appError
func (s *Server) DefaultHandler(w http.ResponseWriter, r *http.Request) *appError {
response, err := s.newResponse(r)
if err != nil {
- return internalServerError(err)
+ return badRequest(err).WithMessage(err.Error())
}
t, err := template.ParseFiles(s.Template)
if err != nil {
diff --git a/http/http_test.go b/http/http_test.go
index 9aa1d51..23911db 100644
--- a/http/http_test.go
+++ b/http/http_test.go
@@ -160,6 +160,7 @@ func TestJSONHandlers(t *testing.T) {
{s.URL + "/port/31337", "{\n \"ip\": \"127.0.0.1\",\n \"port\": 31337,\n \"reachable\": true\n}", 200},
{s.URL + "/port/80", "{\n \"ip\": \"127.0.0.1\",\n \"port\": 80,\n \"reachable\": true\n}", 200}, // checking that our test server is reachable on port 80
{s.URL + "/port/80?ip=1.3.3.7", "{\n \"ip\": \"127.0.0.1\",\n \"port\": 80,\n \"reachable\": true\n}", 200}, // ensuring that the "ip" parameter is not usable to check remote host ports
+ {s.URL + "/?ip=1.3.3.7/country", "{\n \"error\": \"could not parse IP: 1.3.3.7/country\"\n}", 400},
{s.URL + "/foo", "{\n \"error\": \"404 page not found\"\n}", 404},
{s.URL + "/health", `{"status":"OK"}`, 200},
}