diff --git a/app/app.go b/app/app.go index 075f899f4..95e99ef80 100644 --- a/app/app.go +++ b/app/app.go @@ -2,7 +2,9 @@ package app import ( "context" + "github.com/cortezaproject/corteza-server/auth/settings" + "github.com/cortezaproject/corteza-server/pkg/options" "github.com/cortezaproject/corteza-server/store" "github.com/go-chi/chi" "github.com/spf13/cobra" @@ -33,7 +35,7 @@ type ( } CortezaApp struct { - Opt *Options + Opt *options.Options lvl int Log *zap.Logger @@ -59,12 +61,11 @@ type ( ) func New() *CortezaApp { - app := &CortezaApp{ - Opt: NewOptions(), - lvl: bootLevelWaiting, - } - + app := &CortezaApp{lvl: bootLevelWaiting} app.InitCLI() - return app } + +func (app *CortezaApp) Options() *options.Options { + return app.Opt +} diff --git a/app/cli.go b/app/cli.go index c67a47b85..0257ca6eb 100644 --- a/app/cli.go +++ b/app/cli.go @@ -7,6 +7,8 @@ import ( authCommands "github.com/cortezaproject/corteza-server/auth/commands" federationCommands "github.com/cortezaproject/corteza-server/federation/commands" "github.com/cortezaproject/corteza-server/pkg/cli" + "github.com/cortezaproject/corteza-server/pkg/logger" + "github.com/cortezaproject/corteza-server/pkg/options" "github.com/cortezaproject/corteza-server/pkg/rbac" "github.com/cortezaproject/corteza-server/store" systemCommands "github.com/cortezaproject/corteza-server/system/commands" @@ -32,6 +34,12 @@ func (app *CortezaApp) InitCLI() { return fmt.Errorf("failed to load environmental variables: %w", err) } + logger.Init() + + // Environmental variables (from the env, files, see cli.LoadEnv) MUST be + // loaded at this point! + app.Opt = options.Init() + return nil }) @@ -83,7 +91,7 @@ func (app *CortezaApp) InitCLI() { serveCmd, upgradeCmd, provisionCmd, - authCommands.General(app, app.Opt.Auth), + authCommands.Command(app), federationCommands.Sync(app), cli.EnvCommand(), cli.VersionCommand(), diff --git a/app/options.go b/app/options.go deleted file mode 100644 index 75a9b9219..000000000 --- a/app/options.go +++ /dev/null @@ -1,57 +0,0 @@ -package app - -import ( - "github.com/cortezaproject/corteza-server/pkg/options" -) - -type ( - Options struct { - Environment options.EnvironmentOpt - ActionLog options.ActionLogOpt - SMTP options.SMTPOpt - Auth options.AuthOpt - HTTPClient options.HTTPClientOpt - DB options.DBOpt - Template options.TemplateOpt - Upgrade options.UpgradeOpt - Provision options.ProvisionOpt - Sentry options.SentryOpt - ObjStore options.ObjectStoreOpt - Corredor options.CorredorOpt - Monitor options.MonitorOpt - WaitFor options.WaitForOpt - HTTPServer options.HTTPServerOpt - Websocket options.WebsocketOpt - Eventbus options.EventbusOpt - Messagebus options.MessagebusOpt - Federation options.FederationOpt - SCIM options.SCIMOpt - Workflow options.WorkflowOpt - } -) - -func NewOptions() *Options { - return &Options{ - Environment: *options.Environment(), - ActionLog: *options.ActionLog(), - Auth: *options.Auth(), - SMTP: *options.SMTP(), - HTTPClient: *options.HTTPClient(), - DB: *options.DB(), - Template: *options.Template(), - Upgrade: *options.Upgrade(), - Provision: *options.Provision(), - Sentry: *options.Sentry(), - ObjStore: *options.ObjectStore(), - Corredor: *options.Corredor(), - Monitor: *options.Monitor(), - WaitFor: *options.WaitFor(), - HTTPServer: *options.HTTPServer(), - Websocket: *options.Websocket(), - Eventbus: *options.Eventbus(), - Messagebus: *options.Messagebus(), - Federation: *options.Federation(), - SCIM: *options.SCIM(), - Workflow: *options.Workflow(), - } -} diff --git a/auth/commands/assets.go b/auth/commands/assets.go index a5da26f7e..956c24d20 100644 --- a/auth/commands/assets.go +++ b/auth/commands/assets.go @@ -2,15 +2,16 @@ package commands import ( "embed" + "os" + "path" + "github.com/cortezaproject/corteza-server/auth" "github.com/cortezaproject/corteza-server/pkg/cli" "github.com/cortezaproject/corteza-server/pkg/options" "github.com/spf13/cobra" - "os" - "path" ) -func assets(opt options.AuthOpt) *cobra.Command { +func assets(opt *options.Options) *cobra.Command { cmd := &cobra.Command{ Use: "assets", Short: "Authentication flow assets (styling, images) and templates", @@ -21,7 +22,7 @@ func assets(opt options.AuthOpt) *cobra.Command { Short: "Exports embedded assets into provided path (must exists)", Args: cobra.MaximumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - assetsRoot := opt.AssetsPath + assetsRoot := opt.Auth.AssetsPath if len(args) > 0 { assetsRoot = args[0] } diff --git a/auth/commands/commands.go b/auth/commands/commands.go index 1aea9f589..219257d01 100644 --- a/auth/commands/commands.go +++ b/auth/commands/commands.go @@ -2,6 +2,7 @@ package commands import ( "context" + "github.com/cortezaproject/corteza-server/auth/external" "github.com/cortezaproject/corteza-server/pkg/auth" "github.com/cortezaproject/corteza-server/pkg/cli" @@ -14,6 +15,7 @@ import ( type ( serviceInitializer interface { InitServices(ctx context.Context) error + Options() *options.Options } ) @@ -24,7 +26,7 @@ func commandPreRunInitService(app serviceInitializer) func(*cobra.Command, []str } // Will perform OpenID connect auto-configuration -func General(app serviceInitializer, opt options.AuthOpt) *cobra.Command { +func Command(app serviceInitializer) *cobra.Command { var ( enableDiscoveredProvider bool skipValidationOnAutoDiscoveredProvider bool @@ -44,7 +46,7 @@ func General(app serviceInitializer, opt options.AuthOpt) *cobra.Command { ctx := auth.SetSuperUserContext(cli.Context()) _, err := external.RegisterOidcProvider( ctx, - opt, + app.Options().Auth, args[0], args[1], true, @@ -124,7 +126,7 @@ func General(app serviceInitializer, opt options.AuthOpt) *cobra.Command { autoDiscoverCmd, testEmails, jwtCmd, - assets(opt), + assets(app.Options()), ) return cmd diff --git a/pkg/cli/env.go b/pkg/cli/env.go index 22f0ecb71..a9c183818 100644 --- a/pkg/cli/env.go +++ b/pkg/cli/env.go @@ -21,7 +21,6 @@ func LoadEnv(pp ...string) error { if s, err := os.Stat(p); err != nil { return err } else if s.IsDir() { - //pp[i] = path.Join(p, ".env") chk := path.Join(p, ".env") if _, err = os.Stat(chk); err == nil { // make sure only .env files diff --git a/pkg/options/options.go b/pkg/options/options.go new file mode 100644 index 000000000..82cebfe17 --- /dev/null +++ b/pkg/options/options.go @@ -0,0 +1,53 @@ +package options + +type ( + Options struct { + Environment EnvironmentOpt + ActionLog ActionLogOpt + SMTP SMTPOpt + Auth AuthOpt + HTTPClient HTTPClientOpt + DB DBOpt + Template TemplateOpt + Upgrade UpgradeOpt + Provision ProvisionOpt + Sentry SentryOpt + ObjStore ObjectStoreOpt + Corredor CorredorOpt + Monitor MonitorOpt + WaitFor WaitForOpt + HTTPServer HTTPServerOpt + Websocket WebsocketOpt + Eventbus EventbusOpt + Messagebus MessagebusOpt + Federation FederationOpt + SCIM SCIMOpt + Workflow WorkflowOpt + } +) + +func Init() *Options { + return &Options{ + Environment: *Environment(), + ActionLog: *ActionLog(), + Auth: *Auth(), + SMTP: *SMTP(), + HTTPClient: *HTTPClient(), + DB: *DB(), + Template: *Template(), + Upgrade: *Upgrade(), + Provision: *Provision(), + Sentry: *Sentry(), + ObjStore: *ObjectStore(), + Corredor: *Corredor(), + Monitor: *Monitor(), + WaitFor: *WaitFor(), + HTTPServer: *HTTPServer(), + Websocket: *Websocket(), + Eventbus: *Eventbus(), + Messagebus: *Messagebus(), + Federation: *Federation(), + SCIM: *SCIM(), + Workflow: *Workflow(), + } +}