diff --git a/README.md b/README.md index 1b467bd4..2ab37034 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ file. ```groovy dependencies { - implementation "eu.europa.ec.eudi:eudi-lib-android-wallet-core:0.10.1-SNAPSHOT" + implementation "eu.europa.ec.eudi:eudi-lib-android-wallet-core:0.10.2-SNAPSHOT" implementation "androidx.biometric:biometric-ktx:1.2.0-alpha05" } ``` diff --git a/docs/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/index.md b/docs/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/index.md index 8c3c4357..c1449732 100644 --- a/docs/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/index.md +++ b/docs/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/index.md @@ -23,13 +23,13 @@ androidJvm ## Functions -| Name | Summary | -|--------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [build](build.md) | [androidJvm]
fun [build](build.md)(): [OpenId4VciManager](../index.md)
Build the [OpenId4VciManager](../index.md) | -| [config](config.md) | [androidJvm]
fun [config](config.md)(config: [OpenId4VciManager.Config](../-config/index.md)): [OpenId4VciManager.Builder](index.md)
Set the [Config](../-config/index.md) to use | -| [documentManager](document-manager.md) | [androidJvm]
fun [documentManager](document-manager.md)(documentManager: DocumentManager): [OpenId4VciManager.Builder](index.md)
Set the DocumentManager to use | -| [ktHttpClientFactory](kt-http-client-factory.md) | [androidJvm]
fun [ktHttpClientFactory](kt-http-client-factory.md)(factory: () -> HttpClient): [OpenId4VciManager.Builder](index.md)
Override the Ktor HTTP client factory | -| [logger](logger.md) | [androidJvm]
fun [logger](logger.md)(logger: [Logger](../../../eu.europa.ec.eudi.wallet.logging/-logger/index.md)): [OpenId4VciManager.Builder](index.md) | +| Name | Summary | +|------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| [build](build.md) | [androidJvm]
fun [build](build.md)(): [OpenId4VciManager](../index.md)
Build the [OpenId4VciManager](../index.md) | +| [config](config.md) | [androidJvm]
fun [config](config.md)(config: [OpenId4VciManager.Config](../-config/index.md)): [OpenId4VciManager.Builder](index.md)
Set the [Config](../-config/index.md) to use | +| [documentManager](document-manager.md) | [androidJvm]
fun [documentManager](document-manager.md)(documentManager: DocumentManager): [OpenId4VciManager.Builder](index.md)
Set the DocumentManager to use | +| [ktorHttpClientFactory](ktor-http-client-factory.md) | [androidJvm]
fun [ktorHttpClientFactory](ktor-http-client-factory.md)(factory: () -> HttpClient): [OpenId4VciManager.Builder](index.md)
Override the Ktor HTTP client factory | +| [logger](logger.md) | [androidJvm]
fun [logger](logger.md)(logger: [Logger](../../../eu.europa.ec.eudi.wallet.logging/-logger/index.md)): [OpenId4VciManager.Builder](index.md) | ## Properties diff --git a/docs/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/kt-http-client-factory.md b/docs/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/kt-http-client-factory.md deleted file mode 100644 index ebc03777..00000000 --- a/docs/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/kt-http-client-factory.md +++ /dev/null @@ -1,9 +0,0 @@ -//[wallet-core](../../../../index.md)/[eu.europa.ec.eudi.wallet.issue.openid4vci](../../index.md)/[OpenId4VciManager](../index.md)/[Builder](index.md)/[ktHttpClientFactory](kt-http-client-factory.md) - -# ktHttpClientFactory - -[androidJvm]\ -fun [ktHttpClientFactory](kt-http-client-factory.md)(factory: () -> -HttpClient): [OpenId4VciManager.Builder](index.md) - -Override the Ktor HTTP client factory diff --git a/docs/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/ktor-http-client-factory.md b/docs/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/ktor-http-client-factory.md index 839a719e..dc1b0e0a 100644 --- a/docs/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/ktor-http-client-factory.md +++ b/docs/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/ktor-http-client-factory.md @@ -2,5 +2,11 @@ # ktorHttpClientFactory +[androidJvm]\ +fun [ktorHttpClientFactory](ktor-http-client-factory.md)(factory: () -> +HttpClient): [OpenId4VciManager.Builder](index.md) + +Override the Ktor HTTP client factory + [androidJvm]\ var [ktorHttpClientFactory](ktor-http-client-factory.md): () -> HttpClient? diff --git a/docs/wallet-core/package-list b/docs/wallet-core/package-list index 08aa831d..1c314bad 100644 --- a/docs/wallet-core/package-list +++ b/docs/wallet-core/package-list @@ -87,8 +87,8 @@ $dokka.location:eu.europa.ec.eudi.wallet.issue.openid4vci/OpenId4VciManager.Buil $dokka.location:eu.europa.ec.eudi.wallet.issue.openid4vci/OpenId4VciManager.Builder/config/#eu.europa.ec.eudi.wallet.issue.openid4vci.OpenId4VciManager.Config/PointingToDeclaration/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/config.md $dokka.location:eu.europa.ec.eudi.wallet.issue.openid4vci/OpenId4VciManager.Builder/documentManager/#/PointingToDeclaration/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/document-manager.md $dokka.location:eu.europa.ec.eudi.wallet.issue.openid4vci/OpenId4VciManager.Builder/documentManager/#eu.europa.ec.eudi.wallet.document.DocumentManager/PointingToDeclaration/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/document-manager.md -$dokka.location:eu.europa.ec.eudi.wallet.issue.openid4vci/OpenId4VciManager.Builder/ktHttpClientFactory/#kotlin.Function0[io.ktor.client.HttpClient]/PointingToDeclaration/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/kt-http-client-factory.md $dokka.location:eu.europa.ec.eudi.wallet.issue.openid4vci/OpenId4VciManager.Builder/ktorHttpClientFactory/#/PointingToDeclaration/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/ktor-http-client-factory.md +$dokka.location:eu.europa.ec.eudi.wallet.issue.openid4vci/OpenId4VciManager.Builder/ktorHttpClientFactory/#kotlin.Function0[io.ktor.client.HttpClient]/PointingToDeclaration/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/ktor-http-client-factory.md $dokka.location:eu.europa.ec.eudi.wallet.issue.openid4vci/OpenId4VciManager.Builder/logger/#/PointingToDeclaration/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/logger.md $dokka.location:eu.europa.ec.eudi.wallet.issue.openid4vci/OpenId4VciManager.Builder/logger/#eu.europa.ec.eudi.wallet.logging.Logger/PointingToDeclaration/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-builder/logger.md $dokka.location:eu.europa.ec.eudi.wallet.issue.openid4vci/OpenId4VciManager.Companion///PointingToDeclaration/wallet-core/eu.europa.ec.eudi.wallet.issue.openid4vci/-open-id4-vci-manager/-companion/index.md diff --git a/gradle.properties b/gradle.properties index d135a3a7..ff1c3498 100644 --- a/gradle.properties +++ b/gradle.properties @@ -42,7 +42,7 @@ systemProp.sonar.host.url=https://sonarcloud.io systemProp.sonar.gradle.skipCompile=true systemProp.sonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/testDebugUnitTestCoverage/testDebugUnitTestCoverage.xml,build/reports/jacoco/testReleaseUnitTestCoverage/testReleaseUnitTestCoverage.xml systemProp.sonar.projectName=eudi-lib-android-wallet-core -VERSION_NAME=0.10.1-SNAPSHOT +VERSION_NAME=0.10.2-SNAPSHOT SONATYPE_HOST=S01 SONATYPE_AUTOMATIC_RELEASE=false diff --git a/wallet-core/src/main/java/eu/europa/ec/eudi/wallet/EudiWallet.kt b/wallet-core/src/main/java/eu/europa/ec/eudi/wallet/EudiWallet.kt index 65b911f5..8aaa9332 100644 --- a/wallet-core/src/main/java/eu/europa/ec/eudi/wallet/EudiWallet.kt +++ b/wallet-core/src/main/java/eu/europa/ec/eudi/wallet/EudiWallet.kt @@ -154,6 +154,7 @@ object EudiWallet { openId4VpConfig, openId4VpCBORResponseGenerator, ).apply { + _config.ktorHttpClientFactory?.let { ktorHttpClientFactory = it } logger = this@EudiWallet.logger _config.trustedReaderCertificates?.let { setReaderTrustStore(ReaderTrustStore.getDefault(it)) @@ -255,6 +256,7 @@ object EudiWallet { documentManager(this@EudiWallet.documentManager) config(config) logger = this@EudiWallet.logger + ktorHttpClientFactory = _config.ktorHttpClientFactory }.also { it.issueDocumentByDocType(docType, txCode, executor, onEvent) } } ?: run { (executor ?: context.mainExecutor()).execute { @@ -289,6 +291,7 @@ object EudiWallet { documentManager(this@EudiWallet.documentManager) config(config) logger = this@EudiWallet.logger + ktorHttpClientFactory = _config.ktorHttpClientFactory }.also { it.issueDocumentByOffer(offer, txCode, executor, onEvent) } } ?: run { (executor ?: context.mainExecutor()).execute { @@ -322,6 +325,7 @@ object EudiWallet { documentManager(this@EudiWallet.documentManager) config(config) logger = this@EudiWallet.logger + ktorHttpClientFactory = _config.ktorHttpClientFactory }.also { it.issueDocumentByOfferUri(offerUri, txCode, executor, onEvent) } } ?: run { (executor ?: context.mainExecutor()).execute { @@ -351,6 +355,7 @@ object EudiWallet { documentManager(this@EudiWallet.documentManager) config(config) logger = this@EudiWallet.logger + ktorHttpClientFactory = _config.ktorHttpClientFactory }.also { when (val document = documentManager.getDocumentById(documentId)) { is DeferredDocument -> it.issueDeferredDocument(document, executor, onResult) @@ -399,6 +404,7 @@ object EudiWallet { documentManager(this@EudiWallet.documentManager) config(config) logger = this@EudiWallet.logger + ktorHttpClientFactory = _config.ktorHttpClientFactory }.also { it.resolveDocumentOffer(offerUri, executor, onResult) } } ?: run { (executor ?: context.mainExecutor()).execute { diff --git a/wallet-core/src/main/java/eu/europa/ec/eudi/wallet/issue/openid4vci/OpenId4VciManager.kt b/wallet-core/src/main/java/eu/europa/ec/eudi/wallet/issue/openid4vci/OpenId4VciManager.kt index ac56f04d..573bcd38 100644 --- a/wallet-core/src/main/java/eu/europa/ec/eudi/wallet/issue/openid4vci/OpenId4VciManager.kt +++ b/wallet-core/src/main/java/eu/europa/ec/eudi/wallet/issue/openid4vci/OpenId4VciManager.kt @@ -186,7 +186,7 @@ interface OpenId4VciManager { /** * Override the Ktor HTTP client factory */ - fun ktHttpClientFactory(factory: () -> HttpClient) = apply { + fun ktorHttpClientFactory(factory: () -> HttpClient) = apply { this.ktorHttpClientFactory = factory } diff --git a/wallet-core/src/main/java/eu/europa/ec/eudi/wallet/issue/openid4vci/ProcessDeferredOutcome.kt b/wallet-core/src/main/java/eu/europa/ec/eudi/wallet/issue/openid4vci/ProcessDeferredOutcome.kt index a92b4f0d..da59975b 100644 --- a/wallet-core/src/main/java/eu/europa/ec/eudi/wallet/issue/openid4vci/ProcessDeferredOutcome.kt +++ b/wallet-core/src/main/java/eu/europa/ec/eudi/wallet/issue/openid4vci/ProcessDeferredOutcome.kt @@ -37,7 +37,6 @@ internal class ProcessDeferredOutcome( try { when (outcome) { is DeferredCredentialQueryOutcome.Errored -> { - documentManager.deleteDocumentById(deferredDocument.id) callback( DeferredIssueResult.DocumentFailed( deferredDocument.id, diff --git a/wallet-core/src/test/java/eu/europa/ec/eudi/wallet/EudiWalletConfigTest.kt b/wallet-core/src/test/java/eu/europa/ec/eudi/wallet/EudiWalletConfigTest.kt index c69c09c1..e2debdd0 100644 --- a/wallet-core/src/test/java/eu/europa/ec/eudi/wallet/EudiWalletConfigTest.kt +++ b/wallet-core/src/test/java/eu/europa/ec/eudi/wallet/EudiWalletConfigTest.kt @@ -21,30 +21,25 @@ import eu.europa.ec.eudi.wallet.transfer.openid4vp.ClientIdScheme import eu.europa.ec.eudi.wallet.transfer.openid4vp.EncryptionAlgorithm import eu.europa.ec.eudi.wallet.transfer.openid4vp.EncryptionMethod import eu.europa.ec.eudi.wallet.transfer.openid4vp.PreregisteredVerifier -import org.junit.Assert.* -import org.junit.Before -import org.junit.Test -import org.mockito.Mockito.mock -import org.mockito.Mockito.`when` +import io.mockk.every +import io.mockk.mockk +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.Test import java.io.File import java.security.cert.X509Certificate class EudiWalletConfigTest { - private lateinit var context: Context - - @Before - fun setUp() { - context = mock(Context::class.java) - `when`(context.applicationContext).thenReturn(context) - `when`(context.noBackupFilesDir).thenReturn(mock(File::class.java)) + private val context: Context = mockk(relaxed = true) { + every { applicationContext } returns this@mockk + every { noBackupFilesDir } returns mockk() } @Test fun testInvoke() { val storageDir = File("/tmp") - val readerCertificate1 = mock(X509Certificate::class.java) - val readerCertificate2 = mock(X509Certificate::class.java) + val readerCertificate1 = mockk() + val readerCertificate2 = mockk() val config = EudiWalletConfig(context) { documentsStorageDir(storageDir) userAuthenticationRequired(true) @@ -114,38 +109,6 @@ class EudiWalletConfigTest { assertEquals("eudi-openid4ci://authorize", config.openId4VciConfig?.authFlowRedirectionURI) } - @Test - fun testBuilder() { - val builder = EudiWalletConfig.Builder(context) - - builder.encryptDocumentsInStorage(false) - builder.useHardwareToStoreKeys(false) - builder.bleTransferMode( - EudiWalletConfig.BLE_SERVER_PERIPHERAL_MODE, - EudiWalletConfig.BLE_CLIENT_CENTRAL_MODE - ) - builder.bleClearCacheEnabled(true) - builder.userAuthenticationRequired(true) - builder.userAuthenticationTimeOut(30_000L) - builder.trustedReaderCertificates(listOf(mock(X509Certificate::class.java))) - - val config = builder.build() - - assertFalse(config.encryptDocumentsInStorage) - assertFalse(config.useHardwareToStoreKeys) - assertEquals( - EudiWalletConfig.BLE_SERVER_PERIPHERAL_MODE or EudiWalletConfig.BLE_CLIENT_CENTRAL_MODE, - config.bleTransferMode - ) - assertTrue(config.bleCentralClientModeEnabled) - assertTrue(config.blePeripheralServerModeEnabled) - assertTrue(config.bleClearCacheEnabled) - assertTrue(config.userAuthenticationRequired) - assertEquals(30_000L, config.userAuthenticationTimeOut) - assertEquals(1, config.trustedReaderCertificates?.size) - - } - @Test fun testDefaultValues() { val config = EudiWalletConfig(context) {} diff --git a/wallet-core/src/test/java/eu/europa/ec/eudi/wallet/issue/openid4vci/OpenId4VciManagerBuilderTest.kt b/wallet-core/src/test/java/eu/europa/ec/eudi/wallet/issue/openid4vci/OpenId4VciManagerBuilderTest.kt index 93e11c1c..5f7eca85 100644 --- a/wallet-core/src/test/java/eu/europa/ec/eudi/wallet/issue/openid4vci/OpenId4VciManagerBuilderTest.kt +++ b/wallet-core/src/test/java/eu/europa/ec/eudi/wallet/issue/openid4vci/OpenId4VciManagerBuilderTest.kt @@ -18,9 +18,9 @@ package eu.europa.ec.eudi.wallet.issue.openid4vci import android.content.Context import eu.europa.ec.eudi.wallet.document.DocumentManager +import io.ktor.client.* import io.mockk.mockk -import org.junit.jupiter.api.Assertions.assertNotNull -import org.junit.jupiter.api.Assertions.assertThrows +import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.Test @@ -68,4 +68,19 @@ class OpenId4VciManagerBuilderTest { builder.build() } } + + @Test + fun `Builder sets the ktorClientFactory`() { + val ktorClientFactory: () -> HttpClient = mockk() + val builder = OpenId4VciManager.Builder(context) + .config(config) + .documentManager(documentManager) + .ktorHttpClientFactory(ktorClientFactory) + + val manager = builder.build() as DefaultOpenId4VciManager + + assertNotNull(manager) + + assertSame(ktorClientFactory, manager.ktorHttpClientFactory) + } } \ No newline at end of file