Merge pull request #2 from goware/parser_settings

Adds support for custom parser settings added to jwt-go 2.4.0
This commit is contained in:
Peter Kieltyka 2016-01-19 13:52:50 -05:00
commit 80de8820dc

View file

@ -18,6 +18,7 @@ type JwtAuth struct {
signKey []byte
verifyKey []byte
signer jwt.SigningMethod
parser *jwt.Parser
}
// verifyKey is only for RSA
@ -29,6 +30,16 @@ func New(alg string, signKey []byte, verifyKey []byte) *JwtAuth {
}
}
// the same as New, except it supports custom parser settings introduced in ver. 2.4.0 of jwt-go
func NewWithParser(alg string, parser *jwt.Parser, signKey []byte, verifyKey []byte) *JwtAuth {
return &JwtAuth{
signKey: signKey,
verifyKey: verifyKey,
signer: jwt.GetSigningMethod(alg),
parser: parser,
}
}
func (ja *JwtAuth) Handle(paramAliases ...string) func(chi.Handler) chi.Handler {
return func(next chi.Handler) chi.Handler {
hfn := func(ctx context.Context, w http.ResponseWriter, r *http.Request) {
@ -98,12 +109,17 @@ func (ja *JwtAuth) Encode(claims map[string]interface{}) (t *jwt.Token, tokenStr
return
}
func (ja *JwtAuth) Decode(tokenString string) (t *jwt.Token, err error) {
return jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
if ja.verifyKey != nil && len(ja.verifyKey) > 0 {
return ja.verifyKey, nil
} else {
return ja.signKey, nil
}
})
func (ja *JwtAuth) keyFunc(t *jwt.Token) (interface{}, error) {
if ja.verifyKey != nil && len(ja.verifyKey) > 0 {
return ja.verifyKey, nil
} else {
return ja.signKey, nil
}
}
func (ja *JwtAuth) Decode(tokenString string) (t *jwt.Token, err error) {
if ja.parser != nil {
return ja.parser.Parse(tokenString, ja.keyFunc)
}
return jwt.Parse(tokenString, ja.keyFunc)
}