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  )