@@ -42,6 +42,10 @@ func basicRejectionLogic(ctx context.Context, event nostr.Event) (reject bool, m
4242 }
4343 }
4444
45+ if reject , msg := global .RejectInternalKinds (ctx , event ); reject {
46+ return true , msg
47+ }
48+
4549 if validator != nil {
4650 if err := validator .ValidateEvent (event ); err != nil {
4751 return true , "schema validation failed: " + err .Error ()
@@ -119,7 +123,7 @@ func basicRejectionLogic(ctx context.Context, event nostr.Event) (reject bool, m
119123 return true , "invalid report"
120124 case 28934 :
121125 if pyramid .IsMember (event .PubKey ) {
122- return false , "you are already a member of this relay, but fine "
126+ return false , "duplicate: you are already a member of this relay"
123127 }
124128
125129 claim := event .Tags .Find ("claim" )
@@ -326,65 +330,68 @@ func processLeaveRequest(ctx context.Context, event nostr.Event) {
326330}
327331
328332func publishMembershipChange (pubkey nostr.PubKey , added bool ) {
329- // publish to main and internal
330- for _ , c := range []struct {
331- store * mmm.IndexingLayer
332- relay * khatru.Relay
333- }{{global .IL .Main , relay }, {global .IL .Internal , internal .Relay }} {
334- if added {
335- // publish kind 8000
336- evt := nostr.Event {
337- Kind : 8000 ,
338- CreatedAt : nostr .Now (),
339- Tags : nostr.Tags {
340- {"-" },
341- {"p" , pubkey .Hex ()},
342- },
343- }
344- evt .Sign (global .Settings .RelayInternalSecretKey )
345- c .store .SaveEvent (evt )
346- c .relay .BroadcastEvent (evt )
347- } else {
348- // publish kind 8001
349- evt := nostr.Event {
350- Kind : 8001 ,
351- CreatedAt : nostr .Now (),
352- Tags : nostr.Tags {
353- {"-" },
354- {"p" , pubkey .Hex ()},
355- },
356- }
357- evt .Sign (global .Settings .RelayInternalSecretKey )
333+ // publish the add/remove event and the updated member list
334+ if added {
335+ evt := nostr.Event {
336+ Kind : 8000 ,
337+ CreatedAt : nostr .Now (),
338+ Tags : nostr.Tags {
339+ {"-" },
340+ {"p" , pubkey .Hex ()},
341+ },
342+ }
343+ evt .Sign (global .Settings .RelayInternalSecretKey )
344+ for _ , c := range []struct {
345+ store * mmm.IndexingLayer
346+ relay * khatru.Relay
347+ }{{global .IL .Main , relay }, {global .IL .Internal , internal .Relay }} {
358348 c .store .SaveEvent (evt )
359349 c .relay .BroadcastEvent (evt )
360350 }
361-
362- // publish updated relay member list and nip29 room creation permission list
363- relayMembersList := nostr.Event {
364- Kind : 13534 ,
365- CreatedAt : nostr .Now (),
366- Tags : nostr.Tags {{"-" }},
367- }
368- roomCreationPermissionList := nostr.Event {
369- Kind : 19004 ,
351+ } else {
352+ evt := nostr.Event {
353+ Kind : 8001 ,
370354 CreatedAt : nostr .Now (),
371- Tags : nostr.Tags {{"-" }},
355+ Tags : nostr.Tags {
356+ {"-" },
357+ {"p" , pubkey .Hex ()},
358+ },
372359 }
373- for m , member := range pyramid .Members .Range {
374- memberTag := nostr.Tag {"member" , m .Hex ()}
375- for _ , rid := range member .Roles {
376- memberTag = append (memberTag , rid )
377- }
378- relayMembersList .Tags = append (relayMembersList .Tags , memberTag )
379- roomCreationPermissionList .Tags = append (roomCreationPermissionList .Tags , nostr.Tag {"p" , m .Hex ()})
380- }
381- relayMembersList .Sign (global .Settings .RelayInternalSecretKey )
382- roomCreationPermissionList .Sign (global .Settings .RelayInternalSecretKey )
383- c .store .ReplaceEvent (relayMembersList )
384- c .store .ReplaceEvent (roomCreationPermissionList )
385- c .relay .BroadcastEvent (relayMembersList )
386- c .relay .BroadcastEvent (roomCreationPermissionList )
360+ evt .Sign (global .Settings .RelayInternalSecretKey )
361+ global .IL .Main .SaveEvent (evt )
362+ relay .BroadcastEvent (evt )
387363 }
364+ publishMemberListAndPermissions ()
365+ }
366+
367+ // publishMemberListAndPermissions publishes the current NIP-43 kind 13534
368+ // relay member list and the NIP-29 kind 19004 room-creation permission list,
369+ // both signed by the relay's internal secret key.
370+ func publishMemberListAndPermissions () {
371+ relayMembersList := nostr.Event {
372+ Kind : 13534 ,
373+ CreatedAt : nostr .Now (),
374+ Tags : nostr.Tags {{"-" }},
375+ }
376+ roomCreationPermissionList := nostr.Event {
377+ Kind : 19004 ,
378+ CreatedAt : nostr .Now (),
379+ Tags : nostr.Tags {{"-" }},
380+ }
381+ for m , member := range pyramid .Members .Range {
382+ memberTag := nostr.Tag {"member" , m .Hex ()}
383+ for _ , rid := range member .Roles {
384+ memberTag = append (memberTag , rid )
385+ }
386+ relayMembersList .Tags = append (relayMembersList .Tags , memberTag )
387+ roomCreationPermissionList .Tags = append (roomCreationPermissionList .Tags , nostr.Tag {"p" , m .Hex ()})
388+ }
389+ relayMembersList .Sign (global .Settings .RelayInternalSecretKey )
390+ roomCreationPermissionList .Sign (global .Settings .RelayInternalSecretKey )
391+ global .IL .Main .ReplaceEvent (relayMembersList )
392+ global .IL .Main .ReplaceEvent (roomCreationPermissionList )
393+ relay .BroadcastEvent (relayMembersList )
394+ relay .BroadcastEvent (roomCreationPermissionList )
388395}
389396
390397func fetchInvite (claim string ) (nostr.Event , error ) {
0 commit comments