From eb271ae99ddce640df8c77a18b13bdb397b716f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Tue, 22 Jul 2025 15:52:47 +0100 Subject: [PATCH] [PM-23311] Sync vault before exporting. --- .../exportvault/ExportVaultViewModel.kt | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultViewModel.kt index b5c192eedc..c8fa725566 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultViewModel.kt @@ -429,6 +429,15 @@ class ExportVaultViewModel @Inject constructor( } viewModelScope.launch { + // Check if the export vault policy prevents exporting the vault. + syncExportVaultPolicy() + if (state.policyPreventsExport) { + updateStateWithError( + message = R.string.disable_personal_vault_export_policy_in_effect.asText(), + ) + return@launch + } + val result = vaultRepository.exportVaultDataToString( format = state.exportFormat.toExportFormat( password = if (state.exportFormat == ExportVaultFormat.JSON_ENCRYPTED) { @@ -475,6 +484,15 @@ class ExportVaultViewModel @Inject constructor( return listOf(CipherType.CARD) } + + private suspend fun syncExportVaultPolicy() { + // Sync vault policies to ensure we have the latest data. + vaultRepository.syncForResult() + // Check if the policy prevents exporting the vault. + state.policyPreventsExport = policyManager + .getActivePolicies(type = PolicyTypeJson.DISABLE_PERSONAL_VAULT_EXPORT) + .any() + } } /** @@ -490,7 +508,7 @@ data class ExportVaultState( val filePasswordInput: String, val passwordInput: String, val passwordStrengthState: PasswordStrengthState, - val policyPreventsExport: Boolean, + var policyPreventsExport: Boolean, val showSendCodeButton: Boolean, ) : Parcelable { /**