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() {