Return error in the format, client is expecting.
diff --git a/oauth.go b/oauth.go index 350c780..c186e6c 100644 --- a/oauth.go +++ b/oauth.go
@@ -41,6 +41,16 @@ } /* +ErrorResponse delivers the errors back to the caller, once validation +has failed +*/ +type ErrorResponse struct { + Status string `json:"status"` + Message string `json:"message"` + Errors []string `json:"errors"` +} + +/* OAuthService offers interface functions that act on OAuth param, used to verify JWT tokens for the Http handler functions client wishes to validate against (via SSOHandler). @@ -129,17 +139,17 @@ WriteErrorResponse write a non 200 error response */ func WriteErrorResponse(statusCode int, message string, w http.ResponseWriter) { - errors := Errors{message} - WriteErrorResponses(statusCode, errors, w) -} + var errstr []string -/* -WriteErrorResponses write our error responses -*/ -func WriteErrorResponses(statusCode int, errors Errors, w http.ResponseWriter) { - w.WriteHeader(statusCode) w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(errors) + w.WriteHeader(statusCode) + errstr = append(errstr, http.StatusText(statusCode)) + resp := ErrorResponse{ + Status: http.StatusText(statusCode), + Message: message, + Errors: errstr, + } + json.NewEncoder(w).Encode(resp) } /*
diff --git a/scaffold_test.go b/scaffold_test.go index b2007b7..7a2cd4c 100644 --- a/scaffold_test.go +++ b/scaffold_test.go
@@ -380,6 +380,9 @@ }) It("SSO handler validation", func() { + + var vals ErrorResponse + router := httprouter.New() Expect(router).ShouldNot(BeNil()) scaf := CreateHTTPScaffold() @@ -415,9 +418,18 @@ Expect(err).Should(Succeed()) defer resp.Body.Close() Expect(resp.StatusCode).Should(Equal(400)) + body, err := ioutil.ReadAll(resp.Body) + Expect(err).Should(Succeed()) + err = json.Unmarshal(body, &vals) + Expect(err).Should(Succeed()) + Expect(vals.Status).Should(Equal("Bad Request")) + Expect(vals.Message).Should(Equal("not a compact JWS")) }) It("SSO handler validation bad public key", func() { + + var vals ErrorResponse + router := httprouter.New() Expect(router).ShouldNot(BeNil()) scaf := CreateHTTPScaffold() @@ -441,6 +453,12 @@ Expect(err).Should(Succeed()) defer resp.Body.Close() Expect(resp.StatusCode).Should(Equal(400)) + body, err := ioutil.ReadAll(resp.Body) + Expect(err).Should(Succeed()) + err = json.Unmarshal(body, &vals) + Expect(err).Should(Succeed()) + Expect(vals.Status).Should(Equal("Bad Request")) + Expect(vals.Message).Should(Equal("Public key not configured. Validation failed.")) }) It("Get stack trace", func() {