diff --git a/pkg/acl/curating.go b/pkg/acl/curating.go index 6e98712..4ce2591 100644 --- a/pkg/acl/curating.go +++ b/pkg/acl/curating.go @@ -36,7 +36,7 @@ const ( type Curating struct { Ctx context.Context cfg *config.C - db *database.D + db database.Database curatingACL *database.CuratingACL owners [][]byte admins [][]byte @@ -56,9 +56,14 @@ func (c *Curating) Configure(cfg ...any) (err error) { switch cv := ca.(type) { case *config.C: c.cfg = cv - case *database.D: + case database.Database: c.db = cv - c.curatingACL = database.NewCuratingACL(cv) + // CuratingACL requires the concrete Badger database type + if d, ok := cv.(*database.D); ok { + c.curatingACL = database.NewCuratingACL(d) + } else { + log.W.F("curating ACL: database is not Badger, curating ACL features will be limited") + } case context.Context: c.Ctx = cv default: diff --git a/pkg/acl/follows.go b/pkg/acl/follows.go index 172769f..82f338d 100644 --- a/pkg/acl/follows.go +++ b/pkg/acl/follows.go @@ -35,7 +35,7 @@ import ( type Follows struct { Ctx context.Context cfg *config.C - *database.D + db database.Database pubs *publish.S followsMx sync.RWMutex admins [][]byte @@ -56,9 +56,9 @@ func (f *Follows) Configure(cfg ...any) (err error) { case *config.C: // log.D.F("setting ACL config: %v", c) f.cfg = c - case *database.D: + case database.Database: // log.D.F("setting ACL database: %s", c.Path()) - f.D = c + f.db = c case context.Context: // log.D.F("setting ACL context: %s", c.Value("id")) f.Ctx = c @@ -69,7 +69,7 @@ func (f *Follows) Configure(cfg ...any) (err error) { err = errorf.E("invalid type: %T", reflect.TypeOf(ca)) } } - if f.cfg == nil || f.D == nil { + if f.cfg == nil || f.db == nil { err = errorf.E("both config and database must be set") return } @@ -109,7 +109,7 @@ func (f *Follows) Configure(cfg ...any) (err error) { var sers types.Uint40s for _, idx := range idxs { var s types.Uint40s - if s, err = f.D.GetSerialsByRange(idx); chk.E(err) { + if s, err = f.db.GetSerialsByRange(idx); chk.E(err) { continue } sers = append(sers, s...) @@ -117,7 +117,7 @@ func (f *Follows) Configure(cfg ...any) (err error) { if len(sers) > 0 { for _, s := range sers { var ev *event.E - if ev, err = f.D.FetchEventBySerial(s); chk.E(err) { + if ev, err = f.db.FetchEventBySerial(s); chk.E(err) { continue } // log.I.F("admin follow list:\n%s", ev.Serialize()) @@ -268,14 +268,14 @@ func (f *Follows) adminRelays() (urls []string) { } var sers types.Uint40s for _, idx := range idxs { - s, err := f.D.GetSerialsByRange(idx) + s, err := f.db.GetSerialsByRange(idx) if chk.E(err) { continue } sers = append(sers, s...) } for _, s := range sers { - ev, err := f.D.FetchEventBySerial(s) + ev, err := f.db.FetchEventBySerial(s) if chk.E(err) || ev == nil { continue } @@ -663,7 +663,7 @@ func (f *Follows) processCollectedEvents(relayURL string, followListEvents, meta // Save follow list events to database and extract follows for pubkeyHex, ev := range latestFollowLists { - if _, err := f.D.SaveEvent(f.Ctx, ev); err != nil { + if _, err := f.db.SaveEvent(f.Ctx, ev); err != nil { if !strings.HasPrefix(err.Error(), "blocked:") { log.W.F("follows syncer: failed to save follow list from %s: %v", pubkeyHex, err) } @@ -682,7 +682,7 @@ func (f *Follows) processCollectedEvents(relayURL string, followListEvents, meta // Save metadata events to database for pubkeyHex, ev := range latestMetadata { - if _, err := f.D.SaveEvent(f.Ctx, ev); err != nil { + if _, err := f.db.SaveEvent(f.Ctx, ev); err != nil { if !strings.HasPrefix(err.Error(), "blocked:") { log.W.F("follows syncer: failed to save metadata from %s: %v", pubkeyHex, err) } @@ -695,7 +695,7 @@ func (f *Follows) processCollectedEvents(relayURL string, followListEvents, meta // Save relay list events to database for pubkeyHex, ev := range latestRelayLists { - if _, err := f.D.SaveEvent(f.Ctx, ev); err != nil { + if _, err := f.db.SaveEvent(f.Ctx, ev); err != nil { if !strings.HasPrefix(err.Error(), "blocked:") { log.W.F("follows syncer: failed to save relay list from %s: %v", pubkeyHex, err) } diff --git a/pkg/acl/managed.go b/pkg/acl/managed.go index b115f4c..6af5973 100644 --- a/pkg/acl/managed.go +++ b/pkg/acl/managed.go @@ -19,7 +19,7 @@ import ( type Managed struct { Ctx context.Context cfg *config.C - *database.D + db database.Database managedACL *database.ManagedACL owners [][]byte admins [][]byte @@ -33,16 +33,22 @@ func (m *Managed) Configure(cfg ...any) (err error) { switch c := ca.(type) { case *config.C: m.cfg = c - case *database.D: - m.D = c - m.managedACL = database.NewManagedACL(c) + case database.Database: + m.db = c + // ManagedACL requires the concrete Badger database type + // Type assertion to check if it's a Badger database + if d, ok := c.(*database.D); ok { + m.managedACL = database.NewManagedACL(d) + } else { + log.W.F("managed ACL: database is not Badger, managed ACL features will be limited") + } case context.Context: m.Ctx = c default: err = errorf.E("invalid type: %T", reflect.TypeOf(ca)) } } - if m.cfg == nil || m.D == nil { + if m.cfg == nil || m.db == nil { err = errorf.E("both config and database must be set") return } diff --git a/pkg/acl/managed_minimal_test.go b/pkg/acl/managed_minimal_test.go index dd7064d..c2006a5 100644 --- a/pkg/acl/managed_minimal_test.go +++ b/pkg/acl/managed_minimal_test.go @@ -33,7 +33,7 @@ func TestManagedACL_BasicFunctionality(t *testing.T) { managed := &Managed{ Ctx: ctx, cfg: cfg, - D: db, + db: db, managedACL: database.NewManagedACL(db), owners: [][]byte{[]byte("owner1")}, admins: [][]byte{[]byte("admin1")}, diff --git a/pkg/version/version b/pkg/version/version index 64756cd..258b831 100644 --- a/pkg/version/version +++ b/pkg/version/version @@ -1 +1 @@ -v0.53.0 +v0.53.1