From 6037016703c11980a0b0543e69e973a9037c60e1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:27:40 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20images=20form=20iOS=20are=20blocked=20wh?= =?UTF-8?q?en=20restrictions=20are=20applied=20[WPB-10830]=20=F0=9F=8D=92?= =?UTF-8?q?=20(#3010)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: images form iOS are blocked when restrictions are applied (#3006) * cherry pick and resolve conflicts --------- Co-authored-by: Mohamad Jaara --- .../receiver/asset/AssetMessageHandler.kt | 23 +++++++--------- .../receiver/asset/AssetMessageHandlerTest.kt | 27 ++++++++++--------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/logic/src/commonMain/kotlin/com/wire/kalium/logic/sync/receiver/asset/AssetMessageHandler.kt b/logic/src/commonMain/kotlin/com/wire/kalium/logic/sync/receiver/asset/AssetMessageHandler.kt index 3bc9fa7ac2..b99adccea0 100644 --- a/logic/src/commonMain/kotlin/com/wire/kalium/logic/sync/receiver/asset/AssetMessageHandler.kt +++ b/logic/src/commonMain/kotlin/com/wire/kalium/logic/sync/receiver/asset/AssetMessageHandler.kt @@ -60,23 +60,18 @@ internal class AssetMessageHandlerImpl( // asset data then we can not decide now if it is allowed or not // it is safe to continue and the code later will check the original // asset message and decide if it is allowed or not - if ( - messageContent.value.name.isNullOrEmpty() && - messageContent.value.isAssetDataComplete - ) { - kaliumLogger.e("The asset message trying to be processed has invalid data looking locally") - AssetRestrictionContinuationStrategy.RestrictIfThereIsNotOldMessageWithTheSameAssetID - } else { - validateAssetMimeTypeUseCase( + if (validateAssetMimeTypeUseCase( fileName = messageContent.value.name, mimeType = messageContent.value.mimeType, allowedExtension = it.state.allowedType - ).let { validateResult -> - if (validateResult) { - AssetRestrictionContinuationStrategy.Continue - } else { - AssetRestrictionContinuationStrategy.Restrict - } + ) + ) { + AssetRestrictionContinuationStrategy.Continue + } else { + if (messageContent.value.name.isNullOrEmpty() && messageContent.value.isAssetDataComplete) { + AssetRestrictionContinuationStrategy.RestrictIfThereIsNotOldMessageWithTheSameAssetID + } else { + AssetRestrictionContinuationStrategy.Restrict } } } diff --git a/logic/src/jvmTest/kotlin/com/wire/kalium/logic/sync/receiver/asset/AssetMessageHandlerTest.kt b/logic/src/jvmTest/kotlin/com/wire/kalium/logic/sync/receiver/asset/AssetMessageHandlerTest.kt index 64b4db4022..fae069d261 100644 --- a/logic/src/jvmTest/kotlin/com/wire/kalium/logic/sync/receiver/asset/AssetMessageHandlerTest.kt +++ b/logic/src/jvmTest/kotlin/com/wire/kalium/logic/sync/receiver/asset/AssetMessageHandlerTest.kt @@ -36,6 +36,7 @@ import com.wire.kalium.logic.functional.Either import com.wire.kalium.util.time.UNIX_FIRST_DATE import io.mockative.Mock import io.mockative.any +import io.mockative.classOf import io.mockative.coEvery import io.mockative.coVerify import io.mockative.eq @@ -251,7 +252,7 @@ class AssetMessageHandlerTest { val isFileSharingEnabled = FileSharingStatus.Value.EnabledSome(listOf("txt", "png", "zip")) val (arrangement, assetMessageHandler) = Arrangement() .withSuccessfulFileSharingFlag(isFileSharingEnabled) - .withValidateAssetMime(true) + .withValidateAssetFileType(true) .withSuccessfulStoredMessage(previewAssetMessage) .withSuccessfulPersistMessageUseCase(updateAssetMessage) .arrange() @@ -276,11 +277,10 @@ class AssetMessageHandlerTest { eq(previewAssetMessage.conversationId), eq(previewAssetMessage.id) ) - } - .wasInvoked(exactly = once) + }.wasInvoked(exactly = once) coVerify { - arrangement.validateAssetMimeType( + arrangement.validateAssetFileTypeUseCase( fileName = eq(COMPLETE_ASSET_CONTENT.value.name), mimeType = eq("application/zip"), allowedExtension = eq(isFileSharingEnabled.allowedType) @@ -296,7 +296,7 @@ class AssetMessageHandlerTest { val isFileSharingEnabled = FileSharingStatus.Value.EnabledSome(listOf("txt", "png")) val (arrangement, assetMessageHandler) = Arrangement() .withSuccessfulFileSharingFlag(isFileSharingEnabled) - .withValidateAssetMime(true) + .withValidateAssetFileType(true) .withSuccessfulStoredMessage(previewAssetMessage) .withSuccessfulPersistMessageUseCase(updateAssetMessage) .arrange() @@ -323,7 +323,7 @@ class AssetMessageHandlerTest { }.wasInvoked(exactly = once) coVerify { - arrangement.validateAssetMimeType( + arrangement.validateAssetFileTypeUseCase( fileName = eq(COMPLETE_ASSET_CONTENT.value.name), mimeType = eq("application/zip"), allowedExtension = eq(isFileSharingEnabled.allowedType) @@ -339,7 +339,7 @@ class AssetMessageHandlerTest { val isFileSharingEnabled = FileSharingStatus.Value.Disabled val (arrangement, assetMessageHandler) = Arrangement() .withSuccessfulFileSharingFlag(isFileSharingEnabled) - .withValidateAssetMime(true) + .withValidateAssetFileType(true) .withSuccessfulStoredMessage(previewAssetMessage) .withSuccessfulPersistMessageUseCase(updateAssetMessage) .arrange() @@ -361,8 +361,7 @@ class AssetMessageHandlerTest { coVerify { arrangement.messageRepository.getMessageById(eq(previewAssetMessage.conversationId), eq(previewAssetMessage.id)) } .wasNotInvoked() - coVerify { arrangement.validateAssetMimeType(any(), any(), any>()) } - .wasNotInvoked() + coVerify { arrangement.validateAssetFileTypeUseCase(any(), any(), any>()) } } @Test @@ -396,6 +395,7 @@ class AssetMessageHandlerTest { val (arrangement, assetMessageHandler) = Arrangement() .withSuccessfulFileSharingFlag(isFileSharingEnabled) .withSuccessfulStoredMessage(previewAssetMessage) + .withValidateAssetFileType(true) .arrange() // When @@ -440,6 +440,7 @@ class AssetMessageHandlerTest { .withSuccessfulFileSharingFlag(isFileSharingEnabled) .withSuccessfulStoredMessage(null) .withSuccessfulPersistMessageUseCase(storedMessage) + .withValidateAssetFileType(true) .arrange() // When @@ -465,14 +466,14 @@ class AssetMessageHandlerTest { val userConfigRepository = mock(UserConfigRepository::class) @Mock - val validateAssetMimeType = mock(ValidateAssetFileTypeUseCase::class) + val validateAssetFileTypeUseCase = mock(classOf()) private val assetMessageHandlerImpl = - AssetMessageHandlerImpl(messageRepository, persistMessage, userConfigRepository, validateAssetMimeType) + AssetMessageHandlerImpl(messageRepository, persistMessage, userConfigRepository, validateAssetFileTypeUseCase) - fun withValidateAssetMime(result: Boolean) = apply { + fun withValidateAssetFileType(result: Boolean) = apply { every { - validateAssetMimeType.invoke(any(), any(), any()) + validateAssetFileTypeUseCase.invoke(any(), any(), any()) }.returns(result) }