diff --git a/httpbin/handlers.go b/httpbin/handlers.go index a212a085f65c44b3c2e69187137324f056ff23cb..fb27c4b489cae252572d3825040e2ffb1ec6b172 100644 --- a/httpbin/handlers.go +++ b/httpbin/handlers.go @@ -21,6 +21,10 @@ var acceptedMediaTypes = []string{ "image/", } +func notImplementedHandler(w http.ResponseWriter, r *http.Request) { + http.Error(w, "Not implemented", http.StatusNotImplemented) +} + // Index renders an HTML index page func (h *HTTPBin) Index(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { @@ -383,18 +387,6 @@ func (h *HTTPBin) HiddenBasicAuth(w http.ResponseWriter, r *http.Request) { writeJSON(w, body, http.StatusOK) } -// DigestAuth is not yet implemented, and returns 501 Not Implemented. It -// appears that stdlib support for working with digest authentication is -// lacking, and I'm not yet ready to implement it myself. -func (h *HTTPBin) DigestAuth(w http.ResponseWriter, r *http.Request) { - parts := strings.Split(r.URL.Path, "/") - if len(parts) != 5 { - http.Error(w, "Not Found", http.StatusNotFound) - return - } - http.Error(w, "Not Implemented", http.StatusNotImplemented) -} - // Stream responds with max(n, 100) lines of JSON-encoded request data. func (h *HTTPBin) Stream(w http.ResponseWriter, r *http.Request) { parts := strings.Split(r.URL.Path, "/") diff --git a/httpbin/handlers_test.go b/httpbin/handlers_test.go index 81ed47638a2599741eda797df62c0950fcb9d757..d08e38298a64408240ee23d29d6684b862c3d63b 100644 --- a/httpbin/handlers_test.go +++ b/httpbin/handlers_test.go @@ -1075,11 +1075,11 @@ func TestDigestAuth(t *testing.T) { url string status int }{ - {"/digest-auth/qop/user/pass", http.StatusNotImplemented}, {"/digest-auth", http.StatusNotFound}, - {"/digest-auth/user", http.StatusNotFound}, - {"/digest-auth/user/pass", http.StatusNotFound}, - {"/digest-auth/qop/user/pass/foo", http.StatusNotFound}, + {"/digest-auth/qop/user/pass", http.StatusNotImplemented}, + {"/digest-auth/user", http.StatusNotImplemented}, + {"/digest-auth/user/pass", http.StatusNotImplemented}, + {"/digest-auth/qop/user/pass/foo", http.StatusNotImplemented}, } for _, test := range tests { t.Run("ok"+test.url, func(t *testing.T) { diff --git a/httpbin/httpbin.go b/httpbin/httpbin.go index 827c82bf046feb7f37f3c2aa23d46b2b65b78661..8e835cb748403eaf7c0353d9f8936305791129b6 100644 --- a/httpbin/httpbin.go +++ b/httpbin/httpbin.go @@ -112,7 +112,6 @@ func (h *HTTPBin) Handler() http.Handler { mux.HandleFunc("/basic-auth/", h.BasicAuth) mux.HandleFunc("/hidden-basic-auth/", h.HiddenBasicAuth) - mux.HandleFunc("/digest-auth/", h.DigestAuth) mux.HandleFunc("/deflate", h.Deflate) mux.HandleFunc("/gzip", h.Gzip) @@ -139,6 +138,9 @@ func (h *HTTPBin) Handler() http.Handler { mux.HandleFunc("/image/", h.Image) mux.HandleFunc("/xml", h.XML) + // Not implemented + mux.HandleFunc("/digest-auth/", notImplementedHandler) + // Make sure our ServeMux doesn't "helpfully" redirect these invalid // endpoints by adding a trailing slash. See the ServeMux docs for more // info: https://golang.org/pkg/net/http/#ServeMux