diff --git a/app/src/main/java/ru/fincode/tsudesk/MainActivity.kt b/app/src/main/java/ru/fincode/tsudesk/MainActivity.kt index 466d2f9..0e07fca 100644 --- a/app/src/main/java/ru/fincode/tsudesk/MainActivity.kt +++ b/app/src/main/java/ru/fincode/tsudesk/MainActivity.kt @@ -16,7 +16,8 @@ private const val LOG_TAG = "NETWORK_DEBUG" @AndroidEntryPoint class MainActivity : ComponentActivity() { - @Inject lateinit var getScheduleUseCase: GetScheduleUseCase + @Inject + lateinit var getScheduleUseCase: GetScheduleUseCase override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -29,8 +30,9 @@ class MainActivity : ComponentActivity() { val src = if (result.refreshedFromNetwork) "NETWORK" else "CACHE" Log.d(LOG_TAG, "FROM $src: ${result.data}") } + is DataResult.Error -> { - Log.e(LOG_TAG, "ERROR", result.throwable) + Log.e(LOG_TAG, "ERROR: $result") } } } diff --git a/app/src/main/java/ru/fincode/tsudesk/di/NetworkDebugModule.kt b/app/src/main/java/ru/fincode/tsudesk/di/NetworkDebugModule.kt index 7fcd59d..1372c11 100644 --- a/app/src/main/java/ru/fincode/tsudesk/di/NetworkDebugModule.kt +++ b/app/src/main/java/ru/fincode/tsudesk/di/NetworkDebugModule.kt @@ -12,13 +12,13 @@ import javax.inject.Singleton @InstallIn(SingletonComponent::class) object AppConfigModule { - private const val BASE_PROD_URL = "https://tulsu.ru/schedule/queries/" - private const val BASE_DEVELOP_URL = "https://tulsu.ru/schedule/queries/" + private const val BASE_URL_PROD = "https://tulsu.ru/schedule/queries/" + private const val BASE_URL_DEVELOP = "https://scherbatykh.ru/app/tsudesk/" @Provides @Singleton fun provideAppConfig(): AppConfig { - val baseUrl = if (BuildConfig.DEBUG) BASE_DEVELOP_URL else BASE_PROD_URL + val baseUrl = if (BuildConfig.DEBUG) BASE_URL_DEVELOP else BASE_URL_PROD return AppConfig( isDebug = BuildConfig.DEBUG, baseUrl = baseUrl, diff --git a/core/common/src/main/java/ru/fincode/tsudesk/core/common/model/AppError.kt b/core/common/src/main/java/ru/fincode/tsudesk/core/common/model/AppError.kt new file mode 100644 index 0000000..69f41ca --- /dev/null +++ b/core/common/src/main/java/ru/fincode/tsudesk/core/common/model/AppError.kt @@ -0,0 +1,7 @@ +package ru.fincode.tsudesk.core.common.model +sealed interface AppError { + data object NoInternet : AppError + data object Timeout : AppError + data class Http(val code: Int) : AppError + data class Unknown(val message: String? = null) : AppError +} diff --git a/core/common/src/main/java/ru/fincode/tsudesk/core/common/model/DataResult.kt b/core/common/src/main/java/ru/fincode/tsudesk/core/common/model/DataResult.kt index b10f5a5..75d97c1 100644 --- a/core/common/src/main/java/ru/fincode/tsudesk/core/common/model/DataResult.kt +++ b/core/common/src/main/java/ru/fincode/tsudesk/core/common/model/DataResult.kt @@ -1,10 +1,6 @@ package ru.fincode.tsudesk.core.common.model sealed interface DataResult { - - data class Data( - val data: T, val refreshedFromNetwork: Boolean - ) : DataResult - - data class Error(val throwable: Throwable) : DataResult -} + data class Data(val data: T, val refreshedFromNetwork: Boolean) : DataResult + data class Error(val error: AppError, val cause: Throwable? = null) : DataResult +} \ No newline at end of file diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/OkHttpClientFactory.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/OkHttpClientFactory.kt index b59ffe4..430adcc 100644 --- a/core/network/src/main/java/ru/fincode/tsudesk/core/network/OkHttpClientFactory.kt +++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/OkHttpClientFactory.kt @@ -1,11 +1,15 @@ package ru.fincode.tsudesk.core.network +import android.annotation.SuppressLint import okhttp3.OkHttpClient import ru.fincode.tsudesk.core.common.app.AppConfig import ru.fincode.tsudesk.core.network.interceptor.DebugInterceptor +import java.security.SecureRandom +import java.security.cert.X509Certificate import java.util.concurrent.TimeUnit import javax.inject.Inject import javax.inject.Singleton +import javax.net.ssl.* @Singleton class OkHttpClientFactory @Inject constructor( @@ -22,8 +26,38 @@ class OkHttpClientFactory @Inject constructor( if (appConfig.isDebug) { builder.addInterceptor(debugInterceptor) + applyUnsafeSslForDebug(builder) } return builder.build() } + + private fun applyUnsafeSslForDebug(builder: OkHttpClient.Builder) { + val trustManager = @SuppressLint("CustomX509TrustManager") + object : X509TrustManager { + + override fun checkClientTrusted( + chain: Array, + authType: String + ) = Unit + + override fun checkServerTrusted( + chain: Array, + authType: String + ) = Unit + + override fun getAcceptedIssuers(): Array = emptyArray() + } + + val sslContext = SSLContext.getInstance("SSL").apply { + init(null, arrayOf(trustManager), SecureRandom()) + } + + builder.sslSocketFactory( + sslContext.socketFactory, + trustManager + ) + + builder.hostnameVerifier { _, _ -> true } + } } diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/model/NetworkError.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/model/NetworkError.kt index 951196b..8994822 100644 --- a/core/network/src/main/java/ru/fincode/tsudesk/core/network/model/NetworkError.kt +++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/model/NetworkError.kt @@ -1,5 +1,7 @@ package ru.fincode.tsudesk.core.network.model +import ru.fincode.tsudesk.core.common.model.AppError + sealed class NetworkError(open val meta: NetworkMeta) { data class NoInternet(override val meta: NetworkMeta) : NetworkError(meta) @@ -14,4 +16,11 @@ sealed class NetworkError(open val meta: NetworkMeta) { val throwable: Throwable, override val meta: NetworkMeta ) : NetworkError(meta) + + fun toAppError(): AppError = when (this) { + is NoInternet -> AppError.NoInternet + is Timeout -> AppError.Timeout + is Http -> AppError.Http(code) + is Unknown -> AppError.Unknown(throwable.message) + } } diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/ScheduleRepositoryImpl.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/ScheduleRepositoryImpl.kt index f471e69..78385ad 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/ScheduleRepositoryImpl.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/ScheduleRepositoryImpl.kt @@ -48,7 +48,7 @@ class ScheduleRepositoryImpl @Inject constructor( } is NetworkResult.Error -> { - emit(DataResult.Error(Throwable(networkResult.error.toString()))) + emit(DataResult.Error(networkResult.error.toAppError())) return@flow } }