feat(store): add SetWhitelistEnabled
This commit is contained in:
@@ -86,3 +86,18 @@ func (s *Store) ListWhitelist(account string, dir Direction) ([]string, error) {
|
|||||||
}
|
}
|
||||||
return out, rows.Err()
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user