12 "github.com/mjl-/bstore"
14 "github.com/mjl-/mox/metrics"
15 "github.com/mjl-/mox/mlog"
16 "github.com/mjl-/mox/mox-"
17 "github.com/mjl-/mox/moxvar"
20// AuthDB and AuthDBTypes are exported for ../backup.go.
22var AuthDBTypes = []any{TLSPublicKey{}, LoginAttempt{}, LoginAttemptState{}}
24// Init opens auth.db and starts the login writer.
25func Init(ctx context.Context) error {
27 return fmt.Errorf("already initialized")
29 pkglog := mlog.New("store", nil)
30 p := mox.DataDirPath("auth.db")
31 os.MkdirAll(filepath.Dir(p), 0770)
32 opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: moxvar.RegisterLogger(p, pkglog.Logger)}
34 AuthDB, err = bstore.Open(ctx, p, &opts, AuthDBTypes...)
39 startLoginAttemptWriter()
48 mlog.New("store", nil).Error("unhandled panic in LoginAttemptCleanup", slog.Any("err", x))
50 metrics.PanicInc(metrics.Store)
54 t := time.NewTicker(24 * time.Hour)
56 err := LoginAttemptCleanup(ctx)
57 pkglog.Check(err, "cleaning up old historic login attempts")
70// Close closes auth.db and stops the login writer.
73 return fmt.Errorf("not open")
76 stopc := make(chan struct{})
77 writeLoginAttemptStop <- stopc