Live video on the AT Protocol
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}