Compare commits

...

6 Commits

Author SHA1 Message Date
André Bispo
924427bdcd Merge branch 'main' into pm-18451/exempt-from-policies
# Conflicts:
#	app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt
2025-02-26 11:30:40 +00:00
André Bispo
09cb26e743 [PM-18451] Refactor if clause to when statement 2025-02-26 10:23:20 +00:00
André Bispo
329753d9dc [PM-18451] Elevated privileges do not exempt from remove pin unlock policy 2025-02-26 09:44:25 +00:00
André Bispo
790c70936f Revert "[PM-18451] Cherrypick - Validate remove pin policy against user privileges (#4786)"
This reverts commit d63d6bd33c.
2025-02-26 09:28:57 +00:00
André Bispo
ffc3784bbb [PM-15873] Cherrypick: PTR remaining changes (#4785) 2025-02-25 21:26:40 +00:00
André Bispo
d63d6bd33c [PM-18451] Cherrypick - Validate remove pin policy against user privileges (#4786) 2025-02-25 21:25:50 +00:00
2 changed files with 44 additions and 40 deletions

View File

@@ -93,13 +93,21 @@ class PolicyManagerImpl(
organization: SyncResponseJson.Profile.Organization,
policyType: PolicyTypeJson,
): Boolean =
if (policyType == PolicyTypeJson.MAXIMUM_VAULT_TIMEOUT) {
organization.type == OrganizationType.OWNER
} else if (policyType == PolicyTypeJson.PASSWORD_GENERATOR) {
false
} else {
(organization.type == OrganizationType.OWNER ||
organization.type == OrganizationType.ADMIN) ||
organization.permissions.shouldManagePolicies
when (policyType) {
PolicyTypeJson.MAXIMUM_VAULT_TIMEOUT -> {
organization.type == OrganizationType.OWNER
}
PolicyTypeJson.PASSWORD_GENERATOR,
PolicyTypeJson.REMOVE_UNLOCK_WITH_PIN,
-> {
false
}
else -> {
(organization.type == OrganizationType.OWNER ||
organization.type == OrganizationType.ADMIN) ||
organization.permissions.shouldManagePolicies
}
}
}

View File

@@ -177,7 +177,31 @@ class AccountSecurityViewModelTest : BaseViewModelTest() {
mutableRemovePinPolicyFlow.emit(
listOf(
createMockPolicy(
isEnabled = true,
type = PolicyTypeJson.REMOVE_UNLOCK_WITH_PIN,
organizationId = "organizationUser",
),
),
)
viewModel.stateFlow.test {
assertEquals(
DEFAULT_STATE.copy(
removeUnlockWithPinPolicyEnabled = true,
),
awaitItem(),
)
}
}
@Test
fun `remove pin policy is true when user role is ADMIN`() = runTest {
val viewModel = createViewModel()
mutableRemovePinPolicyFlow.emit(
listOf(
createMockPolicy(
organizationId = "organizationAdmin",
isEnabled = true,
type = PolicyTypeJson.REMOVE_UNLOCK_WITH_PIN,
),
@@ -195,31 +219,7 @@ class AccountSecurityViewModelTest : BaseViewModelTest() {
}
@Test
fun `remove pin policy is false when user role is ADMIN`() = runTest {
val viewModel = createViewModel()
mutableRemovePinPolicyFlow.emit(
listOf(
createMockPolicy(
organizationId = "organizationAdmin",
isEnabled = true,
type = PolicyTypeJson.REMOVE_UNLOCK_WITH_PIN,
),
),
)
viewModel.stateFlow.test {
assertEquals(
DEFAULT_STATE.copy(
removeUnlockWithPinPolicyEnabled = false,
),
awaitItem(),
)
}
}
@Test
fun `remove pin policy is false when user role is OWNER`() = runTest {
fun `remove pin policy is true when user role is OWNER`() = runTest {
val viewModel = createViewModel()
mutableRemovePinPolicyFlow.emit(
@@ -235,7 +235,7 @@ class AccountSecurityViewModelTest : BaseViewModelTest() {
viewModel.stateFlow.test {
assertEquals(
DEFAULT_STATE.copy(
removeUnlockWithPinPolicyEnabled = false,
removeUnlockWithPinPolicyEnabled = true,
),
awaitItem(),
)
@@ -243,7 +243,7 @@ class AccountSecurityViewModelTest : BaseViewModelTest() {
}
@Test
fun `remove pin policy is false when user role is CUSTOM with manage policies`() = runTest {
fun `remove pin policy is true when user role is CUSTOM with manage policies`() = runTest {
val viewModel = createViewModel()
mutableRemovePinPolicyFlow.emit(
@@ -259,7 +259,7 @@ class AccountSecurityViewModelTest : BaseViewModelTest() {
viewModel.stateFlow.test {
assertEquals(
DEFAULT_STATE.copy(
removeUnlockWithPinPolicyEnabled = false,
removeUnlockWithPinPolicyEnabled = true,
),
awaitItem(),
)
@@ -988,7 +988,6 @@ private val DEFAULT_USER_STATE = UserState(
Organization(
id = "organizationUser",
name = "Organization User",
shouldManagePolicies = false,
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.USER,
@@ -996,7 +995,6 @@ private val DEFAULT_USER_STATE = UserState(
Organization(
id = "organizationAdmin",
name = "Organization Admin",
shouldManagePolicies = false,
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.ADMIN,
@@ -1004,7 +1002,6 @@ private val DEFAULT_USER_STATE = UserState(
Organization(
id = "organizationOwner",
name = "Organization Owner",
shouldManagePolicies = false,
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.OWNER,
@@ -1012,7 +1009,6 @@ private val DEFAULT_USER_STATE = UserState(
Organization(
id = "organizationCustom",
name = "Organization Owner",
shouldManagePolicies = true,
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.CUSTOM,