Move the Wrapper inside the registry from plugins so you can load plugins lazyly
continuous-integration/drone/tag Build is passing Details

main v0.2.0
René Jochum 2 years ago
parent 801d2fec3b
commit 64e65bff8d
Signed by: jochum
GPG Key ID: F7D906F5E51E8E5E

@ -167,7 +167,7 @@ func main() {
micro.Name(config.Name),
micro.Version(config.Version),
micro.Flags(flags...),
micro.WrapHandler(auth2ClientReg.Plugin().Wrapper()),
micro.WrapHandler(auth2ClientReg.Wrapper()),
micro.Action(func(c *cli.Context) error {
// Start the logger
if err := ilogger.Start(c); err != nil {

@ -52,12 +52,8 @@ func (p *noopClientPlugin) Inspect(ctx context.Context) (*User, error) {
return &User{Id: uuid.New().String(), Issuer: p.String()}, nil
}
func (p *noopClientPlugin) Wrapper() server.HandlerWrapper {
return func(h server.HandlerFunc) server.HandlerFunc {
return func(ctx context.Context, req server.Request, rsp interface{}) error {
return h(ctx, req, rsp)
}
}
func (p *noopClientPlugin) WrapperFunc(h server.HandlerFunc, ctx context.Context, req server.Request, rsp interface{}) error {
return h(ctx, req, rsp)
}
func newNoopRouterPlugin() RouterPlugin {

@ -45,7 +45,7 @@ type ClientPlugin interface {
Inspect(ctx context.Context) (*User, error)
// Wrapper returns the Auth Wrapper for your service
Wrapper() server.HandlerWrapper
WrapperFunc(h server.HandlerFunc, ctx context.Context, req server.Request, rsp interface{}) error
}
// RouterPlugin is for routers that forward the token or do other stuff required by ClientPlugin

@ -169,20 +169,16 @@ func (p *jwtPlugin) Inspect(ctx context.Context) (*auth2.User, error) {
return &auth2.User{Id: claims.ID, Type: claims.Type, Issuer: claims.Issuer, Metadata: cMD, Scopes: claims.Scopes, Roles: claims.Roles}, nil
}
func (p *jwtPlugin) Wrapper() server.HandlerWrapper {
return func(h server.HandlerFunc) server.HandlerFunc {
return func(ctx context.Context, req server.Request, rsp interface{}) error {
u, err := p.Inspect(ctx)
if err != nil {
u = auth2.AnonUser
}
ctx = context.WithValue(ctx, auth2.ContextUserKey{}, u)
if err = p.verifier.Verify(ctx, u, req); err != nil {
return err
}
return h(ctx, req, rsp)
}
func (p *jwtPlugin) WrapperFunc(h server.HandlerFunc, ctx context.Context, req server.Request, rsp interface{}) error {
u, err := p.Inspect(ctx)
if err != nil {
u = auth2.AnonUser
}
ctx = context.WithValue(ctx, auth2.ContextUserKey{}, u)
if err = p.verifier.Verify(ctx, u, req); err != nil {
return err
}
return h(ctx, req, rsp)
}

@ -7,6 +7,8 @@ import (
"github.com/urfave/cli/v2"
"go-micro.dev/v4"
"go-micro.dev/v4/errors"
"go-micro.dev/v4/server"
"jochum.dev/jo-micro/auth2/shared/sutil"
)
@ -100,3 +102,17 @@ func (r *AuthRegistry[T]) Health(ctx context.Context) (string, error) {
m, _ := any(r.plugin).(registryFuncs)
return m.Health(ctx)
}
// Wrapper returns a server.HandleWrapper, this works only for ClientPlugin
func (r *AuthRegistry[T]) Wrapper() server.HandlerWrapper {
return func(h server.HandlerFunc) server.HandlerFunc {
return func(ctx context.Context, req server.Request, rsp interface{}) error {
m, ok := any(r.plugin).(ClientPlugin)
if !ok {
return errors.InternalServerError("auth2.registry.AuthRegistry.Wrapper:No such plugin", "No plugin found")
}
return m.WrapperFunc(h, ctx, req, rsp)
}
}
}

Loading…
Cancel
Save