}) It("handles valid credentials", func() { req.Header.Add("Authorization", authString) auth := httpauth.BasicMiddleware(spec)(handler) Ω(auth(ctx)).ShouldNot(HaveOccurred()) Ω(ctx.ResponseStatus()).Should(Equal(http.StatusOK)) Ω(rw.Body).Should(Equal([]byte("\"ok\"\n"))) }) It("handles invalid credentials", func() { auth := httpauth.BasicMiddleware(spec)(handler) Ω(auth(ctx)).ShouldNot(HaveOccurred()) Ω(ctx.ResponseStatus()).Should(Equal(http.StatusUnauthorized)) Ω(ctx.Header()).Should(HaveKey("Www-Authenticate")) Ω(ctx.Header().Get("Www-Authenticate")).Should(Equal(`Basic realm="Restricted"`)) Ω(rw.Body).Should(ContainSubstring("Unauthorized")) }) It("sets a custom realm", func() { spec.Realm = "Custom" auth := httpauth.BasicMiddleware(spec)(handler) Ω(auth(ctx)).ShouldNot(HaveOccurred()) Ω(ctx.ResponseStatus()).Should(Equal(http.StatusUnauthorized)) Ω(ctx.Header()).Should(HaveKey("Www-Authenticate")) Ω(ctx.Header().Get("Www-Authenticate")).Should(Equal(`Basic realm="Custom"`)) Ω(rw.Body).Should(ContainSubstring("Unauthorized")) }) })
Ω(rwo).ShouldNot(BeNil()) Ω(rwo).Should(BeAssignableToTypeOf(&TestResponseWriter{})) trw := rwo.(*TestResponseWriter) Ω(trw.Status).Should(Equal(42)) }) }) Describe("Request", func() { It("returns nil if not initialized", func() { Ω(ctx.Request()).Should(BeNil()) }) }) Describe("Header", func() { It("returns nil if not initialized", func() { Ω(ctx.Header()).Should(BeNil()) }) }) Describe("ResponseStatus", func() { It("returns 0 if not initialized", func() { Ω(ctx.ResponseStatus()).Should(Equal(0)) }) }) Describe("ResponseLength", func() { It("returns 0 if not initialized", func() { Ω(ctx.ResponseLength()).Should(Equal(0)) }) })
// unauthorized sets the appropriate WWW-Authenticate header prior to sending an // Unauthorized HTTP response. func unauthorized(ctx *goa.Context, spec *Specification) error { ctx.Header().Set("WWW-Authenticate", fmt.Sprintf("Basic realm=%q", spec.Realm)) // return ctx.Respond(http.StatusUnauthorized, http.StatusText(http.StatusUnauthorized)) return ctx.Respond(http.StatusUnauthorized, map[string]interface{}{"ID": -1, "Title": "Unauthorized", "Msg": "Unauthorized Request"}) }