diff --git a/command/server/config.go b/command/server/config.go index 744f57c035..617af886ff 100644 --- a/command/server/config.go +++ b/command/server/config.go @@ -4,7 +4,6 @@ import ( "encoding/json" "errors" "fmt" - "github.com/hashicorp/hcl/hcl/token" "io" "io/ioutil" "os" @@ -23,7 +22,7 @@ import ( // Config is the configuration for the vault server. type Config struct { - UnusedKeys map[string][]token.Pos `hcl:",unusedKeyPositions"` + UnusedKeys configutil.UnusedKeyMap `hcl:",unusedKeyPositions"` entConfig *configutil.SharedConfig `hcl:"-"` diff --git a/internalshared/configutil/config_util.go b/internalshared/configutil/config_util.go index ca108af5ae..fc527cc2af 100644 --- a/internalshared/configutil/config_util.go +++ b/internalshared/configutil/config_util.go @@ -3,30 +3,11 @@ package configutil import ( - "fmt" - "github.com/asaskevich/govalidator" "github.com/hashicorp/hcl/hcl/ast" - "github.com/hashicorp/hcl/hcl/token" - "github.com/hashicorp/vault/sdk/helper/strutil" ) type EntSharedConfig struct{} -type UnusedKeyMap map[string][]token.Pos - -type ConfigError struct { - Problem string - Position token.Pos -} - -func (c *ConfigError) String() string { - return fmt.Sprintf("%s at %s", c.Problem, c.Position.String()) -} - -type ValidatableConfig interface { - Validate() []ConfigError -} - func (ec *EntSharedConfig) ParseConfig(list *ast.ObjectList) error { return nil } @@ -34,41 +15,3 @@ func (ec *EntSharedConfig) ParseConfig(list *ast.ObjectList) error { func ParseEntropy(result *SharedConfig, list *ast.ObjectList, blockName string) error { return nil } - -// Creates the ConfigErrors for unused fields, which occur in various structs -func ValidateUnusedFields(unusedKeyPositions UnusedKeyMap, sourceFilePath string) []ConfigError { - if unusedKeyPositions == nil { - return nil - } - var errors []ConfigError - for field, positions := range unusedKeyPositions { - problem := fmt.Sprintf("unknown field %s found in configuration", field) - for _, pos := range positions { - if pos.Filename == "" && sourceFilePath != "" { - pos.Filename = sourceFilePath - } - errors = append(errors, ConfigError{ - Problem: problem, - Position: pos, - }) - } - } - return errors -} - -// UnusedFieldDifference returns all the keys in map a that are not present in map b, and also not present in foundKeys. -func UnusedFieldDifference(a, b UnusedKeyMap, foundKeys []string) UnusedKeyMap { - if a == nil { - return nil - } - if b == nil { - return a - } - res := make(UnusedKeyMap) - for k, v := range a { - if _, ok := b[k]; !ok && !strutil.StrListContainsCaseInsensitive(foundKeys, govalidator.UnderscoreToCamelCase(k)) { - res[k] = v - } - } - return res -} diff --git a/internalshared/configutil/lint.go b/internalshared/configutil/lint.go new file mode 100644 index 0000000000..943c5287f8 --- /dev/null +++ b/internalshared/configutil/lint.go @@ -0,0 +1,61 @@ +package configutil + +import ( + "fmt" + "github.com/asaskevich/govalidator" + "github.com/hashicorp/hcl/hcl/token" + "github.com/hashicorp/vault/sdk/helper/strutil" +) + +type UnusedKeyMap map[string][]token.Pos + +type ConfigError struct { + Problem string + Position token.Pos +} + +func (c *ConfigError) String() string { + return fmt.Sprintf("%s at %s", c.Problem, c.Position.String()) +} + +type ValidatableConfig interface { + Validate() []ConfigError +} + +// Creates the ConfigErrors for unused fields, which occur in various structs +func ValidateUnusedFields(unusedKeyPositions UnusedKeyMap, sourceFilePath string) []ConfigError { + if unusedKeyPositions == nil { + return nil + } + var errors []ConfigError + for field, positions := range unusedKeyPositions { + problem := fmt.Sprintf("unknown field %s found in configuration", field) + for _, pos := range positions { + if pos.Filename == "" && sourceFilePath != "" { + pos.Filename = sourceFilePath + } + errors = append(errors, ConfigError{ + Problem: problem, + Position: pos, + }) + } + } + return errors +} + +// UnusedFieldDifference returns all the keys in map a that are not present in map b, and also not present in foundKeys. +func UnusedFieldDifference(a, b UnusedKeyMap, foundKeys []string) UnusedKeyMap { + if a == nil { + return nil + } + if b == nil { + return a + } + res := make(UnusedKeyMap) + for k, v := range a { + if _, ok := b[k]; !ok && !strutil.StrListContainsCaseInsensitive(foundKeys, govalidator.UnderscoreToCamelCase(k)) { + res[k] = v + } + } + return res +}