mirror of
https://github.com/git-pkgs/proxy.git
synced 2026-06-02 08:38:17 -04:00
42 lines
1.3 KiB
Go
42 lines
1.3 KiB
Go
|
|
package server
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"net/http"
|
||
|
|
)
|
||
|
|
|
||
|
|
// Error codes returned in API error responses. These are stable identifiers
|
||
|
|
// that clients can match on; the message text is for humans and may change.
|
||
|
|
const (
|
||
|
|
ErrCodeBadRequest = "BAD_REQUEST"
|
||
|
|
ErrCodeNotFound = "NOT_FOUND"
|
||
|
|
ErrCodeUpstream = "UPSTREAM_ERROR"
|
||
|
|
ErrCodeInternal = "INTERNAL_ERROR"
|
||
|
|
)
|
||
|
|
|
||
|
|
// ErrorResponse is the JSON body returned for API errors.
|
||
|
|
type ErrorResponse struct {
|
||
|
|
Code string `json:"code"`
|
||
|
|
Message string `json:"message"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// writeError sends a JSON error response with the given status, code and
|
||
|
|
// user-facing message. Internal error details should be logged separately
|
||
|
|
// by the caller, never passed as the message.
|
||
|
|
func writeError(w http.ResponseWriter, status int, code, message string) {
|
||
|
|
w.Header().Set("Content-Type", "application/json")
|
||
|
|
w.WriteHeader(status)
|
||
|
|
_ = json.NewEncoder(w).Encode(ErrorResponse{Code: code, Message: message})
|
||
|
|
}
|
||
|
|
|
||
|
|
func badRequest(w http.ResponseWriter, message string) {
|
||
|
|
writeError(w, http.StatusBadRequest, ErrCodeBadRequest, message)
|
||
|
|
}
|
||
|
|
|
||
|
|
func notFound(w http.ResponseWriter, message string) {
|
||
|
|
writeError(w, http.StatusNotFound, ErrCodeNotFound, message)
|
||
|
|
}
|
||
|
|
|
||
|
|
func internalError(w http.ResponseWriter, message string) {
|
||
|
|
writeError(w, http.StatusInternalServerError, ErrCodeInternal, message)
|
||
|
|
}
|