...
1 package jwt
2
3 import (
4 "errors"
5 )
6
7
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 ErrTokenMalformed = errors.New("token is malformed")
14 ErrTokenUnverifiable = errors.New("token is unverifiable")
15 ErrTokenSignatureInvalid = errors.New("token signature is invalid")
16
17 ErrTokenInvalidAudience = errors.New("token has invalid audience")
18 ErrTokenExpired = errors.New("token is expired")
19 ErrTokenUsedBeforeIssued = errors.New("token used before issued")
20 ErrTokenInvalidIssuer = errors.New("token has invalid issuer")
21 ErrTokenNotValidYet = errors.New("token is not valid yet")
22 ErrTokenInvalidId = errors.New("token has invalid id")
23 ErrTokenInvalidClaims = errors.New("token has invalid claims")
24 )
25
26
27 const (
28 ValidationErrorMalformed uint32 = 1 << iota
29 ValidationErrorUnverifiable
30 ValidationErrorSignatureInvalid
31
32
33 ValidationErrorAudience
34 ValidationErrorExpired
35 ValidationErrorIssuedAt
36 ValidationErrorIssuer
37 ValidationErrorNotValidYet
38 ValidationErrorId
39 ValidationErrorClaimsInvalid
40 )
41
42
43 func NewValidationError(errorText string, errorFlags uint32) *ValidationError {
44 return &ValidationError{
45 text: errorText,
46 Errors: errorFlags,
47 }
48 }
49
50
51 type ValidationError struct {
52 Inner error
53 Errors uint32
54 text string
55 }
56
57
58 func (e ValidationError) Error() string {
59 if e.Inner != nil {
60 return e.Inner.Error()
61 } else if e.text != "" {
62 return e.text
63 } else {
64 return "token is invalid"
65 }
66 }
67
68
69 func (e *ValidationError) Unwrap() error {
70 return e.Inner
71 }
72
73
74 func (e *ValidationError) valid() bool {
75 return e.Errors == 0
76 }
77
78
79
80
81 func (e *ValidationError) Is(err error) bool {
82
83 if errors.Is(errors.Unwrap(e), err) {
84 return true
85 }
86
87
88 switch err {
89 case ErrTokenMalformed:
90 return e.Errors&ValidationErrorMalformed != 0
91 case ErrTokenUnverifiable:
92 return e.Errors&ValidationErrorUnverifiable != 0
93 case ErrTokenSignatureInvalid:
94 return e.Errors&ValidationErrorSignatureInvalid != 0
95 case ErrTokenInvalidAudience:
96 return e.Errors&ValidationErrorAudience != 0
97 case ErrTokenExpired:
98 return e.Errors&ValidationErrorExpired != 0
99 case ErrTokenUsedBeforeIssued:
100 return e.Errors&ValidationErrorIssuedAt != 0
101 case ErrTokenInvalidIssuer:
102 return e.Errors&ValidationErrorIssuer != 0
103 case ErrTokenNotValidYet:
104 return e.Errors&ValidationErrorNotValidYet != 0
105 case ErrTokenInvalidId:
106 return e.Errors&ValidationErrorId != 0
107 case ErrTokenInvalidClaims:
108 return e.Errors&ValidationErrorClaimsInvalid != 0
109 }
110
111 return false
112 }
113
View as plain text