From da36ca8cdef51b65ddb8b0b418f4cb4a47abee65 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Thu, 4 Nov 2021 15:56:01 +0100 Subject: [PATCH] adjust flagsets --- accounts/pkg/flagset/flagset.go | 28 ---- glauth/pkg/command/root.go | 47 +----- glauth/pkg/command/server.go | 26 ++- glauth/pkg/config/config.go | 183 ++++++++++++++++----- glauth/pkg/config/env.go | 152 +++++++++++++++++ glauth/pkg/flagset/flagset.go | 279 -------------------------------- graph/pkg/command/server.go | 2 - graph/pkg/flagset/flagset.go | 135 ---------------- ocis-pkg/config/config.go | 4 +- ocis/pkg/command/glauth.go | 2 - 10 files changed, 315 insertions(+), 543 deletions(-) create mode 100644 glauth/pkg/config/env.go diff --git a/accounts/pkg/flagset/flagset.go b/accounts/pkg/flagset/flagset.go index 7633674a7..3815f0784 100644 --- a/accounts/pkg/flagset/flagset.go +++ b/accounts/pkg/flagset/flagset.go @@ -7,34 +7,6 @@ import ( "github.com/urfave/cli/v2" ) -// RootWithConfig applies cfg to the root flagset -func RootWithConfig(cfg *config.Config) []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: "log-level", - Usage: "Set logging level", - EnvVars: []string{"ACCOUNTS_LOG_LEVEL", "OCIS_LOG_LEVEL"}, - Destination: &cfg.Log.Level, - }, - &cli.BoolFlag{ - Name: "log-pretty", - Usage: "Enable pretty logging", - EnvVars: []string{"ACCOUNTS_LOG_PRETTY", "OCIS_LOG_PRETTY"}, - Destination: &cfg.Log.Pretty, - }, - &cli.BoolFlag{ - Name: "log-color", - Usage: "Enable colored logging", - EnvVars: []string{"ACCOUNTS_LOG_COLOR", "OCIS_LOG_COLOR"}, - Destination: &cfg.Log.Color, - }, - &cli.StringFlag{ - Name: "extensions", - Usage: "Run specific extensions during supervised mode", - }, - } -} - // UpdateAccountWithConfig applies update command flags to cfg func UpdateAccountWithConfig(cfg *config.Config, a *accounts.Account) []cli.Flag { if a.PasswordProfile == nil { diff --git a/glauth/pkg/command/root.go b/glauth/pkg/command/root.go index f5af7df62..711f78084 100644 --- a/glauth/pkg/command/root.go +++ b/glauth/pkg/command/root.go @@ -3,14 +3,11 @@ package command import ( "context" "os" - "strings" "github.com/owncloud/ocis/glauth/pkg/config" 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/version" - "github.com/spf13/viper" "github.com/thejerf/suture/v4" "github.com/urfave/cli/v2" ) @@ -67,46 +64,18 @@ func NewLogger(cfg *config.Config) log.Logger { ) } -// ParseConfig loads glauth configuration from Viper known paths. +// ParseConfig loads proxy configuration from known paths. func ParseConfig(c *cli.Context, cfg *config.Config) error { - sync.ParsingViperConfig.Lock() - defer sync.ParsingViperConfig.Unlock() - logger := NewLogger(cfg) - - viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) - viper.SetEnvPrefix("GLAUTH") - viper.AutomaticEnv() - - if c.IsSet("config-file") { - viper.SetConfigFile(c.String("config-file")) - } else { - viper.SetConfigName("glauth") - - viper.AddConfigPath("/etc/ocis") - viper.AddConfigPath("$HOME/.ocis") - viper.AddConfigPath("./config") + conf, err := ociscfg.BindSourcesToStructs("glauth", cfg) + if err != nil { + return err } - if err := viper.ReadInConfig(); err != nil { - switch err.(type) { - case viper.ConfigFileNotFoundError: - logger.Debug(). - Msg("no config found on preconfigured location") - case viper.UnsupportedConfigError: - logger.Fatal(). - Err(err). - Msg("unsupported config type") - default: - logger.Fatal(). - Err(err). - Msg("failed to read config") - } - } + // load all env variables relevant to the config in the current context. + conf.LoadOSEnv(config.GetEnv(), false) - if err := viper.Unmarshal(&cfg); err != nil { - logger.Fatal(). - Err(err). - Msg("failed to parse config") + if err = cfg.UnmapEnv(conf); err != nil { + return err } return nil diff --git a/glauth/pkg/command/server.go b/glauth/pkg/command/server.go index b3ae41e53..7716e8f9c 100644 --- a/glauth/pkg/command/server.go +++ b/glauth/pkg/command/server.go @@ -8,7 +8,6 @@ import ( "github.com/oklog/run" accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" "github.com/owncloud/ocis/glauth/pkg/config" - "github.com/owncloud/ocis/glauth/pkg/flagset" "github.com/owncloud/ocis/glauth/pkg/metrics" "github.com/owncloud/ocis/glauth/pkg/server/debug" "github.com/owncloud/ocis/glauth/pkg/server/glauth" @@ -24,24 +23,23 @@ func Server(cfg *config.Config) *cli.Command { return &cli.Command{ Name: "server", Usage: "Start integrated server", - Flags: flagset.ServerWithConfig(cfg), Before: func(ctx *cli.Context) error { - logger := NewLogger(cfg) if cfg.HTTP.Root != "/" { cfg.HTTP.Root = strings.TrimSuffix(cfg.HTTP.Root, "/") } - // StringSliceFlag doesn't support Destination - // UPDATE Destination on string flags supported. Wait for https://github.com/urfave/cli/pull/1078 to get to micro/cli - if len(ctx.StringSlice("backend-server")) > 0 { - cfg.Backend.Servers = ctx.StringSlice("backend-server") + + if err := ParseConfig(ctx, cfg); err != nil { + return err } - if len(ctx.StringSlice("fallback-server")) > 0 { - cfg.Fallback.Servers = ctx.StringSlice("fallback-server") - } - if !cfg.Supervised { - return ParseConfig(ctx, cfg) - } - logger.Debug().Strs("backend-server", ctx.StringSlice("backend-server")).Str("service", "glauth").Msg("ignoring config file parsing when running supervised") + + // TODO(refs) there is no cli flags anymore... + //if len(ctx.StringSlice("backend-server")) > 0 { + // cfg.Backend.Servers = ctx.StringSlice("backend-server") + //} + //if len(ctx.StringSlice("fallback-server")) > 0 { + // cfg.Fallback.Servers = ctx.StringSlice("fallback-server") + //} + return nil }, Action: func(c *cli.Context) error { diff --git a/glauth/pkg/config/config.go b/glauth/pkg/config/config.go index 0d88c318a..6380aa8c6 100644 --- a/glauth/pkg/config/config.go +++ b/glauth/pkg/config/config.go @@ -1,78 +1,86 @@ package config -import "context" +import ( + "context" + "fmt" + "path" + "reflect" + + gofig "github.com/gookit/config/v2" + "github.com/owncloud/ocis/ocis-pkg/config/defaults" +) // Log defines the available logging configuration. type Log struct { - Level string - Pretty bool - Color bool - File string + Level string `mapstructure:"level"` + Pretty bool `mapstructure:"pretty"` + Color bool `mapstructure:"color"` + File string `mapstructure:"file"` } // Debug defines the available debug configuration. type Debug struct { - Addr string - Token string - Pprof bool - Zpages bool + Addr string `mapstructure:"addr"` + Token string `mapstructure:"token"` + Pprof bool `mapstructure:"pprof"` + Zpages bool `mapstructure:"zpages"` } // HTTP defines the available http configuration. type HTTP struct { - Addr string - Namespace string - Root string + Addr string `mapstructure:"addr"` + Namespace string `mapstructure:"namespace"` + Root string `mapstructure:"root"` } // Tracing defines the available tracing configuration. type Tracing struct { - Enabled bool - Type string - Endpoint string - Collector string - Service string + Enabled bool `mapstructure:"enabled"` + Type string `mapstructure:"type"` + Endpoint string `mapstructure:"endpoint"` + Collector string `mapstructure:"collector"` + Service string `mapstructure:"service"` } // Ldap defined the available LDAP configuration. type Ldap struct { - Addr string - Enabled bool + Enabled bool `mapstructure:"enabled"` + Addr string `mapstructure:"addr"` } // Ldaps defined the available LDAPS configuration. type Ldaps struct { - Addr string - Enabled bool - Cert string - Key string + Addr string `mapstructure:"addr"` + Enabled bool `mapstructure:"enabled"` + Cert string `mapstructure:"cert"` + Key string `mapstructure:"key"` } // Backend defined the available backend configuration. type Backend struct { - Datastore string - BaseDN string - Insecure bool - NameFormat string - GroupFormat string - Servers []string - SSHKeyAttr string - UseGraphAPI bool + Datastore string `mapstructure:"datastore"` + BaseDN string `mapstructure:"base_dn"` + Insecure bool `mapstructure:"insecure"` + NameFormat string `mapstructure:"name_format"` + GroupFormat string `mapstructure:"group_format"` + Servers []string `mapstructure:"servers"` + SSHKeyAttr string `mapstructure:"ssh_key_attr"` + UseGraphAPI bool `mapstructure:"use_graph_api"` } // Config combines all available configuration parts. type Config struct { - File string - Log Log - Debug Debug - HTTP HTTP - Tracing Tracing - Ldap Ldap - Ldaps Ldaps - Backend Backend - Fallback Backend - Version string - RoleBundleUUID string + File string `mapstructure:"file"` + Log Log `mapstructure:"log"` + Debug Debug `mapstructure:"debug"` + HTTP HTTP `mapstructure:"http"` + Tracing Tracing `mapstructure:"tracing"` + Ldap Ldap `mapstructure:"ldap"` + Ldaps Ldaps `mapstructure:"ldaps"` + Backend Backend `mapstructure:"backend"` + Fallback Backend `mapstructure:"fallback"` + Version string `mapstructure:"version"` + RoleBundleUUID string `mapstructure:"role_bundle_uuid"` Context context.Context Supervised bool @@ -82,3 +90,94 @@ type Config struct { func New() *Config { return &Config{} } + +func DefaultConfig() *Config { + return &Config{ + Log: Log{}, + Debug: Debug{ + Addr: "127.0.0.1:9129", + }, + HTTP: HTTP{}, + Tracing: Tracing{ + Type: "jaeger", + Service: "glauth", + }, + Ldap: Ldap{ + Enabled: true, + Addr: "127.0.0.1:9125", + }, + Ldaps: Ldaps{ + Addr: "127.0.0.1:9126", + Enabled: true, + Cert: path.Join(defaults.BaseDataPath(), "ldap", "ldap.crt"), + Key: path.Join(defaults.BaseDataPath(), "ldap", "ldap.key"), + }, + Backend: Backend{ + Datastore: "accounts", + BaseDN: "dc=ocis,dc=test", + Insecure: false, + NameFormat: "cn", + GroupFormat: "ou", + Servers: nil, + SSHKeyAttr: "sshPublicKey", + UseGraphAPI: true, + }, + Fallback: Backend{ + Datastore: "", + BaseDN: "dc=ocis,dc=test", + Insecure: false, + NameFormat: "cn", + GroupFormat: "ou", + Servers: nil, + SSHKeyAttr: "sshPublicKey", + UseGraphAPI: true, + }, + RoleBundleUUID: "71881883-1768-46bd-a24d-a356a2afdf7f", // BundleUUIDRoleAdmin + } +} + +// GetEnv fetches a list of known env variables for this extension. It is to be used by gookit, as it provides a list +// with all the environment variables an extension supports. +func GetEnv() []string { + var r = make([]string, len(structMappings(&Config{}))) + for i := range structMappings(&Config{}) { + r = append(r, structMappings(&Config{})[i].EnvVars...) + } + + return r +} + +// UnmapEnv loads values from the gooconf.Config argument and sets them in the expected destination. +func (c *Config) UnmapEnv(gooconf *gofig.Config) error { + vals := structMappings(c) + for i := range vals { + for j := range vals[i].EnvVars { + // we need to guard against v != "" because this is the condition that checks that the value is set from the environment. + // the `ok` guard is not enough, apparently. + if v, ok := gooconf.GetValue(vals[i].EnvVars[j]); ok && v != "" { + + // get the destination type from destination + switch reflect.ValueOf(vals[i].Destination).Type().String() { + case "*bool": + r := gooconf.Bool(vals[i].EnvVars[j]) + *vals[i].Destination.(*bool) = r + case "*string": + r := gooconf.String(vals[i].EnvVars[j]) + *vals[i].Destination.(*string) = r + case "*int": + r := gooconf.Int(vals[i].EnvVars[j]) + *vals[i].Destination.(*int) = r + case "*float64": + // defaults to float64 + r := gooconf.Float(vals[i].EnvVars[j]) + *vals[i].Destination.(*float64) = r + default: + // it is unlikely we will ever get here. Let this serve more as a runtime check for when debugging. + return fmt.Errorf("invalid type for env var: `%v`", vals[i].EnvVars[j]) + } + } + } + } + + return nil +} diff --git a/glauth/pkg/config/env.go b/glauth/pkg/config/env.go new file mode 100644 index 000000000..ef48fdc5f --- /dev/null +++ b/glauth/pkg/config/env.go @@ -0,0 +1,152 @@ +package config + +type mapping struct { + EnvVars []string // name of the EnvVars var. + Destination interface{} // memory address of the original config value to modify. +} + +// structMappings binds a set of environment variables to a destination on cfg. +func structMappings(cfg *Config) []mapping { + return []mapping{ + { + EnvVars: []string{"GLAUTH_LOG_LEVEL", "OCIS_LOG_LEVEL"}, + Destination: &cfg.Log.Level, + }, + { + EnvVars: []string{"GLAUTH_LOG_PRETTY", "OCIS_LOG_PRETTY"}, + Destination: &cfg.Log.Pretty, + }, + { + EnvVars: []string{"GLAUTH_LOG_COLOR", "OCIS_LOG_COLOR"}, + Destination: &cfg.Log.Color, + }, + { + EnvVars: []string{"GLAUTH_LOG_FILE", "OCIS_LOG_FILE"}, + Destination: &cfg.Log.File, + }, + { + EnvVars: []string{"GLAUTH_CONFIG_FILE"}, + Destination: &cfg.File, + }, + { + EnvVars: []string{"GLAUTH_TRACING_ENABLED", "OCIS_TRACING_ENABLED"}, + Destination: &cfg.Tracing.Enabled, + }, + { + EnvVars: []string{"GLAUTH_TRACING_TYPE", "OCIS_TRACING_TYPE"}, + Destination: &cfg.Tracing.Type, + }, + { + EnvVars: []string{"GLAUTH_TRACING_ENDPOINT", "OCIS_TRACING_ENDPOINT"}, + Destination: &cfg.Tracing.Endpoint, + }, + { + EnvVars: []string{"GLAUTH_TRACING_COLLECTOR", "OCIS_TRACING_COLLECTOR"}, + Destination: &cfg.Tracing.Collector, + }, + { + EnvVars: []string{"GLAUTH_TRACING_SERVICE"}, + Destination: &cfg.Tracing.Service, + }, + { + EnvVars: []string{"GLAUTH_DEBUG_ADDR"}, + Destination: &cfg.Debug.Addr, + }, + { + EnvVars: []string{"GLAUTH_DEBUG_TOKEN"}, + Destination: &cfg.Debug.Token, + }, + { + EnvVars: []string{"GLAUTH_DEBUG_PPROF"}, + Destination: &cfg.Debug.Pprof, + }, + { + EnvVars: []string{"GLAUTH_DEBUG_ZPAGES"}, + Destination: &cfg.Debug.Zpages, + }, + { + EnvVars: []string{"GLAUTH_ROLE_BUNDLE_ID"}, + Destination: &cfg.RoleBundleUUID, + }, + { + EnvVars: []string{"GLAUTH_LDAP_ADDR"}, + Destination: &cfg.Ldap.Addr, + }, + { + EnvVars: []string{"GLAUTH_LDAP_ENABLED"}, + Destination: &cfg.Ldap.Enabled, + }, + { + EnvVars: []string{"GLAUTH_LDAPS_ADDR"}, + Destination: &cfg.Ldaps.Addr, + }, + { + EnvVars: []string{"GLAUTH_LDAPS_ENABLED"}, + Destination: &cfg.Ldaps.Enabled, + }, + { + EnvVars: []string{"GLAUTH_LDAPS_CERT"}, + Destination: &cfg.Ldaps.Cert, + }, + { + EnvVars: []string{"GLAUTH_LDAPS_KEY"}, + Destination: &cfg.Ldaps.Key, + }, + { + EnvVars: []string{"GLAUTH_BACKEND_BASEDN"}, + Destination: &cfg.Backend.BaseDN, + }, + { + EnvVars: []string{"GLAUTH_BACKEND_NAME_FORMAT"}, + Destination: &cfg.Backend.NameFormat, + }, + { + EnvVars: []string{"GLAUTH_BACKEND_GROUP_FORMAT"}, + Destination: &cfg.Backend.GroupFormat, + }, + { + EnvVars: []string{"GLAUTH_BACKEND_SSH_KEY_ATTR"}, + Destination: &cfg.Backend.SSHKeyAttr, + }, + { + EnvVars: []string{"GLAUTH_BACKEND_DATASTORE"}, + Destination: &cfg.Backend.Datastore, + }, + { + EnvVars: []string{"GLAUTH_BACKEND_INSECURE"}, + Destination: &cfg.Backend.Insecure, + }, + { + EnvVars: []string{"GLAUTH_BACKEND_USE_GRAPHAPI"}, + Destination: &cfg.Backend.UseGraphAPI, + }, + { + EnvVars: []string{"GLAUTH_FALLBACK_BASEDN"}, + Destination: &cfg.Fallback.BaseDN, + }, + { + EnvVars: []string{"GLAUTH_FALLBACK_NAME_FORMAT"}, + Destination: &cfg.Fallback.NameFormat, + }, + { + EnvVars: []string{"GLAUTH_FALLBACK_GROUP_FORMAT"}, + Destination: &cfg.Fallback.GroupFormat, + }, + { + EnvVars: []string{"GLAUTH_FALLBACK_SSH_KEY_ATTR"}, + Destination: &cfg.Fallback.SSHKeyAttr, + }, + { + EnvVars: []string{"GLAUTH_FALLBACK_DATASTORE"}, + Destination: &cfg.Fallback.Datastore, + }, + { + EnvVars: []string{"GLAUTH_FALLBACK_INSECURE"}, + Destination: &cfg.Fallback.Insecure, + }, + { + EnvVars: []string{"GLAUTH_FALLBACK_USE_GRAPHAPI"}, + Destination: &cfg.Fallback.UseGraphAPI, + }, + } +} diff --git a/glauth/pkg/flagset/flagset.go b/glauth/pkg/flagset/flagset.go index 9b939e0d4..447381384 100644 --- a/glauth/pkg/flagset/flagset.go +++ b/glauth/pkg/flagset/flagset.go @@ -1,38 +1,11 @@ package flagset import ( - "path" - "github.com/owncloud/ocis/glauth/pkg/config" - "github.com/owncloud/ocis/ocis-pkg/config/defaults" "github.com/owncloud/ocis/ocis-pkg/flags" "github.com/urfave/cli/v2" ) -// RootWithConfig applies cfg to the root flagset -func RootWithConfig(cfg *config.Config) []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: "log-level", - Usage: "Set logging level", - EnvVars: []string{"GLAUTH_LOG_LEVEL", "OCIS_LOG_LEVEL"}, - Destination: &cfg.Log.Level, - }, - &cli.BoolFlag{ - Name: "log-pretty", - Usage: "Enable pretty logging", - EnvVars: []string{"GLAUTH_LOG_PRETTY", "OCIS_LOG_PRETTY"}, - Destination: &cfg.Log.Pretty, - }, - &cli.BoolFlag{ - Name: "log-color", - Usage: "Enable colored logging", - EnvVars: []string{"GLAUTH_LOG_COLOR", "OCIS_LOG_COLOR"}, - Destination: &cfg.Log.Color, - }, - } -} - // HealthWithConfig applies cfg to the root flagset func HealthWithConfig(cfg *config.Config) []cli.Flag { return []cli.Flag{ @@ -45,255 +18,3 @@ func HealthWithConfig(cfg *config.Config) []cli.Flag { }, } } - -// ServerWithConfig applies cfg to the root flagset -func ServerWithConfig(cfg *config.Config) []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: "log-file", - Usage: "Enable log to file", - EnvVars: []string{"GLAUTH_LOG_FILE", "OCIS_LOG_FILE"}, - Destination: &cfg.Log.File, - }, - &cli.StringFlag{ - Name: "config-file", - Value: flags.OverrideDefaultString(cfg.File, ""), - Usage: "Path to config file", - EnvVars: []string{"GLAUTH_CONFIG_FILE"}, - Destination: &cfg.File, - }, - &cli.BoolFlag{ - Name: "tracing-enabled", - Usage: "Enable sending traces", - EnvVars: []string{"GLAUTH_TRACING_ENABLED", "OCIS_TRACING_ENABLED"}, - Destination: &cfg.Tracing.Enabled, - }, - &cli.StringFlag{ - Name: "tracing-type", - Value: flags.OverrideDefaultString(cfg.Tracing.Type, "jaeger"), - Usage: "Tracing backend type", - EnvVars: []string{"GLAUTH_TRACING_TYPE", "OCIS_TRACING_TYPE"}, - Destination: &cfg.Tracing.Type, - }, - &cli.StringFlag{ - Name: "tracing-endpoint", - Value: flags.OverrideDefaultString(cfg.Tracing.Endpoint, ""), - Usage: "Endpoint for the agent", - EnvVars: []string{"GLAUTH_TRACING_ENDPOINT", "OCIS_TRACING_ENDPOINT"}, - Destination: &cfg.Tracing.Endpoint, - }, - &cli.StringFlag{ - Name: "tracing-collector", - Value: flags.OverrideDefaultString(cfg.Tracing.Collector, ""), - Usage: "Endpoint for the collector", - EnvVars: []string{"GLAUTH_TRACING_COLLECTOR", "OCIS_TRACING_COLLECTOR"}, - Destination: &cfg.Tracing.Collector, - }, - &cli.StringFlag{ - Name: "tracing-service", - Value: flags.OverrideDefaultString(cfg.Tracing.Service, "glauth"), - Usage: "Service name for tracing", - EnvVars: []string{"GLAUTH_TRACING_SERVICE"}, - Destination: &cfg.Tracing.Service, - }, - &cli.StringFlag{ - Name: "debug-addr", - Value: flags.OverrideDefaultString(cfg.Debug.Addr, "127.0.0.1:9129"), - Usage: "Address to bind debug server", - EnvVars: []string{"GLAUTH_DEBUG_ADDR"}, - Destination: &cfg.Debug.Addr, - }, - &cli.StringFlag{ - Name: "debug-token", - Value: flags.OverrideDefaultString(cfg.Debug.Token, ""), - Usage: "Token to grant metrics access", - EnvVars: []string{"GLAUTH_DEBUG_TOKEN"}, - Destination: &cfg.Debug.Token, - }, - &cli.BoolFlag{ - Name: "debug-pprof", - Usage: "Enable pprof debugging", - EnvVars: []string{"GLAUTH_DEBUG_PPROF"}, - Destination: &cfg.Debug.Pprof, - }, - &cli.BoolFlag{ - Name: "debug-zpages", - Usage: "Enable zpages debugging", - EnvVars: []string{"GLAUTH_DEBUG_ZPAGES"}, - Destination: &cfg.Debug.Zpages, - }, - &cli.StringFlag{ - Name: "role-bundle-id", - Value: flags.OverrideDefaultString(cfg.RoleBundleUUID, "71881883-1768-46bd-a24d-a356a2afdf7f"), // BundleUUIDRoleAdmin - Usage: "roleid used to make internal grpc requests", - EnvVars: []string{"GLAUTH_ROLE_BUNDLE_ID"}, - Destination: &cfg.RoleBundleUUID, - }, - - &cli.StringFlag{ - Name: "ldap-addr", - Value: flags.OverrideDefaultString(cfg.Ldap.Addr, "127.0.0.1:9125"), - Usage: "Address to bind ldap server", - EnvVars: []string{"GLAUTH_LDAP_ADDR"}, - Destination: &cfg.Ldap.Addr, - }, - &cli.BoolFlag{ - Name: "ldap-enabled", - Value: flags.OverrideDefaultBool(cfg.Ldap.Enabled, true), - Usage: "Enable ldap server", - EnvVars: []string{"GLAUTH_LDAP_ENABLED"}, - Destination: &cfg.Ldap.Enabled, - }, - - &cli.StringFlag{ - Name: "ldaps-addr", - Value: flags.OverrideDefaultString(cfg.Ldaps.Addr, "127.0.0.1:9126"), - Usage: "Address to bind ldaps server", - EnvVars: []string{"GLAUTH_LDAPS_ADDR"}, - Destination: &cfg.Ldaps.Addr, - }, - &cli.BoolFlag{ - Name: "ldaps-enabled", - Value: flags.OverrideDefaultBool(cfg.Ldaps.Enabled, true), - Usage: "Enable ldaps server", - EnvVars: []string{"GLAUTH_LDAPS_ENABLED"}, - Destination: &cfg.Ldaps.Enabled, - }, - &cli.StringFlag{ - Name: "ldaps-cert", - Value: flags.OverrideDefaultString(cfg.Ldaps.Cert, path.Join(defaults.BaseDataPath(), "ldap", "ldap.crt")), - Usage: "path to ldaps certificate in PEM format", - EnvVars: []string{"GLAUTH_LDAPS_CERT"}, - Destination: &cfg.Ldaps.Cert, - }, - &cli.StringFlag{ - Name: "ldaps-key", - Value: flags.OverrideDefaultString(cfg.Ldaps.Key, path.Join(defaults.BaseDataPath(), "ldap", "ldap.key")), - Usage: "path to ldaps key in PEM format", - EnvVars: []string{"GLAUTH_LDAPS_KEY"}, - Destination: &cfg.Ldaps.Key, - }, - - // backend config - - &cli.StringFlag{ - Name: "backend-basedn", - Value: flags.OverrideDefaultString(cfg.Backend.BaseDN, "dc=ocis,dc=test"), - Usage: "base distinguished name to expose", - EnvVars: []string{"GLAUTH_BACKEND_BASEDN"}, - Destination: &cfg.Backend.BaseDN, - }, - &cli.StringFlag{ - Name: "backend-name-format", - Value: flags.OverrideDefaultString(cfg.Backend.NameFormat, "cn"), - Usage: "name attribute for entries to expose. typically cn or uid", - EnvVars: []string{"GLAUTH_BACKEND_NAME_FORMAT"}, - Destination: &cfg.Backend.NameFormat, - }, - &cli.StringFlag{ - Name: "backend-group-format", - Value: flags.OverrideDefaultString(cfg.Backend.GroupFormat, "ou"), - Usage: "name attribute for entries to expose. typically ou, cn or dc", - EnvVars: []string{"GLAUTH_BACKEND_GROUP_FORMAT"}, - Destination: &cfg.Backend.GroupFormat, - }, - &cli.StringFlag{ - Name: "backend-ssh-key-attr", - Value: flags.OverrideDefaultString(cfg.Backend.SSHKeyAttr, "sshPublicKey"), - Usage: "ssh key attribute for entries to expose", - EnvVars: []string{"GLAUTH_BACKEND_SSH_KEY_ATTR"}, - Destination: &cfg.Backend.SSHKeyAttr, - }, - &cli.StringFlag{ - Name: "backend-datastore", - Value: flags.OverrideDefaultString(cfg.Backend.Datastore, "accounts"), - // TODO bring back config / flat file support - Usage: "datastore to use as the backend. one of accounts, ldap or owncloud", - EnvVars: []string{"GLAUTH_BACKEND_DATASTORE"}, - Destination: &cfg.Backend.Datastore, - }, - &cli.BoolFlag{ - Name: "backend-insecure", - Value: flags.OverrideDefaultBool(cfg.Backend.Insecure, false), - Usage: "Allow insecure requests to the datastore", - EnvVars: []string{"GLAUTH_BACKEND_INSECURE"}, - Destination: &cfg.Backend.Insecure, - }, - &cli.StringSliceFlag{ - Name: "backend-server", - Value: cli.NewStringSlice(), - Usage: `--backend-server https://demo.owncloud.com/apps/graphapi/v1.0 [--backend-server "https://demo2.owncloud.com/apps/graphapi/v1.0"]`, - EnvVars: []string{"GLAUTH_BACKEND_SERVERS"}, - }, - &cli.BoolFlag{ - Name: "backend-use-graphapi", - Value: flags.OverrideDefaultBool(cfg.Backend.UseGraphAPI, true), - Usage: "use Graph API, only for owncloud datastore", - EnvVars: []string{"GLAUTH_BACKEND_USE_GRAPHAPI"}, - Destination: &cfg.Backend.UseGraphAPI, - }, - - // fallback config - - &cli.StringFlag{ - Name: "fallback-basedn", - Value: flags.OverrideDefaultString(cfg.Fallback.BaseDN, "dc=ocis,dc=test"), - Usage: "base distinguished name to expose", - EnvVars: []string{"GLAUTH_FALLBACK_BASEDN"}, - Destination: &cfg.Fallback.BaseDN, - }, - &cli.StringFlag{ - Name: "fallback-name-format", - Value: flags.OverrideDefaultString(cfg.Fallback.NameFormat, "cn"), - Usage: "name attribute for entries to expose. typically cn or uid", - EnvVars: []string{"GLAUTH_FALLBACK_NAME_FORMAT"}, - Destination: &cfg.Fallback.NameFormat, - }, - &cli.StringFlag{ - Name: "fallback-group-format", - Value: flags.OverrideDefaultString(cfg.Fallback.GroupFormat, "ou"), - Usage: "name attribute for entries to expose. typically ou, cn or dc", - EnvVars: []string{"GLAUTH_FALLBACK_GROUP_FORMAT"}, - Destination: &cfg.Fallback.GroupFormat, - }, - &cli.StringFlag{ - Name: "fallback-ssh-key-attr", - Value: flags.OverrideDefaultString(cfg.Fallback.SSHKeyAttr, "sshPublicKey"), - Usage: "ssh key attribute for entries to expose", - EnvVars: []string{"GLAUTH_FALLBACK_SSH_KEY_ATTR"}, - Destination: &cfg.Fallback.SSHKeyAttr, - }, - &cli.StringFlag{ - Name: "fallback-datastore", - Value: flags.OverrideDefaultString(cfg.Fallback.Datastore, ""), - // TODO bring back config / flat file support - Usage: "datastore to use as the fallback. one of accounts, ldap or owncloud", - EnvVars: []string{"GLAUTH_FALLBACK_DATASTORE"}, - Destination: &cfg.Fallback.Datastore, - }, - &cli.BoolFlag{ - Name: "fallback-insecure", - Value: flags.OverrideDefaultBool(cfg.Fallback.Insecure, false), - Usage: "Allow insecure requests to the datastore", - EnvVars: []string{"GLAUTH_FALLBACK_INSECURE"}, - Destination: &cfg.Fallback.Insecure, - }, - &cli.StringSliceFlag{ - Name: "fallback-server", - Value: cli.NewStringSlice("https://demo.owncloud.com/apps/graphapi/v1.0"), - Usage: `--fallback-server http://internal1.example.com [--fallback-server http://internal2.example.com]`, - EnvVars: []string{"GLAUTH_FALLBACK_SERVERS"}, - }, - &cli.BoolFlag{ - Name: "fallback-use-graphapi", - Value: flags.OverrideDefaultBool(cfg.Fallback.UseGraphAPI, true), - Usage: "use Graph API, only for owncloud datastore", - EnvVars: []string{"GLAUTH_FALLBACK_USE_GRAPHAPI"}, - Destination: &cfg.Fallback.UseGraphAPI, - }, - &cli.StringFlag{ - Name: "extensions", - Usage: "Run specific extensions during supervised mode. This flag is set by the runtime", - }, - } -} diff --git a/graph/pkg/command/server.go b/graph/pkg/command/server.go index 5e788db15..480adca30 100644 --- a/graph/pkg/command/server.go +++ b/graph/pkg/command/server.go @@ -6,7 +6,6 @@ import ( "github.com/oklog/run" "github.com/owncloud/ocis/graph/pkg/config" - "github.com/owncloud/ocis/graph/pkg/flagset" "github.com/owncloud/ocis/graph/pkg/metrics" "github.com/owncloud/ocis/graph/pkg/server/debug" "github.com/owncloud/ocis/graph/pkg/server/http" @@ -20,7 +19,6 @@ func Server(cfg *config.Config) *cli.Command { return &cli.Command{ Name: "server", Usage: "Start integrated server", - Flags: flagset.ServerWithConfig(cfg), Before: func(ctx *cli.Context) error { if cfg.HTTP.Root != "/" { cfg.HTTP.Root = strings.TrimSuffix(cfg.HTTP.Root, "/") diff --git a/graph/pkg/flagset/flagset.go b/graph/pkg/flagset/flagset.go index 39326e878..5216fcd1a 100644 --- a/graph/pkg/flagset/flagset.go +++ b/graph/pkg/flagset/flagset.go @@ -49,138 +49,3 @@ func HealthWithConfig(cfg *config.Config) []cli.Flag { }, } } - -// ServerWithConfig applies cfg to the root flagset -func ServerWithConfig(cfg *config.Config) []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: "log-file", - Usage: "Enable log to file", - EnvVars: []string{"GRAPH_LOG_FILE", "OCIS_LOG_FILE"}, - Destination: &cfg.Log.File, - }, - &cli.BoolFlag{ - Name: "tracing-enabled", - Usage: "Enable sending traces", - EnvVars: []string{"GRAPH_TRACING_ENABLED", "OCIS_TRACING_ENABLED"}, - Destination: &cfg.Tracing.Enabled, - }, - &cli.StringFlag{ - Name: "tracing-type", - Value: flags.OverrideDefaultString(cfg.Tracing.Type, "jaeger"), - Usage: "Tracing backend type", - EnvVars: []string{"GRAPH_TRACING_TYPE", "OCIS_TRACING_TYPE"}, - Destination: &cfg.Tracing.Type, - }, - &cli.StringFlag{ - Name: "tracing-endpoint", - Value: flags.OverrideDefaultString(cfg.Tracing.Endpoint, ""), - Usage: "Endpoint for the agent", - EnvVars: []string{"GRAPH_TRACING_ENDPOINT", "OCIS_TRACING_ENDPOINT"}, - Destination: &cfg.Tracing.Endpoint, - }, - &cli.StringFlag{ - Name: "tracing-collector", - Value: flags.OverrideDefaultString(cfg.Tracing.Collector, ""), - Usage: "Endpoint for the collector", - EnvVars: []string{"GRAPH_TRACING_COLLECTOR", "OCIS_TRACING_COLLECTOR"}, - Destination: &cfg.Tracing.Collector, - }, - &cli.StringFlag{ - Name: "tracing-service", - Value: flags.OverrideDefaultString(cfg.Tracing.Service, "graph"), - Usage: "Service name for tracing", - EnvVars: []string{"GRAPH_TRACING_SERVICE"}, - Destination: &cfg.Tracing.Service, - }, - &cli.StringFlag{ - Name: "debug-addr", - Value: flags.OverrideDefaultString(cfg.Debug.Addr, "127.0.0.1:9124"), - Usage: "Address to bind debug server", - EnvVars: []string{"GRAPH_DEBUG_ADDR"}, - Destination: &cfg.Debug.Addr, - }, - &cli.StringFlag{ - Name: "debug-token", - Value: flags.OverrideDefaultString(cfg.Debug.Token, ""), - Usage: "Token to grant metrics access", - EnvVars: []string{"GRAPH_DEBUG_TOKEN"}, - Destination: &cfg.Debug.Token, - }, - &cli.BoolFlag{ - Name: "debug-pprof", - Usage: "Enable pprof debugging", - EnvVars: []string{"GRAPH_DEBUG_PPROF"}, - Destination: &cfg.Debug.Pprof, - }, - &cli.BoolFlag{ - Name: "debug-zpages", - Usage: "Enable zpages debugging", - EnvVars: []string{"GRAPH_DEBUG_ZPAGES"}, - Destination: &cfg.Debug.Zpages, - }, - &cli.StringFlag{ - Name: "http-addr", - Value: flags.OverrideDefaultString(cfg.HTTP.Addr, "127.0.0.1:9120"), - Usage: "Address to bind http server", - EnvVars: []string{"GRAPH_HTTP_ADDR"}, - Destination: &cfg.HTTP.Addr, - }, - &cli.StringFlag{ - Name: "http-root", - Value: flags.OverrideDefaultString(cfg.HTTP.Root, "/graph"), - Usage: "Root path of http server", - EnvVars: []string{"GRAPH_HTTP_ROOT"}, - Destination: &cfg.HTTP.Root, - }, - &cli.StringFlag{ - Name: "http-namespace", - Value: flags.OverrideDefaultString(cfg.HTTP.Namespace, "com.owncloud.web"), - Usage: "Set the base namespace for the http service for service discovery", - EnvVars: []string{"GRAPH_HTTP_NAMESPACE"}, - Destination: &cfg.HTTP.Namespace, - }, - - &cli.StringFlag{ - Name: "spaces-webdav-base", - Value: flags.OverrideDefaultString(cfg.Spaces.WebDavBase, "https://localhost:9200"), - Usage: "spaces webdav base URL to use when rendering drive WabDAV URLs", - EnvVars: []string{"GRAPH_SPACES_WEBDAV_BASE", "OCIS_URL"}, - Destination: &cfg.Spaces.WebDavBase, - }, - &cli.StringFlag{ - Name: "spaces-webdav-path", - Value: flags.OverrideDefaultString(cfg.Spaces.WebDavPath, "/dav/spaces/"), - Usage: "spaces webdav path to use when rendering drive WabDAV URLs", - EnvVars: []string{"GRAPH_SPACES_WEBDAV_PATH"}, - Destination: &cfg.Spaces.WebDavPath, - }, - - &cli.StringFlag{ - Name: "default-space-quota", - Value: flags.OverrideDefaultString(cfg.Spaces.DefaultQuota, "1000000000"), - Usage: "default quota used for all spaces if no custom quota was given", - EnvVars: []string{"GRAPH_SPACES_DEFAULT_QUOTA"}, - Destination: &cfg.Spaces.DefaultQuota, - }, - - &cli.StringFlag{ - Name: "jwt-secret", - Value: flags.OverrideDefaultString(cfg.TokenManager.JWTSecret, "Pive-Fumkiu4"), - Usage: "Used to validate the reva access JWT, should equal reva's jwt-secret", - EnvVars: []string{"GRAPH_JWT_SECRET", "OCIS_JWT_SECRET"}, - Destination: &cfg.TokenManager.JWTSecret, - }, - &cli.StringFlag{ - Name: "reva-gateway-addr", - Value: flags.OverrideDefaultString(cfg.Reva.Address, "127.0.0.1:9142"), - Usage: "Address of REVA gateway endpoint", - EnvVars: []string{"REVA_GATEWAY"}, - Destination: &cfg.Reva.Address, - }, - &cli.StringFlag{ - Name: "extensions", - Usage: "Run specific extensions during supervised mode. This flag is set by the runtime", - }, - } -} diff --git a/ocis-pkg/config/config.go b/ocis-pkg/config/config.go index a2f8b5faf..5ed94a55f 100644 --- a/ocis-pkg/config/config.go +++ b/ocis-pkg/config/config.go @@ -115,8 +115,8 @@ type Config struct { func New() *Config { return &Config{ Accounts: accounts.DefaultConfig(), - GLAuth: glauth.New(), - Graph: graph.New(), + GLAuth: glauth.DefaultConfig(), + Graph: graph.DefaultConfig(), GraphExplorer: graphExplorer.New(), IDP: idp.New(), OCS: ocs.New(), diff --git a/ocis/pkg/command/glauth.go b/ocis/pkg/command/glauth.go index 6a69699e5..4b9dbade5 100644 --- a/ocis/pkg/command/glauth.go +++ b/ocis/pkg/command/glauth.go @@ -3,7 +3,6 @@ package command import ( "github.com/owncloud/ocis/glauth/pkg/command" svcconfig "github.com/owncloud/ocis/glauth/pkg/config" - "github.com/owncloud/ocis/glauth/pkg/flagset" "github.com/owncloud/ocis/ocis-pkg/config" "github.com/owncloud/ocis/ocis-pkg/version" "github.com/owncloud/ocis/ocis/pkg/register" @@ -16,7 +15,6 @@ func GLAuthCommand(cfg *config.Config) *cli.Command { Name: "glauth", Usage: "Start glauth server", Category: "Extensions", - Flags: flagset.ServerWithConfig(cfg.GLAuth), Before: func(ctx *cli.Context) error { return ParseConfig(ctx, cfg) },