fix denied list in sqlite

This commit is contained in:
Henry 2021-03-19 12:28:14 +01:00
parent a9e7297f64
commit 36d46a8576
8 changed files with 143 additions and 141 deletions

View File

@ -247,9 +247,10 @@ func runroomsrv() error {
handlers.Databases{
Aliases: db.Aliases,
AuthFallback: db.AuthFallback,
Members: db.Members,
DeniedList: db.DeniedList,
Invites: db.Invites,
Notices: db.Notices,
Members: db.Members,
PinnedNotices: db.PinnedNotices,
},
)

View File

@ -60,10 +60,10 @@ type MembersService interface {
SetRole(context.Context, int64, Role) error
}
// DeniedListService changes the lists of people that are Denieded to get into the room
type DeniedListService interface {
// Add adds the feed to the list.
Add(context.Context, refs.FeedRef) error
// DeniedKeysService changes the lists of public keys that are not allowed to get into the room
type DeniedKeysService interface {
// Add adds the feed to the list, together with a comment for other members
Add(ctx context.Context, ref refs.FeedRef, comment string) error
// HasFeed returns true if a feed is on the list.
HasFeed(context.Context, refs.FeedRef) bool
@ -160,7 +160,7 @@ type NoticesService interface {
//go:generate counterfeiter -o mockdb/auth_fallback.go . AuthFallbackService
//go:generate counterfeiter -o mockdb/denied.go . DeniedListService
//go:generate counterfeiter -o mockdb/denied.go . DeniedKeysService
//go:generate counterfeiter -o mockdb/fixed_pages.go . PinnedNoticesService

View File

@ -9,12 +9,13 @@ import (
refs "go.mindeco.de/ssb-refs"
)
type FakeDeniedListService struct {
AddStub func(context.Context, refs.FeedRef) error
type FakeDeniedKeysService struct {
AddStub func(context.Context, refs.FeedRef, string) error
addMutex sync.RWMutex
addArgsForCall []struct {
arg1 context.Context
arg2 refs.FeedRef
arg3 string
}
addReturns struct {
result1 error
@ -101,19 +102,20 @@ type FakeDeniedListService struct {
invocationsMutex sync.RWMutex
}
func (fake *FakeDeniedListService) Add(arg1 context.Context, arg2 refs.FeedRef) error {
func (fake *FakeDeniedKeysService) Add(arg1 context.Context, arg2 refs.FeedRef, arg3 string) error {
fake.addMutex.Lock()
ret, specificReturn := fake.addReturnsOnCall[len(fake.addArgsForCall)]
fake.addArgsForCall = append(fake.addArgsForCall, struct {
arg1 context.Context
arg2 refs.FeedRef
}{arg1, arg2})
arg3 string
}{arg1, arg2, arg3})
stub := fake.AddStub
fakeReturns := fake.addReturns
fake.recordInvocation("Add", []interface{}{arg1, arg2})
fake.recordInvocation("Add", []interface{}{arg1, arg2, arg3})
fake.addMutex.Unlock()
if stub != nil {
return stub(arg1, arg2)
return stub(arg1, arg2, arg3)
}
if specificReturn {
return ret.result1
@ -121,26 +123,26 @@ func (fake *FakeDeniedListService) Add(arg1 context.Context, arg2 refs.FeedRef)
return fakeReturns.result1
}
func (fake *FakeDeniedListService) AddCallCount() int {
func (fake *FakeDeniedKeysService) AddCallCount() int {
fake.addMutex.RLock()
defer fake.addMutex.RUnlock()
return len(fake.addArgsForCall)
}
func (fake *FakeDeniedListService) AddCalls(stub func(context.Context, refs.FeedRef) error) {
func (fake *FakeDeniedKeysService) AddCalls(stub func(context.Context, refs.FeedRef, string) error) {
fake.addMutex.Lock()
defer fake.addMutex.Unlock()
fake.AddStub = stub
}
func (fake *FakeDeniedListService) AddArgsForCall(i int) (context.Context, refs.FeedRef) {
func (fake *FakeDeniedKeysService) AddArgsForCall(i int) (context.Context, refs.FeedRef, string) {
fake.addMutex.RLock()
defer fake.addMutex.RUnlock()
argsForCall := fake.addArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2
return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3
}
func (fake *FakeDeniedListService) AddReturns(result1 error) {
func (fake *FakeDeniedKeysService) AddReturns(result1 error) {
fake.addMutex.Lock()
defer fake.addMutex.Unlock()
fake.AddStub = nil
@ -149,7 +151,7 @@ func (fake *FakeDeniedListService) AddReturns(result1 error) {
}{result1}
}
func (fake *FakeDeniedListService) AddReturnsOnCall(i int, result1 error) {
func (fake *FakeDeniedKeysService) AddReturnsOnCall(i int, result1 error) {
fake.addMutex.Lock()
defer fake.addMutex.Unlock()
fake.AddStub = nil
@ -163,7 +165,7 @@ func (fake *FakeDeniedListService) AddReturnsOnCall(i int, result1 error) {
}{result1}
}
func (fake *FakeDeniedListService) GetByID(arg1 context.Context, arg2 int64) (roomdb.ListEntry, error) {
func (fake *FakeDeniedKeysService) GetByID(arg1 context.Context, arg2 int64) (roomdb.ListEntry, error) {
fake.getByIDMutex.Lock()
ret, specificReturn := fake.getByIDReturnsOnCall[len(fake.getByIDArgsForCall)]
fake.getByIDArgsForCall = append(fake.getByIDArgsForCall, struct {
@ -183,26 +185,26 @@ func (fake *FakeDeniedListService) GetByID(arg1 context.Context, arg2 int64) (ro
return fakeReturns.result1, fakeReturns.result2
}
func (fake *FakeDeniedListService) GetByIDCallCount() int {
func (fake *FakeDeniedKeysService) GetByIDCallCount() int {
fake.getByIDMutex.RLock()
defer fake.getByIDMutex.RUnlock()
return len(fake.getByIDArgsForCall)
}
func (fake *FakeDeniedListService) GetByIDCalls(stub func(context.Context, int64) (roomdb.ListEntry, error)) {
func (fake *FakeDeniedKeysService) GetByIDCalls(stub func(context.Context, int64) (roomdb.ListEntry, error)) {
fake.getByIDMutex.Lock()
defer fake.getByIDMutex.Unlock()
fake.GetByIDStub = stub
}
func (fake *FakeDeniedListService) GetByIDArgsForCall(i int) (context.Context, int64) {
func (fake *FakeDeniedKeysService) GetByIDArgsForCall(i int) (context.Context, int64) {
fake.getByIDMutex.RLock()
defer fake.getByIDMutex.RUnlock()
argsForCall := fake.getByIDArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2
}
func (fake *FakeDeniedListService) GetByIDReturns(result1 roomdb.ListEntry, result2 error) {
func (fake *FakeDeniedKeysService) GetByIDReturns(result1 roomdb.ListEntry, result2 error) {
fake.getByIDMutex.Lock()
defer fake.getByIDMutex.Unlock()
fake.GetByIDStub = nil
@ -212,7 +214,7 @@ func (fake *FakeDeniedListService) GetByIDReturns(result1 roomdb.ListEntry, resu
}{result1, result2}
}
func (fake *FakeDeniedListService) GetByIDReturnsOnCall(i int, result1 roomdb.ListEntry, result2 error) {
func (fake *FakeDeniedKeysService) GetByIDReturnsOnCall(i int, result1 roomdb.ListEntry, result2 error) {
fake.getByIDMutex.Lock()
defer fake.getByIDMutex.Unlock()
fake.GetByIDStub = nil
@ -228,7 +230,7 @@ func (fake *FakeDeniedListService) GetByIDReturnsOnCall(i int, result1 roomdb.Li
}{result1, result2}
}
func (fake *FakeDeniedListService) HasFeed(arg1 context.Context, arg2 refs.FeedRef) bool {
func (fake *FakeDeniedKeysService) HasFeed(arg1 context.Context, arg2 refs.FeedRef) bool {
fake.hasFeedMutex.Lock()
ret, specificReturn := fake.hasFeedReturnsOnCall[len(fake.hasFeedArgsForCall)]
fake.hasFeedArgsForCall = append(fake.hasFeedArgsForCall, struct {
@ -248,26 +250,26 @@ func (fake *FakeDeniedListService) HasFeed(arg1 context.Context, arg2 refs.FeedR
return fakeReturns.result1
}
func (fake *FakeDeniedListService) HasFeedCallCount() int {
func (fake *FakeDeniedKeysService) HasFeedCallCount() int {
fake.hasFeedMutex.RLock()
defer fake.hasFeedMutex.RUnlock()
return len(fake.hasFeedArgsForCall)
}
func (fake *FakeDeniedListService) HasFeedCalls(stub func(context.Context, refs.FeedRef) bool) {
func (fake *FakeDeniedKeysService) HasFeedCalls(stub func(context.Context, refs.FeedRef) bool) {
fake.hasFeedMutex.Lock()
defer fake.hasFeedMutex.Unlock()
fake.HasFeedStub = stub
}
func (fake *FakeDeniedListService) HasFeedArgsForCall(i int) (context.Context, refs.FeedRef) {
func (fake *FakeDeniedKeysService) HasFeedArgsForCall(i int) (context.Context, refs.FeedRef) {
fake.hasFeedMutex.RLock()
defer fake.hasFeedMutex.RUnlock()
argsForCall := fake.hasFeedArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2
}
func (fake *FakeDeniedListService) HasFeedReturns(result1 bool) {
func (fake *FakeDeniedKeysService) HasFeedReturns(result1 bool) {
fake.hasFeedMutex.Lock()
defer fake.hasFeedMutex.Unlock()
fake.HasFeedStub = nil
@ -276,7 +278,7 @@ func (fake *FakeDeniedListService) HasFeedReturns(result1 bool) {
}{result1}
}
func (fake *FakeDeniedListService) HasFeedReturnsOnCall(i int, result1 bool) {
func (fake *FakeDeniedKeysService) HasFeedReturnsOnCall(i int, result1 bool) {
fake.hasFeedMutex.Lock()
defer fake.hasFeedMutex.Unlock()
fake.HasFeedStub = nil
@ -290,7 +292,7 @@ func (fake *FakeDeniedListService) HasFeedReturnsOnCall(i int, result1 bool) {
}{result1}
}
func (fake *FakeDeniedListService) HasID(arg1 context.Context, arg2 int64) bool {
func (fake *FakeDeniedKeysService) HasID(arg1 context.Context, arg2 int64) bool {
fake.hasIDMutex.Lock()
ret, specificReturn := fake.hasIDReturnsOnCall[len(fake.hasIDArgsForCall)]
fake.hasIDArgsForCall = append(fake.hasIDArgsForCall, struct {
@ -310,26 +312,26 @@ func (fake *FakeDeniedListService) HasID(arg1 context.Context, arg2 int64) bool
return fakeReturns.result1
}
func (fake *FakeDeniedListService) HasIDCallCount() int {
func (fake *FakeDeniedKeysService) HasIDCallCount() int {
fake.hasIDMutex.RLock()
defer fake.hasIDMutex.RUnlock()
return len(fake.hasIDArgsForCall)
}
func (fake *FakeDeniedListService) HasIDCalls(stub func(context.Context, int64) bool) {
func (fake *FakeDeniedKeysService) HasIDCalls(stub func(context.Context, int64) bool) {
fake.hasIDMutex.Lock()
defer fake.hasIDMutex.Unlock()
fake.HasIDStub = stub
}
func (fake *FakeDeniedListService) HasIDArgsForCall(i int) (context.Context, int64) {
func (fake *FakeDeniedKeysService) HasIDArgsForCall(i int) (context.Context, int64) {
fake.hasIDMutex.RLock()
defer fake.hasIDMutex.RUnlock()
argsForCall := fake.hasIDArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2
}
func (fake *FakeDeniedListService) HasIDReturns(result1 bool) {
func (fake *FakeDeniedKeysService) HasIDReturns(result1 bool) {
fake.hasIDMutex.Lock()
defer fake.hasIDMutex.Unlock()
fake.HasIDStub = nil
@ -338,7 +340,7 @@ func (fake *FakeDeniedListService) HasIDReturns(result1 bool) {
}{result1}
}
func (fake *FakeDeniedListService) HasIDReturnsOnCall(i int, result1 bool) {
func (fake *FakeDeniedKeysService) HasIDReturnsOnCall(i int, result1 bool) {
fake.hasIDMutex.Lock()
defer fake.hasIDMutex.Unlock()
fake.HasIDStub = nil
@ -352,7 +354,7 @@ func (fake *FakeDeniedListService) HasIDReturnsOnCall(i int, result1 bool) {
}{result1}
}
func (fake *FakeDeniedListService) List(arg1 context.Context) ([]roomdb.ListEntry, error) {
func (fake *FakeDeniedKeysService) List(arg1 context.Context) ([]roomdb.ListEntry, error) {
fake.listMutex.Lock()
ret, specificReturn := fake.listReturnsOnCall[len(fake.listArgsForCall)]
fake.listArgsForCall = append(fake.listArgsForCall, struct {
@ -371,26 +373,26 @@ func (fake *FakeDeniedListService) List(arg1 context.Context) ([]roomdb.ListEntr
return fakeReturns.result1, fakeReturns.result2
}
func (fake *FakeDeniedListService) ListCallCount() int {
func (fake *FakeDeniedKeysService) ListCallCount() int {
fake.listMutex.RLock()
defer fake.listMutex.RUnlock()
return len(fake.listArgsForCall)
}
func (fake *FakeDeniedListService) ListCalls(stub func(context.Context) ([]roomdb.ListEntry, error)) {
func (fake *FakeDeniedKeysService) ListCalls(stub func(context.Context) ([]roomdb.ListEntry, error)) {
fake.listMutex.Lock()
defer fake.listMutex.Unlock()
fake.ListStub = stub
}
func (fake *FakeDeniedListService) ListArgsForCall(i int) context.Context {
func (fake *FakeDeniedKeysService) ListArgsForCall(i int) context.Context {
fake.listMutex.RLock()
defer fake.listMutex.RUnlock()
argsForCall := fake.listArgsForCall[i]
return argsForCall.arg1
}
func (fake *FakeDeniedListService) ListReturns(result1 []roomdb.ListEntry, result2 error) {
func (fake *FakeDeniedKeysService) ListReturns(result1 []roomdb.ListEntry, result2 error) {
fake.listMutex.Lock()
defer fake.listMutex.Unlock()
fake.ListStub = nil
@ -400,7 +402,7 @@ func (fake *FakeDeniedListService) ListReturns(result1 []roomdb.ListEntry, resul
}{result1, result2}
}
func (fake *FakeDeniedListService) ListReturnsOnCall(i int, result1 []roomdb.ListEntry, result2 error) {
func (fake *FakeDeniedKeysService) ListReturnsOnCall(i int, result1 []roomdb.ListEntry, result2 error) {
fake.listMutex.Lock()
defer fake.listMutex.Unlock()
fake.ListStub = nil
@ -416,7 +418,7 @@ func (fake *FakeDeniedListService) ListReturnsOnCall(i int, result1 []roomdb.Lis
}{result1, result2}
}
func (fake *FakeDeniedListService) RemoveFeed(arg1 context.Context, arg2 refs.FeedRef) error {
func (fake *FakeDeniedKeysService) RemoveFeed(arg1 context.Context, arg2 refs.FeedRef) error {
fake.removeFeedMutex.Lock()
ret, specificReturn := fake.removeFeedReturnsOnCall[len(fake.removeFeedArgsForCall)]
fake.removeFeedArgsForCall = append(fake.removeFeedArgsForCall, struct {
@ -436,26 +438,26 @@ func (fake *FakeDeniedListService) RemoveFeed(arg1 context.Context, arg2 refs.Fe
return fakeReturns.result1
}
func (fake *FakeDeniedListService) RemoveFeedCallCount() int {
func (fake *FakeDeniedKeysService) RemoveFeedCallCount() int {
fake.removeFeedMutex.RLock()
defer fake.removeFeedMutex.RUnlock()
return len(fake.removeFeedArgsForCall)
}
func (fake *FakeDeniedListService) RemoveFeedCalls(stub func(context.Context, refs.FeedRef) error) {
func (fake *FakeDeniedKeysService) RemoveFeedCalls(stub func(context.Context, refs.FeedRef) error) {
fake.removeFeedMutex.Lock()
defer fake.removeFeedMutex.Unlock()
fake.RemoveFeedStub = stub
}
func (fake *FakeDeniedListService) RemoveFeedArgsForCall(i int) (context.Context, refs.FeedRef) {
func (fake *FakeDeniedKeysService) RemoveFeedArgsForCall(i int) (context.Context, refs.FeedRef) {
fake.removeFeedMutex.RLock()
defer fake.removeFeedMutex.RUnlock()
argsForCall := fake.removeFeedArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2
}
func (fake *FakeDeniedListService) RemoveFeedReturns(result1 error) {
func (fake *FakeDeniedKeysService) RemoveFeedReturns(result1 error) {
fake.removeFeedMutex.Lock()
defer fake.removeFeedMutex.Unlock()
fake.RemoveFeedStub = nil
@ -464,7 +466,7 @@ func (fake *FakeDeniedListService) RemoveFeedReturns(result1 error) {
}{result1}
}
func (fake *FakeDeniedListService) RemoveFeedReturnsOnCall(i int, result1 error) {
func (fake *FakeDeniedKeysService) RemoveFeedReturnsOnCall(i int, result1 error) {
fake.removeFeedMutex.Lock()
defer fake.removeFeedMutex.Unlock()
fake.RemoveFeedStub = nil
@ -478,7 +480,7 @@ func (fake *FakeDeniedListService) RemoveFeedReturnsOnCall(i int, result1 error)
}{result1}
}
func (fake *FakeDeniedListService) RemoveID(arg1 context.Context, arg2 int64) error {
func (fake *FakeDeniedKeysService) RemoveID(arg1 context.Context, arg2 int64) error {
fake.removeIDMutex.Lock()
ret, specificReturn := fake.removeIDReturnsOnCall[len(fake.removeIDArgsForCall)]
fake.removeIDArgsForCall = append(fake.removeIDArgsForCall, struct {
@ -498,26 +500,26 @@ func (fake *FakeDeniedListService) RemoveID(arg1 context.Context, arg2 int64) er
return fakeReturns.result1
}
func (fake *FakeDeniedListService) RemoveIDCallCount() int {
func (fake *FakeDeniedKeysService) RemoveIDCallCount() int {
fake.removeIDMutex.RLock()
defer fake.removeIDMutex.RUnlock()
return len(fake.removeIDArgsForCall)
}
func (fake *FakeDeniedListService) RemoveIDCalls(stub func(context.Context, int64) error) {
func (fake *FakeDeniedKeysService) RemoveIDCalls(stub func(context.Context, int64) error) {
fake.removeIDMutex.Lock()
defer fake.removeIDMutex.Unlock()
fake.RemoveIDStub = stub
}
func (fake *FakeDeniedListService) RemoveIDArgsForCall(i int) (context.Context, int64) {
func (fake *FakeDeniedKeysService) RemoveIDArgsForCall(i int) (context.Context, int64) {
fake.removeIDMutex.RLock()
defer fake.removeIDMutex.RUnlock()
argsForCall := fake.removeIDArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2
}
func (fake *FakeDeniedListService) RemoveIDReturns(result1 error) {
func (fake *FakeDeniedKeysService) RemoveIDReturns(result1 error) {
fake.removeIDMutex.Lock()
defer fake.removeIDMutex.Unlock()
fake.RemoveIDStub = nil
@ -526,7 +528,7 @@ func (fake *FakeDeniedListService) RemoveIDReturns(result1 error) {
}{result1}
}
func (fake *FakeDeniedListService) RemoveIDReturnsOnCall(i int, result1 error) {
func (fake *FakeDeniedKeysService) RemoveIDReturnsOnCall(i int, result1 error) {
fake.removeIDMutex.Lock()
defer fake.removeIDMutex.Unlock()
fake.RemoveIDStub = nil
@ -540,7 +542,7 @@ func (fake *FakeDeniedListService) RemoveIDReturnsOnCall(i int, result1 error) {
}{result1}
}
func (fake *FakeDeniedListService) Invocations() map[string][][]interface{} {
func (fake *FakeDeniedKeysService) Invocations() map[string][][]interface{} {
fake.invocationsMutex.RLock()
defer fake.invocationsMutex.RUnlock()
fake.addMutex.RLock()
@ -564,7 +566,7 @@ func (fake *FakeDeniedListService) Invocations() map[string][][]interface{} {
return copiedInvocations
}
func (fake *FakeDeniedListService) recordInvocation(key string, args []interface{}) {
func (fake *FakeDeniedKeysService) recordInvocation(key string, args []interface{}) {
fake.invocationsMutex.Lock()
defer fake.invocationsMutex.Unlock()
if fake.invocations == nil {
@ -576,4 +578,4 @@ func (fake *FakeDeniedListService) recordInvocation(key string, args []interface
fake.invocations[key] = append(fake.invocations[key], args)
}
var _ roomdb.DeniedListService = new(FakeDeniedListService)
var _ roomdb.DeniedKeysService = new(FakeDeniedKeysService)

View File

@ -1,7 +1,5 @@
// SPDX-License-Identifier: MIT
// +build ignore
package sqlite
import (
@ -20,32 +18,25 @@ import (
)
// compiler assertion to ensure the struct fullfills the interface
var _ roomdb.DeniedListService = (*DeniedList)(nil)
var _ roomdb.DeniedKeysService = (*DeniedKeys)(nil)
// The DeniedList is backed by the members table
type DeniedList struct {
// The DeniedKeys is backed by the members table
type DeniedKeys struct {
db *sql.DB
}
// Add adds the feed to the list.
func (al DeniedList) Add(ctx context.Context, a refs.FeedRef) error {
// single insert transaction but this makes it easier to re-use in invites.Consume
return transact(al.db, func(tx *sql.Tx) error {
return al.add(ctx, tx, a)
})
}
// this add is not exported and for internal use with transactions.
func (al DeniedList) add(ctx context.Context, tx *sql.Tx, a refs.FeedRef) error {
func (dk DeniedKeys) Add(ctx context.Context, a refs.FeedRef, comment string) error {
// TODO: better valid
if _, err := refs.ParseFeedRef(a.Ref()); err != nil {
return err
}
var entry models.Member
var entry models.DeniedKey
entry.PubKey.FeedRef = a
entry.Comment = comment
err := entry.Insert(ctx, tx, boil.Whitelist("pub_key"))
err := entry.Insert(ctx, dk.db, boil.Whitelist("pub_key", "comment"))
if err != nil {
var sqlErr sqlite3.Error
if errors.As(err, &sqlErr) && sqlErr.ExtendedCode == sqlite3.ErrConstraintUnique {
@ -59,8 +50,8 @@ func (al DeniedList) add(ctx context.Context, tx *sql.Tx, a refs.FeedRef) error
}
// HasFeed returns true if a feed is on the list.
func (al DeniedList) HasFeed(ctx context.Context, h refs.FeedRef) bool {
_, err := models.DeniedLists(qm.Where("pub_key = ?", h.Ref())).One(ctx, al.db)
func (dk DeniedKeys) HasFeed(ctx context.Context, h refs.FeedRef) bool {
_, err := models.DeniedKeys(qm.Where("pub_key = ?", h.Ref())).One(ctx, dk.db)
if err != nil {
return false
}
@ -68,8 +59,8 @@ func (al DeniedList) HasFeed(ctx context.Context, h refs.FeedRef) bool {
}
// HasID returns true if a feed is on the list.
func (al DeniedList) HasID(ctx context.Context, id int64) bool {
_, err := models.FindDeniedList(ctx, al.db, id)
func (dk DeniedKeys) HasID(ctx context.Context, id int64) bool {
_, err := models.FindDeniedKey(ctx, dk.db, id)
if err != nil {
return false
}
@ -77,43 +68,45 @@ func (al DeniedList) HasID(ctx context.Context, id int64) bool {
}
// GetByID returns the entry if a feed with that ID is on the list.
func (al DeniedList) GetByID(ctx context.Context, id int64) (roomdb.ListEntry, error) {
var le roomdb.ListEntry
entry, err := models.FindDeniedList(ctx, al.db, id)
func (dk DeniedKeys) GetByID(ctx context.Context, id int64) (roomdb.ListEntry, error) {
var entry roomdb.ListEntry
found, err := models.FindDeniedKey(ctx, dk.db, id)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return le, roomdb.ErrNotFound
return entry, roomdb.ErrNotFound
}
return le, err
return entry, err
}
le.ID = entry.ID
le.PubKey = entry.PubKey.FeedRef
return le, nil
entry.ID = found.ID
entry.PubKey = found.PubKey.FeedRef
entry.Comment = found.Comment
entry.CreatedAt = found.CreatedAt
return entry, nil
}
// List returns a list of all the feeds.
func (al DeniedList) List(ctx context.Context) (roomdb.ListEntries, error) {
all, err := models.DeniedLists().All(ctx, al.db)
func (dk DeniedKeys) List(ctx context.Context) ([]roomdb.ListEntry, error) {
all, err := models.DeniedKeys().All(ctx, dk.db)
if err != nil {
return nil, err
}
n := len(all)
var asRefs = make(roomdb.ListEntries, len(all))
for i, Denieded := range all {
asRefs[i] = roomdb.ListEntry{
ID: Denieded.ID,
PubKey: Denieded.PubKey.FeedRef,
}
var lst = make([]roomdb.ListEntry, n)
for i, entry := range all {
lst[i].ID = entry.ID
lst[i].PubKey = entry.PubKey.FeedRef
lst[i].Comment = entry.Comment
lst[i].CreatedAt = entry.CreatedAt
}
return asRefs, nil
return lst, nil
}
// RemoveFeed removes the feed from the list.
func (al DeniedList) RemoveFeed(ctx context.Context, r refs.FeedRef) error {
entry, err := models.DeniedLists(qm.Where("pub_key = ?", r.Ref())).One(ctx, al.db)
func (dk DeniedKeys) RemoveFeed(ctx context.Context, r refs.FeedRef) error {
entry, err := models.DeniedKeys(qm.Where("pub_key = ?", r.Ref())).One(ctx, dk.db)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return roomdb.ErrNotFound
@ -121,7 +114,7 @@ func (al DeniedList) RemoveFeed(ctx context.Context, r refs.FeedRef) error {
return err
}
_, err = entry.Delete(ctx, al.db)
_, err = entry.Delete(ctx, dk.db)
if err != nil {
return err
}
@ -130,8 +123,8 @@ func (al DeniedList) RemoveFeed(ctx context.Context, r refs.FeedRef) error {
}
// RemoveID removes the feed from the list.
func (al DeniedList) RemoveID(ctx context.Context, id int64) error {
entry, err := models.FindDeniedList(ctx, al.db, id)
func (dk DeniedKeys) RemoveID(ctx context.Context, id int64) error {
entry, err := models.FindDeniedKey(ctx, dk.db, id)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return roomdb.ErrNotFound
@ -139,7 +132,7 @@ func (al DeniedList) RemoveID(ctx context.Context, id int64) error {
return err
}
_, err = entry.Delete(ctx, al.db)
_, err = entry.Delete(ctx, dk.db)
if err != nil {
return err
}

View File

@ -1,4 +1,4 @@
// +build ignore
// SPDX-License-Identifier: MIT
package sqlite
@ -8,6 +8,7 @@ import (
"os"
"path/filepath"
"testing"
"time"
"github.com/ssb-ngi-pointer/go-ssb-room/roomdb"
@ -17,7 +18,7 @@ import (
refs "go.mindeco.de/ssb-refs"
)
func TestDeniedList(t *testing.T) {
func TestDeniedKeys(t *testing.T) {
r := require.New(t)
ctx := context.Background()
@ -30,49 +31,54 @@ func TestDeniedList(t *testing.T) {
require.NoError(t, err)
tf := refs.FeedRef{ID: bytes.Repeat([]byte("fooo"), 8), Algo: "nope"}
err = db.DeniedList.Add(ctx, tf)
err = db.DeniedKeys.Add(ctx, tf, "wont work anyhow")
r.Error(err)
// looks ok at least
okFeed := refs.FeedRef{ID: bytes.Repeat([]byte("acab"), 8), Algo: refs.RefAlgoFeedSSB1}
err = db.DeniedList.Add(ctx, okFeed)
created := time.Now()
time.Sleep(time.Second / 2)
okFeed := refs.FeedRef{ID: bytes.Repeat([]byte("b44d"), 8), Algo: refs.RefAlgoFeedSSB1}
err = db.DeniedKeys.Add(ctx, okFeed, "be gone")
r.NoError(err)
// hack into the interface to get the concrete database/sql instance
sqlDB := db.DeniedList.(*DeniedList).db
sqlDB := db.DeniedKeys.db
count, err := models.DeniedLists().Count(ctx, sqlDB)
count, err := models.DeniedKeys().Count(ctx, sqlDB)
r.NoError(err)
r.EqualValues(count, 1)
lst, err := db.DeniedList.List(ctx)
lst, err := db.DeniedKeys.List(ctx)
r.NoError(err)
r.Len(lst, 1)
r.Equal(okFeed.Ref(), lst[0].PubKey.Ref())
r.Equal("be gone", lst[0].Comment)
r.True(lst[0].CreatedAt.After(created))
yes := db.DeniedList.HasFeed(ctx, okFeed)
yes := db.DeniedKeys.HasFeed(ctx, okFeed)
r.True(yes)
yes = db.DeniedList.HasFeed(ctx, tf)
yes = db.DeniedKeys.HasFeed(ctx, tf)
r.False(yes)
err = db.DeniedList.RemoveFeed(ctx, okFeed)
err = db.DeniedKeys.RemoveFeed(ctx, okFeed)
r.NoError(err)
count, err = models.DeniedLists().Count(ctx, sqlDB)
count, err = models.DeniedKeys().Count(ctx, sqlDB)
r.NoError(err)
r.EqualValues(count, 0)
lst, err = db.DeniedList.List(ctx)
lst, err = db.DeniedKeys.List(ctx)
r.NoError(err)
r.Len(lst, 0)
yes = db.DeniedList.HasFeed(ctx, okFeed)
yes = db.DeniedKeys.HasFeed(ctx, okFeed)
r.False(yes)
r.NoError(db.Close())
}
func TestDeniedListUnique(t *testing.T) {
func TestDeniedKeysUnique(t *testing.T) {
r := require.New(t)
ctx := context.Background()
@ -84,21 +90,21 @@ func TestDeniedListUnique(t *testing.T) {
db, err := Open(tr)
require.NoError(t, err)
feedA := refs.FeedRef{ID: bytes.Repeat([]byte("1312"), 8), Algo: refs.RefAlgoFeedSSB1}
err = db.DeniedList.Add(ctx, feedA)
feedA := refs.FeedRef{ID: bytes.Repeat([]byte("b33f"), 8), Algo: refs.RefAlgoFeedSSB1}
err = db.DeniedKeys.Add(ctx, feedA, "test comment")
r.NoError(err)
err = db.DeniedList.Add(ctx, feedA)
err = db.DeniedKeys.Add(ctx, feedA, "test comment")
r.Error(err)
lst, err := db.DeniedList.List(ctx)
lst, err := db.DeniedKeys.List(ctx)
r.NoError(err)
r.Len(lst, 1)
r.NoError(db.Close())
}
func TestDeniedListByID(t *testing.T) {
func TestDeniedKeysByID(t *testing.T) {
r := require.New(t)
ctx := context.Background()
@ -110,27 +116,27 @@ func TestDeniedListByID(t *testing.T) {
db, err := Open(tr)
require.NoError(t, err)
feedA := refs.FeedRef{ID: bytes.Repeat([]byte("1312"), 8), Algo: refs.RefAlgoFeedSSB1}
err = db.DeniedList.Add(ctx, feedA)
feedA := refs.FeedRef{ID: bytes.Repeat([]byte("b33f"), 8), Algo: refs.RefAlgoFeedSSB1}
err = db.DeniedKeys.Add(ctx, feedA, "nope")
r.NoError(err)
lst, err := db.DeniedList.List(ctx)
lst, err := db.DeniedKeys.List(ctx)
r.NoError(err)
r.Len(lst, 1)
yes := db.DeniedList.HasID(ctx, lst[0].ID)
yes := db.DeniedKeys.HasID(ctx, lst[0].ID)
r.True(yes)
yes = db.DeniedList.HasID(ctx, 666)
yes = db.DeniedKeys.HasID(ctx, 666)
r.False(yes)
err = db.DeniedList.RemoveID(ctx, 666)
err = db.DeniedKeys.RemoveID(ctx, 666)
r.Error(err)
r.EqualError(err, roomdb.ErrNotFound.Error())
err = db.DeniedList.RemoveID(ctx, lst[0].ID)
err = db.DeniedKeys.RemoveID(ctx, lst[0].ID)
r.NoError(err)
yes = db.DeniedList.HasID(ctx, lst[0].ID)
yes = db.DeniedKeys.HasID(ctx, lst[0].ID)
r.False(yes)
}

View File

@ -37,12 +37,12 @@ type Database struct {
Members Members
Aliases Aliases
Invites Invites
DeniedKeys DeniedKeys
PinnedNotices PinnedNotices
Notices Notices
Invites Invites
// DeniedList Denied
}
// Open looks for a database file 'fname'
@ -99,18 +99,14 @@ func Open(r repo.Interface) (*Database, error) {
admindb := &Database{
db: db,
// DeniedList: DeniedList{db},
Aliases: Aliases{db},
AuthFallback: AuthFallback{db},
PinnedNotices: PinnedNotices{db},
DeniedKeys: DeniedKeys{db},
Invites: Invites{db: db, members: ml},
Notices: Notices{db},
Members: ml,
Invites: Invites{
db: db,
members: ml,
},
Members: ml,
PinnedNotices: PinnedNotices{db},
}
return admindb, nil

View File

@ -81,6 +81,9 @@ type Invite struct {
type ListEntry struct {
ID int64
PubKey refs.FeedRef
CreatedAt time.Time
Comment string
}
// DBFeedRef wraps a feed reference and implements the SQL marshaling interfaces.

View File

@ -46,6 +46,7 @@ var HTMLTemplates = []string{
type Databases struct {
Aliases roomdb.AliasesService
AuthFallback roomdb.AuthFallbackService
DeniedList roomdb.DeniedListService
Invites roomdb.InvitesService
Notices roomdb.NoticesService
Members roomdb.MembersService