Skip to content

Commit bcb9047

Browse files
authored
Repair user key inconsistency on invitation (#5031)
1 parent 8258fb3 commit bcb9047

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Repair user key inconsistency when inviting user

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ runTeamInvitationSubsystem ::
7878
Member Now r,
7979
Member EmailSubsystem r,
8080
Member EnterpriseLoginSubsystem r,
81-
Member TeamSubsystem r
81+
Member TeamSubsystem r,
82+
Member UserKeyStore r
8283
) =>
8384
TeamInvitationSubsystemConfig ->
8485
InterpreterFor TeamInvitationSubsystem r
@@ -98,7 +99,8 @@ inviteUserImpl ::
9899
Member Now r,
99100
Member EmailSubsystem r,
100101
Member EnterpriseLoginSubsystem r,
101-
Member TeamSubsystem r
102+
Member TeamSubsystem r,
103+
Member UserKeyStore r
102104
) =>
103105
Local UserId ->
104106
TeamId ->
@@ -139,7 +141,8 @@ createInvitation' ::
139141
Member (Input TeamInvitationSubsystemConfig) r,
140142
Member Now r,
141143
Member EmailSubsystem r,
142-
Member EnterpriseLoginSubsystem r
144+
Member EnterpriseLoginSubsystem r,
145+
Member UserKeyStore r
143146
) =>
144147
TeamId ->
145148
Maybe InvitationId ->
@@ -165,6 +168,11 @@ createInvitation' tid mExpectedInvId inviteeRole mbInviterUid inviterEmail invRe
165168
&& user.userStatus == Active
166169
&& isNothing user.userTeam ->
167170
pure InviteExistingUser
171+
| user.userStatus == Deleted -> do
172+
-- user key is present but the user is deleted
173+
-- repair inconsistency here, and allow invitation to proceed
174+
deleteKeyForUser (qUnqualified user.userQualifiedId) (tUnqualified uke)
175+
pure InviteNewUser
168176
| otherwise -> throw TeamInvitationEmailTaken
169177
guardEmailDomainRegistration invitationFlow tid email
170178

libs/wire-subsystems/test/unit/Wire/TeamInvitationSubsystem/InterpreterSpec.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import Wire.TeamInvitationSubsystem.Error
5555
import Wire.TeamInvitationSubsystem.Interpreter
5656
import Wire.TeamSubsystem
5757
import Wire.TeamSubsystem.GalleyAPI
58+
import Wire.UserKeyStore
5859
import Wire.UserSubsystem
5960
import Wire.Util
6061

@@ -67,6 +68,7 @@ type AllEffects =
6768
Random,
6869
State StdGen,
6970
InvitationStore,
71+
UserKeyStore,
7072
State (Map (TeamId, InvitationId) StoredInvitation),
7173
State (Map (InvitationCode) StoredInvitation),
7274
Now,
@@ -93,6 +95,7 @@ runAllEffects args =
9395
. interpretNowAsState
9496
. evalState mempty
9597
. evalState mempty
98+
. (evalState mempty . inMemoryUserKeyStoreInterpreter . raiseUnder)
9699
. inMemoryInvitationStoreInterpreter
97100
. evalState (mkStdGen 3)
98101
. randomToStatefulStdGen

0 commit comments

Comments
 (0)