diff options
Diffstat (limited to 'vendor/github.com/golang-jwt/jwt/v5/token.go')
-rw-r--r-- | vendor/github.com/golang-jwt/jwt/v5/token.go | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/vendor/github.com/golang-jwt/jwt/v5/token.go b/vendor/github.com/golang-jwt/jwt/v5/token.go deleted file mode 100644 index 352873a..0000000 --- a/vendor/github.com/golang-jwt/jwt/v5/token.go +++ /dev/null | |||
@@ -1,100 +0,0 @@ | |||
1 | package jwt | ||
2 | |||
3 | import ( | ||
4 | "crypto" | ||
5 | "encoding/base64" | ||
6 | "encoding/json" | ||
7 | ) | ||
8 | |||
9 | // Keyfunc will be used by the Parse methods as a callback function to supply | ||
10 | // the key for verification. The function receives the parsed, but unverified | ||
11 | // Token. This allows you to use properties in the Header of the token (such as | ||
12 | // `kid`) to identify which key to use. | ||
13 | // | ||
14 | // The returned interface{} may be a single key or a VerificationKeySet containing | ||
15 | // multiple keys. | ||
16 | type Keyfunc func(*Token) (interface{}, error) | ||
17 | |||
18 | // VerificationKey represents a public or secret key for verifying a token's signature. | ||
19 | type VerificationKey interface { | ||
20 | crypto.PublicKey | []uint8 | ||
21 | } | ||
22 | |||
23 | // VerificationKeySet is a set of public or secret keys. It is used by the parser to verify a token. | ||
24 | type VerificationKeySet struct { | ||
25 | Keys []VerificationKey | ||
26 | } | ||
27 | |||
28 | // Token represents a JWT Token. Different fields will be used depending on | ||
29 | // whether you're creating or parsing/verifying a token. | ||
30 | type Token struct { | ||
31 | Raw string // Raw contains the raw token. Populated when you [Parse] a token | ||
32 | Method SigningMethod // Method is the signing method used or to be used | ||
33 | Header map[string]interface{} // Header is the first segment of the token in decoded form | ||
34 | Claims Claims // Claims is the second segment of the token in decoded form | ||
35 | Signature []byte // Signature is the third segment of the token in decoded form. Populated when you Parse a token | ||
36 | Valid bool // Valid specifies if the token is valid. Populated when you Parse/Verify a token | ||
37 | } | ||
38 | |||
39 | // New creates a new [Token] with the specified signing method and an empty map | ||
40 | // of claims. Additional options can be specified, but are currently unused. | ||
41 | func New(method SigningMethod, opts ...TokenOption) *Token { | ||
42 | return NewWithClaims(method, MapClaims{}, opts...) | ||
43 | } | ||
44 | |||
45 | // NewWithClaims creates a new [Token] with the specified signing method and | ||
46 | // claims. Additional options can be specified, but are currently unused. | ||
47 | func NewWithClaims(method SigningMethod, claims Claims, opts ...TokenOption) *Token { | ||
48 | return &Token{ | ||
49 | Header: map[string]interface{}{ | ||
50 | "typ": "JWT", | ||
51 | "alg": method.Alg(), | ||
52 | }, | ||
53 | Claims: claims, | ||
54 | Method: method, | ||
55 | } | ||
56 | } | ||
57 | |||
58 | // SignedString creates and returns a complete, signed JWT. The token is signed | ||
59 | // using the SigningMethod specified in the token. Please refer to | ||
60 | // https://golang-jwt.github.io/jwt/usage/signing_methods/#signing-methods-and-key-types | ||
61 | // for an overview of the different signing methods and their respective key | ||
62 | // types. | ||
63 | func (t *Token) SignedString(key interface{}) (string, error) { | ||
64 | sstr, err := t.SigningString() | ||
65 | if err != nil { | ||
66 | return "", err | ||
67 | } | ||
68 | |||
69 | sig, err := t.Method.Sign(sstr, key) | ||
70 | if err != nil { | ||
71 | return "", err | ||
72 | } | ||
73 | |||
74 | return sstr + "." + t.EncodeSegment(sig), nil | ||
75 | } | ||
76 | |||
77 | // SigningString generates the signing string. This is the most expensive part | ||
78 | // of the whole deal. Unless you need this for something special, just go | ||
79 | // straight for the SignedString. | ||
80 | func (t *Token) SigningString() (string, error) { | ||
81 | h, err := json.Marshal(t.Header) | ||
82 | if err != nil { | ||
83 | return "", err | ||
84 | } | ||
85 | |||
86 | c, err := json.Marshal(t.Claims) | ||
87 | if err != nil { | ||
88 | return "", err | ||
89 | } | ||
90 | |||
91 | return t.EncodeSegment(h) + "." + t.EncodeSegment(c), nil | ||
92 | } | ||
93 | |||
94 | // EncodeSegment encodes a JWT specific base64url encoding with padding | ||
95 | // stripped. In the future, this function might take into account a | ||
96 | // [TokenOption]. Therefore, this function exists as a method of [Token], rather | ||
97 | // than a global function. | ||
98 | func (*Token) EncodeSegment(seg []byte) string { | ||
99 | return base64.RawURLEncoding.EncodeToString(seg) | ||
100 | } | ||