Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: MLS enabling setting [WPB-7097] #2643

Merged
merged 8 commits into from
Mar 13, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,7 @@ sealed class Event(open val id: String) {
typeKey to "FeatureConfig.MLSUpdated",
idKey to id.obfuscateId(),
featureStatusKey to model.status.name,
"allowedUsers" to model.allowedUsers.map { it.value.obfuscateId() }
"allowedUsers" to model.allowedUsers?.map { it.value.obfuscateId() }
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,13 +77,13 @@ class FeatureConfigMapperImpl : FeatureConfigMapper {
override fun fromDTO(data: FeatureConfigData.MLS?): MLSModel =
data?.let {
MLSModel(
it.config.protocolToggleUsers.map { userId -> PlainId(userId) },
it.config.protocolToggleUsers?.map { userId -> PlainId(userId) },
it.config.defaultProtocol.toModel(),
it.config.supportedProtocols.map { it.toModel() }.toSet(),
fromDTO(it.status)
)
} ?: MLSModel(
listOf(),
null,
SupportedProtocol.PROTEUS,
setOf(SupportedProtocol.PROTEUS),
Status.DISABLED
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ data class SelfDeletingMessagesConfigModel(
)

data class MLSModel(
val allowedUsers: List<PlainId>,
val allowedUsers: List<PlainId>?,
borichellow marked this conversation as resolved.
Show resolved Hide resolved
val defaultProtocol: SupportedProtocol,
val supportedProtocols: Set<SupportedProtocol>,
val status: Status
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ import com.wire.kalium.logic.data.conversation.ConversationDataSource
import com.wire.kalium.logic.data.conversation.ConversationGroupRepository
import com.wire.kalium.logic.data.conversation.ConversationGroupRepositoryImpl
import com.wire.kalium.logic.data.conversation.ConversationRepository
import com.wire.kalium.logic.data.conversation.EpochChangesObserverImpl
import com.wire.kalium.logic.data.conversation.JoinExistingMLSConversationUseCase
import com.wire.kalium.logic.data.conversation.JoinExistingMLSConversationUseCaseImpl
import com.wire.kalium.logic.data.conversation.JoinExistingMLSConversationsUseCase
Expand All @@ -81,6 +82,8 @@ import com.wire.kalium.logic.data.e2ei.CertificateRevocationListRepository
import com.wire.kalium.logic.data.e2ei.CertificateRevocationListRepositoryDataSource
import com.wire.kalium.logic.data.e2ei.E2EIRepository
import com.wire.kalium.logic.data.e2ei.E2EIRepositoryImpl
import com.wire.kalium.logic.data.e2ei.MLSConversationsVerificationStatusesHandler
import com.wire.kalium.logic.data.e2ei.MLSConversationsVerificationStatusesHandlerImpl
import com.wire.kalium.logic.data.event.EventDataSource
import com.wire.kalium.logic.data.event.EventRepository
import com.wire.kalium.logic.data.featureConfig.FeatureConfigDataSource
Expand Down Expand Up @@ -186,8 +189,6 @@ import com.wire.kalium.logic.feature.conversation.ConversationsRecoveryManager
import com.wire.kalium.logic.feature.conversation.ConversationsRecoveryManagerImpl
import com.wire.kalium.logic.feature.conversation.MLSConversationsRecoveryManager
import com.wire.kalium.logic.feature.conversation.MLSConversationsRecoveryManagerImpl
import com.wire.kalium.logic.data.e2ei.MLSConversationsVerificationStatusesHandler
import com.wire.kalium.logic.data.e2ei.MLSConversationsVerificationStatusesHandlerImpl
import com.wire.kalium.logic.feature.conversation.ObserveOtherUserSecurityClassificationLabelUseCase
import com.wire.kalium.logic.feature.conversation.ObserveOtherUserSecurityClassificationLabelUseCaseImpl
import com.wire.kalium.logic.feature.conversation.ObserveSecurityClassificationLabelUseCase
Expand All @@ -199,7 +200,6 @@ import com.wire.kalium.logic.feature.conversation.SyncConversationsUseCaseImpl
import com.wire.kalium.logic.feature.conversation.TypingIndicatorSyncManager
import com.wire.kalium.logic.feature.conversation.keyingmaterials.KeyingMaterialsManager
import com.wire.kalium.logic.feature.conversation.keyingmaterials.KeyingMaterialsManagerImpl
import com.wire.kalium.logic.data.conversation.EpochChangesObserverImpl
import com.wire.kalium.logic.feature.conversation.mls.MLSOneOnOneConversationResolver
import com.wire.kalium.logic.feature.conversation.mls.MLSOneOnOneConversationResolverImpl
import com.wire.kalium.logic.feature.conversation.mls.OneOnOneMigrator
Expand Down Expand Up @@ -1522,7 +1522,7 @@ class UserSessionScope internal constructor(
get() = FileSharingConfigHandler(userConfigRepository)

private val mlsConfigHandler
get() = MLSConfigHandler(userConfigRepository, updateSupportedProtocolsAndResolveOneOnOnes, userId)
get() = MLSConfigHandler(userConfigRepository, updateSupportedProtocolsAndResolveOneOnOnes)

private val mlsMigrationConfigHandler
get() = MLSMigrationConfigHandler(userConfigRepository, updateSupportedProtocolsAndResolveOneOnOnes)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,24 +22,22 @@ import com.wire.kalium.logic.configuration.UserConfigRepository
import com.wire.kalium.logic.data.featureConfig.MLSModel
import com.wire.kalium.logic.data.featureConfig.Status
import com.wire.kalium.logic.data.user.SupportedProtocol
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.user.UpdateSupportedProtocolsAndResolveOneOnOnesUseCase
import com.wire.kalium.logic.functional.Either
import com.wire.kalium.logic.functional.flatMap
import com.wire.kalium.logic.functional.getOrElse

class MLSConfigHandler(
private val userConfigRepository: UserConfigRepository,
private val updateSupportedProtocolsAndResolveOneOnOnes: UpdateSupportedProtocolsAndResolveOneOnOnesUseCase,
private val selfUserId: UserId
private val updateSupportedProtocolsAndResolveOneOnOnes: UpdateSupportedProtocolsAndResolveOneOnOnesUseCase
) {
suspend fun handle(mlsConfig: MLSModel, duringSlowSync: Boolean): Either<CoreFailure, Unit> {
val mlsEnabled = mlsConfig.status == Status.ENABLED
val selfUserIsWhitelisted = mlsConfig.allowedUsers.contains(selfUserId.toPlainID())
val isMLSSupported = mlsConfig.supportedProtocols.contains(SupportedProtocol.MLS)
val previousSupportedProtocols = userConfigRepository.getSupportedProtocols().getOrElse(setOf(SupportedProtocol.PROTEUS))
val supportedProtocolsHasChanged = !previousSupportedProtocols.equals(mlsConfig.supportedProtocols)

return userConfigRepository.setMLSEnabled(mlsEnabled && selfUserIsWhitelisted)
return userConfigRepository.setMLSEnabled(mlsEnabled && isMLSSupported)
.flatMap {
userConfigRepository.setDefaultProtocol(if (mlsEnabled) mlsConfig.defaultProtocol else SupportedProtocol.PROTEUS)
}.flatMap {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,16 @@ import com.wire.kalium.logic.configuration.UserConfigDataSource
import com.wire.kalium.logic.configuration.UserConfigRepository
import com.wire.kalium.logic.data.featureConfig.ConferenceCallingModel
import com.wire.kalium.logic.data.featureConfig.ConfigsStatusModel
import com.wire.kalium.logic.data.featureConfig.E2EIConfigModel
import com.wire.kalium.logic.data.featureConfig.E2EIModel
import com.wire.kalium.logic.data.featureConfig.FeatureConfigModel
import com.wire.kalium.logic.data.featureConfig.FeatureConfigRepository
import com.wire.kalium.logic.data.featureConfig.FeatureConfigTest
import com.wire.kalium.logic.data.featureConfig.E2EIConfigModel
import com.wire.kalium.logic.data.featureConfig.E2EIModel
import com.wire.kalium.logic.data.featureConfig.SelfDeletingMessagesConfigModel
import com.wire.kalium.logic.data.featureConfig.SelfDeletingMessagesModel
import com.wire.kalium.logic.data.featureConfig.Status
import com.wire.kalium.logic.data.message.SelfDeletionMapper.toTeamSelfDeleteTimer
import com.wire.kalium.logic.data.message.TeamSelfDeleteTimer
import com.wire.kalium.logic.feature.featureConfig.handler.AppLockConfigHandler
import com.wire.kalium.logic.feature.featureConfig.handler.ClassifiedDomainsConfigHandler
import com.wire.kalium.logic.feature.featureConfig.handler.ConferenceCallingConfigHandler
Expand All @@ -42,12 +44,9 @@ import com.wire.kalium.logic.feature.featureConfig.handler.MLSConfigHandler
import com.wire.kalium.logic.feature.featureConfig.handler.MLSMigrationConfigHandler
import com.wire.kalium.logic.feature.featureConfig.handler.SecondFactorPasswordChallengeConfigHandler
import com.wire.kalium.logic.feature.featureConfig.handler.SelfDeletingMessagesConfigHandler
import com.wire.kalium.logic.data.message.SelfDeletionMapper.toTeamSelfDeleteTimer
import com.wire.kalium.logic.data.message.TeamSelfDeleteTimer
import com.wire.kalium.logic.feature.user.UpdateSupportedProtocolsAndResolveOneOnOnesUseCase
import com.wire.kalium.logic.featureFlags.BuildFileRestrictionState
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import com.wire.kalium.logic.framework.TestUser
import com.wire.kalium.logic.functional.Either
import com.wire.kalium.logic.test_util.TestNetworkException
import com.wire.kalium.logic.util.shouldSucceed
Expand Down Expand Up @@ -733,7 +732,7 @@ class SyncFeatureConfigsUseCaseTest {
featureConfigRepository,
GuestRoomConfigHandler(userConfigRepository, kaliumConfigs),
FileSharingConfigHandler(userConfigRepository),
MLSConfigHandler(userConfigRepository, updateSupportedProtocolsAndResolveOneOnOnes, TestUser.SELF.id),
MLSConfigHandler(userConfigRepository, updateSupportedProtocolsAndResolveOneOnOnes),
MLSMigrationConfigHandler(userConfigRepository, updateSupportedProtocolsAndResolveOneOnOnes),
ClassifiedDomainsConfigHandler(userConfigRepository),
ConferenceCallingConfigHandler(userConfigRepository),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,17 +94,19 @@ class MLSConfigHandlerTest {
}

@Test
fun givenMlsIsEnabledAndSelfUserIsWhitelisted_whenSyncing_thenSetMlsEnabled() = runTest {
fun givenMlsIsEnabledAndMlsIsSupported_whenSyncing_thenSetMlsEnabled() = runTest {
val (arrangement, handler) = arrange {
withGetSupportedProtocolsReturning(Either.Right(setOf(SupportedProtocol.PROTEUS)))
withSetSupportedProtocolsSuccessful()
withSetDefaultProtocolSuccessful()
withSetMLSEnabledSuccessful()
withUpdateSupportedProtocolsAndResolveOneOnOnesSuccessful()
}

handler.handle(MLS_CONFIG.copy(
status = Status.ENABLED,
allowedUsers = listOf(SELF_USER_ID.toPlainID())
allowedUsers = listOf(SELF_USER_ID.toPlainID()),
supportedProtocols = setOf(SupportedProtocol.PROTEUS, SupportedProtocol.MLS)
), duringSlowSync = false)

verify(arrangement.userConfigRepository)
Expand Down Expand Up @@ -202,8 +204,7 @@ class MLSConfigHandlerTest {
block()
this@Arrangement to MLSConfigHandler(
userConfigRepository = userConfigRepository,
updateSupportedProtocolsAndResolveOneOnOnes = updateSupportedProtocolsAndResolveOneOnOnes,
SELF_USER_ID
updateSupportedProtocolsAndResolveOneOnOnes = updateSupportedProtocolsAndResolveOneOnOnes
)
}
}
Expand All @@ -213,7 +214,7 @@ class MLSConfigHandlerTest {

val SELF_USER_ID = TestUser.USER_ID
val MLS_CONFIG = MLSModel(
allowedUsers = emptyList(),
allowedUsers = null,
defaultProtocol = SupportedProtocol.MLS,
supportedProtocols = setOf(SupportedProtocol.PROTEUS),
status = Status.ENABLED
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ import com.wire.kalium.logic.data.featureConfig.ConfigsStatusModel
import com.wire.kalium.logic.data.featureConfig.SelfDeletingMessagesConfigModel
import com.wire.kalium.logic.data.featureConfig.SelfDeletingMessagesModel
import com.wire.kalium.logic.data.featureConfig.Status
import com.wire.kalium.logic.data.message.TeamSelfDeleteTimer
import com.wire.kalium.logic.data.message.TeamSettingsSelfDeletionStatus
import com.wire.kalium.logic.feature.featureConfig.handler.AppLockConfigHandler
import com.wire.kalium.logic.feature.featureConfig.handler.ClassifiedDomainsConfigHandler
import com.wire.kalium.logic.feature.featureConfig.handler.ConferenceCallingConfigHandler
Expand All @@ -36,12 +38,9 @@ import com.wire.kalium.logic.feature.featureConfig.handler.GuestRoomConfigHandle
import com.wire.kalium.logic.feature.featureConfig.handler.MLSConfigHandler
import com.wire.kalium.logic.feature.featureConfig.handler.MLSMigrationConfigHandler
import com.wire.kalium.logic.feature.featureConfig.handler.SelfDeletingMessagesConfigHandler
import com.wire.kalium.logic.data.message.TeamSelfDeleteTimer
import com.wire.kalium.logic.data.message.TeamSettingsSelfDeletionStatus
import com.wire.kalium.logic.feature.user.UpdateSupportedProtocolsAndResolveOneOnOnesUseCase
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import com.wire.kalium.logic.framework.TestEvent
import com.wire.kalium.logic.framework.TestUser
import com.wire.kalium.logic.functional.Either
import com.wire.kalium.logic.util.shouldSucceed
import io.mockative.Mock
Expand Down Expand Up @@ -107,7 +106,7 @@ class FeatureConfigEventReceiverTest {
event = arrangement.newFileSharingUpdatedEvent(ConfigsStatusModel(Status.DISABLED)),
deliveryInfo = TestEvent.liveDeliveryInfo
)

verify(arrangement.userConfigRepository)
.function(arrangement.userConfigRepository::setFileSharingStatus)
.with(eq(false), eq(false))
Expand Down Expand Up @@ -164,7 +163,7 @@ class FeatureConfigEventReceiverTest {
.arrange()

featureConfigEventReceiver.onEvent(
arrangement.newSelfDeletingMessagesUpdatedEvent(newSelfDeletingEventModel),
arrangement.newSelfDeletingMessagesUpdatedEvent(newSelfDeletingEventModel),
TestEvent.liveDeliveryInfo
)

Expand All @@ -191,7 +190,7 @@ class FeatureConfigEventReceiverTest {
.arrange()

featureConfigEventReceiver.onEvent(
arrangement.newSelfDeletingMessagesUpdatedEvent(newSelfDeletingEventModel),
arrangement.newSelfDeletingMessagesUpdatedEvent(newSelfDeletingEventModel),
TestEvent.liveDeliveryInfo
)

Expand Down Expand Up @@ -219,7 +218,7 @@ class FeatureConfigEventReceiverTest {
.arrange()

featureConfigEventReceiver.onEvent(
arrangement.newSelfDeletingMessagesUpdatedEvent(newSelfDeletingEventModel),
arrangement.newSelfDeletingMessagesUpdatedEvent(newSelfDeletingEventModel),
TestEvent.liveDeliveryInfo
)

Expand All @@ -244,7 +243,7 @@ class FeatureConfigEventReceiverTest {
.arrange()

featureConfigEventReceiver.onEvent(
arrangement.newSelfDeletingMessagesUpdatedEvent(newSelfDeletingEventModel),
arrangement.newSelfDeletingMessagesUpdatedEvent(newSelfDeletingEventModel),
TestEvent.liveDeliveryInfo
)

Expand All @@ -268,7 +267,7 @@ class FeatureConfigEventReceiverTest {
.arrange()

featureConfigEventReceiver.onEvent(
arrangement.newSelfDeletingMessagesUpdatedEvent(newSelfDeletingEventModel),
arrangement.newSelfDeletingMessagesUpdatedEvent(newSelfDeletingEventModel),
TestEvent.liveDeliveryInfo
)

Expand Down Expand Up @@ -326,7 +325,7 @@ class FeatureConfigEventReceiverTest {
FeatureConfigEventReceiverImpl(
GuestRoomConfigHandler(userConfigRepository, kaliumConfigs),
FileSharingConfigHandler(userConfigRepository),
MLSConfigHandler(userConfigRepository, updateSupportedProtocolsAndResolveOneOnOnes, TestUser.SELF.id),
MLSConfigHandler(userConfigRepository, updateSupportedProtocolsAndResolveOneOnOnes),
MLSMigrationConfigHandler(userConfigRepository, updateSupportedProtocolsAndResolveOneOnOnes),
ClassifiedDomainsConfigHandler(userConfigRepository),
ConferenceCallingConfigHandler(userConfigRepository),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ data class ClassifiedDomainsConfigDTO(
@Serializable
data class MLSConfigDTO(
@SerialName("protocolToggleUsers")
val protocolToggleUsers: List<String>,
val protocolToggleUsers: List<String>?,
borichellow marked this conversation as resolved.
Show resolved Hide resolved
@SerialName("defaultProtocol")
val defaultProtocol: SupportedProtocolDTO,
@SerialName("supportedProtocols")
Expand Down
Loading