This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

spindle: acl db table

Signed-off-by: Seongmin Lee <git@boltless.me>

author
Seongmin Lee
date (Jul 29, 2026, 5:25 PM +0900) commit 9372be7e parent f0d8cd9e change-id lsolmxpu
+76 -46
+17
spindle/db/db.go
··· 270 270 return err 271 271 } 272 272 273 + if err := orm.RunMigration(conn, logger, "member-acl-table", func(tx *sql.Tx) error { 274 + _, err := tx.Exec(` 275 + CREATE TABLE members ( 276 + did TEXT PRIMARY KEY, 277 + blocked INTEGER DEFAULT 0 278 + ); 279 + 280 + insert or ignore into members (did) select subject from spindle_members; 281 + insert or ignore into members (did) select did from spindle_members; 282 + 283 + drop table spindle_members; 284 + `) 285 + return err 286 + }); err != nil { 287 + return err 288 + } 289 + 273 290 return nil 274 291 } 275 292
-44
spindle/db/known_dids.go
··· 1 - package db 2 - 3 - func AddDid(q DBTX, did string) error { 4 - _, err := q.Exec(`insert or ignore into known_dids (did) values (?)`, did) 5 - return err 6 - } 7 - 8 - func RemoveDid(q DBTX, did string) error { 9 - _, err := q.Exec(`delete from known_dids where did = ?`, did) 10 - return err 11 - } 12 - 13 - func (d *DB) GetAllDids() ([]string, error) { 14 - var dids []string 15 - 16 - rows, err := d.Query(`select did from known_dids`) 17 - if err != nil { 18 - return nil, err 19 - } 20 - defer rows.Close() 21 - 22 - for rows.Next() { 23 - var did string 24 - if err := rows.Scan(&did); err != nil { 25 - return nil, err 26 - } 27 - dids = append(dids, did) 28 - } 29 - 30 - if err := rows.Err(); err != nil { 31 - return nil, err 32 - } 33 - 34 - return dids, nil 35 - } 36 - 37 - func (d *DB) HasKnownDids() bool { 38 - var count int 39 - err := d.QueryRow(`select count(*) from known_dids`).Scan(&count) 40 - if err != nil { 41 - return false 42 - } 43 - return count > 0 44 - }
+57
spindle/db/members.go
··· 1 + package db 2 + 3 + import ( 4 + "context" 5 + "database/sql" 6 + "errors" 7 + 8 + "github.com/bluesky-social/indigo/atproto/syntax" 9 + ) 10 + 11 + func (d *DB) ListAllowedMembers() ([]syntax.DID, error) { 12 + rows, err := d.Query(`select did from members where blocked = 0`) 13 + if err != nil { 14 + return nil, err 15 + } 16 + defer rows.Close() 17 + 18 + var dids []syntax.DID 19 + for rows.Next() { 20 + var did syntax.DID 21 + if err := rows.Scan(&did); err != nil { 22 + return nil, err 23 + } 24 + dids = append(dids, did) 25 + } 26 + 27 + return dids, rows.Err() 28 + } 29 + 30 + // IsAllowedMember reports whether did is known and unblocked. Unknown DIDs get fallback. 31 + func (d *DB) IsAllowedMember(ctx context.Context, did syntax.DID, fallback bool) (bool, error) { 32 + var blocked bool 33 + err := d.QueryRowContext(ctx, `select blocked from members where did = ?`, did).Scan(&blocked) 34 + if errors.Is(err, sql.ErrNoRows) { 35 + return fallback, nil 36 + } 37 + if err != nil { 38 + return false, err 39 + } 40 + return !blocked, nil 41 + } 42 + 43 + func (d *DB) AllowMember(ctx context.Context, did syntax.DID) error { 44 + return d.UpsertMember(ctx, did, false) 45 + } 46 + 47 + func (d *DB) BlockMember(ctx context.Context, did syntax.DID) error { 48 + return d.UpsertMember(ctx, did, true) 49 + } 50 + 51 + func (d *DB) UpsertMember(ctx context.Context, did syntax.DID, block bool) error { 52 + _, err := d.ExecContext(ctx, ` 53 + insert into members (did, blocked) values (?, ?) 54 + on conflict(did) do update set blocked = excluded.blocked 55 + `, did, block) 56 + return err 57 + }
+2 -2
spindle/server.go
··· 125 125 jc.ExemptCollection(tangled.RepoPullNSID) 126 126 127 127 // Check if the spindle knows about any Dids; 128 - dids, err := d.GetAllDids() 128 + dids, err := d.ListAllowedMembers() 129 129 if err != nil { 130 130 return nil, fmt.Errorf("failed to get all dids: %w", err) 131 131 } 132 132 for _, d := range dids { 133 - jc.AddDid(d) 133 + jc.AddDid(d.String()) 134 134 } 135 135 136 136 knownRepos, err := d.AllRepos()