@@ -10,37 +10,41 @@ import (
1010
1111// New returns an OpenID Connect (OIDC) discovery `ParseTokenFunc`
1212// to be used with the the echo `JWT` middleware.
13- func New [T any ](claimsValidationFn options.ClaimsValidationFn [T ], setters ... options.Option ) func ( auth string , c echo.Context ) ( interface {}, error ) {
13+ func New [T any ](claimsValidationFn options.ClaimsValidationFn [T ], setters ... options.Option ) echo.MiddlewareFunc {
1414 h , err := oidc .NewHandler (claimsValidationFn , setters ... )
1515 if err != nil {
1616 panic (fmt .Sprintf ("oidc discovery: %v" , err ))
1717 }
1818
19- return toEchoJWTParseTokenFunc (h .ParseToken , setters ... )
19+ return toEchoHandler (h .ParseToken , setters ... )
2020}
2121
22- type echoJWTParseTokenFunc func (auth string , c echo.Context ) (interface {}, error )
23-
2422func onError (errorHandler options.ErrorHandler , description options.ErrorDescription , err error ) {
2523 if errorHandler != nil {
2624 errorHandler (description , err )
2725 }
2826}
2927
30- func toEchoJWTParseTokenFunc [T any ](parseToken oidc.ParseTokenFunc [T ], setters ... options.Option ) echoJWTParseTokenFunc {
28+ func toEchoHandler [T any ](parseToken oidc.ParseTokenFunc [T ], setters ... options.Option ) echo. MiddlewareFunc {
3129 opts := options .New (setters ... )
3230
33- echoJWTParseTokenFunc := func (auth string , c echo.Context ) (interface {}, error ) {
34- ctx := c .Request ().Context ()
35-
36- claims , err := parseToken (ctx , auth )
37- if err != nil {
38- onError (opts .ErrorHandler , options .ParseTokenErrorDescription , err )
39- return nil , err
31+ return func (next echo.HandlerFunc ) echo.HandlerFunc {
32+ return func (c echo.Context ) error {
33+ ctx := c .Request ().Context ()
34+
35+ tokenString , err := oidc .GetTokenString (c .Request ().Header .Get , opts .TokenString )
36+ if err != nil {
37+ onError (opts .ErrorHandler , options .GetTokenErrorDescription , err )
38+ return echo .ErrBadRequest
39+ }
40+
41+ claims , err := parseToken (ctx , tokenString )
42+ if err != nil {
43+ onError (opts .ErrorHandler , options .ParseTokenErrorDescription , err )
44+ return echo .ErrUnauthorized
45+ }
46+ c .Set (string (opts .ClaimsContextKeyName ), claims )
47+ return next (c )
4048 }
41-
42- return claims , nil
4349 }
44-
45- return echoJWTParseTokenFunc
4650}
0 commit comments