71 lines · 2.2 KB · Go
RawDownload
package auth // ErrorCodeRequestScoped identifies failures tied to the current request rather// than the selected credential.const ErrorCodeRequestScoped = "request_scoped" const requestScopedErrorCode = ErrorCodeRequestScoped // ErrorCodeConnectionLifecycle marks transport/session lifecycle failures that// must skip credential cooldown without being treated as request-scoped faults.const ErrorCodeConnectionLifecycle = "connection_lifecycle" const connectionLifecycleErrorCode = ErrorCodeConnectionLifecycle // ErrorCodeForceCooldown marks failures that must enforce credential cooldown.const ErrorCodeForceCooldown = "force_cooldown" // Error describes an authentication related failure in a provider agnostic format.type Error struct {	// Code is a short machine readable identifier.	Code string `json:"code,omitempty"`	// Message is a human readable description of the failure.	Message string `json:"message"`	// Retryable indicates whether a retry might fix the issue automatically.	Retryable bool `json:"retryable"`	// HTTPStatus optionally records an HTTP-like status code for the error.	HTTPStatus int `json:"http_status,omitempty"`} // Error implements the error interface.func (e *Error) Error() string {	if e == nil {		return ""	}	if e.Code == "" {		return e.Message	}	return e.Code + ": " + e.Message} // StatusCode implements optional status accessor for manager decision making.func (e *Error) StatusCode() int {	if e == nil {		return 0	}	return e.HTTPStatus} // IsRequestScoped reports whether the failure is tied to the current request// rather than the selected credential.func (e *Error) IsRequestScoped() bool {	return e != nil && e.Code == ErrorCodeRequestScoped} // MarkRequestScoped marks the error as request-scoped in place and returns it.func (e *Error) MarkRequestScoped() *Error {	if e != nil {		e.Code = ErrorCodeRequestScoped	}	return e} // NewRequestScopedError creates an Error explicitly flagged as request-scoped so// that credential cooldown is skipped.func NewRequestScopedError(message string, httpStatus int) *Error {	return &Error{		Code:       ErrorCodeRequestScoped,		Message:    message,		HTTPStatus: httpStatus,	}}