Refactor options & env loading to respect order of execution
This commit is contained in:
+8
-7
@@ -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
@@ -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(),
|
||||
|
||||
@@ -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(),
|
||||
}
|
||||
}
|
||||
@@ -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]
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user