improved api error handling

This commit is contained in:
yusing 2025-01-05 00:02:31 +08:00
parent 0e886f5ddf
commit 55134c8426
4 changed files with 17 additions and 20 deletions

View file

@ -104,7 +104,7 @@ func RequireAuth(next http.HandlerFunc) http.HandlerFunc {
func checkToken(w http.ResponseWriter, r *http.Request) (ok bool) {
tokenCookie, err := r.Cookie("token")
if err != nil {
U.HandleErr(w, r, E.PrependSubject("token", err), http.StatusUnauthorized)
U.RespondError(w, E.New("missing token"), http.StatusUnauthorized)
return false
}
var claims Claims
@ -127,7 +127,7 @@ func checkToken(w http.ResponseWriter, r *http.Request) (ok bool) {
}
if err != nil {
U.HandleErr(w, r, err, http.StatusForbidden)
U.RespondError(w, err, http.StatusForbidden)
return false
}

View file

@ -34,7 +34,7 @@ func List(w http.ResponseWriter, r *http.Request) {
switch what {
case ListRoute:
if route := listRoute(which); route == nil {
http.Error(w, "not found", http.StatusNotFound)
http.NotFound(w, r)
return
} else {
U.RespondJSON(w, r, route)
@ -59,10 +59,7 @@ func List(w http.ResponseWriter, r *http.Request) {
}
func listRoute(which string) any {
if which == "" {
which = "all"
}
if which == "all" {
if which == "" || which == "all" {
return config.RoutesByAlias()
}
routes := config.RoutesByAlias()

View file

@ -12,23 +12,22 @@ import (
// http.StatusInternalServerError is used.
//
// The error is only logged but not returned to the client.
func HandleErr(w http.ResponseWriter, r *http.Request, origErr error, code ...int) {
if origErr == nil {
func HandleErr(w http.ResponseWriter, r *http.Request, err error, code ...int) {
if err == nil {
return
}
LogError(r).Msg(origErr.Error())
statusCode := http.StatusInternalServerError
if len(code) > 0 {
statusCode = code[0]
LogError(r).Msg(err.Error())
if len(code) == 0 {
code = []int{http.StatusInternalServerError}
}
http.Error(w, http.StatusText(statusCode), statusCode)
http.Error(w, http.StatusText(code[0]), code[0])
}
func RespondError(w http.ResponseWriter, err error, code ...int) {
if len(code) > 0 {
w.WriteHeader(code[0])
if len(code) == 0 {
code = []int{http.StatusBadRequest}
}
WriteBody(w, []byte(ansi.StripANSI(err.Error())))
http.Error(w, ansi.StripANSI(err.Error()), code[0])
}
func ErrMissingKey(k string) error {

View file

@ -8,9 +8,10 @@ import (
)
func reqLogger(r *http.Request, level zerolog.Level) *zerolog.Event {
return logging.WithLevel(level).Str("module", "api").
Str("method", r.Method).
Str("path", r.RequestURI)
return logging.WithLevel(level).
Str("module", "api").
Str("remote", r.RemoteAddr).
Str("uri", r.Method+" "+r.RequestURI)
}
func LogError(r *http.Request) *zerolog.Event { return reqLogger(r, zerolog.ErrorLevel) }