Refactor options & env loading to respect order of execution

This commit is contained in:
Denis Arh
2021-06-29 13:44:46 +02:00
parent a94e39b393
commit a229d0ec5f
7 changed files with 80 additions and 73 deletions
+8 -7
View File
@@ -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
}
+9 -1
View File
@@ -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(),
-57
View File
@@ -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(),
}
}
+5 -4
View File
@@ -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]
}
+5 -3
View File
@@ -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
-1
View File
@@ -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
+53
View File
@@ -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(),
}
}