43 lines
1.0 KiB
Go
43 lines
1.0 KiB
Go
package rest
|
|
|
|
import (
|
|
"errors"
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"goAuth/internal/auth"
|
|
"goAuth/internal/invite"
|
|
"goAuth/internal/jitsi"
|
|
"goAuth/internal/user"
|
|
)
|
|
|
|
func statusFor(err error) int {
|
|
switch {
|
|
case errors.Is(err, user.ErrNotFound),
|
|
errors.Is(err, auth.ErrNotFound),
|
|
errors.Is(err, invite.ErrNotFound),
|
|
errors.Is(err, jitsi.ErrNotFound):
|
|
return http.StatusNotFound
|
|
case errors.Is(err, user.ErrInvalidPassword):
|
|
return http.StatusUnauthorized
|
|
case errors.Is(err, invite.ErrInvalid),
|
|
errors.Is(err, user.ErrUnsupportedFormat),
|
|
errors.Is(err, user.ErrExceedDimensions):
|
|
return http.StatusBadRequest
|
|
case errors.Is(err, auth.ErrCanceled):
|
|
return http.StatusRequestTimeout
|
|
default:
|
|
return http.StatusInternalServerError
|
|
}
|
|
}
|
|
|
|
func (h *Handler) fail(w http.ResponseWriter, err error) {
|
|
status := statusFor(err)
|
|
if status == http.StatusInternalServerError {
|
|
slog.Error("request failed", slog.String("op", "rest.fail"), slog.Any("error", err))
|
|
writeError(w, status, "internal server error")
|
|
return
|
|
}
|
|
writeError(w, status, err.Error())
|
|
}
|