1package jwt 2 3import ( 4 "errors" 5) 6 7// Error constants 8var ( 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 15const ( 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 31func 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 39type 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 46func (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 57func (e *ValidationError) valid() bool { 58 return e.Errors == 0 59} 60