2022-11-11 20:36:45 +01:00
|
|
|
package status
|
|
|
|
|
|
|
|
import (
|
2024-02-22 12:27:08 +01:00
|
|
|
"errors"
|
2022-11-11 20:36:45 +01:00
|
|
|
"fmt"
|
2024-11-01 10:58:39 +01:00
|
|
|
"time"
|
2022-11-11 20:36:45 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
// UserAlreadyExists indicates that user already exists
|
|
|
|
UserAlreadyExists Type = 1
|
|
|
|
|
|
|
|
// PreconditionFailed indicates that some pre-condition for the operation hasn't been fulfilled
|
|
|
|
PreconditionFailed Type = 2
|
|
|
|
|
|
|
|
// PermissionDenied indicates that user has no permissions to view data
|
|
|
|
PermissionDenied Type = 3
|
|
|
|
|
|
|
|
// NotFound indicates that the object wasn't found in the system (or under a given Account)
|
|
|
|
NotFound Type = 4
|
|
|
|
|
|
|
|
// Internal indicates some generic internal error
|
|
|
|
Internal Type = 5
|
|
|
|
|
|
|
|
// InvalidArgument indicates some generic invalid argument error
|
|
|
|
InvalidArgument Type = 6
|
|
|
|
|
|
|
|
// AlreadyExists indicates a generic error when an object already exists in the system
|
|
|
|
AlreadyExists Type = 7
|
|
|
|
|
|
|
|
// Unauthorized indicates that user is not authorized
|
|
|
|
Unauthorized Type = 8
|
|
|
|
|
|
|
|
// BadRequest indicates that user is not authorized
|
|
|
|
BadRequest Type = 9
|
2023-03-03 18:35:38 +01:00
|
|
|
|
|
|
|
// Unauthenticated indicates that user is not authenticated due to absence of valid credentials
|
|
|
|
Unauthenticated Type = 10
|
2022-11-11 20:36:45 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
// Type is a type of the Error
|
|
|
|
type Type int32
|
|
|
|
|
|
|
|
// Error is an internal error
|
|
|
|
type Error struct {
|
|
|
|
ErrorType Type
|
|
|
|
Message string
|
|
|
|
}
|
|
|
|
|
|
|
|
// Type returns the Type of the error
|
|
|
|
func (e *Error) Type() Type {
|
|
|
|
return e.ErrorType
|
|
|
|
}
|
|
|
|
|
|
|
|
// Error is an error string
|
|
|
|
func (e *Error) Error() string {
|
|
|
|
return e.Message
|
|
|
|
}
|
|
|
|
|
|
|
|
// Errorf returns Error(ErrorType, fmt.Sprintf(format, a...)).
|
|
|
|
func Errorf(errorType Type, format string, a ...interface{}) error {
|
|
|
|
return &Error{
|
|
|
|
ErrorType: errorType,
|
|
|
|
Message: fmt.Sprintf(format, a...),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// FromError returns Error, true if the provided error is of type of Error. nil, false otherwise
|
|
|
|
func FromError(err error) (s *Error, ok bool) {
|
|
|
|
if err == nil {
|
|
|
|
return nil, true
|
|
|
|
}
|
2024-02-22 12:27:08 +01:00
|
|
|
var e *Error
|
|
|
|
if errors.As(err, &e) {
|
2022-11-11 20:36:45 +01:00
|
|
|
return e, true
|
|
|
|
}
|
|
|
|
return nil, false
|
|
|
|
}
|
2024-05-31 16:41:12 +02:00
|
|
|
|
|
|
|
// NewPeerNotFoundError creates a new Error with NotFound type for a missing peer
|
|
|
|
func NewPeerNotFoundError(peerKey string) error {
|
|
|
|
return Errorf(NotFound, "peer not found: %s", peerKey)
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewAccountNotFoundError creates a new Error with NotFound type for a missing account
|
|
|
|
func NewAccountNotFoundError(accountKey string) error {
|
|
|
|
return Errorf(NotFound, "account not found: %s", accountKey)
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewUserNotFoundError creates a new Error with NotFound type for a missing user
|
|
|
|
func NewUserNotFoundError(userKey string) error {
|
|
|
|
return Errorf(NotFound, "user not found: %s", userKey)
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewPeerNotRegisteredError creates a new Error with NotFound type for a missing peer
|
|
|
|
func NewPeerNotRegisteredError() error {
|
|
|
|
return Errorf(Unauthenticated, "peer is not registered")
|
|
|
|
}
|
2024-07-29 13:30:27 +02:00
|
|
|
|
|
|
|
// NewPeerLoginExpiredError creates a new Error with PermissionDenied type for an expired peer
|
|
|
|
func NewPeerLoginExpiredError() error {
|
|
|
|
return Errorf(PermissionDenied, "peer login has expired, please log in once more")
|
|
|
|
}
|
2024-09-16 15:47:03 +02:00
|
|
|
|
|
|
|
// NewSetupKeyNotFoundError creates a new Error with NotFound type for a missing setup key
|
2024-11-11 17:46:10 +01:00
|
|
|
func NewSetupKeyNotFoundError(setupKeyID string) error {
|
|
|
|
return Errorf(NotFound, "setup key: %s not found", setupKeyID)
|
2024-10-09 14:33:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func NewGetAccountFromStoreError(err error) error {
|
|
|
|
return Errorf(Internal, "issue getting account from store: %s", err)
|
2024-09-16 15:47:03 +02:00
|
|
|
}
|
|
|
|
|
2024-11-11 17:46:10 +01:00
|
|
|
// NewUserNotPartOfAccountError creates a new Error with PermissionDenied type for a user not being part of an account
|
|
|
|
func NewUserNotPartOfAccountError() error {
|
|
|
|
return Errorf(PermissionDenied, "user is not part of this account")
|
|
|
|
}
|
|
|
|
|
2024-09-16 15:47:03 +02:00
|
|
|
// NewGetUserFromStoreError creates a new Error with Internal type for an issue getting user from store
|
|
|
|
func NewGetUserFromStoreError() error {
|
|
|
|
return Errorf(Internal, "issue getting user from store")
|
|
|
|
}
|
2024-10-28 17:52:23 +01:00
|
|
|
|
2024-11-11 17:46:10 +01:00
|
|
|
// NewAdminPermissionError creates a new Error with PermissionDenied type for actions requiring admin role.
|
|
|
|
func NewAdminPermissionError() error {
|
|
|
|
return Errorf(PermissionDenied, "admin role required to perform this action")
|
|
|
|
}
|
|
|
|
|
2024-11-01 10:58:39 +01:00
|
|
|
// NewStoreContextCanceledError creates a new Error with Internal type for a canceled store context
|
|
|
|
func NewStoreContextCanceledError(duration time.Duration) error {
|
|
|
|
return Errorf(Internal, "store access: context canceled after %v", duration)
|
|
|
|
}
|
|
|
|
|
2024-10-28 17:52:23 +01:00
|
|
|
// NewInvalidKeyIDError creates a new Error with InvalidArgument type for an issue getting a setup key
|
|
|
|
func NewInvalidKeyIDError() error {
|
|
|
|
return Errorf(InvalidArgument, "invalid key ID")
|
|
|
|
}
|