Skip to content

Commit 22b0855

Browse files
committed
Added more Godoc
1 parent ea0051d commit 22b0855

File tree

2 files changed

+50
-6
lines changed

2 files changed

+50
-6
lines changed

encoder.go

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package jwt
22

33
import "io"
44

5+
// Base64Encoding represents an object that can encode and decode base64. A
6+
// common example is [encoding/base64.Encoding].
57
type Base64Encoding interface {
68
EncodeToString(src []byte) string
79
DecodeString(s string) ([]byte, error)

parser_option.go

+48-6
Original file line numberDiff line numberDiff line change
@@ -116,25 +116,67 @@ func WithPaddingAllowed() ParserOption {
116116
// WithStrictDecoding will switch the codec used for decoding JWTs into strict
117117
// mode. In this mode, the decoder requires that trailing padding bits are zero,
118118
// as described in RFC 4648 section 3.5.
119+
//
120+
// Note: This is only supported when using [encoding/base64.Encoding], but not
121+
// by any other decoder specified with [WithBase64Decoder].
119122
func WithStrictDecoding() ParserOption {
120123
return func(p *Parser) {
121124
p.decodeStrict = true
122125
}
123126
}
124127

125-
// WithJSONDecoder supports a custom [JSONUnmarshal] to use in parsing the JWT.
126-
func WithJSONDecoder[T JSONDecoder](f JSONUnmarshalFunc, f2 JSONNewDecoderFunc[T]) ParserOption {
128+
// WithJSONDecoder supports a custom JSON decoder to use in parsing the JWT.
129+
// There are two functions that can be supplied:
130+
// - jsonUnmarshal is a [JSONUnmarshalFunc] that is used for the
131+
// un-marshalling the header and claims when no other options are specified
132+
// - jsonNewDecoder is a [JSONNewDecoderFunc] that is used to create an object
133+
// satisfying the [JSONDecoder] interface.
134+
//
135+
// The latter is used when the [WithJSONNumber] option is used.
136+
//
137+
// If any of the supplied functions is set to nil, the defaults from the Go
138+
// standard library, [encoding/json.Unmarshal] and [encoding/json.NewDecoder]
139+
// are used.
140+
//
141+
// Example using the https://github.com/bytedance/sonic library.
142+
//
143+
// import (
144+
// "github.com/bytedance/sonic"
145+
// )
146+
//
147+
// var parser = NewParser(WithJSONDecoder(sonic.Unmarshal, sonic.ConfigDefault.NewDecoder))
148+
func WithJSONDecoder[T JSONDecoder](jsonUnmarshal JSONUnmarshalFunc, jsonNewDecoder JSONNewDecoderFunc[T]) ParserOption {
127149
return func(p *Parser) {
128-
p.jsonUnmarshal = f
150+
p.jsonUnmarshal = jsonUnmarshal
129151
// This seems to be necessary, since we don't want to store the specific
130-
// JSONDecoder type in our parser, but need it in the function interface.
152+
// JSONDecoder type in our parser, but need it in the function
153+
// interface.
131154
p.jsonNewDecoder = func(r io.Reader) JSONDecoder {
132-
return f2(r)
155+
return jsonNewDecoder(r)
133156
}
134157
}
135158
}
136159

137-
// WithBase64Decoder supports a custom [Base64Encoding] to use in parsing the JWT.
160+
// WithBase64Decoder supports a custom Base64 when decoding a base64 encoded
161+
// token. Two encoding can be specified:
162+
// - rawURL needs to contain a [Base64Encoding] that is based on base64url
163+
// without padding. This is used for parsing tokens with the default
164+
// options.
165+
// - url needs to contain a [Base64Encoding] based on base64url with padding.
166+
// The sole use of this to decode tokens when [WithPaddingAllowed] is
167+
// enabled.
168+
//
169+
// If any of the supplied encodings are set to nil, the defaults from the Go
170+
// standard library, [encoding/base64.RawURLEncoding] and
171+
// [encoding/base64.URLEncoding] are used.
172+
//
173+
// Example using the https://github.com/segmentio/asm library.
174+
//
175+
// import (
176+
// asmbase64 "github.com/segmentio/asm/base64"
177+
// )
178+
//
179+
// var parser = NewParser(WithBase64Decoder(asmbase64.RawURLEncoding, asmbase64.URLEncoding))
138180
func WithBase64Decoder(rawURL Base64Encoding, url Base64Encoding) ParserOption {
139181
return func(p *Parser) {
140182
p.rawUrlBase64Encoding = rawURL

0 commit comments

Comments
 (0)