From 56ecdf246c774f1bdc4526b144f13de5d316e22c Mon Sep 17 00:00:00 2001 From: Steve Cliff Date: Sat, 27 Jun 2026 11:47:01 +0100 Subject: [PATCH] feat(store): add SetWhitelistEnabled --- internal/store/whitelist.go | 15 +++++++++++ internal/store/whitelist_enabled_test.go | 34 ++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 internal/store/whitelist_enabled_test.go diff --git a/internal/store/whitelist.go b/internal/store/whitelist.go index f60a1d4..8313f27 100644 --- a/internal/store/whitelist.go +++ b/internal/store/whitelist.go @@ -86,3 +86,18 @@ func (s *Store) ListWhitelist(account string, dir Direction) ([]string, error) { } return out, rows.Err() } + +// SetWhitelistEnabled toggles one account's per-direction whitelist-enabled +// flag, leaving the address list and all other fields untouched. +func (s *Store) SetWhitelistEnabled(account string, dir Direction, enabled bool) error { + col := "whitelist_in_enabled" + if dir == DirOut { + col = "whitelist_out_enabled" + } + id, err := s.accountID(account) + if err != nil { + return err + } + _, err = s.db.Exec(fmt.Sprintf("UPDATE accounts SET %s=? WHERE id=?", col), b2i(enabled), id) + return err +} diff --git a/internal/store/whitelist_enabled_test.go b/internal/store/whitelist_enabled_test.go new file mode 100644 index 0000000..c11f361 --- /dev/null +++ b/internal/store/whitelist_enabled_test.go @@ -0,0 +1,34 @@ +package store + +import ( + "path/filepath" + "testing" +) + +func TestSetWhitelistEnabled(t *testing.T) { + st, err := Open(filepath.Join(t.TempDir(), "e.db")) + if err != nil { + t.Fatalf("open: %v", err) + } + defer st.Close() + k := make([]byte, 32) + if err := st.InitKeys(k, k); err != nil { + t.Fatalf("InitKeys: %v", err) + } + if _, err := st.AddAccount(Account{Name: "a", Mode: "RO", IMAPHost: "h", IMAPPort: 993, IMAPSecurity: "tls", AuthType: "password", Username: "u@x.com"}); err != nil { + t.Fatalf("AddAccount: %v", err) + } + if err := st.SetWhitelistEnabled("a", DirIn, true); err != nil { + t.Fatalf("SetWhitelistEnabled: %v", err) + } + got, err := st.GetAccount("a") + if err != nil { + t.Fatalf("GetAccount: %v", err) + } + if !got.WhitelistInEnabled || got.WhitelistOutEnabled { + t.Fatalf("flags wrong: in=%v out=%v", got.WhitelistInEnabled, got.WhitelistOutEnabled) + } + if err := st.SetWhitelistEnabled("missing", DirIn, true); err == nil { + t.Fatal("enabling on a missing account must error") + } +}