From d51cc75f35394ecfde1a4e8cfc422f09a9f40541 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 30 Mar 2026 18:47:57 +0400 Subject: [PATCH] core, ui: prohibit to invite contact to channel --- apps/ios/Shared/Views/Chat/ChatView.swift | 2 +- .../kotlin/chat/simplex/common/views/chat/ChatView.kt | 2 +- src/Simplex/Chat/Library/Commands.hs | 3 ++- src/Simplex/Chat/Library/Subscriber.hs | 2 ++ 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index ada2e8c459..8738d5e25b 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -578,7 +578,7 @@ struct ChatView: View { HStack { contentFilterMenu(withLabel: false) Menu { - if groupInfo.canAddMembers { + if groupInfo.canAddMembers && !groupInfo.useRelays { if (chat.chatInfo.incognito) { groupLinkButton() .appSheet(isPresented: $showGroupLinkSheet) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt index 883975a345..f9573c0ed0 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt @@ -1281,7 +1281,7 @@ fun BoxScope.ChatInfoToolbar( } is ChatInfo.Group -> { // Add members / group link moved to menu - if (chatInfo.groupInfo.canAddMembers) { + if (chatInfo.groupInfo.canAddMembers && !chatInfo.groupInfo.useRelays) { if (!chatInfo.incognito) { menuItems.add { ItemAction(stringResource(MR.strings.icon_descr_add_members), painterResource(MR.images.ic_person_add_500), onClick = { diff --git a/src/Simplex/Chat/Library/Commands.hs b/src/Simplex/Chat/Library/Commands.hs index a880c17ef8..d488b6e990 100644 --- a/src/Simplex/Chat/Library/Commands.hs +++ b/src/Simplex/Chat/Library/Commands.hs @@ -2425,9 +2425,10 @@ processChatCommand vr nm = \case APIAddMember groupId contactId memRole -> withUser $ \user -> withGroupLock "addMember" groupId $ do -- TODO for large groups: no need to load all members to determine if contact is a member (group, contact) <- withFastStore $ \db -> (,) <$> getGroup db vr user groupId <*> getContact db vr user contactId - assertDirectAllowed user MDSnd contact XGrpInv_ let Group gInfo members = group Contact {localDisplayName = cName} = contact + when (useRelays' gInfo) $ throwCmdError "can't invite contact to channel" + assertDirectAllowed user MDSnd contact XGrpInv_ assertUserGroupRole gInfo $ max GRAdmin memRole -- [incognito] forbid to invite contact to whom user is connected incognito when (contactConnIncognito contact) $ throwChatError CEContactIncognitoCantInvite diff --git a/src/Simplex/Chat/Library/Subscriber.hs b/src/Simplex/Chat/Library/Subscriber.hs index f856bfd915..a6bada4f49 100644 --- a/src/Simplex/Chat/Library/Subscriber.hs +++ b/src/Simplex/Chat/Library/Subscriber.hs @@ -2314,6 +2314,8 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = toView $ CEvtNewChatItems user [AChatItem SCTGroup (msgDirection @d) cInfo ci] processGroupInvitation :: Contact -> GroupInvitation -> RcvMessage -> MsgMeta -> CM () + processGroupInvitation _ct GroupInvitation {groupProfile = GroupProfile {groupLink = Just _}} _msg _msgMeta = + messageError "x.grp.inv: can't invite to channel" processGroupInvitation ct inv msg msgMeta = do let Contact {localDisplayName = c, activeConn} = ct GroupInvitation {fromMember = (MemberIdRole fromMemId fromRole), invitedMember = (MemberIdRole memId memRole), connRequest, groupLinkId} = inv