diff --git a/go.mod b/go.mod index 7a00a85edf..76ede44993 100644 --- a/go.mod +++ b/go.mod @@ -6,16 +6,19 @@ require ( contrib.go.opencensus.io/exporter/jaeger v0.2.0 contrib.go.opencensus.io/exporter/ocagent v0.6.0 contrib.go.opencensus.io/exporter/zipkin v0.1.1 + github.com/gorilla/mux v1.7.3 github.com/micro/cli v0.2.0 + github.com/micro/go-micro v1.17.1 github.com/oklog/run v1.0.0 github.com/openzipkin/zipkin-go v0.2.2 - github.com/owncloud/ocis-graph v0.0.0-20191210114050-fc7e3d748b12 - github.com/owncloud/ocis-hello v0.0.0-20191209151829-dd129732c21d - github.com/owncloud/ocis-konnectd v0.0.0-20191210084549-0f2829ca1bff - github.com/owncloud/ocis-ocs v0.0.0-20191210090203-3f4c51b962f3 - github.com/owncloud/ocis-phoenix v0.0.0-20191209152623-c73b270f8783 + github.com/owncloud/ocis-graph v0.0.0-20191211134602-307fdc810c1c + github.com/owncloud/ocis-hello v0.0.0-20191211135609-45fb78b1a73a + github.com/owncloud/ocis-konnectd v0.0.0-20191212131659-2221c66aba96 + github.com/owncloud/ocis-ocs v0.0.0-20191212131641-cb8571fc3356 + github.com/owncloud/ocis-phoenix v0.0.0-20191212131611-6e342276ddad github.com/owncloud/ocis-pkg v1.2.0 - github.com/owncloud/ocis-webdav v0.0.0-20191210090227-af2e98f1e6a9 + github.com/owncloud/ocis-webdav v0.0.0-20191212131547-1b9754978852 + github.com/rs/zerolog v1.17.2 github.com/spf13/viper v1.6.1 go.opencensus.io v0.22.2 ) diff --git a/go.sum b/go.sum index 3d16b091f7..faaebbd536 100644 --- a/go.sum +++ b/go.sum @@ -207,6 +207,7 @@ github.com/gizak/termui/v3 v3.1.0/go.mod h1:bXQEBkJpzxUAKf0+xq9MSWAvWZlE7c+aidmy github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20180728074245-46e3a41ad493/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= +github.com/go-acme/lego/v3 v3.1.0 h1:yanYFoYW8azFkCvJfIk7edWWfjkYkhDxe45ZsxoW4Xk= github.com/go-acme/lego/v3 v3.1.0/go.mod h1:074uqt+JS6plx+c9Xaiz6+L+GBb+7itGtzfcDM2AhEE= github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs= github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= @@ -296,8 +297,10 @@ github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEo github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -529,19 +532,31 @@ github.com/oracle/oci-go-sdk v7.0.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukw github.com/ovh/go-ovh v0.0.0-20181109152953-ba5adb4cf014/go.mod h1:joRatxRJaZBsY3JAOEMcoOp05CnZzsx4scTxi95DHyQ= github.com/owncloud/ocis-graph v0.0.0-20191210114050-fc7e3d748b12 h1:eQqowoCCgH9Hz/CkrCna6wWkcYrlPo1HvQlbTgIXp1c= github.com/owncloud/ocis-graph v0.0.0-20191210114050-fc7e3d748b12/go.mod h1:Rx5hfbm0QPs7NRrekAEZf20TH+gpGevJjWLgFn3/mdI= +github.com/owncloud/ocis-graph v0.0.0-20191211134602-307fdc810c1c h1:LylwP5oleN0PQhDMh478hZPtn3/O6RgDYOYyzVH+x88= +github.com/owncloud/ocis-graph v0.0.0-20191211134602-307fdc810c1c/go.mod h1:Rx5hfbm0QPs7NRrekAEZf20TH+gpGevJjWLgFn3/mdI= github.com/owncloud/ocis-hello v0.0.0-20191209151829-dd129732c21d h1:IXY08w2KX8Hw5wCtMg5PFqpjlChVtmjTfHq9mFJ4VQU= github.com/owncloud/ocis-hello v0.0.0-20191209151829-dd129732c21d/go.mod h1:D4ewxHUJyXj1NG8EuDSWW9XErLFQIsLBmzxnApBsJH4= +github.com/owncloud/ocis-hello v0.0.0-20191211135609-45fb78b1a73a h1:Ls96kUMuRaDYdVoxxhiPtTWHYRB2XZO07tEzzUOfOqs= +github.com/owncloud/ocis-hello v0.0.0-20191211135609-45fb78b1a73a/go.mod h1:D4ewxHUJyXj1NG8EuDSWW9XErLFQIsLBmzxnApBsJH4= github.com/owncloud/ocis-konnectd v0.0.0-20191210084549-0f2829ca1bff h1:obpwql1j0YhUeHI2Gs3sHYhfeADXNpBKtAu9pYp5lao= github.com/owncloud/ocis-konnectd v0.0.0-20191210084549-0f2829ca1bff/go.mod h1:b9DxRrJvAsmFzoB/ETqNPAaRIGlkUwXSCM0Z7rF84m4= +github.com/owncloud/ocis-konnectd v0.0.0-20191212131659-2221c66aba96 h1:/GF+F+NCmrwimga+GG8dbK+K6H7nQzmlC+YfpNHeAeI= +github.com/owncloud/ocis-konnectd v0.0.0-20191212131659-2221c66aba96/go.mod h1:b9DxRrJvAsmFzoB/ETqNPAaRIGlkUwXSCM0Z7rF84m4= github.com/owncloud/ocis-ocs v0.0.0-20191210090203-3f4c51b962f3 h1:jISHbca1VhWVGu3t2FrfI6g2PSFgcbGDdpeCflH16MQ= github.com/owncloud/ocis-ocs v0.0.0-20191210090203-3f4c51b962f3/go.mod h1:uxMnXanRGabyExSbqGTkMTWVriv3HrdSivUfh2lxozE= +github.com/owncloud/ocis-ocs v0.0.0-20191212131641-cb8571fc3356 h1:afpOYPB43lMiFE0V24USMekJwZ8YCl/H+YrapVUarWM= +github.com/owncloud/ocis-ocs v0.0.0-20191212131641-cb8571fc3356/go.mod h1:uxMnXanRGabyExSbqGTkMTWVriv3HrdSivUfh2lxozE= github.com/owncloud/ocis-phoenix v0.0.0-20191209152623-c73b270f8783 h1:a09fQ21Qy+jvoMLuloRuekfivSpGC30G2msfQCzHARw= github.com/owncloud/ocis-phoenix v0.0.0-20191209152623-c73b270f8783/go.mod h1:xPa4BmtS+Hcsgx5veyfNxeLnjqitXJ7YRWLR2ZJg91A= +github.com/owncloud/ocis-phoenix v0.0.0-20191212131611-6e342276ddad h1:MoLJGCG5eZiXMftH9CtNJdJSPO0YGxE0I4K/Va31poo= +github.com/owncloud/ocis-phoenix v0.0.0-20191212131611-6e342276ddad/go.mod h1:xPa4BmtS+Hcsgx5veyfNxeLnjqitXJ7YRWLR2ZJg91A= github.com/owncloud/ocis-pkg v1.1.0/go.mod h1:EfbeXoe60Me2lB/AWjYl8UFNv4isqCPP6lokd5R7nyM= github.com/owncloud/ocis-pkg v1.2.0 h1:eP0AOSEXAgiblL2yOpNOmriKhDXN+mai+4belBJRkWU= github.com/owncloud/ocis-pkg v1.2.0/go.mod h1:EfbeXoe60Me2lB/AWjYl8UFNv4isqCPP6lokd5R7nyM= github.com/owncloud/ocis-webdav v0.0.0-20191210090227-af2e98f1e6a9 h1:uuDtkq3sQRhsHyi9y6TMfDzFrl2oJkhL8+CGLim+Uo4= github.com/owncloud/ocis-webdav v0.0.0-20191210090227-af2e98f1e6a9/go.mod h1:2lMqOO/rcHqn5V4/W8pOSemqwnogUnrfBR5m6a/VZJc= +github.com/owncloud/ocis-webdav v0.0.0-20191212131547-1b9754978852 h1:AK2T0mY7zz0IcxslOIytEz0+w2navEuKf0yKn4LR2+4= +github.com/owncloud/ocis-webdav v0.0.0-20191212131547-1b9754978852/go.mod h1:2lMqOO/rcHqn5V4/W8pOSemqwnogUnrfBR5m6a/VZJc= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= @@ -703,6 +718,7 @@ go.uber.org/multierr v1.3.0 h1:sFPn2GLc3poCkfrpIXGhBD2X0CMIo4Q/zSULXrj/+uc= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/ratelimit v0.0.0-20180316092928-c15da0234277/go.mod h1:2X8KaoNd1J0lZV+PxJk/5+DGbO/tpwLR1m++a7FnB/Y= go.uber.org/ratelimit v0.1.0/go.mod h1:2X8KaoNd1J0lZV+PxJk/5+DGbO/tpwLR1m++a7FnB/Y= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.12.0 h1:dySoUQPFBGj6xwjmBzageVL8jGi8uxc6bEmJQjA06bw= diff --git a/pkg/command/graph.go b/pkg/command/graph.go index 1a42a1342c..2e930ae2fd 100644 --- a/pkg/command/graph.go +++ b/pkg/command/graph.go @@ -32,7 +32,7 @@ func GraphCommand(cfg *config.Config) cli.Command { } // GraphHandler defines the direct server handler. -func GraphHandler(ctx context.Context, cancel context.CancelFunc, gr run.Group, cfg *config.Config) error { +func GraphHandler(ctx context.Context, cancel context.CancelFunc, gr *run.Group, cfg *config.Config) error { scfg := configureGraph(cfg) logger := command.NewLogger(scfg) m := metrics.New() @@ -56,8 +56,9 @@ func GraphHandler(ctx context.Context, cancel context.CancelFunc, gr run.Group, gr.Add(func() error { return server.Run() - }, func(_ error) { + }, func(err error) { logger.Info(). + Err(err). Str("transport", "http"). Msg("Shutting down server") @@ -73,6 +74,7 @@ func configureGraph(cfg *config.Config) *svcconfig.Config { cfg.Graph.Log.Pretty = cfg.Log.Pretty cfg.Graph.Log.Color = cfg.Log.Color cfg.Graph.Tracing.Enabled = false + cfg.Graph.HTTP.Addr = "localhost:9120" cfg.Graph.HTTP.Root = "/" return cfg.Graph diff --git a/pkg/command/hello.go b/pkg/command/hello.go index ec3d5c8424..c8d33a455f 100644 --- a/pkg/command/hello.go +++ b/pkg/command/hello.go @@ -33,7 +33,7 @@ func HelloCommand(cfg *config.Config) cli.Command { } // HelloHandler defines the direct server handler. -func HelloHandler(ctx context.Context, cancel context.CancelFunc, gr run.Group, cfg *config.Config) error { +func HelloHandler(ctx context.Context, cancel context.CancelFunc, gr *run.Group, cfg *config.Config) error { scfg := configureHello(cfg) logger := command.NewLogger(scfg) m := metrics.New() @@ -102,7 +102,9 @@ func configureHello(cfg *config.Config) *svcconfig.Config { cfg.Hello.Log.Pretty = cfg.Log.Pretty cfg.Hello.Log.Color = cfg.Log.Color cfg.Hello.Tracing.Enabled = false + cfg.Hello.HTTP.Addr = "localhost:9105" cfg.Hello.HTTP.Root = "/" + cfg.Hello.GRPC.Addr = "localhost:9106" return cfg.Hello } diff --git a/pkg/command/konnectd.go b/pkg/command/konnectd.go index 6452219077..e3fd4d5021 100644 --- a/pkg/command/konnectd.go +++ b/pkg/command/konnectd.go @@ -32,7 +32,7 @@ func KonnectdCommand(cfg *config.Config) cli.Command { } // KonnectdHandler defines the direct server handler. -func KonnectdHandler(ctx context.Context, cancel context.CancelFunc, gr run.Group, cfg *config.Config) error { +func KonnectdHandler(ctx context.Context, cancel context.CancelFunc, gr *run.Group, cfg *config.Config) error { scfg := configureKonnectd(cfg) logger := command.NewLogger(scfg) m := metrics.New() @@ -73,6 +73,7 @@ func configureKonnectd(cfg *config.Config) *svcconfig.Config { cfg.Konnectd.Log.Pretty = cfg.Log.Pretty cfg.Konnectd.Log.Color = cfg.Log.Color cfg.Konnectd.Tracing.Enabled = false + cfg.Konnectd.HTTP.Addr = "localhost:9130" cfg.Konnectd.HTTP.Root = "/" return cfg.Konnectd diff --git a/pkg/command/ocs.go b/pkg/command/ocs.go index 281e78a9cb..770610c488 100644 --- a/pkg/command/ocs.go +++ b/pkg/command/ocs.go @@ -32,7 +32,7 @@ func OCSCommand(cfg *config.Config) cli.Command { } // OCSHandler defines the direct server handler. -func OCSHandler(ctx context.Context, cancel context.CancelFunc, gr run.Group, cfg *config.Config) error { +func OCSHandler(ctx context.Context, cancel context.CancelFunc, gr *run.Group, cfg *config.Config) error { scfg := configureOCS(cfg) logger := command.NewLogger(scfg) m := metrics.New() @@ -73,6 +73,7 @@ func configureOCS(cfg *config.Config) *svcconfig.Config { cfg.OCS.Log.Pretty = cfg.Log.Pretty cfg.OCS.Log.Color = cfg.Log.Color cfg.OCS.Tracing.Enabled = false + cfg.OCS.HTTP.Addr = "localhost:9110" cfg.OCS.HTTP.Root = "/" return cfg.OCS diff --git a/pkg/command/phoenix.go b/pkg/command/phoenix.go index 2e210e48a3..6affd112fb 100644 --- a/pkg/command/phoenix.go +++ b/pkg/command/phoenix.go @@ -32,7 +32,7 @@ func PhoenixCommand(cfg *config.Config) cli.Command { } // PhoenixHandler defines the direct server handler. -func PhoenixHandler(ctx context.Context, cancel context.CancelFunc, gr run.Group, cfg *config.Config) error { +func PhoenixHandler(ctx context.Context, cancel context.CancelFunc, gr *run.Group, cfg *config.Config) error { scfg := configurePhoenix(cfg) logger := command.NewLogger(scfg) m := metrics.New() @@ -73,6 +73,7 @@ func configurePhoenix(cfg *config.Config) *svcconfig.Config { cfg.Phoenix.Log.Pretty = cfg.Log.Pretty cfg.Phoenix.Log.Color = cfg.Log.Color cfg.Phoenix.Tracing.Enabled = false + cfg.Phoenix.HTTP.Addr = "localhost:9100" cfg.Phoenix.HTTP.Root = "/" return cfg.Phoenix diff --git a/pkg/command/server.go b/pkg/command/server.go index f6f920a79a..04fbb2a3e9 100644 --- a/pkg/command/server.go +++ b/pkg/command/server.go @@ -128,8 +128,11 @@ func Server(cfg *config.Config) cli.Command { defer cancel() + // register a micro gateway + // mapi.MicroGateway(ctx, cancel, &gr, cfg) + for _, fn := range register.Handlers { - fn(ctx, cancel, gr, cfg) + fn(ctx, cancel, &gr, cfg) } { diff --git a/pkg/command/webdav.go b/pkg/command/webdav.go index 219ab8b3fa..918c7e508e 100644 --- a/pkg/command/webdav.go +++ b/pkg/command/webdav.go @@ -32,7 +32,7 @@ func WebDAVCommand(cfg *config.Config) cli.Command { } // WebDAVHandler defines the direct server handler. -func WebDAVHandler(ctx context.Context, cancel context.CancelFunc, gr run.Group, cfg *config.Config) error { +func WebDAVHandler(ctx context.Context, cancel context.CancelFunc, gr *run.Group, cfg *config.Config) error { scfg := configureWebDAV(cfg) logger := command.NewLogger(scfg) m := metrics.New() @@ -73,6 +73,7 @@ func configureWebDAV(cfg *config.Config) *svcconfig.Config { cfg.WebDAV.Log.Pretty = cfg.Log.Pretty cfg.WebDAV.Log.Color = cfg.Log.Color cfg.WebDAV.Tracing.Enabled = false + cfg.WebDAV.HTTP.Addr = "localhost:9115" cfg.WebDAV.HTTP.Root = "/" return cfg.WebDAV diff --git a/pkg/micro/api/api.go b/pkg/micro/api/api.go new file mode 100644 index 0000000000..89a2d0baa6 --- /dev/null +++ b/pkg/micro/api/api.go @@ -0,0 +1,86 @@ +package api + +import ( + "context" + "fmt" + "net/http" + + "github.com/gorilla/mux" + "github.com/micro/go-micro" + ahandler "github.com/micro/go-micro/api/handler" + aapi "github.com/micro/go-micro/api/handler/api" + "github.com/micro/go-micro/api/resolver" + rrmicro "github.com/micro/go-micro/api/resolver/micro" + "github.com/micro/go-micro/api/router" + regRouter "github.com/micro/go-micro/api/router/registry" + httpapi "github.com/micro/go-micro/api/server/http" + "github.com/oklog/run" + "github.com/owncloud/ocis/pkg/config" + "github.com/rs/zerolog/log" +) + +// MicroGateway implements the handler interface +func MicroGateway(ctx context.Context, cancel context.CancelFunc, gr *run.Group, cfg *config.Config) error { + // create the gateway service + // var opts []server.Option + var h http.Handler + r := mux.NewRouter() + h = r + + // return version and list of services + r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + + if r.Method == "OPTIONS" { + return + } + + response := fmt.Sprintf(`{"version": "%s"}`, "[void]") + w.Write([]byte(response)) + }) + + // strip favicon.ico + r.HandleFunc("/favicon.ico", func(w http.ResponseWriter, r *http.Request) {}) + + var srvOpts []micro.Option + srvOpts = append(srvOpts, micro.Name("com.micro.api")) + + // initialise service + service := micro.NewService(srvOpts...) + + // resolver options + ropts := []resolver.Option{ + resolver.WithNamespace("com.micro"), + resolver.WithHandler("meta"), + } + + // default resolver + rr := rrmicro.NewResolver(ropts...) + + rt := regRouter.NewRouter( + router.WithNamespace("com.micro"), + router.WithHandler(aapi.Handler), + router.WithResolver(rr), + router.WithRegistry(service.Options().Registry), + ) + ap := aapi.NewHandler( + ahandler.WithNamespace("com.micro"), + ahandler.WithRouter(rt), + ahandler.WithService(service), + ) + r.PathPrefix("/").Handler(ap) + + api := httpapi.NewServer(":8111") + api.Init() + api.Handle("/", h) + + gr.Add(func() error { + return service.Run() + }, func(err error) { + log.Err(err) + + cancel() + }) + + // add it to the run group + return nil +} diff --git a/pkg/register/command.go b/pkg/register/command.go index a8da7ba440..a2d8cd63e4 100644 --- a/pkg/register/command.go +++ b/pkg/register/command.go @@ -20,7 +20,7 @@ var ( type Command func(*config.Config) cli.Command // Handler defines the register handler. -type Handler func(context.Context, context.CancelFunc, run.Group, *config.Config) error +type Handler func(context.Context, context.CancelFunc, *run.Group, *config.Config) error // AddCommand appends a command to Commands. func AddCommand(cmd Command) {