Skip to content

Commit 9979253

Browse files
authored
fix: scim-provisioned user can edit locked attributes (WPB-22292) (#4543)
1 parent 24cd064 commit 9979253

File tree

4 files changed

+37
-17
lines changed

4 files changed

+37
-17
lines changed

app/src/main/kotlin/com/wire/android/ui/authentication/login/email/LoginEmailViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ class LoginEmailViewModel @Inject constructor(
203203
addAuthenticatedUser(
204204
authTokens = loginResult.authData,
205205
ssoId = loginResult.ssoID,
206+
managedBy = loginResult.managedBy,
206207
serverConfigId = loginResult.serverConfigId,
207208
proxyCredentials = loginResult.proxyCredentials,
208209
replace = false

app/src/main/kotlin/com/wire/android/ui/authentication/login/sso/LoginSSOViewModelExtension.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ class LoginSSOViewModelExtension(
9999
ssoId = ssoLoginResult.ssoId,
100100
serverConfigId = serverConfigId,
101101
proxyCredentials = ssoLoginResult.proxyCredentials,
102+
managedBy = ssoLoginResult.managedBy,
102103
replace = false
103104
).let { authenticatedUserResult ->
104105
when (authenticatedUserResult) {

app/src/test/kotlin/com/wire/android/ui/authentication/login/email/LoginEmailViewModelTest.kt

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import com.wire.kalium.logic.data.id.QualifiedID
5454
import com.wire.kalium.logic.data.id.QualifiedIdMapper
5555
import com.wire.kalium.logic.data.logout.LogoutReason
5656
import com.wire.kalium.logic.data.user.SsoId
57+
import com.wire.kalium.logic.data.user.SsoManagedBy
5758
import com.wire.kalium.logic.data.user.UserId
5859
import com.wire.kalium.logic.feature.auth.AddAuthenticatedUserUseCase
5960
import com.wire.kalium.logic.feature.auth.AuthenticationResult
@@ -138,7 +139,15 @@ class LoginEmailViewModelTest {
138139
@Test
139140
fun `given button is clicked and initial sync is completed, when login returns Success, then navigate to home screen`() = runTest {
140141
val (arrangement, loginViewModel) = Arrangement()
141-
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, SERVER_CONFIG.id, null))
142+
.withLoginReturning(
143+
AuthenticationResult.Success(
144+
authData = AUTH_TOKEN,
145+
ssoID = SSO_ID,
146+
managedBy = MANAGED_BY,
147+
serverConfigId = SERVER_CONFIG.id,
148+
proxyCredentials = null
149+
)
150+
)
142151
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(USER_ID))
143152
.withValidateEmailReturning(true)
144153
.withPersistEmailReturning(PersistSelfUserEmailResult.Success)
@@ -165,7 +174,7 @@ class LoginEmailViewModelTest {
165174
runTest {
166175
val password = "abc"
167176
val (arrangement, loginViewModel) = Arrangement()
168-
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, SERVER_CONFIG.id, null))
177+
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, MANAGED_BY, SERVER_CONFIG.id, null))
169178
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(USER_ID))
170179
.withValidateEmailReturning(true)
171180
.withPersistEmailReturning(PersistSelfUserEmailResult.Success)
@@ -239,7 +248,7 @@ class LoginEmailViewModelTest {
239248
@Test
240249
fun `given button is clicked, when addAuthenticatedUser returns UserAlreadyExists error, then UserAlreadyExists is passed`() = runTest {
241250
val (arrangement, loginViewModel) = Arrangement()
242-
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, SERVER_CONFIG.id, null))
251+
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, MANAGED_BY, SERVER_CONFIG.id, null))
243252
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Failure.UserAlreadyExists)
244253
.arrange()
245254

