Add list allowed pubkeys nip 86 method

This commit is contained in:
Jon Staab
2025-09-26 16:11:21 -07:00
parent 0543b8a0f3
commit 07a5a07583
4 changed files with 41 additions and 6 deletions
-1
View File
@@ -108,7 +108,6 @@ See `justfile` for defined commands.
## TODO
- [ ] Add admin/owner/etc to list allowed pubkeys
- [ ] Watch configuration files and hot reload
- [ ] Free up resources after instance inactivity
- [ ] Admin/member lists
-4
View File
@@ -134,10 +134,6 @@ func (instance *Instance) HasAccess(pubkey nostr.PubKey) bool {
return true
}
if instance.Management.PubkeyIsBanned(pubkey) {
return false
}
filter := nostr.Filter{
Kinds: []nostr.Kind{AUTH_JOIN},
Authors: []nostr.PubKey{pubkey},
+40
View File
@@ -5,6 +5,7 @@ import (
"fiatjaf.com/nostr"
"fiatjaf.com/nostr/khatru"
"fiatjaf.com/nostr/nip86"
"fmt"
)
type ManagementStore struct {
@@ -162,6 +163,45 @@ func (m *ManagementStore) Enable(instance *Instance) {
return reasons, nil
}
instance.Relay.ManagementAPI.ListAllowedPubKeys = func(ctx context.Context) ([]nip86.PubKeyReason, error) {
reasons := make([]nip86.PubKeyReason, 0)
reasons = append(reasons, nip86.PubKeyReason{
PubKey: nostr.MustPubKeyFromHex(m.Config.Self.Pubkey),
Reason: "relay owner",
})
reasons = append(reasons, nip86.PubKeyReason{
PubKey: m.Config.Secret.Public(),
Reason: "relay self",
})
for name, role := range m.Config.Roles {
for _, pubkey := range role.Pubkeys {
reasons = append(reasons, nip86.PubKeyReason{
PubKey: nostr.MustPubKeyFromHex(pubkey),
Reason: fmt.Sprintf("assigned to role: %s", name),
})
}
}
filter := nostr.Filter{
Kinds: []nostr.Kind{AUTH_JOIN},
}
for event := range m.Events.QueryEvents(filter, 0) {
reasons = append(
reasons,
nip86.PubKeyReason{
PubKey: event.PubKey,
Reason: "joined via invite code",
},
)
}
return reasons, nil
}
instance.Relay.ManagementAPI.BanEvent = func(ctx context.Context, id nostr.ID, reason string) error {
instance.Events.DeleteEvent(id)
+1 -1
View File
@@ -162,4 +162,4 @@ func TestManagementStore_EventIsBanned_NotBanned(t *testing.T) {
if mgmt.EventIsBanned(eventID) {
t.Error("EventIsBanned() should return false for non-banned event")
}
}
}