github.com/akzi/consul@v1.4.5/acl/errors.go (about)

     1  package acl
     2  
     3  import (
     4  	"errors"
     5  	"strings"
     6  )
     7  
     8  // These error constants define the standard ACL error types. The values
     9  // must not be changed since the error values are sent via RPC calls
    10  // from older clients and may not have the correct type.
    11  const (
    12  	errNotFound         = "ACL not found"
    13  	errRootDenied       = "Cannot resolve root ACL"
    14  	errDisabled         = "ACL support disabled"
    15  	errPermissionDenied = "Permission denied"
    16  	errInvalidParent    = "Invalid Parent"
    17  )
    18  
    19  var (
    20  	// ErrNotFound indicates there is no matching ACL.
    21  	ErrNotFound = errors.New(errNotFound)
    22  
    23  	// ErrRootDenied is returned when attempting to resolve a root ACL.
    24  	ErrRootDenied = errors.New(errRootDenied)
    25  
    26  	// ErrDisabled is returned when ACL changes are not permitted since
    27  	// they are disabled.
    28  	ErrDisabled = errors.New(errDisabled)
    29  
    30  	// ErrPermissionDenied is returned when an ACL based rejection
    31  	// happens.
    32  	ErrPermissionDenied = PermissionDeniedError{}
    33  
    34  	// ErrInvalidParent is returned when a remotely resolve ACL
    35  	// token claims to have a non-root parent
    36  	ErrInvalidParent = errors.New(errInvalidParent)
    37  )
    38  
    39  // IsErrNotFound checks if the given error message is comparable to
    40  // ErrNotFound.
    41  func IsErrNotFound(err error) bool {
    42  	return err != nil && strings.Contains(err.Error(), errNotFound)
    43  }
    44  
    45  // IsErrRootDenied checks if the given error message is comparable to
    46  // ErrRootDenied.
    47  func IsErrRootDenied(err error) bool {
    48  	return err != nil && strings.Contains(err.Error(), errRootDenied)
    49  }
    50  
    51  // IsErrDisabled checks if the given error message is comparable to
    52  // ErrDisabled.
    53  func IsErrDisabled(err error) bool {
    54  	return err != nil && strings.Contains(err.Error(), errDisabled)
    55  }
    56  
    57  // IsErrPermissionDenied checks if the given error message is comparable
    58  // to ErrPermissionDenied.
    59  func IsErrPermissionDenied(err error) bool {
    60  	return err != nil && strings.Contains(err.Error(), errPermissionDenied)
    61  }
    62  
    63  type PermissionDeniedError struct {
    64  	Cause string
    65  }
    66  
    67  func (e PermissionDeniedError) Error() string {
    68  	if e.Cause != "" {
    69  		return errPermissionDenied + ": " + e.Cause
    70  	}
    71  	return errPermissionDenied
    72  }