@@ -375,7 +384,7 @@ class LoginEmailViewModelTest {
375384
val email = "some.email@example.org"
376385
val code = "123456"
377386
val (arrangement, loginViewModel) = Arrangement()
378-
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, SERVER_CONFIG.id, null))
387+
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, MANAGED_BY, SERVER_CONFIG.id, null))
379388
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(USER_ID))
380389
.withValidateEmailReturning(true)
381390
.withPersistEmailReturning(PersistSelfUserEmailResult.Success)
@@ -398,7 +407,7 @@ class LoginEmailViewModelTest {
398407
val email = "some.email@example.org"
399408
val code = "123456"
400409
val (arrangement, loginViewModel) = Arrangement()
401-
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, SERVER_CONFIG.id, null))
410+
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, MANAGED_BY, SERVER_CONFIG.id, null))
402411
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(USER_ID))
403412
.withValidateEmailReturning(true)
404413
.withPersistEmailReturning(PersistSelfUserEmailResult.Success)
@@ -419,7 +428,7 @@ class LoginEmailViewModelTest {
419428
val email = "some.email@example.org"
420429
val code = "123456"
421430
val (arrangement, loginViewModel) = Arrangement()
422-
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, SERVER_CONFIG.id, null))
431+
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, MANAGED_BY, SERVER_CONFIG.id, null))
423432
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(USER_ID))
424433
.withValidateEmailReturning(true)
425434
.withPersistEmailReturning(PersistSelfUserEmailResult.Success)
@@ -453,7 +462,7 @@ class LoginEmailViewModelTest {
453462
fun `given email, when logging in, then persist email`() = runTest {
454463
val email = "some.email@example.org"
455464
val (arrangement, loginViewModel) = Arrangement()
456-
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, SERVER_CONFIG.id, null))
465+
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, MANAGED_BY, SERVER_CONFIG.id, null))
457466
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(USER_ID))
458467
.withValidateEmailReturning(true)
459468
.withPersistEmailReturning(PersistSelfUserEmailResult.Success)
@@ -472,7 +481,7 @@ class LoginEmailViewModelTest {
472481
fun `given handle, when logging in, then do not persist email`() = runTest {
473482
val handle = "some.handle"
474483
val (arrangement, loginViewModel) = Arrangement()
475-
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, SERVER_CONFIG.id, null))
484+
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, MANAGED_BY, SERVER_CONFIG.id, null))
476485
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(USER_ID))
477486
.withValidateEmailReturning(false)
478487
.withGetOrRegisterClientReturning(RegisterClientResult.Success(CLIENT))
@@ -491,7 +500,7 @@ class LoginEmailViewModelTest {
491500
val email = "some.email@example.org"
492501
val failure = CoreFailure.Unknown(null)
493502
val (arrangement, loginViewModel) = Arrangement()
494-
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, SERVER_CONFIG.id, null))
503+
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, MANAGED_BY, SERVER_CONFIG.id, null))
495504
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(USER_ID))
496505
.withValidateEmailReturning(true)
497506
.withPersistEmailReturning(PersistSelfUserEmailResult.Failure(failure))
@@ -514,7 +523,15 @@ class LoginEmailViewModelTest {
514523
val newUserId = UserId("newUserId", "domain")
515524
val (arrangement, loginViewModel) = Arrangement()
516525
.withCurrentSessionReturning(CurrentSessionResult.Success(AccountInfo.Valid(previousUserId)))
517-
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN.copy(userId = newUserId), SSO_ID, SERVER_CONFIG.id, null))
526+
.withLoginReturning(
527+
AuthenticationResult.Success(
528+
authData = AUTH_TOKEN.copy(userId = newUserId),
529+
ssoID = SSO_ID,
530+
managedBy = MANAGED_BY,
531+
serverConfigId = SERVER_CONFIG.id,
532+
proxyCredentials = null
533+
)
534+
)
518535
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(newUserId))
519536
.withValidateEmailReturning(true)
520537
.withPersistEmailReturning(PersistSelfUserEmailResult.Success)
@@ -651,7 +668,7 @@ class LoginEmailViewModelTest {
651668
.withDeleteSessionReturning(DeleteSessionUseCase.Result.Success)
652669
.withUpdateCurrentSessionReturning(UpdateCurrentSessionUseCase.Result.Success)
653670
.withCurrentSessionReturning(CurrentSessionResult.Success(AccountInfo.Valid(previousUserId)))
654-
.withLoginReturning(AuthenticationResult.Success(authToken2, SSO_ID, SERVER_CONFIG.id, null))
671+
.withLoginReturning(AuthenticationResult.Success(authToken2, SSO_ID, MANAGED_BY, SERVER_CONFIG.id, null))
655672
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(newUserId2))
656673
.withValidateEmailReturning(true)
657674
.withPersistEmailReturning(PersistSelfUserEmailResult.Success)
@@ -672,7 +689,7 @@ class LoginEmailViewModelTest {
672689
}
673690
coVerify(exactly = 1) { // verify that the second login job has been started
674691
arrangement.loginUseCase(any(), any(), any(), any(), any())
675-
arrangement.addAuthenticatedUserUseCase(any(), any(), eq(authToken2), any())
692+
arrangement.addAuthenticatedUserUseCase(any(), any(), eq(authToken2), any(), any())
676693
}
677694
}
678695

