github.com/dhax/go-base@v0.0.0-20231004214136-8be7e5c1972b/auth/pwdless/errors.go (about) 1 package pwdless 2 3 import ( 4 "errors" 5 "net/http" 6 7 "github.com/go-chi/render" 8 ) 9 10 // The list of error types presented to the end user as error message. 11 var ( 12 ErrInvalidLogin = errors.New("invalid email address") 13 ErrUnknownLogin = errors.New("email not registered") 14 ErrLoginDisabled = errors.New("login for account disabled") 15 ErrLoginToken = errors.New("invalid or expired login token") 16 ) 17 18 // ErrResponse renderer type for handling all sorts of errors. 19 type ErrResponse struct { 20 Err error `json:"-"` // low-level runtime error 21 HTTPStatusCode int `json:"-"` // http response status code 22 23 StatusText string `json:"status"` // user-level status message 24 AppCode int64 `json:"code,omitempty"` // application-specific error code 25 ErrorText string `json:"error,omitempty"` // application-level error message, for debugging 26 } 27 28 // Render sets the application-specific error code in AppCode. 29 func (e *ErrResponse) Render(w http.ResponseWriter, r *http.Request) error { 30 render.Status(r, e.HTTPStatusCode) 31 return nil 32 } 33 34 // ErrUnauthorized renders status 401 Unauthorized with custom error message. 35 func ErrUnauthorized(err error) render.Renderer { 36 return &ErrResponse{ 37 Err: err, 38 HTTPStatusCode: http.StatusUnauthorized, 39 StatusText: http.StatusText(http.StatusUnauthorized), 40 ErrorText: err.Error(), 41 } 42 } 43 44 // The list of default error types without specific error message. 45 var ( 46 ErrInternalServerError = &ErrResponse{ 47 HTTPStatusCode: http.StatusInternalServerError, 48 StatusText: http.StatusText(http.StatusInternalServerError), 49 } 50 )