diff --git a/cmd/microrouterd/config/config.go b/cmd/microrouterd/config/config.go index 2eb61e1..e9ef626 100644 --- a/cmd/microrouterd/config/config.go +++ b/cmd/microrouterd/config/config.go @@ -5,6 +5,6 @@ var ( ) const ( - Name = "go.micro.router" + Name = "jo.micro.router" PkgPath = "jochum.dev/jo-micro/router" ) diff --git a/cmd/microrouterd/main.go b/cmd/microrouterd/main.go index 906f462..4f72f7b 100644 --- a/cmd/microrouterd/main.go +++ b/cmd/microrouterd/main.go @@ -142,6 +142,7 @@ func main() { // Initialize the Auth Plugin over RouterAuthRegistry if err := routerAuthReg.Init(auth2.CliContext(c), auth2.Service(srv), auth2.Logrus(ilogger.Logrus())); err != nil { ilogger.Logrus().Fatal(err) + return err } // Initialize GIN @@ -156,6 +157,7 @@ func main() { // Initalize the Handler if err := routerHandler.Init(srv, r, routerAuthReg.Plugin(), c.Int("router_refresh"), c.String("router_ratelimiter_store_url")); err != nil { ilogger.Logrus().Fatal(err) + return err } // Add middlewares to gin @@ -168,6 +170,7 @@ func main() { // Register gin with micro if err := micro.RegisterHandler(srv.Server(), r); err != nil { ilogger.Logrus().Fatal(err) + return err } return nil diff --git a/docker/router/Dockerfile b/docker/router/Dockerfile index 14d1614..ebe9c7d 100644 --- a/docker/router/Dockerfile +++ b/docker/router/Dockerfile @@ -22,7 +22,6 @@ LABEL maintainer="René Jochum " COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ COPY --from=builder /etc/passwd /etc/passwd COPY --from=builder /usr/local/bin/microrouterd /usr/local/bin/microrouterd -RUN chmod +x /usr/local/bin/microrouterd # Run as appuser USER appuser diff --git a/go.mod b/go.mod index 0f5e60e..8d615e9 100644 --- a/go.mod +++ b/go.mod @@ -86,4 +86,5 @@ require ( gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect + jochum.dev/jo-micro/components v0.0.11 // indirect ) diff --git a/go.sum b/go.sum index a4b1768..67d2777 100644 --- a/go.sum +++ b/go.sum @@ -323,3 +323,5 @@ jochum.dev/jo-micro/auth2 v0.3.2 h1:dWY7RPLS3/Sn7YWDz4Kl8Str6lzMXUdfbMBLJLXmehk= jochum.dev/jo-micro/auth2 v0.3.2/go.mod h1:VRGDU1tsDrlEVN9ch3DlvhUslDTQGGp3KLReBRL6V1s= jochum.dev/jo-micro/auth2 v0.3.3 h1:mL8ipUfgNx2d5/JeuW7i1P/ZUzUpVT8G9WYH02xr/vA= jochum.dev/jo-micro/auth2 v0.3.3/go.mod h1:14yXAQkyHYC1RyHNoweNZahsRsaHrCEek7YlXDtt7Hg= +jochum.dev/jo-micro/components v0.0.11 h1:Rtm0J+MiMcyFVrweJ3r1eoxQY5qP59GzC1TPc7O9Ixs= +jochum.dev/jo-micro/components v0.0.11/go.mod h1:XzhOsv4pAOoRdnrgvYlZXwPzzBd9/8h2CzehB/Yf92w= diff --git a/handler.go b/handler.go index 8373de9..72a890e 100644 --- a/handler.go +++ b/handler.go @@ -2,29 +2,95 @@ package router import ( "context" + "fmt" + "strings" + "github.com/urfave/cli/v2" "go-micro.dev/v4/server" "google.golang.org/protobuf/types/known/emptypb" + "jochum.dev/jo-micro/components" "jochum.dev/jo-micro/router/internal/proto/routerclientpb" "jochum.dev/jo-micro/router/internal/util" ) +const Name = "router" + // Handler is the handler for jochum.dev/jo-micro/router/proto/routerpb.RrouterService type Handler struct { - routerURI string - routes []*routerclientpb.RoutesReply_Route + initialized bool + routerURI string + routes []*routerclientpb.RoutesReply_Route } // NewHandler returns a new dynrouterpb Handler -func NewHandler(routerURI string, routes ...*Route) *Handler { - pbRoutes := []*routerclientpb.RoutesReply_Route{} +func New() *Handler { + return &Handler{initialized: false, routes: []*routerclientpb.RoutesReply_Route{}} +} + +func Must(ctx context.Context) *Handler { + return components.Must(ctx).Must(Name).(*Handler) +} + +func MustReg(cReg *components.Components) *Handler { + return cReg.Must(Name).(*Handler) +} + +func (h *Handler) Name() string { + return Name +} + +func (h *Handler) Priority() int { + return 1000 +} + +func (h *Handler) Initialized() bool { + return h.initialized +} + +func (h *Handler) Init(r *components.Components, cli *cli.Context) error { + if h.initialized { + return nil + } + + h.routerURI = cli.String(fmt.Sprintf("%s_router_basepath", strings.ToLower(r.FlagPrefix()))) + + h.RegisterWithServer(r.Service().Server()) + + h.initialized = true + return nil +} + +func (h *Handler) Stop() error { + return nil +} + +func (h *Handler) Flags(r *components.Components) []cli.Flag { + return []cli.Flag{ + &cli.StringFlag{ + Name: fmt.Sprintf("%s_router_basepath", strings.ToLower(r.FlagPrefix())), + Usage: "Router basepath", + EnvVars: []string{fmt.Sprintf("%s_ROUTER_BASEPATH", strings.ToUpper(r.FlagPrefix()))}, + Value: fmt.Sprintf("api/v1/%s", strings.ToLower(r.FlagPrefix())), + }, + } +} + +func (h *Handler) Health(context context.Context) error { + return nil +} + +func (h *Handler) WrapHandlerFunc(ctx context.Context, req server.Request, rsp interface{}) error { + return nil +} + +func (h *Handler) Add(routes ...*Route) { for _, r := range routes { // NewRoute returns nil if no Endpoint has been specified, ignore these here if r == nil { continue } - pbRoutes = append(pbRoutes, &routerclientpb.RoutesReply_Route{ + h.routes = append(h.routes, &routerclientpb.RoutesReply_Route{ IsGlobal: r.IsGlobal, Method: r.Method, Path: r.Path, @@ -35,8 +101,6 @@ func NewHandler(routerURI string, routes ...*Route) *Handler { RatelimitUser: r.RatelimitUser, }) } - - return &Handler{routerURI, pbRoutes} } // RegisterWithServer registers this Handler with a server