Skip to content

Commit

Permalink
fix(config): don't require interpolated env except for start
Browse files Browse the repository at this point in the history
  • Loading branch information
soedirgo committed Mar 31, 2022
1 parent 72509c1 commit f8d5613
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 43 deletions.
6 changes: 3 additions & 3 deletions internal/start/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@ func Run() error {
if err := utils.AssertSupabaseCliIsSetUp(); err != nil {
return err
}

if err := utils.AssertDockerIsRunning(); err != nil {
return err
}

if err := utils.LoadConfig(); err != nil {
return err
}

if err := utils.InterpolateEnvInConfig(); err != nil {
return err
}
if err := utils.AssertSupabaseStartIsRunning(); err == nil {
return errors.New(utils.Aqua("supabase start") + " is already running. Try running " + utils.Aqua("supabase stop") + " first.")
}
Expand Down
88 changes: 48 additions & 40 deletions internal/utils/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,55 +213,63 @@ func LoadConfig() error {
Config.Auth.External = map[string]provider{}
}

maybeLoadEnv := func(s string) (string, error) {
matches := regexp.MustCompile(`^env\((.*)\)$`).FindStringSubmatch(s)
if len(matches) == 0 {
return s, nil
}

envName := matches[1]
value := os.Getenv(envName)
if value == "" {
return "", errors.New(`Error evaluating "env(` + envName + `)": environment variable ` + envName + " is unset.")
}

return value, nil
}

for _, ext := range authExternalProviders {
if _, ok := Config.Auth.External[ext]; !ok {
Config.Auth.External[ext] = provider{
Enabled: false,
ClientId: "",
Secret: "",
}
} else if Config.Auth.External[ext].Enabled {
if Config.Auth.External[ext].ClientId == "" {
return fmt.Errorf("Missing required field in config: auth.external.%s.client_id", ext)
} else {
v, err := maybeLoadEnv(Config.Auth.External[ext].ClientId)
if err != nil {
return err
}
Config.Auth.External[ext] = provider{
Enabled: true,
ClientId: v,
Secret: Config.Auth.External[ext].Secret,
}
}
}
}

return nil
}

func InterpolateEnvInConfig() error {
maybeLoadEnv := func(s string) (string, error) {
matches := regexp.MustCompile(`^env\((.*)\)$`).FindStringSubmatch(s)
if len(matches) == 0 {
return s, nil
}

envName := matches[1]
value := os.Getenv(envName)
if value == "" {
return "", errors.New(`Error evaluating "env(` + envName + `)": environment variable ` + envName + " is unset.")
}

return value, nil
}

for _, ext := range authExternalProviders {
if Config.Auth.External[ext].Enabled {
var clientId, secret string

if Config.Auth.External[ext].ClientId == "" {
return fmt.Errorf("Missing required field in config: auth.external.%s.client_id", ext)
} else {
v, err := maybeLoadEnv(Config.Auth.External[ext].ClientId)
if err != nil {
return err
}
if Config.Auth.External[ext].Secret == "" {
return fmt.Errorf("Missing required field in config: auth.external.%s.secret", ext)
} else {
v, err := maybeLoadEnv(Config.Auth.External[ext].Secret)
if err != nil {
return fmt.Errorf("failed to parse config file: %+v", err)
}
Config.Auth.External[ext] = provider{
Enabled: true,
ClientId: Config.Auth.External[ext].ClientId,
Secret: v,
}
clientId = v
}
if Config.Auth.External[ext].Secret == "" {
return fmt.Errorf("Missing required field in config: auth.external.%s.secret", ext)
} else {
v, err := maybeLoadEnv(Config.Auth.External[ext].Secret)
if err != nil {
return err
}
secret = v
}

Config.Auth.External[ext] = provider{
Enabled: true,
ClientId: clientId,
Secret: secret,
}
}
}
Expand Down

0 comments on commit f8d5613

Please sign in to comment.