@@ -686,7 +703,7 @@ class LoginEmailViewModelTest {
686703
.withDeleteSessionReturning(DeleteSessionUseCase.Result.Success)
687704
.withUpdateCurrentSessionReturning(UpdateCurrentSessionUseCase.Result.Success)
688705
.withCurrentSessionReturning(CurrentSessionResult.Success(AccountInfo.Valid(previousUserId)))
689-
.withLoginReturning(AuthenticationResult.Success(authToken, SSO_ID, SERVER_CONFIG.id, null))
706+
.withLoginReturning(AuthenticationResult.Success(authToken, SSO_ID, MANAGED_BY, SERVER_CONFIG.id, null))
690707
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(newUserId))
691708
.withValidateEmailReturning(true)
692709
.withPersistEmailReturning(PersistSelfUserEmailResult.Success)
@@ -713,7 +730,7 @@ class LoginEmailViewModelTest {
713730
.withDeleteSessionReturning(DeleteSessionUseCase.Result.Success)
714731
.withUpdateCurrentSessionReturning(UpdateCurrentSessionUseCase.Result.Success)
715732
.withCurrentSessionReturning(CurrentSessionResult.Success(AccountInfo.Valid(previousUserId)))
716-
.withLoginReturning(AuthenticationResult.Success(authToken, SSO_ID, SERVER_CONFIG.id, null))
733+
.withLoginReturning(AuthenticationResult.Success(authToken, SSO_ID, MANAGED_BY, SERVER_CONFIG.id, null))
717734
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(newUserId))
718735
.withValidateEmailReturning(true)
719736
.withPersistEmailReturning(PersistSelfUserEmailResult.Success)
@@ -752,7 +769,7 @@ class LoginEmailViewModelTest {
752769
val (arrangement, loginViewModel) = Arrangement()
753770
.withCurrentSessionReturning(CurrentSessionResult.Failure.SessionNotFound)
754771
.withValidateEmailReturning(true)
755-
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, SERVER_CONFIG.id, null))
772+
.withLoginReturning(AuthenticationResult.Success(AUTH_TOKEN, SSO_ID, MANAGED_BY, SERVER_CONFIG.id, null))
756773
.withAddAuthenticatedUserReturning(AddAuthenticatedUserUseCase.Result.Success(USER_ID))
757774
.withPersistEmailReturning(PersistSelfUserEmailResult.Success)
758775
.withGetOrRegisterClientReturning(RegisterClientResult.Success(CLIENT))
@@ -874,7 +891,7 @@ class LoginEmailViewModelTest {
874891

875892
fun withAddAuthenticatedUserReturning(result: AddAuthenticatedUserUseCase.Result) = apply {
876893
coEvery {
877-
addAuthenticatedUserUseCase(any(), any(), any(), any())
894+
addAuthenticatedUserUseCase(any(), any(), any(), any(), any())
878895
} returns result
879896
}
880897

@@ -931,6 +948,7 @@ class LoginEmailViewModelTest {
931948
val CLIENT = TestClient.CLIENT
932949
val USER_ID: QualifiedID = QualifiedID("userId", "domain")
933950
val SSO_ID: SsoId = SsoId("scim_id", null, null)
951+
val MANAGED_BY: SsoManagedBy = SsoManagedBy.WIRE
934952
val AUTH_TOKEN = AccountTokens(
935953
userId = UserId("user_id", "domain"),
936954
accessToken = "access_token",

kalium

Submodule kalium updated 35 files

0 commit comments

Comments
 (0)