errors.go (1844B)
1 package jwt 2 3 import ( 4 "errors" 5 ) 6 7 // Error constants 8 var ( 9 ErrInvalidKey = errors.New("key is invalid") 10 ErrInvalidKeyType = errors.New("key is of invalid type") 11 ErrHashUnavailable = errors.New("the requested hash function is unavailable") 12 ) 13 14 // The errors that might occur when parsing and validating a token 15 const ( 16 ValidationErrorMalformed uint32 = 1 << iota // Token is malformed 17 ValidationErrorUnverifiable // Token could not be verified because of signing problems 18 ValidationErrorSignatureInvalid // Signature validation failed 19 20 // Standard Claim validation errors 21 ValidationErrorAudience // AUD validation failed 22 ValidationErrorExpired // EXP validation failed 23 ValidationErrorIssuedAt // IAT validation failed 24 ValidationErrorIssuer // ISS validation failed 25 ValidationErrorNotValidYet // NBF validation failed 26 ValidationErrorId // JTI validation failed 27 ValidationErrorClaimsInvalid // Generic claims validation error 28 ) 29 30 // Helper for constructing a ValidationError with a string error message 31 func NewValidationError(errorText string, errorFlags uint32) *ValidationError { 32 return &ValidationError{ 33 text: errorText, 34 Errors: errorFlags, 35 } 36 } 37 38 // The error from Parse if token is not valid 39 type ValidationError struct { 40 Inner error // stores the error returned by external dependencies, i.e.: KeyFunc 41 Errors uint32 // bitfield. see ValidationError... constants 42 text string // errors that do not have a valid error just have text 43 } 44 45 // Validation error is an error type 46 func (e ValidationError) Error() string { 47 if e.Inner != nil { 48 return e.Inner.Error() 49 } else if e.text != "" { 50 return e.text 51 } else { 52 return "token is invalid" 53 } 54 } 55 56 // No errors 57 func (e *ValidationError) valid() bool { 58 return e.Errors == 0 59 }