diff --git a/libs/wire-api/src/Wire/API/Routes/Public/Brig.hs b/libs/wire-api/src/Wire/API/Routes/Public/Brig.hs index f74cd2b22d..b3238c6a6e 100644 --- a/libs/wire-api/src/Wire/API/Routes/Public/Brig.hs +++ b/libs/wire-api/src/Wire/API/Routes/Public/Brig.hs @@ -1989,6 +1989,16 @@ type TeamsAPI = :> "collaborators" :> MultiVerb1 'GET '[JSON] (Respond 200 "Return collaborators" [TeamCollaborator]) ) + :<|> Named + "remove-team-collaborator" + ( Summary "Remove a collaborator from the team." + :> ZLocalUser + :> "teams" + :> Capture "tid" TeamId + :> "collaborators" + :> CaptureUserId "uid" + :> MultiVerb1 'DELETE '[JSON] (RespondEmpty 204 "User removed from team") + ) type SystemSettingsAPI = Named diff --git a/libs/wire-subsystems/src/Wire/TeamCollaboratorsSubsystem.hs b/libs/wire-subsystems/src/Wire/TeamCollaboratorsSubsystem.hs index c0c9aab139..600b4d36c5 100644 --- a/libs/wire-subsystems/src/Wire/TeamCollaboratorsSubsystem.hs +++ b/libs/wire-subsystems/src/Wire/TeamCollaboratorsSubsystem.hs @@ -12,5 +12,6 @@ data TeamCollaboratorsSubsystem m a where CreateTeamCollaborator :: Local UserId -> UserId -> TeamId -> Set CollaboratorPermission -> TeamCollaboratorsSubsystem m () GetAllTeamCollaborators :: Local UserId -> TeamId -> TeamCollaboratorsSubsystem m [TeamCollaborator] InternalGetTeamCollaborator :: TeamId -> UserId -> TeamCollaboratorsSubsystem m (Maybe TeamCollaborator) + RemoveTeamCollaborator :: Local UserId -> UserId -> TeamId -> TeamCollaboratorsSubsystem m () makeSem ''TeamCollaboratorsSubsystem diff --git a/libs/wire-subsystems/src/Wire/TeamCollaboratorsSubsystem/Interpreter.hs b/libs/wire-subsystems/src/Wire/TeamCollaboratorsSubsystem/Interpreter.hs index 09fc3f3123..3c0eb3ac91 100644 --- a/libs/wire-subsystems/src/Wire/TeamCollaboratorsSubsystem/Interpreter.hs +++ b/libs/wire-subsystems/src/Wire/TeamCollaboratorsSubsystem/Interpreter.hs @@ -35,6 +35,7 @@ interpretTeamCollaboratorsSubsystem = interpret $ \case CreateTeamCollaborator zUser user team perms -> createTeamCollaboratorImpl zUser user team perms GetAllTeamCollaborators zUser team -> getAllTeamCollaboratorsImpl zUser team InternalGetTeamCollaborator team user -> internalGetTeamCollaboratorImpl team user + RemoveTeamCollaborator zUser team user -> removeTeamCollaboratorImpl zUser team user internalGetTeamCollaboratorImpl :: (Member Store.TeamCollaboratorsStore r) => @@ -93,6 +94,19 @@ getAllTeamCollaboratorsImpl zUser team = do guardPermission (tUnqualified zUser) team TeamMember.NewTeamCollaborator InsufficientRights Store.getAllTeamCollaborators team +removeTeamCollaboratorImpl :: + ( Member GalleyAPIAccess r, + Member (Error TeamCollaboratorsError) r, + Member Store.TeamCollaboratorsStore r + ) => + Local UserId -> + UserId -> + TeamId -> + Sem r () +removeTeamCollaboratorImpl zUser user team = do + -- TODO: actual implementation here + return () + -- This is of general usefulness. However, we cannot move this to wire-api as -- this would lead to a cyclic dependency. guardPermission :: diff --git a/services/brig/src/Brig/Team/API.hs b/services/brig/src/Brig/Team/API.hs index 735ad008b4..5baeeb484b 100644 --- a/services/brig/src/Brig/Team/API.hs +++ b/services/brig/src/Brig/Team/API.hs @@ -114,6 +114,7 @@ servantAPI = :<|> Named @"accept-team-invitation" (\luid req -> lift $ liftSem $ acceptTeamInvitation luid req.password req.code) :<|> Named @"add-team-collaborator" (\zuid tid (NewTeamCollaborator uid perms) -> lift . liftSem $ createTeamCollaborator zuid uid tid perms) :<|> Named @"get-team-collaborators" (\zuid tid -> lift . liftSem $ getAllTeamCollaborators zuid tid) + :<|> Named @"remove-team-collaborator" (\zuid tid uid -> lift . liftSem $ removeTeamCollaborator zuid uid tid) teamSizePublic :: ( Member (Error UserSubsystemError) r,