From 41d5cb8bf032a96456669de2972af3017abbeada Mon Sep 17 00:00:00 2001 From: dkadrikj Date: Fri, 18 Dec 2020 14:35:55 +0100 Subject: [PATCH] Refactor cert pins (npe on calendar). --- .../auth/data/repository/AuthRepositoryImplTest.kt | 8 ++------ .../HumanVerificationRemoteRepositoryImplTest.kt | 5 +---- network/build.gradle.kts | 2 +- network/data/build.gradle.kts | 2 +- .../me/proton/core/network/data/ApiProvider.kt | 14 +++----------- .../me/proton/core/network/data/di/Factory.kt | 8 +++++--- network/domain/build.gradle.kts | 2 +- 7 files changed, 14 insertions(+), 27 deletions(-) diff --git a/auth/data/src/test/kotlin/me/proton/core/auth/data/repository/AuthRepositoryImplTest.kt b/auth/data/src/test/kotlin/me/proton/core/auth/data/repository/AuthRepositoryImplTest.kt index f0433f9f3..eb74542e3 100644 --- a/auth/data/src/test/kotlin/me/proton/core/auth/data/repository/AuthRepositoryImplTest.kt +++ b/auth/data/src/test/kotlin/me/proton/core/auth/data/repository/AuthRepositoryImplTest.kt @@ -95,17 +95,13 @@ class AuthRepositoryImplTest { apiProvider = ApiProvider(apiFactory, sessionProvider) every { apiFactory.create( - interfaceClass = AuthenticationApi::class, - certificatePins = Constants.DEFAULT_SPKI_PINS, - alternativeApiPins = Constants.ALTERNATIVE_API_SPKI_PINS + interfaceClass = AuthenticationApi::class ) } returns apiManager every { apiFactory.create( SessionId(testSessionId), - interfaceClass = AuthenticationApi::class, - certificatePins = Constants.DEFAULT_SPKI_PINS, - alternativeApiPins = Constants.ALTERNATIVE_API_SPKI_PINS + interfaceClass = AuthenticationApi::class ) } returns apiManager repository = AuthRepositoryImpl(apiProvider) diff --git a/human-verification/data/src/test/kotlin/me/proton/core/humanverification/data/repository/HumanVerificationRemoteRepositoryImplTest.kt b/human-verification/data/src/test/kotlin/me/proton/core/humanverification/data/repository/HumanVerificationRemoteRepositoryImplTest.kt index bc8b0e1e6..648161fa9 100644 --- a/human-verification/data/src/test/kotlin/me/proton/core/humanverification/data/repository/HumanVerificationRemoteRepositoryImplTest.kt +++ b/human-verification/data/src/test/kotlin/me/proton/core/humanverification/data/repository/HumanVerificationRemoteRepositoryImplTest.kt @@ -65,10 +65,7 @@ class HumanVerificationRemoteRepositoryImplTest { MockKAnnotations.init(this) apiProvider = ApiProvider(apiFactory, sessionProvider) every { - apiFactory.create( - sessionId, HumanVerificationApi::class, certificatePins = Constants.DEFAULT_SPKI_PINS, - alternativeApiPins = Constants.ALTERNATIVE_API_SPKI_PINS - ) + apiFactory.create(sessionId, HumanVerificationApi::class) } returns apiManager } diff --git a/network/build.gradle.kts b/network/build.gradle.kts index ba10b5e4f..ac69a86d9 100644 --- a/network/build.gradle.kts +++ b/network/build.gradle.kts @@ -23,7 +23,7 @@ plugins { kotlin("android") } -libVersion = Version(0, 4, 2) +libVersion = Version(0, 4, 3) android() diff --git a/network/data/build.gradle.kts b/network/data/build.gradle.kts index fd8d77fb7..55a1063d9 100644 --- a/network/data/build.gradle.kts +++ b/network/data/build.gradle.kts @@ -25,7 +25,7 @@ plugins { kotlin("plugin.serialization") } -libVersion = Version(0, 4, 2) +libVersion = Version(0, 4, 3) android() diff --git a/network/data/src/main/kotlin/me/proton/core/network/data/ApiProvider.kt b/network/data/src/main/kotlin/me/proton/core/network/data/ApiProvider.kt index 4c50644f4..c6aa12157 100644 --- a/network/data/src/main/kotlin/me/proton/core/network/data/ApiProvider.kt +++ b/network/data/src/main/kotlin/me/proton/core/network/data/ApiProvider.kt @@ -20,7 +20,6 @@ package me.proton.core.network.data import me.proton.core.domain.entity.UserId import me.proton.core.network.data.di.ApiFactory -import me.proton.core.network.data.di.Constants import me.proton.core.network.data.protonApi.BaseRetrofitApi import me.proton.core.network.domain.ApiManager import me.proton.core.network.domain.session.SessionId @@ -35,9 +34,7 @@ import java.util.concurrent.ConcurrentMap */ class ApiProvider( val apiFactory: ApiFactory, - val sessionProvider: SessionProvider, - val certificatePins: Array? = null, - val alternativeApiPins: List? = null + val sessionProvider: SessionProvider ) { val instances: ConcurrentHashMap>>> = ConcurrentHashMap() @@ -47,7 +44,7 @@ class ApiProvider( ): ApiManager = get(sessionProvider.getSessionId(userId)) inline fun get( - sessionId: SessionId? = null + sessionId: SessionId? = null, ): ApiManager { // ConcurrentHashMap does not allow null to be used as a key or value. // If sessionId == null -> sessionName = "null". @@ -57,12 +54,7 @@ class ApiProvider( return instances .getOrPut(sessionName) { ConcurrentHashMap() } .getOrPutWeakRef(className) { - apiFactory.create( - sessionId = sessionId, - interfaceClass = Api::class, - certificatePins = certificatePins ?: Constants.DEFAULT_SPKI_PINS, - alternativeApiPins = alternativeApiPins ?: Constants.ALTERNATIVE_API_SPKI_PINS - ) + apiFactory.create(sessionId = sessionId, interfaceClass = Api::class) } as ApiManager } diff --git a/network/data/src/main/kotlin/me/proton/core/network/data/di/Factory.kt b/network/data/src/main/kotlin/me/proton/core/network/data/di/Factory.kt index bfa0d6de6..95f51f0b0 100644 --- a/network/data/src/main/kotlin/me/proton/core/network/data/di/Factory.kt +++ b/network/data/src/main/kotlin/me/proton/core/network/data/di/Factory.kt @@ -71,7 +71,9 @@ class ApiFactory( private val sessionProvider: SessionProvider, private val sessionListener: SessionListener, private val cookieStore: ProtonCookieStore, - scope: CoroutineScope + scope: CoroutineScope, + private val certificatePins: Array = Constants.DEFAULT_SPKI_PINS, + private val alternativeApiPins: List = Constants.ALTERNATIVE_API_SPKI_PINS, ) { @OptIn(ObsoleteCoroutinesApi::class) @@ -96,8 +98,8 @@ class ApiFactory( sessionId: SessionId? = null, interfaceClass: KClass, clientErrorHandlers: List> = emptyList(), - certificatePins: Array, - alternativeApiPins: List + certificatePins: Array = this@ApiFactory.certificatePins, + alternativeApiPins: List = this@ApiFactory.alternativeApiPins ): ApiManager { val pinningStrategy = { builder: OkHttpClient.Builder -> initPinning(builder, URI(baseUrl).host, certificatePins) diff --git a/network/domain/build.gradle.kts b/network/domain/build.gradle.kts index 1ee1fddd3..b022e1156 100644 --- a/network/domain/build.gradle.kts +++ b/network/domain/build.gradle.kts @@ -24,7 +24,7 @@ plugins { kotlin("plugin.serialization") } -libVersion = Version(0, 3, 4) +libVersion = Version(0, 4, 3) dependencies {