X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/bcf8d387aaed911d955e1f26142caba785cd4e07..77c8223f5ddd64cff2b08d0857749644c474946f:/lib/config/load.go diff --git a/lib/config/load.go b/lib/config/load.go index be6181bbe9..7eb4039100 100644 --- a/lib/config/load.go +++ b/lib/config/load.go @@ -13,6 +13,7 @@ import ( "io" "io/ioutil" "os" + "regexp" "strings" "git.arvados.org/arvados.git/sdk/go/arvados" @@ -270,6 +271,9 @@ func (ldr *Loader) Load() (*arvados.Config, error) { // Check for known mistakes for id, cc := range cfg.Clusters { for _, err = range []error{ + ldr.checkToken(fmt.Sprintf("Clusters.%s.ManagementToken", id), cc.ManagementToken), + ldr.checkToken(fmt.Sprintf("Clusters.%s.SystemRootToken", id), cc.SystemRootToken), + ldr.checkToken(fmt.Sprintf("Clusters.%s.Collections.BlobSigningKey", id), cc.Collections.BlobSigningKey), checkKeyConflict(fmt.Sprintf("Clusters.%s.PostgreSQL.Connection", id), cc.PostgreSQL.Connection), ldr.checkEmptyKeepstores(cc), ldr.checkUnlistedKeepstores(cc), @@ -282,6 +286,20 @@ func (ldr *Loader) Load() (*arvados.Config, error) { return &cfg, nil } +var acceptableTokenRe = regexp.MustCompile(`^[a-zA-Z0-9]+$`) +var acceptableTokenLength = 32 + +func (ldr *Loader) checkToken(label, token string) error { + if token == "" { + ldr.Logger.Warnf("%s: secret token is not set (use %d+ random characters from a-z, A-Z, 0-9)", label, acceptableTokenLength) + } else if !acceptableTokenRe.MatchString(token) { + return fmt.Errorf("%s: unacceptable characters in token (only a-z, A-Z, 0-9 are acceptable)", label) + } else if len(token) < acceptableTokenLength { + ldr.Logger.Warnf("%s: token is too short (should be at least %d characters)", label, acceptableTokenLength) + } + return nil +} + func checkKeyConflict(label string, m map[string]string) error { saw := map[string]bool{} for k := range m {