Skip to content

Commit

Permalink
Handle deleted remote users when adding to a conversation
Browse files Browse the repository at this point in the history
Also add corresponding test
  • Loading branch information
pcapriotti committed May 27, 2021
1 parent bde7006 commit 3004acf
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
3 changes: 2 additions & 1 deletion services/galley/src/Galley/API/Update.hs
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,8 @@ addMembers zusr zcon convId invite = do
users <-
runExceptT (executeFederated domain rpc)
>>= either (throwM . federationErrorToWai) pure
let uids' = map (qUnqualified . User.profileQualifiedId) users
let uids' = map (qUnqualified . User.profileQualifiedId)
(filter (not . User.profileDeleted) users)
unless (Set.fromList uids == Set.fromList uids') $
throwM unknownRemoteUser

Expand Down
21 changes: 21 additions & 0 deletions services/galley/test/integration/API.hs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ tests s =
test s "fail to add too many members" postTooManyMembersFail,
test s "add remote members" testAddRemoteMember,
test s "add non-existing remote members" testAddRemoteMemberFailure,
test s "add deleted remote members" testAddDeletedRemoteUser,
test s "add remote members on invalid domain" testAddRemoteMemberInvalidDomain,
test s "remove members" deleteMembersOk,
test s "fail to remove members from self conv." deleteMembersFailSelf,
Expand Down Expand Up @@ -922,6 +923,26 @@ testAddRemoteMemberFailure = do
let err = responseJsonUnsafe resp :: Object
(err ^. at "label") @?= Just "unknown-remote-user"

testAddDeletedRemoteUser :: TestM ()
testAddDeletedRemoteUser = do
alice <- randomUser
bobId <- randomId
let remoteDomain = Domain "far-away.example.com"
remoteBob = Qualified bobId remoteDomain
convId <- decodeConvId <$> postConv alice [] (Just "remote gossip") [] Nothing Nothing
opts <- view tsGConf
g <- view tsGalley
liftIO $ do
(resp, _) <-
withTempMockFederator
opts
remoteDomain
[(mkProfile remoteBob (Name "bob")) { profileDeleted = True } ]
(postQualifiedMembers' g alice (remoteBob :| []) convId)
statusCode resp @?= 400
let err = responseJsonUnsafe resp :: Object
(err ^. at "label") @?= Just "unknown-remote-user"

testAddRemoteMemberInvalidDomain :: TestM ()
testAddRemoteMemberInvalidDomain = do
alice <- randomUser
Expand Down

0 comments on commit 3004acf

Please sign in to comment.