From c70a60d7bc7456a4cb42844fb8cc03d9ae4a5351 Mon Sep 17 00:00:00 2001 From: David Christofas Date: Wed, 20 Apr 2022 14:00:32 +0200 Subject: [PATCH] make app provider config similar to other services --- .../pkg/command/command.go} | 81 ++++++++++--------- extensions/appprovider/pkg/config/config.go | 67 +++++++++++++++ .../pkg/config/defaults/defaultconfig.go | 62 ++++++++++++++ extensions/storage/pkg/command/root.go | 2 +- ocis-pkg/config/config.go | 2 + ocis-pkg/config/defaultconfig.go | 2 + ocis/pkg/command/storageappprovider.go | 10 +-- ocis/pkg/runtime/service/service.go | 3 +- 8 files changed, 186 insertions(+), 43 deletions(-) rename extensions/{storage/pkg/command/appprovider.go => appprovider/pkg/command/command.go} (60%) create mode 100644 extensions/appprovider/pkg/config/config.go create mode 100644 extensions/appprovider/pkg/config/defaults/defaultconfig.go diff --git a/extensions/storage/pkg/command/appprovider.go b/extensions/appprovider/pkg/command/command.go similarity index 60% rename from extensions/storage/pkg/command/appprovider.go rename to extensions/appprovider/pkg/command/command.go index 54bf2e54c..43e7025b5 100644 --- a/extensions/storage/pkg/command/appprovider.go +++ b/extensions/appprovider/pkg/command/command.go @@ -9,11 +9,12 @@ import ( "github.com/cs3org/reva/v2/cmd/revad/runtime" "github.com/gofrs/uuid" "github.com/oklog/run" - "github.com/owncloud/ocis/extensions/storage/pkg/config" + "github.com/owncloud/ocis/extensions/appprovider/pkg/config" "github.com/owncloud/ocis/extensions/storage/pkg/server/debug" - "github.com/owncloud/ocis/extensions/storage/pkg/tracing" ociscfg "github.com/owncloud/ocis/ocis-pkg/config" + "github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/ocis-pkg/sync" + "github.com/owncloud/ocis/ocis-pkg/tracing" "github.com/thejerf/suture/v4" "github.com/urfave/cli/v2" ) @@ -23,12 +24,18 @@ func AppProvider(cfg *config.Config) *cli.Command { return &cli.Command{ Name: "app-provider", Usage: "start appprovider for providing apps", - Before: func(c *cli.Context) error { - return ParseConfig(c, cfg, "storage-app-provider") - }, + // Before: func(c *cli.Context) error { + // return ParseConfig(c, cfg, "storage-app-provider") + // }, Action: func(c *cli.Context) error { - logger := NewLogger(cfg) - tracing.Configure(cfg, logger) + logCfg := cfg.Logging + logger := log.NewLogger( + log.Level(logCfg.Level), + log.File(logCfg.File), + log.Pretty(logCfg.Pretty), + log.Color(logCfg.Color), + ) + tracing.Configure(cfg.Tracing.Enabled, cfg.Tracing.Type, logger) gr := run.Group{} ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -51,10 +58,12 @@ func AppProvider(cfg *config.Config) *cli.Command { debugServer, err := debug.Server( debug.Name(c.Command.Name+"-debug"), - debug.Addr(cfg.Reva.AppProvider.DebugAddr), + debug.Addr(cfg.Debug.Addr), debug.Logger(logger), debug.Context(ctx), - debug.Config(cfg), + debug.Pprof(cfg.Debug.Pprof), + debug.Zpages(cfg.Debug.Zpages), + debug.Token(cfg.Debug.Token), ) if err != nil { @@ -66,7 +75,7 @@ func AppProvider(cfg *config.Config) *cli.Command { cancel() }) - if !cfg.Reva.AppProvider.Supervised { + if !cfg.Supervised { sync.Trap(&gr, cancel) } @@ -80,38 +89,37 @@ func appProviderConfigFromStruct(c *cli.Context, cfg *config.Config) map[string] rcfg := map[string]interface{}{ "core": map[string]interface{}{ - "max_cpus": cfg.Reva.AppProvider.MaxCPUs, "tracing_enabled": cfg.Tracing.Enabled, "tracing_endpoint": cfg.Tracing.Endpoint, "tracing_collector": cfg.Tracing.Collector, "tracing_service_name": c.Command.Name, }, "shared": map[string]interface{}{ - "jwt_secret": cfg.Reva.JWTSecret, - "gatewaysvc": cfg.Reva.Gateway.Endpoint, - "skip_user_groups_in_token": cfg.Reva.SkipUserGroupsInToken, + "jwt_secret": cfg.JWTSecret, + "gatewaysvc": cfg.GatewayEndpoint, + "skip_user_groups_in_token": cfg.SkipUserGroupsInToken, }, "grpc": map[string]interface{}{ - "network": cfg.Reva.AppProvider.GRPCNetwork, - "address": cfg.Reva.AppProvider.GRPCAddr, + "network": cfg.GRPC.Protocol, + "address": cfg.GRPC.Addr, // TODO build services dynamically "services": map[string]interface{}{ "appprovider": map[string]interface{}{ - "gatewaysvc": cfg.Reva.Gateway.Endpoint, - "app_provider_url": cfg.Reva.AppProvider.ExternalAddr, - "driver": cfg.Reva.AppProvider.Driver, + // "gatewaysvc": cfg.Reva.Gateway.Endpoint, + "app_provider_url": cfg.ExternalAddr, + "driver": cfg.Driver, "drivers": map[string]interface{}{ "wopi": map[string]interface{}{ - "app_api_key": cfg.Reva.AppProvider.WopiDriver.AppAPIKey, - "app_desktop_only": cfg.Reva.AppProvider.WopiDriver.AppDesktopOnly, - "app_icon_uri": cfg.Reva.AppProvider.WopiDriver.AppIconURI, - "app_int_url": cfg.Reva.AppProvider.WopiDriver.AppInternalURL, - "app_name": cfg.Reva.AppProvider.WopiDriver.AppName, - "app_url": cfg.Reva.AppProvider.WopiDriver.AppURL, - "insecure_connections": cfg.Reva.AppProvider.WopiDriver.Insecure, - "iop_secret": cfg.Reva.AppProvider.WopiDriver.IopSecret, - "jwt_secret": cfg.Reva.AppProvider.WopiDriver.JWTSecret, - "wopi_url": cfg.Reva.AppProvider.WopiDriver.WopiURL, + "app_api_key": cfg.Drivers.WOPI.AppAPIKey, + "app_desktop_only": cfg.Drivers.WOPI.AppDesktopOnly, + "app_icon_uri": cfg.Drivers.WOPI.AppIconURI, + "app_int_url": cfg.Drivers.WOPI.AppInternalURL, + "app_name": cfg.Drivers.WOPI.AppName, + "app_url": cfg.Drivers.WOPI.AppURL, + "insecure_connections": cfg.Drivers.WOPI.Insecure, + "iop_secret": cfg.Drivers.WOPI.IopSecret, + "jwt_secret": cfg.JWTSecret, + "wopi_url": cfg.Drivers.WOPI.WopiURL, }, }, }, @@ -128,28 +136,29 @@ type AppProviderSutureService struct { // NewAppProvider creates a new store.AppProviderSutureService func NewAppProvider(cfg *ociscfg.Config) suture.Service { - cfg.Storage.Commons = cfg.Commons + cfg.AppProvider.Commons = cfg.Commons return AppProviderSutureService{ - cfg: cfg.Storage, + cfg: cfg.AppProvider, } } func (s AppProviderSutureService) Serve(ctx context.Context) error { - s.cfg.Reva.AppProvider.Context = ctx + // s.cfg.Reva.AppProvider.Context = ctx + cmd := AppProvider(s.cfg) f := &flag.FlagSet{} - cmdFlags := AppProvider(s.cfg).Flags + cmdFlags := cmd.Flags for k := range cmdFlags { if err := cmdFlags[k].Apply(f); err != nil { return err } } cliCtx := cli.NewContext(nil, f, nil) - if AppProvider(s.cfg).Before != nil { - if err := AppProvider(s.cfg).Before(cliCtx); err != nil { + if cmd.Before != nil { + if err := cmd.Before(cliCtx); err != nil { return err } } - if err := AppProvider(s.cfg).Action(cliCtx); err != nil { + if err := cmd.Action(cliCtx); err != nil { return err } diff --git a/extensions/appprovider/pkg/config/config.go b/extensions/appprovider/pkg/config/config.go new file mode 100644 index 000000000..72645eee8 --- /dev/null +++ b/extensions/appprovider/pkg/config/config.go @@ -0,0 +1,67 @@ +package config + +import "github.com/owncloud/ocis/ocis-pkg/shared" + +type Config struct { + *shared.Commons `yaml:"-"` + Service Service `yaml:"-"` + Tracing *Tracing `yaml:"tracing"` + Logging *Logging `yaml:"log"` + Debug Debug `yaml:"debug"` + Supervised bool + + GRPC GRPCConfig `yaml:"grpc"` + + JWTSecret string + GatewayEndpoint string + SkipUserGroupsInToken bool + ExternalAddr string + Driver string + Drivers Drivers +} + +type Tracing struct { + Enabled bool `yaml:"enabled" env:"OCIS_TRACING_ENABLED;APP_PROVIDER_TRACING_ENABLED" desc:"Activates tracing."` + Type string `yaml:"type" env:"OCIS_TRACING_TYPE;APP_PROVIDER_TRACING_TYPE"` + Endpoint string `yaml:"endpoint" env:"OCIS_TRACING_ENDPOINT;APP_PROVIDER_TRACING_ENDPOINT" desc:"The endpoint to the tracing collector."` + Collector string `yaml:"collector" env:"OCIS_TRACING_COLLECTOR;APP_PROVIDER_TRACING_COLLECTOR"` +} + +type Logging struct { + Level string `yaml:"level" env:"OCIS_LOG_LEVEL;APP_PROVIDER_LOG_LEVEL" desc:"The log level."` + Pretty bool `yaml:"pretty" env:"OCIS_LOG_PRETTY;APP_PROVIDER_LOG_PRETTY" desc:"Activates pretty log output."` + Color bool `yaml:"color" env:"OCIS_LOG_COLOR;APP_PROVIDER_LOG_COLOR" desc:"Activates colorized log output."` + File string `yaml:"file" env:"OCIS_LOG_FILE;APP_PROVIDER_LOG_FILE" desc:"The target log file."` +} + +type Service struct { + Name string `yaml:"-"` +} + +type Debug struct { + Addr string `yaml:"addr" env:"APP_PROVIDER_DEBUG_ADDR"` + Token string `yaml:"token" env:"APP_PROVIDER_DEBUG_TOKEN"` + Pprof bool `yaml:"pprof" env:"APP_PROVIDER_DEBUG_PPROF"` + Zpages bool `yaml:"zpages" env:"APP_PROVIDER_DEBUG_ZPAGES"` +} + +type GRPCConfig struct { + Addr string `yaml:"addr" env:"APP_PROVIDER_GRPC_ADDR" desc:"The address of the grpc service."` + Protocol string `yaml:"protocol" env:"APP_PROVIDER_GRPC_PROTOCOL" desc:"The transport protocol of the grpc service."` +} + +type Drivers struct { + WOPI WOPIDriver +} + +type WOPIDriver struct { + AppAPIKey string `yaml:"app_api_key"` + AppDesktopOnly bool `yaml:"app_desktop_only"` + AppIconURI string `yaml:"app_icon_uri"` + AppInternalURL string `yaml:"app_internal_url"` + AppName string `yaml:"app_name"` + AppURL string `yaml:"app_url"` + Insecure bool `yaml:"insecure"` + IopSecret string `yaml:"ipo_secret"` + WopiURL string `yaml:"wopi_url"` +} diff --git a/extensions/appprovider/pkg/config/defaults/defaultconfig.go b/extensions/appprovider/pkg/config/defaults/defaultconfig.go new file mode 100644 index 000000000..557512d7c --- /dev/null +++ b/extensions/appprovider/pkg/config/defaults/defaultconfig.go @@ -0,0 +1,62 @@ +package defaults + +import ( + "github.com/owncloud/ocis/extensions/appprovider/pkg/config" +) + +func FullDefaultConfig() *config.Config { + cfg := DefaultConfig() + + EnsureDefaults(cfg) + + return cfg +} + +func DefaultConfig() *config.Config { + return &config.Config{ + Debug: config.Debug{ + Addr: "127.0.0.1:9165", + Token: "", + Pprof: false, + Zpages: false, + }, + GRPC: config.GRPCConfig{ + Addr: "127.0.0.1:9164", + Protocol: "tcp", + }, + Service: config.Service{ + Name: "appprovider", + }, + GatewayEndpoint: "127.0.0.1:9142", + JWTSecret: "Pive-Fumkiu4", + Driver: "", + Drivers: config.Drivers{ + WOPI: config.WOPIDriver{}, + }, + } +} + +func EnsureDefaults(cfg *config.Config) { + // provide with defaults for shared logging, since we need a valid destination address for BindEnv. + if cfg.Logging == nil && cfg.Commons != nil && cfg.Commons.Log != nil { + cfg.Logging = &config.Logging{ + Level: cfg.Commons.Log.Level, + Pretty: cfg.Commons.Log.Pretty, + Color: cfg.Commons.Log.Color, + File: cfg.Commons.Log.File, + } + } else if cfg.Logging == nil { + cfg.Logging = &config.Logging{} + } + // provide with defaults for shared tracing, since we need a valid destination address for BindEnv. + if cfg.Tracing == nil && cfg.Commons != nil && cfg.Commons.Tracing != nil { + cfg.Tracing = &config.Tracing{ + Enabled: cfg.Commons.Tracing.Enabled, + Type: cfg.Commons.Tracing.Type, + Endpoint: cfg.Commons.Tracing.Endpoint, + Collector: cfg.Commons.Tracing.Collector, + } + } else if cfg.Tracing == nil { + cfg.Tracing = &config.Tracing{} + } +} diff --git a/extensions/storage/pkg/command/root.go b/extensions/storage/pkg/command/root.go index a0ea7559f..9fd46b414 100644 --- a/extensions/storage/pkg/command/root.go +++ b/extensions/storage/pkg/command/root.go @@ -16,7 +16,7 @@ func GetCommands(cfg *config.Config) cli.Commands { Gateway(cfg), // Users(cfg), // Groups(cfg), - AppProvider(cfg), + // AppProvider(cfg), // AuthBasic(cfg), AuthBearer(cfg), AuthMachine(cfg), diff --git a/ocis-pkg/config/config.go b/ocis-pkg/config/config.go index b3e239eba..7e1e0f68d 100644 --- a/ocis-pkg/config/config.go +++ b/ocis-pkg/config/config.go @@ -4,6 +4,7 @@ import ( "github.com/owncloud/ocis/ocis-pkg/shared" accounts "github.com/owncloud/ocis/extensions/accounts/pkg/config" + appprovider "github.com/owncloud/ocis/extensions/appprovider/pkg/config" audit "github.com/owncloud/ocis/extensions/audit/pkg/config" authbasic "github.com/owncloud/ocis/extensions/auth-basic/pkg/config" glauth "github.com/owncloud/ocis/extensions/glauth/pkg/config" @@ -79,6 +80,7 @@ type Config struct { AuthBasic *authbasic.Config `yaml:"auth_basic"` User *user.Config `yaml:"user"` Group *group.Config `yaml:"group"` + AppProvider *appprovider.Config `yaml:"app_provider"` Store *store.Config `yaml:"store"` Thumbnails *thumbnails.Config `yaml:"thumbnails"` WebDAV *webdav.Config `yaml:"webdav"` diff --git a/ocis-pkg/config/defaultconfig.go b/ocis-pkg/config/defaultconfig.go index 2e21b19d4..8e4f1fd55 100644 --- a/ocis-pkg/config/defaultconfig.go +++ b/ocis-pkg/config/defaultconfig.go @@ -2,6 +2,7 @@ package config import ( accounts "github.com/owncloud/ocis/extensions/accounts/pkg/config/defaults" + appprovider "github.com/owncloud/ocis/extensions/appprovider/pkg/config/defaults" audit "github.com/owncloud/ocis/extensions/audit/pkg/config/defaults" authbasic "github.com/owncloud/ocis/extensions/auth-basic/pkg/config/defaults" glauth "github.com/owncloud/ocis/extensions/glauth/pkg/config/defaults" @@ -52,5 +53,6 @@ func DefaultConfig() *Config { AuthBasic: authbasic.FullDefaultConfig(), User: user.FullDefaultConfig(), Group: group.FullDefaultConfig(), + AppProvider: appprovider.FullDefaultConfig(), } } diff --git a/ocis/pkg/command/storageappprovider.go b/ocis/pkg/command/storageappprovider.go index 39444d492..27cca4f4b 100644 --- a/ocis/pkg/command/storageappprovider.go +++ b/ocis/pkg/command/storageappprovider.go @@ -1,7 +1,7 @@ package command import ( - "github.com/owncloud/ocis/extensions/storage/pkg/command" + "github.com/owncloud/ocis/extensions/appprovider/pkg/command" "github.com/owncloud/ocis/ocis-pkg/config" "github.com/owncloud/ocis/ocis/pkg/register" "github.com/urfave/cli/v2" @@ -14,11 +14,11 @@ func StorageAppProviderCommand(cfg *config.Config) *cli.Command { Usage: "start storage app-provider service", Category: "extensions", //Flags: flagset.AppProviderWithConfig(cfg.Storage), - Before: func(ctx *cli.Context) error { - return ParseStorageCommon(ctx, cfg) - }, + // Before: func(ctx *cli.Context) error { + // return ParseStorageCommon(ctx, cfg) + // }, Action: func(c *cli.Context) error { - origCmd := command.AppProvider(cfg.Storage) + origCmd := command.AppProvider(cfg.AppProvider) return handleOriginalAction(c, origCmd) }, } diff --git a/ocis/pkg/runtime/service/service.go b/ocis/pkg/runtime/service/service.go index d37642f5a..75c4fd99f 100644 --- a/ocis/pkg/runtime/service/service.go +++ b/ocis/pkg/runtime/service/service.go @@ -20,6 +20,7 @@ import ( "github.com/olekukonko/tablewriter" accounts "github.com/owncloud/ocis/extensions/accounts/pkg/command" + appprovider "github.com/owncloud/ocis/extensions/appprovider/pkg/command" authbasic "github.com/owncloud/ocis/extensions/auth-basic/pkg/command" glauth "github.com/owncloud/ocis/extensions/glauth/pkg/command" graphExplorer "github.com/owncloud/ocis/extensions/graph-explorer/pkg/command" @@ -120,7 +121,7 @@ func NewService(options ...Option) (*Service, error) { s.ServicesRegistry["storage-users"] = storage.NewStorageUsers s.ServicesRegistry["storage-shares"] = storage.NewStorageShares s.ServicesRegistry["storage-public-link"] = storage.NewStoragePublicLink - s.ServicesRegistry["storage-appprovider"] = storage.NewAppProvider + s.ServicesRegistry["storage-appprovider"] = appprovider.NewAppProvider s.ServicesRegistry["notifications"] = notifications.NewSutureService // populate delayed services