package config func LoadBootstrap(configPath, secretsPath string) (*Config, error) { return loadFile(configPath, secretsPath, false) } func LoadCandidate(origin string, data []byte, secretsPath string) (*Config, error) { cfg, problems := loadBytes(origin, data) return withSecrets(cfg, problems, secretsPath, true) } func CheckSecrets(cfg *Config, secretsPath string) (Secrets, error) { vars, problems := readSecrets(secretsPath) var secrets Secrets if len(problems) == 0 { secrets, problems = checkSecrets(secretsPath, vars, cfg, true) } if len(problems) > 0 { sortProblems(problems) return Secrets{}, &Error{Problems: problems} } return secrets, nil } func exactSet(file string, vars map[string]secretLine, req map[string]bool) []Problem { var problems []Problem for name := range req { if _, ok := vars[name]; !ok { problems = append(problems, Problem{File: file, Key: name, Reason: reasonSecretsMissing}) } } for name, v := range vars { if !req[name] { problems = append(problems, Problem{File: file, Line: v.line, Key: name, Reason: reasonSecretsUnexpected}) } } return problems } func (c *Config) SameSource(o *Config) bool { if c == nil || o == nil { return c == o } return c.Source == o.Source && c.ConfigGit.source() == o.ConfigGit.source() } func (g *ConfigGit) source() [4]string { if g == nil { return [4]string{} } return [4]string{g.Remote, g.Branch, g.AllowedSigners, g.KnownHosts} }