Skip to content

Commit 6b2f3b8

Browse files
authored
Merge pull request #3710 from abh/validate-key
fix(config): validate access_key_encryption at startup
2 parents ccaef54 + 8af4737 commit 6b2f3b8

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

util/config.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -969,11 +969,36 @@ func validate(value any) error {
969969
return nil
970970
}
971971

972+
func validateAccessKeyEncryption(key string) error {
973+
if key == "" {
974+
return nil
975+
}
976+
977+
encryption, err := base64.StdEncoding.DecodeString(key)
978+
if err != nil {
979+
return fmt.Errorf("access_key_encryption must be a valid base64 string: %w", err)
980+
}
981+
982+
switch len(encryption) {
983+
case 16, 24, 32:
984+
return nil
985+
default:
986+
return fmt.Errorf(
987+
"access_key_encryption has invalid decoded length %d bytes; AES requires 16, 24, or 32 bytes (use `openssl rand -base64 32` to generate a valid key)",
988+
len(encryption),
989+
)
990+
}
991+
}
992+
972993
func validateConfig() {
973994
err := validate(Config)
974995
if err != nil {
975996
panic(err)
976997
}
998+
999+
if err := validateAccessKeyEncryption(Config.AccessKeyEncryption); err != nil {
1000+
panic(err)
1001+
}
9771002
}
9781003

9791004
func loadEnvironmentToObject(obj any) error {

util/config_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,4 +417,21 @@ func TestValidateConfig(t *testing.T) {
417417
Config.Dialect = "someOtherDB"
418418
ensureConfigValidationFailure(t, "Dialect", Config.Dialect)
419419
Config.Dialect = testDbDialect
420+
421+
// AccessKeyEncryption: empty is allowed (no encryption)
422+
Config.AccessKeyEncryption = ""
423+
validateConfig()
424+
425+
// AccessKeyEncryption: valid 32-byte key
426+
Config.AccessKeyEncryption = testCookieHash
427+
validateConfig()
428+
429+
// AccessKeyEncryption: invalid base64
430+
Config.AccessKeyEncryption = "not-valid-base64!!!"
431+
ensureConfigValidationFailure(t, "AccessKeyEncryption", Config.AccessKeyEncryption)
432+
433+
// AccessKeyEncryption: valid base64 but wrong size (48 bytes)
434+
Config.AccessKeyEncryption = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
435+
ensureConfigValidationFailure(t, "AccessKeyEncryption", Config.AccessKeyEncryption)
436+
Config.AccessKeyEncryption = testCookieHash
420437
}

0 commit comments

Comments
 (0)