diff --git a/test/cmd/lfstest-gitserver.go b/test/cmd/lfstest-gitserver.go index 37a2e096..2148acaf 100644 --- a/test/cmd/lfstest-gitserver.go +++ b/test/cmd/lfstest-gitserver.go @@ -152,6 +152,20 @@ type lfsError struct { Message string `json:"message"` } +func writeLFSError(w http.ResponseWriter, code int, msg string) { + by, err := json.Marshal(&lfsError{Message: msg}) + if err != nil { + w.Header().Set("Content-Type", "text/plain") + w.WriteHeader(500) + w.Write([]byte("json encoding error: " + err.Error())) + return + } + + w.Header().Set("Content-Type", "application/vnd.git-lfs+json") + w.WriteHeader(code) + w.Write(by) +} + // handles any requests with "{name}.server.git/info/lfs" in the path func lfsHandler(w http.ResponseWriter, r *http.Request, id string) { repo, err := repoFromLfsUrl(r.URL.Path) @@ -443,13 +457,7 @@ func storageHandler(w http.ResponseWriter, r *http.Request) { w.WriteHeader(500) return case "status-storage-503": - w.Header().Set("Content-Type", "application/vnd.git-lfs+json") - w.WriteHeader(503) - - json.NewEncoder(w).Encode(&struct { - Message string `json:"message"` - }{"LFS is temporarily unavailable"}) - + writeLFSError(w, 503, "LFS is temporarily unavailable") return case "object-authenticated": if len(r.Header.Get("Authorization")) > 0 { @@ -937,15 +945,12 @@ func missingRequiredCreds(w http.ResponseWriter, r *http.Request, repo string) b auth := r.Header.Get("Authorization") user, pass, err := extractAuth(auth) if err != nil { - w.WriteHeader(403) - w.Write([]byte(`{"message":"` + err.Error() + `"}`)) + writeLFSError(w, 403, err.Error()) return true } if user != "requirecreds" || pass != "pass" { - errmsg := fmt.Sprintf("Got: '%s' => '%s' : '%s'", auth, user, pass) - w.WriteHeader(403) - w.Write([]byte(`{"message":"` + errmsg + `"}`)) + writeLFSError(w, 403, fmt.Sprintf("Got: '%s' => '%s' : '%s'", auth, user, pass)) return true }