Skip to content

Commit

Permalink
Merge branch 'develop' into feat/create-password-protected-invite-cod…
Browse files Browse the repository at this point in the history
…e/epic
  • Loading branch information
MohamadJaara authored Aug 16, 2023
2 parents 20354d1 + a62fab6 commit ab0fe0d
Show file tree
Hide file tree
Showing 52 changed files with 418 additions and 83 deletions.
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ dependencies {
kover(project(":cryptography"))
kover(project(":util"))
kover(project(":network"))
kover(project(":network-util"))
kover(project(":persistence"))
kover(project(":logger"))
kover(project(":calling"))
Expand Down
1 change: 1 addition & 0 deletions logic/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ kotlin {
val commonMain by getting {
dependencies {
implementation(project(":network"))
api(project(":network-util"))
implementation(project(":cryptography"))
implementation(project(":persistence"))
implementation(project(":protobuf"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import com.wire.kalium.logic.feature.UserSessionScopeProvider
import com.wire.kalium.logic.feature.UserSessionScopeProviderImpl
import com.wire.kalium.logic.feature.call.GlobalCallManager
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.network.NetworkStateObserverImpl
import com.wire.kalium.logic.sync.GlobalWorkScheduler
import com.wire.kalium.logic.sync.GlobalWorkSchedulerImpl
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import com.wire.kalium.logic.di.UserStorageProvider
import com.wire.kalium.logic.feature.auth.AuthenticationScopeProvider
import com.wire.kalium.logic.feature.call.GlobalCallManager
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.sync.UserSessionWorkScheduler
import com.wire.kalium.logic.util.SecurityHelperImpl
import com.wire.kalium.persistence.kmmSettings.GlobalPrefProvider
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import com.wire.kalium.logic.di.UserStorageProvider
import com.wire.kalium.logic.feature.auth.AuthenticationScopeProvider
import com.wire.kalium.logic.feature.call.GlobalCallManager
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.sync.UserSessionWorkSchedulerImpl
import com.wire.kalium.persistence.kmmSettings.GlobalPrefProvider
import com.wire.kalium.persistence.util.FileNameUtil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import com.wire.kalium.logic.kaliumLogger
import com.wire.kalium.network.NetworkState
import com.wire.kalium.network.NetworkStateObserver
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import com.wire.kalium.logic.feature.UserSessionScopeProvider
import com.wire.kalium.logic.feature.UserSessionScopeProviderImpl
import com.wire.kalium.logic.feature.call.GlobalCallManager
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.network.NetworkStateObserverImpl
import com.wire.kalium.logic.sync.GlobalWorkScheduler
import com.wire.kalium.logic.sync.GlobalWorkSchedulerImpl
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import com.wire.kalium.logic.di.UserStorageProvider
import com.wire.kalium.logic.feature.auth.AuthenticationScopeProvider
import com.wire.kalium.logic.feature.call.GlobalCallManager
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.sync.UserSessionWorkScheduler
import com.wire.kalium.persistence.kmmSettings.GlobalPrefProvider

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import com.wire.kalium.logic.di.UserStorageProvider
import com.wire.kalium.logic.feature.auth.AuthenticationScopeProvider
import com.wire.kalium.logic.feature.call.GlobalCallManager
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.sync.UserSessionWorkSchedulerImpl
import com.wire.kalium.persistence.kmmSettings.GlobalPrefProvider

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
*/
package com.wire.kalium.logic.network

import com.wire.kalium.network.NetworkState
import com.wire.kalium.network.NetworkStateObserver
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow

Expand Down
14 changes: 9 additions & 5 deletions logic/src/commonMain/kotlin/com/wire/kalium/logic/CoreFailure.kt
Original file line number Diff line number Diff line change
Expand Up @@ -203,12 +203,16 @@ internal inline fun <T : Any> wrapApiRequest(networkCall: () -> NetworkResponse<
Either.Left(NetworkFailure.ProxyError(exception.cause))
}

exception is KaliumException.NoNetwork -> {
Either.Left(NetworkFailure.NoNetworkConnection(exception))
}

exception is KaliumException.GenericError && exception.cause is IOException -> {
Either.Left(NetworkFailure.NoNetworkConnection(exception))
}

else -> {
if (exception is KaliumException.GenericError && exception.cause is IOException) {
Either.Left(NetworkFailure.NoNetworkConnection(exception))
} else {
Either.Left(NetworkFailure.ServerMiscommunication(result.kException))
}
Either.Left(NetworkFailure.ServerMiscommunication(result.kException))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import co.touchlab.kermit.LogWriter
import com.wire.kalium.cryptography.CryptographyLogger
import com.wire.kalium.logger.KaliumLogLevel
import com.wire.kalium.logger.KaliumLogger
import com.wire.kalium.network.NetworkLogger
import com.wire.kalium.network.NetworkUtilLogger
import com.wire.kalium.persistence.PersistenceLogger

internal var kaliumLogger = KaliumLogger.disabled()
Expand All @@ -46,7 +46,7 @@ object CoreLogger {
logWriters = logWriters
)

NetworkLogger.setLoggingLevel(level = level, logWriters = logWriters)
NetworkUtilLogger.setLoggingLevel(level = level, logWriters = logWriters)
CryptographyLogger.setLoggingLevel(level = level, logWriters = logWriters)
PersistenceLogger.setLoggingLevel(level = level, logWriters = logWriters)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import com.wire.kalium.logic.feature.auth.AuthenticationScopeProvider
import com.wire.kalium.logic.feature.auth.autoVersioningAuth.AutoVersionAuthScopeUseCase
import com.wire.kalium.logic.feature.call.GlobalCallManager
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.sync.GlobalWorkScheduler
import com.wire.kalium.logic.sync.periodic.UpdateApiVersionsScheduler
import com.wire.kalium.persistence.db.GlobalDatabaseProvider
Expand Down Expand Up @@ -64,15 +64,16 @@ abstract class CoreLogicCommon internal constructor(
globalPreferences,
kaliumConfigs,
userSessionScopeProvider,
authenticationScopeProvider
authenticationScopeProvider,
networkStateObserver
)

@Suppress("MemberVisibilityCanBePrivate") // Can be used by other targets like iOS and JS
fun getAuthenticationScope(
serverConfig: ServerConfig,
proxyCredentials: ProxyCredentials? = null
): AuthenticationScope =
authenticationScopeProvider.provide(serverConfig, proxyCredentials, getGlobalScope().serverConfigRepository)
authenticationScopeProvider.provide(serverConfig, proxyCredentials, getGlobalScope().serverConfigRepository, networkStateObserver)

@Suppress("MemberVisibilityCanBePrivate") // Can be used by other targets like iOS and JS
abstract fun getSessionScope(userId: UserId): UserSessionScope
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ import com.wire.kalium.logic.feature.user.ObserveValidAccountsUseCaseImpl
import com.wire.kalium.logic.feature.user.webSocketStatus.ObservePersistentWebSocketConnectionStatusUseCase
import com.wire.kalium.logic.feature.user.webSocketStatus.ObservePersistentWebSocketConnectionStatusUseCaseImpl
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.network.networkContainer.UnboundNetworkContainer
import com.wire.kalium.network.networkContainer.UnboundNetworkContainerCommon
import com.wire.kalium.persistence.db.GlobalDatabaseProvider
Expand All @@ -81,20 +82,22 @@ import kotlin.coroutines.CoroutineContext
* @see [com.wire.kalium.logic.feature.auth.AuthenticationScope]
* @see [com.wire.kalium.logic.feature.UserSessionScope]
*/

@Suppress("LongParameterList")
class GlobalKaliumScope internal constructor(
userAgent: String,
private val globalDatabase: GlobalDatabaseProvider,
private val globalPreferences: GlobalPrefProvider,
private val kaliumConfigs: KaliumConfigs,
private val userSessionScopeProvider: Lazy<UserSessionScopeProvider>,
private val authenticationScopeProvider: AuthenticationScopeProvider
private val authenticationScopeProvider: AuthenticationScopeProvider,
private val networkStateObserver: NetworkStateObserver
) : CoroutineScope {

override val coroutineContext: CoroutineContext = SupervisorJob()

val unboundNetworkContainer: UnboundNetworkContainer by lazy {
UnboundNetworkContainerCommon(
networkStateObserver,
kaliumConfigs.developmentApiEnabled,
userAgent,
kaliumConfigs.ignoreSSLCertificatesForUnboundCalls
Expand Down Expand Up @@ -161,7 +164,8 @@ class GlobalKaliumScope internal constructor(
get() = ObserveIfAppUpdateRequiredUseCaseImpl(
serverConfigRepository,
authenticationScopeProvider,
userSessionScopeProvider.value
userSessionScopeProvider.value,
networkStateObserver
)

val checkSystemIntegrity: CheckSystemIntegrityUseCase
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ import com.wire.kalium.logic.functional.map
import com.wire.kalium.logic.functional.onSuccess
import com.wire.kalium.logic.network.ApiMigrationManager
import com.wire.kalium.logic.network.ApiMigrationV3
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.network.SessionManagerImpl
import com.wire.kalium.logic.sync.MissingMetadataUpdateManager
import com.wire.kalium.logic.sync.MissingMetadataUpdateManagerImpl
Expand Down Expand Up @@ -445,6 +445,7 @@ class UserSessionScope internal constructor(
logout = { logoutReason -> logout(logoutReason) }
)
private val authenticatedNetworkContainer: AuthenticatedNetworkContainer = AuthenticatedNetworkContainer.create(
networkStateObserver,
sessionManager,
UserIdDTO(userId.value, userId.domain),
userAgent
Expand All @@ -456,7 +457,8 @@ class UserSessionScope internal constructor(
val authenticationScope: AuthenticationScope = authenticationScopeProvider.provide(
sessionManager.getServerConfig(),
sessionManager.getProxyCredentials(),
globalScope.serverConfigRepository
globalScope.serverConfigRepository,
networkStateObserver
)

private val userConfigRepository: UserConfigRepository
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import com.wire.kalium.logic.functional.getOrElse
import com.wire.kalium.logic.functional.intervalFlow
import com.wire.kalium.logic.functional.onFailure
import com.wire.kalium.logic.kaliumLogger
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.util.DateTimeUtil
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.async
Expand All @@ -54,7 +55,8 @@ interface ObserveIfAppUpdateRequiredUseCase {
class ObserveIfAppUpdateRequiredUseCaseImpl internal constructor(
private val serverConfigRepository: ServerConfigRepository,
private val authenticationScopeProvider: AuthenticationScopeProvider,
private val userSessionScopeProvider: UserSessionScopeProvider
private val userSessionScopeProvider: UserSessionScopeProvider,
private val networkStateObserver: NetworkStateObserver
) : ObserveIfAppUpdateRequiredUseCase {

@OptIn(ExperimentalCoroutinesApi::class)
Expand Down Expand Up @@ -96,7 +98,7 @@ class ObserveIfAppUpdateRequiredUseCaseImpl internal constructor(
withContext(coroutineContext) {
async {
val isUpdateRequired = authenticationScopeProvider
.provide(serverConfig, proxyCredentials, serverConfigRepository)
.provide(serverConfig, proxyCredentials, serverConfigRepository, networkStateObserver)
.checkIfUpdateRequired(currentAppVersion, serverConfig.links.blackList)
serverConfig.id to isUpdateRequired
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ internal class GetMessageAssetUseCaseImpl(
}

it is NetworkFailure.FederatedBackendFailure -> MessageAssetResult.Failure(it, false)
it is NetworkFailure.NoNetworkConnection -> MessageAssetResult.Failure(it, true)
else -> MessageAssetResult.Failure(it, true)
}
}, { decodedAssetPath ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import com.wire.kalium.logic.feature.appVersioning.CheckIfUpdateRequiredUseCaseI
import com.wire.kalium.logic.feature.auth.sso.SSOLoginScope
import com.wire.kalium.logic.feature.auth.verification.RequestSecondFactorVerificationCodeUseCase
import com.wire.kalium.logic.feature.register.RegisterScope
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.network.networkContainer.UnauthenticatedNetworkContainer
import io.ktor.util.collections.ConcurrentMap

Expand All @@ -52,14 +53,16 @@ class AuthenticationScopeProvider internal constructor(
internal fun provide(
serverConfig: ServerConfig,
proxyCredentials: ProxyCredentials?,
serverConfigRepository: ServerConfigRepository
serverConfigRepository: ServerConfigRepository,
networkStateObserver: NetworkStateObserver,
): AuthenticationScope =
authenticationScopeStorage.computeIfAbsent(serverConfig to proxyCredentials) {
AuthenticationScope(
userAgent,
serverConfig,
proxyCredentials,
serverConfigRepository
serverConfigRepository,
networkStateObserver
)
}
}
Expand All @@ -68,10 +71,12 @@ class AuthenticationScope internal constructor(
private val userAgent: String,
private val serverConfig: ServerConfig,
private val proxyCredentials: ProxyCredentials?,
private val serverConfigRepository: ServerConfigRepository
private val serverConfigRepository: ServerConfigRepository,
private val networkStateObserver: NetworkStateObserver
) {
private val unauthenticatedNetworkContainer: UnauthenticatedNetworkContainer by lazy {
UnauthenticatedNetworkContainer.create(
networkStateObserver,
MapperProvider.serverConfigMapper().toDTO(serverConfig),
proxyCredentials?.let { MapperProvider.sessionMapper().fromModelToProxyCredentialsDTO(it) },
userAgent
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/*
* Wire
* Copyright (C) 2023 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package com.wire.kalium.logic.network

import com.wire.kalium.network.NetworkStateObserver

internal expect class NetworkStateObserverImpl : NetworkStateObserver
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ import com.wire.kalium.logic.data.sync.IncrementalSyncStatus
import com.wire.kalium.logic.data.sync.SlowSyncRepository
import com.wire.kalium.logic.data.sync.SlowSyncStatus
import com.wire.kalium.logic.kaliumLogger
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.logic.sync.SyncExceptionHandler
import com.wire.kalium.logic.sync.slow.SlowSyncManager
import com.wire.kalium.logic.util.ExponentialDurationHelper
import com.wire.kalium.logic.util.ExponentialDurationHelperImpl
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.util.KaliumDispatcher
import com.wire.kalium.util.KaliumDispatcherImpl
import kotlinx.coroutines.CoroutineScope
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import com.wire.kalium.logic.data.sync.SlowSyncRepository
import com.wire.kalium.logic.data.sync.SlowSyncStatus
import com.wire.kalium.logic.functional.combine
import com.wire.kalium.logic.kaliumLogger
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.sync.SyncExceptionHandler
import com.wire.kalium.logic.sync.incremental.IncrementalSyncManager
import com.wire.kalium.logic.util.ExponentialDurationHelper
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ import com.wire.kalium.logic.data.sync.IncrementalSyncStatus
import com.wire.kalium.logic.data.sync.SlowSyncRepository
import com.wire.kalium.logic.data.sync.SlowSyncRepositoryImpl
import com.wire.kalium.logic.data.sync.SlowSyncStatus
import com.wire.kalium.logic.network.NetworkState
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkState
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.test_util.TestKaliumDispatcher
import com.wire.kalium.logic.util.ExponentialDurationHelper
import com.wire.kalium.logic.util.flowThatFailsOnFirstTime
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ package com.wire.kalium.logic.sync.slow
import com.wire.kalium.logic.data.sync.SlowSyncRepository
import com.wire.kalium.logic.data.sync.SlowSyncStatus
import com.wire.kalium.logic.data.sync.SlowSyncStep
import com.wire.kalium.logic.network.NetworkState
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkState
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.test_util.TestKaliumDispatcher
import com.wire.kalium.logic.util.ExponentialDurationHelper
import com.wire.kalium.logic.util.flowThatFailsOnFirstTime
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import com.wire.kalium.logic.feature.UserSessionScopeProvider
import com.wire.kalium.logic.feature.UserSessionScopeProviderImpl
import com.wire.kalium.logic.feature.call.GlobalCallManager
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.network.NetworkStateObserverImpl
import com.wire.kalium.logic.sync.GlobalWorkScheduler
import com.wire.kalium.logic.sync.GlobalWorkSchedulerImpl
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import com.wire.kalium.logic.di.UserStorageProvider
import com.wire.kalium.logic.feature.auth.AuthenticationScopeProvider
import com.wire.kalium.logic.feature.call.GlobalCallManager
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import com.wire.kalium.logic.network.NetworkStateObserver
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.logic.sync.UserSessionWorkScheduler
import com.wire.kalium.persistence.kmmSettings.GlobalPrefProvider

Expand Down
Loading

0 comments on commit ab0fe0d

Please sign in to comment.