Live video on the AT Protocol
at natb/urfave 67 lines 2.0 kB view raw
1package errors 2 3import ( 4 "context" 5 "encoding/json" 6 "net/http" 7 8 "stream.place/streamplace/pkg/log" 9) 10 11type APIError struct { 12 Msg string `json:"message"` 13 Status int `json:"status"` 14 Err error `json:"-"` 15} 16 17func writeHTTPError(w http.ResponseWriter, msg string, status int, err error) APIError { 18 w.WriteHeader(status) 19 20 var errorDetail string 21 if err != nil { 22 errorDetail = err.Error() 23 } 24 25 if err != nil { 26 log.Log(context.TODO(), msg, "status", status, "error", err) 27 } else { 28 log.Log(context.TODO(), msg, "status", status) 29 } 30 if err := json.NewEncoder(w).Encode(map[string]string{"error": msg, "error_detail": errorDetail}); err != nil { 31 log.Log(context.TODO(), "error writing HTTP error", "http_error_msg", msg, "error", err) 32 } 33 return APIError{msg, status, err} 34} 35 36// HTTP Errors 37func WriteHTTPUnauthorized(w http.ResponseWriter, msg string, err error) APIError { 38 return writeHTTPError(w, msg, http.StatusUnauthorized, err) 39} 40 41func WriteHTTPForbidden(w http.ResponseWriter, msg string, err error) APIError { 42 return writeHTTPError(w, msg, http.StatusForbidden, err) 43} 44 45func WriteHTTPBadRequest(w http.ResponseWriter, msg string, err error) APIError { 46 return writeHTTPError(w, msg, http.StatusBadRequest, err) 47} 48 49func WriteHTTPUnsupportedMediaType(w http.ResponseWriter, msg string, err error) APIError { 50 return writeHTTPError(w, msg, http.StatusUnsupportedMediaType, err) 51} 52 53func WriteHTTPNotFound(w http.ResponseWriter, msg string, err error) APIError { 54 return writeHTTPError(w, msg, http.StatusNotFound, err) 55} 56 57func WriteHTTPInternalServerError(w http.ResponseWriter, msg string, err error) APIError { 58 return writeHTTPError(w, msg, http.StatusInternalServerError, err) 59} 60 61func WriteHTTPNotImplemented(w http.ResponseWriter, msg string, err error) APIError { 62 return writeHTTPError(w, msg, http.StatusNotImplemented, err) 63} 64 65func WriteHTTPTooManyRequests(w http.ResponseWriter, msg string) APIError { 66 return writeHTTPError(w, msg, http.StatusTooManyRequests, nil) 67}