10 "github.com/mjl-/bstore"
12 "github.com/mjl-/mox/mlog"
13 "github.com/mjl-/mox/mox-"
14 "github.com/mjl-/mox/moxvar"
18 ReportDBTypes = []any{Record{}}
21 // Accessed directly by tlsrptsend.
22 ResultDBTypes = []any{TLSResult{}, SuppressAddress{}}
26// Init opens and possibly initializes the databases.
28 if ReportDB != nil || ResultDB != nil {
29 return fmt.Errorf("already initialized")
32 log := mlog.New("tlsrptdb", nil)
35 ReportDB, err = openReportDB(mox.Shutdown, log)
37 return fmt.Errorf("opening report db: %v", err)
39 ResultDB, err = openResultDB(mox.Shutdown, log)
41 return fmt.Errorf("opening result db: %v", err)
46func openReportDB(ctx context.Context, log mlog.Log) (*bstore.DB, error) {
47 p := mox.DataDirPath("tlsrpt.db")
48 os.MkdirAll(filepath.Dir(p), 0770)
49 opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: moxvar.RegisterLogger(p, log.Logger)}
50 return bstore.Open(ctx, p, &opts, ReportDBTypes...)
53func openResultDB(ctx context.Context, log mlog.Log) (*bstore.DB, error) {
54 p := mox.DataDirPath("tlsrptresult.db")
55 os.MkdirAll(filepath.Dir(p), 0770)
56 opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: moxvar.RegisterLogger(p, log.Logger)}
57 return bstore.Open(ctx, p, &opts, ResultDBTypes...)
60// Close closes the database connections.
62 if err := ResultDB.Close(); err != nil {
63 return fmt.Errorf("closing result db: %w", err)
67 if err := ReportDB.Close(); err != nil {
68 return fmt.Errorf("closing report db: %w", err)