diff --git a/src/Simplex/Chat/Library/Subscriber.hs b/src/Simplex/Chat/Library/Subscriber.hs index 1ada54b4f7..15a6d6c8bd 100644 --- a/src/Simplex/Chat/Library/Subscriber.hs +++ b/src/Simplex/Chat/Library/Subscriber.hs @@ -2900,8 +2900,13 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = | otherwise -> messageError "x.grp.mem.intro ignored: member already exists" Left _ - | useRelays' gInfo -> - void $ withStore $ \db -> createIntroReMember db user gInfo memInfo memRestrictions + | useRelays' gInfo -> do + -- owner key must only come from link data, not from relay intro + let memInfo' = case memInfo of + MemberInfo mId mRole v p _ + | mRole == GROwner -> MemberInfo mId mRole v p Nothing + _ -> memInfo + void $ withStore $ \db -> createIntroReMember db user gInfo memInfo' memRestrictions | otherwise -> do when (memberRole < GRAdmin) $ throwChatError (CEGroupContactRole c) case memChatVRange of diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs index 0685d609e6..3c6a29c4e3 100644 --- a/tests/ChatTests/Groups.hs +++ b/tests/ChatTests/Groups.hs @@ -8854,6 +8854,8 @@ testChannelOwnerKeyAfterLinkUpdate ps = (shortLink, fullLink) <- prepareChannel1Relay "team" alice bob memberJoinChannel "team" [bob] [alice] shortLink fullLink cath + threadDelay 100000 + -- Owner updates channel profile - triggers rebuilding link data. alice ##> "/gp team my_team My team description" alice <## "changed to #my_team (My team description)" @@ -8875,6 +8877,8 @@ testChannelOwnerKeyAfterLinkUpdate ps = fullLink' `shouldBe` fullLink memberJoinChannel "my_team" [bob] [alice] shortLink' fullLink' dan + threadDelay 100000 + -- Verify owner member record in late subscriber's DB has a public key. ownerKeyPresent <- withCCTransaction dan $ \db -> DB.query_ db "SELECT COUNT(1) FROM group_members WHERE member_role = 'owner' AND member_pub_key IS NOT NULL" :: IO [[Int]]