fix(web): fallback to default secret when database setting is empty (#6189)

* fix(web): fallback to default secret when database setting is empty

* style(web): format setting_security_test.go with gofumpt
This commit is contained in:
Dan Liutko
2026-08-15 19:40:22 +05:00
committed by GitHub
parent 7ecd88b9e3
commit 0f14ce7551
2 changed files with 32 additions and 4 deletions
+7 -4
View File
@@ -664,10 +664,13 @@ func (s *SettingService) GetSubShowIdentityOnAllLinks() (bool, error) {
func (s *SettingService) GetSecret() ([]byte, error) {
secret, err := s.getString("secret")
if secret == defaultValueMap["secret"] {
err := s.saveSetting("secret", secret)
if err != nil {
logger.Warning("save secret failed:", err)
if secret == "" || secret == defaultValueMap["secret"] {
if secret == "" {
secret = defaultValueMap["secret"]
}
saveErr := s.saveSetting("secret", secret)
if saveErr != nil {
logger.Warning("save secret failed:", saveErr)
}
}
return []byte(secret), err
@@ -169,3 +169,28 @@ func TestVerifyTwoFactorCode(t *testing.T) {
t.Fatal("invalid code accepted")
}
}
func TestGetSecret_FallbacksOnEmptyDatabaseSetting(t *testing.T) {
setupSettingTestDB(t)
s := &SettingService{}
if err := s.saveSetting("secret", ""); err != nil {
t.Fatal(err)
}
secretBytes, err := s.GetSecret()
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
secret := string(secretBytes)
if len(secret) != 32 {
t.Fatalf("secret length = %d, want 32-byte non-empty string", len(secret))
}
persisted, err := s.getString("secret")
if err != nil {
t.Fatalf("failed to retrieve persisted secret: %v", err)
}
if persisted != secret {
t.Fatalf("persisted secret = %q, want %q", persisted, secret)
}
}