From 213ce1694dd1ebb8c8ecc32e780f481cc1e92115 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Tue, 9 Jun 2026 10:09:47 -0700 Subject: [PATCH] Prevent removing permanent admins from member list --- zooid/management.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/zooid/management.go b/zooid/management.go index bef4bbe..323e28e 100644 --- a/zooid/management.go +++ b/zooid/management.go @@ -1,7 +1,9 @@ package zooid import ( + "slices" "context" + "errors" "fiatjaf.com/nostr" "fiatjaf.com/nostr/khatru" "fiatjaf.com/nostr/nip86" @@ -127,10 +129,6 @@ func (m *ManagementStore) PubkeyIsBanned(pubkey nostr.PubKey) bool { // Admins -func (m *ManagementStore) IsAdmin(pubkey nostr.PubKey) bool { - return m.Config.IsOwner(pubkey) || m.Config.IsSelf(pubkey) -} - func (m *ManagementStore) GetAdmins() []nostr.PubKey { members := make([]nostr.PubKey, 0) @@ -147,6 +145,10 @@ func (m *ManagementStore) GetAdmins() []nostr.PubKey { return members } +func (m *ManagementStore) IsAdmin(pubkey nostr.PubKey) bool { + return slices.Contains(m.GetAdmins(), pubkey) +} + // Membership func (m *ManagementStore) GetMembers() []nostr.PubKey { @@ -195,6 +197,10 @@ func (m *ManagementStore) AddMember(pubkey nostr.PubKey) error { } func (m *ManagementStore) RemoveMember(pubkey nostr.PubKey) error { + if m.IsAdmin(pubkey) { + return errors.New("Can't remove permanent admins from relay.") + } + membersEvent := m.Events.GetOrCreateRelayMembersList() if membersEvent.Tags.FindWithValue("member", pubkey.Hex()) != nil {