Skip to content

Commit 7da6fbc

Browse files
committed
fix(leif): split moved actions
1 parent 915681c commit 7da6fbc

36 files changed

Lines changed: 941 additions & 645 deletions

File tree

libs/wire-subsystems/src/Wire/BrigAPIAccess.hs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ module Wire.BrigAPIAccess
7171
deleteGroupInternal,
7272
deleteApp,
7373
DeleteGroupManagedError (..),
74+
75+
-- * Assertions
76+
ensureConnectedToLocals,
7477
)
7578
where
7679

@@ -88,6 +91,7 @@ import Polysemy
8891
import Polysemy.Error
8992
import Web.Scim.Filter qualified as Scim
9093
import Wire.API.Connection
94+
import Wire.API.Error
9195
import Wire.API.Error.Galley
9296
import Wire.API.MLS.CipherSuite
9397
import Wire.API.Routes.Internal.Brig
@@ -192,3 +196,17 @@ getConnectionsUnqualifiedBidi uids1 uids2 mrel1 mrel2 = do
192196
res1 <- getConnectionsUnqualified uids1 (Just uids2) mrel1
193197
res2 <- getConnectionsUnqualified uids2 (Just uids1) mrel2
194198
pure (res1, res2)
199+
200+
ensureConnectedToLocals ::
201+
( Member (ErrorS 'NotConnected) r,
202+
Member BrigAPIAccess r
203+
) =>
204+
UserId ->
205+
[UserId] ->
206+
Sem r ()
207+
ensureConnectedToLocals _ [] = pure ()
208+
ensureConnectedToLocals u uids = do
209+
(connsFrom, connsTo) <-
210+
getConnectionsUnqualifiedBidi [u] uids (Just Accepted) (Just Accepted)
211+
unless (length connsFrom == length uids && length connsTo == length uids) $
212+
throwS @'NotConnected

libs/wire-subsystems/src/Wire/ClientSubsystem/Interpreter.hs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1+
{-# OPTIONS_GHC -Wno-ambiguous-fields #-}
2+
13
module Wire.ClientSubsystem.Interpreter (runClientSubsystem) where
24

35
import Data.Id
4-
import Data.Time.Clock
6+
import Data.Time.Clock (UTCTime)
57
import Imports
68
import Polysemy
79
import Wire.ClientStore (ClientStore)
810
import Wire.ClientStore qualified as ClientStore
911
import Wire.ClientSubsystem
1012

11-
runClientSubsystem :: (Member ClientStore r) => InterpreterFor ClientSubsystem r
13+
runClientSubsystem ::
14+
(Member ClientStore r) =>
15+
InterpreterFor ClientSubsystem r
1216
runClientSubsystem = interpret $ \case
1317
InternalGetActivityTimestamps uid -> internalGetActivityTimestampsImpl uid
1418

libs/wire-subsystems/src/Wire/ConversationSubsystem.hs

Lines changed: 9 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,9 @@
2020
module Wire.ConversationSubsystem
2121
( module Wire.ConversationSubsystem,
2222
Util.BotsAndMembers (..),
23-
Util.ConsentGiven (..),
2423
Util.canDeleteMember,
25-
Util.consentGiven,
2624
Util.isMember,
2725
Util.userLHEnabled,
28-
Features.toTeamStatus,
2926
MLSRemoval.RemoveUserIncludeMain (..),
3027
LegalholdConflicts.guardLegalholdPolicyConflicts,
3128
)
@@ -35,13 +32,10 @@ import Data.Code qualified as Code
3532
import Data.CommaSeparatedList (CommaSeparatedList)
3633
import Data.Domain
3734
import Data.Id
38-
import Data.LegalHold (UserLegalHoldStatus)
39-
import Data.Misc (IpAddr, PlainTextPassword6)
40-
import Data.Proxy (Proxy (..))
35+
import Data.Misc (IpAddr)
4136
import Data.Qualified
4237
import Data.Range
43-
import Data.Singletons (Demote, Sing, SingKind)
44-
import Galley.Types.Clients (Clients)
38+
import Data.Singletons (Sing)
4539
import Imports
4640
import Polysemy
4741
import Wire.API.Bot (AddBot, RemoveBot)
@@ -75,23 +69,15 @@ import Wire.API.Routes.Public.Galley.Messaging (MessageNotSent, PostOtrResponse)
7569
import Wire.API.Routes.Public.Util (UpdateResult)
7670
import Wire.API.Routes.Version
7771
import Wire.API.ServantProto (RawProto (..))
78-
import Wire.API.Team.Feature (AllTeamFeatures, GuestLinksConfig, LockableFeature)
79-
import Wire.API.Team.LegalHold (UserLegalHoldStatusResponse)
80-
import Wire.API.Team.Member (IsPerm, TeamMemberList)
81-
import Wire.API.User (VerificationAction)
72+
import Wire.API.Team.Feature (GuestLinksConfig, LockableFeature)
8273
import Wire.ConversationStore.MLS.Types (ListGlobalSelfConvs)
83-
import Wire.ConversationSubsystem.Features qualified as Features
8474
import Wire.ConversationSubsystem.LegalholdConflicts qualified as LegalholdConflicts
8575
import Wire.ConversationSubsystem.MLS.IncomingMessage (IncomingBundle, IncomingMessage)
8676
import Wire.ConversationSubsystem.MLS.Removal qualified as MLSRemoval
8777
import Wire.ConversationSubsystem.Util qualified as Util
88-
import Wire.FeaturesConfigSubsystem.Types (GetFeatureConfig)
8978
import Wire.NotificationSubsystem (LocalConversationUpdate)
9079
import Wire.StoredConversation (BotMember, LocalMember, StoredConversation)
9180

92-
data PermissionCheckArgs teamAssociation where
93-
PermissionCheckArgs :: forall k (p :: k) teamAssociation. (SingKind k, IsPerm teamAssociation (Demote k)) => Sing p -> Maybe teamAssociation -> PermissionCheckArgs teamAssociation
94-
9581
data ConversationSubsystem m a where
9682
NotifyConversationAction ::
9783
Sing tag ->
@@ -146,7 +132,6 @@ data ConversationSubsystem m a where
146132
Range 1 1000 Int32 ->
147133
Maybe ConversationPagingState ->
148134
ConversationSubsystem r ConvIdsPage
149-
InternalGetClientIds :: [UserId] -> ConversationSubsystem m Clients
150135
InternalGetLocalMember ::
151136
ConvId ->
152137
UserId ->
@@ -169,13 +154,11 @@ data ConversationSubsystem m a where
169154
GetLocalConversationInternal ::
170155
ConvId ->
171156
ConversationSubsystem m Conversation
172-
RmClient ::
173-
UserId ->
157+
RemoveClient ::
158+
Local StoredConversation ->
159+
Qualified UserId ->
174160
ClientId ->
175161
ConversationSubsystem m ()
176-
GetClients ::
177-
UserId ->
178-
ConversationSubsystem m [ClientId]
179162
AddBot ::
180163
Local UserId ->
181164
ConnId ->
@@ -186,10 +169,6 @@ data ConversationSubsystem m a where
186169
Maybe ConnId ->
187170
RemoveBot ->
188171
ConversationSubsystem m (UpdateResult Event)
189-
GetFeatureInternal ::
190-
(GetFeatureConfig cfg) =>
191-
TeamId ->
192-
ConversationSubsystem m (LockableFeature cfg)
193172
UpdateCellsState ::
194173
ConvId ->
195174
CellsState ->
@@ -371,20 +350,6 @@ data ConversationSubsystem m a where
371350
GetMLSPublicKeys ::
372351
Maybe MLSPublicKeyFormat ->
373352
ConversationSubsystem m (MLSKeysByPurpose (MLSKeys SomeKey))
374-
FeatureEnabledForTeam ::
375-
forall cfg m.
376-
(GetFeatureConfig cfg) =>
377-
Proxy cfg ->
378-
TeamId ->
379-
ConversationSubsystem m Bool
380-
GetAllTeamFeaturesForUser ::
381-
UserId ->
382-
ConversationSubsystem m AllTeamFeatures
383-
GetSingleFeatureForUser ::
384-
forall cfg m.
385-
(GetFeatureConfig cfg) =>
386-
UserId ->
387-
ConversationSubsystem m (LockableFeature cfg)
388353
ResetMLSConversation ::
389354
Local UserId ->
390355
MLSReset ->
@@ -394,15 +359,6 @@ data ConversationSubsystem m a where
394359
Qualified ConvId ->
395360
SubConvId ->
396361
ConversationSubsystem m PublicSubConversation
397-
GetUserStatus ::
398-
Local UserId ->
399-
TeamId ->
400-
UserId ->
401-
ConversationSubsystem m UserLegalHoldStatusResponse
402-
GuardSecondFactorDisabled ::
403-
UserId ->
404-
ConvId ->
405-
ConversationSubsystem m ()
406362
GetBotConversation ::
407363
BotId ->
408364
ConvId ->
@@ -426,6 +382,9 @@ data ConversationSubsystem m a where
426382
Local UserId ->
427383
Qualified ConvId ->
428384
ConversationSubsystem m Public.Conversation
385+
InternalGetConversation ::
386+
ConvId ->
387+
ConversationSubsystem m (Maybe StoredConversation)
429388
GetConversationRoles ::
430389
Local UserId ->
431390
ConvId ->
@@ -710,42 +669,9 @@ data ConversationSubsystem m a where
710669
ConversationAction (tag :: ConversationActionTag) ->
711670
ExtraConversationData ->
712671
ConversationSubsystem m LocalConversationUpdate
713-
PermissionCheck ::
714-
(IsPerm teamAssociation perm) =>
715-
perm -> Maybe teamAssociation -> ConversationSubsystem m teamAssociation
716-
PermissionCheckSAbs ::
717-
PermissionCheckArgs teamAssociation ->
718-
ConversationSubsystem m teamAssociation
719-
EnsureReAuthorised ::
720-
UserId ->
721-
Maybe PlainTextPassword6 ->
722-
Maybe Code.Value ->
723-
Maybe VerificationAction ->
724-
ConversationSubsystem m ()
725672
QualifyLocal ::
726673
a ->
727674
ConversationSubsystem m (Local a)
728-
AssertOnTeam ::
729-
UserId ->
730-
TeamId ->
731-
ConversationSubsystem m ()
732-
CheckConsent ::
733-
Map UserId TeamId ->
734-
UserId ->
735-
ConversationSubsystem m Util.ConsentGiven
736-
GetLHStatusForUsers ::
737-
[UserId] ->
738-
ConversationSubsystem m [(UserId, UserLegalHoldStatus)]
739-
EnsureConnectedToLocals ::
740-
UserId ->
741-
[UserId] ->
742-
ConversationSubsystem m ()
743-
GetTeamMembersForFanout ::
744-
TeamId ->
745-
ConversationSubsystem m TeamMemberList
746-
AssertTeamExists ::
747-
TeamId ->
748-
ConversationSubsystem m ()
749675
InternalUpsertOne2OneConversation ::
750676
UpsertOne2OneConversationRequest ->
751677
ConversationSubsystem m ()
@@ -765,6 +691,3 @@ data ConversationSubsystem m a where
765691
ConversationSubsystem m ()
766692

767693
makeSem ''ConversationSubsystem
768-
769-
permissionCheckS :: forall k (p :: k) teamAssociation r. (Member ConversationSubsystem r, SingKind k, IsPerm teamAssociation (Demote k)) => Sing p -> Maybe teamAssociation -> Sem r teamAssociation
770-
permissionCheckS p mTeam = send (PermissionCheckSAbs (PermissionCheckArgs p mTeam))

libs/wire-subsystems/src/Wire/ConversationSubsystem/Action.hs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ import Wire.ConversationSubsystem.Action.Kick
118118
import Wire.ConversationSubsystem.Action.Leave
119119
import Wire.ConversationSubsystem.Action.Notify
120120
import Wire.ConversationSubsystem.Action.Reset
121-
import Wire.ConversationSubsystem.Features
122121
import Wire.ConversationSubsystem.MLS.Conversation
123122
import Wire.ConversationSubsystem.MLS.Migration
124123
import Wire.ConversationSubsystem.MLS.Removal
@@ -139,7 +138,7 @@ import Wire.StoredConversation
139138
import Wire.StoredConversation qualified as Data
140139
import Wire.TeamCollaboratorsSubsystem
141140
import Wire.TeamStore
142-
import Wire.TeamSubsystem (TeamSubsystem)
141+
import Wire.TeamSubsystem (ConsentGiven (..), TeamSubsystem, consentGiven)
143142
import Wire.TeamSubsystem qualified as TeamSubsystem
144143
import Wire.UserList
145144

@@ -838,7 +837,7 @@ performConversationJoin qusr lconv (ConversationJoin invited role joinType) = do
838837
throwS @'MissingLegalholdConsent
839838

840839
convUsersLHStatus <- do
841-
uidsStatus <- getLHStatusForUsers ((.id_) <$> convUsers)
840+
uidsStatus <- TeamSubsystem.getLHStatusForUsers ((.id_) <$> convUsers)
842841
pure $ zipWith (\mem (_, status) -> (mem, status)) convUsers uidsStatus
843842

844843
if any

libs/wire-subsystems/src/Wire/ConversationSubsystem/CreateInternal.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ import Wire.StoredConversation qualified as Data
8080
import Wire.TeamCollaboratorsSubsystem
8181
import Wire.TeamStore (TeamStore)
8282
import Wire.TeamStore qualified as TeamStore
83-
import Wire.TeamSubsystem (TeamSubsystem)
83+
import Wire.TeamSubsystem (TeamSubsystem, permissionCheck)
8484
import Wire.TeamSubsystem qualified as TeamSubsystem
8585
import Wire.UserList (UserList (UserList), toUserList, ulAddLocal, ulAll, ulFromLocals, ulLocals, ulRemotes)
8686

0 commit comments

Comments
 (0)