From 669d5abdfaf9783a67f8115f1d822387dce17101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 21 Sep 2022 23:17:59 +0200 Subject: [PATCH] Fix flags and client service authentication --- cmd/microrouterd/handler/handler.go | 8 ++++++- cmd/microrouterd/main.go | 34 ++++++++++++++--------------- cmd/microrouterd/plugins.go | 1 + internal/logger/logger.go | 19 ++++++++-------- internal/util/flags.go | 19 ++++++++++++++++ 5 files changed, 52 insertions(+), 29 deletions(-) create mode 100644 internal/util/flags.go diff --git a/cmd/microrouterd/handler/handler.go b/cmd/microrouterd/handler/handler.go index 8be5121..d6dbf8e 100644 --- a/cmd/microrouterd/handler/handler.go +++ b/cmd/microrouterd/handler/handler.go @@ -14,6 +14,7 @@ import ( "go-micro.dev/v4/client" "go-micro.dev/v4/errors" "google.golang.org/protobuf/types/known/emptypb" + "jochum.dev/jo-micro/auth2" auth "jochum.dev/jo-micro/auth2" iLogger "jochum.dev/jo-micro/router/internal/logger" "jochum.dev/jo-micro/router/internal/proto/routerclientpb" @@ -60,7 +61,12 @@ func (h *Handler) Init(service micro.Service, engine *gin.Engine, routerAuth aut for _, s := range services { iLogger.Logrus().WithField("service", s.Name).Tracef("Found service") client := routerclientpb.NewRouterClientService(s.Name, h.service.Client()) - resp, err := client.Routes(ctx, &emptypb.Empty{}) + sCtx, err := auth2.ClientAuthRegistry().Plugin().ServiceContext(ctx) + if err != nil { + iLogger.Logrus().Error(err) + continue + } + resp, err := client.Routes(sCtx, &emptypb.Empty{}) if err != nil { iLogger.Logrus().Error(err) // failure in getting routes, silently ignore diff --git a/cmd/microrouterd/main.go b/cmd/microrouterd/main.go index 7afdc30..d4100d7 100644 --- a/cmd/microrouterd/main.go +++ b/cmd/microrouterd/main.go @@ -23,20 +23,14 @@ import ( func internalService(routerHandler *handler.Handler) { srv := micro.NewService() - flags := []cli.Flag{ - &cli.StringFlag{ - Name: "router_basepath", - Usage: "Router basepath", - EnvVars: []string{"MICRO_ROUTER_BASEPATH"}, - Value: "router", - }, - } - opts := []micro.Option{ micro.Name(config.Name + "-internal"), micro.Version(config.Version), - micro.Flags(flags...), micro.Action(func(c *cli.Context) error { + if err := auth2.ClientAuthRegistry().Init(c, srv); err != nil { + iLogger.Logrus().Fatal(err) + } + routerserverpb.RegisterRouterServerServiceHandler(srv.Server(), routerHandler) r := router.NewHandler( @@ -60,9 +54,15 @@ func internalService(routerHandler *handler.Handler) { iLogger.Logrus().Fatal(err) } + // Stop the handler if err := routerHandler.Stop(); err != nil { iLogger.Logrus().Fatal(err) } + + // Stop the client/service auth plugin + if err := auth2.ClientAuthRegistry().Stop(); err != nil { + iLogger.Logrus().Fatal(err) + } } func main() { @@ -70,9 +70,9 @@ func main() { micro.Server(httpServer.NewServer()), ) - authReg := auth2.RouterAuthRegistry() + routerAuthReg := auth2.RouterAuthRegistry() - flags := []cli.Flag{ + flags := iLogger.AppendFlags(routerAuthReg.AppendFlags(auth2.ClientAuthRegistry().AppendFlags([]cli.Flag{ // General &cli.BoolFlag{ Name: "router_debugmode", @@ -98,9 +98,7 @@ func main() { EnvVars: []string{"MICRO_ROUTER_LISTEN"}, Value: ":8080", }, - } - flags = append(flags, iLogger.Flags()...) - flags = append(flags, authReg.Flags()...) + }))) routerHandler, err := handler.NewHandler() if err != nil { @@ -120,7 +118,7 @@ func main() { } // Initialize the Auth Plugin over RouterAuthRegistry - if err := authReg.Init(c, srv); err != nil { + if err := routerAuthReg.Init(c, srv); err != nil { iLogger.Logrus().Fatal(err) } @@ -133,7 +131,7 @@ func main() { r := gin.New() // Initalize the Handler - if err := routerHandler.Init(srv, r, authReg.Plugin(), c.Int("router_refresh")); err != nil { + if err := routerHandler.Init(srv, r, routerAuthReg.Plugin(), c.Int("router_refresh")); err != nil { iLogger.Logrus().Fatal(err) } @@ -158,7 +156,7 @@ func main() { } // Stop the plugin in RouterAuthRegistry - if err := authReg.Stop(); err != nil { + if err := routerAuthReg.Stop(); err != nil { iLogger.Logrus().Fatal(err) } diff --git a/cmd/microrouterd/plugins.go b/cmd/microrouterd/plugins.go index aac46e3..a0c4b55 100644 --- a/cmd/microrouterd/plugins.go +++ b/cmd/microrouterd/plugins.go @@ -6,5 +6,6 @@ import ( _ "github.com/go-micro/plugins/v4/transport/grpc" _ "github.com/go-micro/plugins/v4/transport/nats" + _ "jochum.dev/jo-micro/auth2/plugins/client/jwt" _ "jochum.dev/jo-micro/auth2/plugins/router/jwt" ) diff --git a/internal/logger/logger.go b/internal/logger/logger.go index 62c3fd1..fd31557 100644 --- a/internal/logger/logger.go +++ b/internal/logger/logger.go @@ -7,6 +7,7 @@ import ( microLogrus "github.com/go-micro/plugins/v4/logger/logrus" microLogger "go-micro.dev/v4/logger" + "jochum.dev/jo-micro/router/internal/util" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" @@ -15,15 +16,13 @@ import ( var myLogger *logrus.Logger = nil var initialized = false -func Flags() []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: "loglevel", - Value: "info", - Usage: "Logrus log level default 'info', {panic,fatal,error,warn,info,debug,trace} available", - EnvVars: []string{"LOG_LEVEL"}, - }, - } +func AppendFlags(flags []cli.Flag) []cli.Flag { + return util.AppendFlag(flags, &cli.StringFlag{ + Name: "router_loglevel", + Value: "info", + Usage: "Logrus log level default 'info', {panic,fatal,error,warn,info,debug,trace} available", + EnvVars: []string{"MICRO_ROUTER_LOG_LEVEL"}, + }) } func Intialized() bool { @@ -43,7 +42,7 @@ func Start(cli *cli.Context) error { return nil } - lvl, err := logrus.ParseLevel(cli.String("loglevel")) + lvl, err := logrus.ParseLevel(cli.String("router_loglevel")) if err != nil { return err } diff --git a/internal/util/flags.go b/internal/util/flags.go new file mode 100644 index 0000000..08e66a3 --- /dev/null +++ b/internal/util/flags.go @@ -0,0 +1,19 @@ +package util + +import "github.com/urfave/cli/v2" + +func AppendFlag(flags []cli.Flag, flag cli.Flag) []cli.Flag { + has := false + for _, f := range flags { + if f.Names()[0] == flag.Names()[0] { + has = true + break + } + } + + if has { + return flags + } + + return append(flags, flag) +}