From 662c8456ef8fd3e9e1730d3ddde1c2b9869cc14a Mon Sep 17 00:00:00 2001 From: Cristian G <113917899+cristianIOHK@users.noreply.github.com> Date: Fri, 2 Jun 2023 13:18:05 -0400 Subject: [PATCH] fix: create peer DID with updateMediator false does not ignore provided services (#73) Co-authored-by: Ahmed Moussa --- .markdownlint.json | 3 ++ .mega-linter.yml | 2 +- .../walletsdk/castor/shared/CastorShared.kt | 2 +- .../prism/walletsdk/prismagent/PrismAgent.kt | 4 +- .../walletsdk/prismagent/PrismAgentTests.kt | 46 +++++++++++++++++-- 5 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 .markdownlint.json diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 000000000..73cb9808d --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,3 @@ +{ + "MD013": false +} \ No newline at end of file diff --git a/.mega-linter.yml b/.mega-linter.yml index df9d97879..32527b968 100644 --- a/.mega-linter.yml +++ b/.mega-linter.yml @@ -1,5 +1,5 @@ APPLY_FIXES: none -FILTER_REGEX_EXCLUDE: (karma.config.js|polyfill.js|timeout.js) +FILTER_REGEX_EXCLUDE: (karma.config.js|polyfill.js|timeout.js|CHANGELOG.md) VALIDATE_ALL_CODEBASE: true REPOSITORY_DEVSKIM_DISABLE_ERRORS: true REPOSITORY_CHECKOV_DISABLE_ERRORS: true diff --git a/atala-prism-sdk/src/commonMain/kotlin/io/iohk/atala/prism/walletsdk/castor/shared/CastorShared.kt b/atala-prism-sdk/src/commonMain/kotlin/io/iohk/atala/prism/walletsdk/castor/shared/CastorShared.kt index 0674957b7..a3427a529 100644 --- a/atala-prism-sdk/src/commonMain/kotlin/io/iohk/atala/prism/walletsdk/castor/shared/CastorShared.kt +++ b/atala-prism-sdk/src/commonMain/kotlin/io/iohk/atala/prism/walletsdk/castor/shared/CastorShared.kt @@ -483,7 +483,7 @@ internal class CastorShared { id = it.id, type = it.type[0], serviceEndpoint = it.serviceEndpoint.uri, - routingKeys = listOf(), + routingKeys = it.serviceEndpoint.routingKeys?.toList() ?: listOf(), accept = it.serviceEndpoint.accept?.asList() ?: listOf(), ).toDict().toJsonElement(), ) diff --git a/atala-prism-sdk/src/commonMain/kotlin/io/iohk/atala/prism/walletsdk/prismagent/PrismAgent.kt b/atala-prism-sdk/src/commonMain/kotlin/io/iohk/atala/prism/walletsdk/prismagent/PrismAgent.kt index 816b9621c..97067cb0f 100644 --- a/atala-prism-sdk/src/commonMain/kotlin/io/iohk/atala/prism/walletsdk/prismagent/PrismAgent.kt +++ b/atala-prism-sdk/src/commonMain/kotlin/io/iohk/atala/prism/walletsdk/prismagent/PrismAgent.kt @@ -296,9 +296,9 @@ class PrismAgent { val authenticationKeyPair = apollo.createKeyPair(seed = seed, curve = KeyCurve(Curve.ED25519)) - var tmpServices = arrayOf() + var tmpServices = services if (updateMediator) { - tmpServices = services.plus( + tmpServices.plus( DIDDocument.Service( id = DIDCOMM1, type = arrayOf( diff --git a/atala-prism-sdk/src/commonTest/kotlin/io/iohk/atala/prism/walletsdk/prismagent/PrismAgentTests.kt b/atala-prism-sdk/src/commonTest/kotlin/io/iohk/atala/prism/walletsdk/prismagent/PrismAgentTests.kt index e285c5e70..2c32b2a41 100644 --- a/atala-prism-sdk/src/commonTest/kotlin/io/iohk/atala/prism/walletsdk/prismagent/PrismAgentTests.kt +++ b/atala-prism-sdk/src/commonTest/kotlin/io/iohk/atala/prism/walletsdk/prismagent/PrismAgentTests.kt @@ -1,19 +1,21 @@ package io.iohk.atala.prism.walletsdk.prismagent /* ktlint-disable import-ordering */ +import io.iohk.atala.prism.walletsdk.apollo.ApolloImpl +import io.iohk.atala.prism.walletsdk.castor.CastorImpl import io.iohk.atala.prism.walletsdk.domain.models.Curve import io.iohk.atala.prism.walletsdk.domain.models.DID +import io.iohk.atala.prism.walletsdk.domain.models.DIDDocument import io.iohk.atala.prism.walletsdk.domain.models.KeyCurve import io.iohk.atala.prism.walletsdk.domain.models.PrismAgentError import io.iohk.atala.prism.walletsdk.domain.models.PrivateKey import io.iohk.atala.prism.walletsdk.domain.models.Seed import io.iohk.atala.prism.walletsdk.domain.models.Signature import io.iohk.atala.prism.walletsdk.mercury.ApiMock +import io.iohk.atala.prism.walletsdk.prismagent.protocols.ProtocolType import io.iohk.atala.prism.walletsdk.prismagent.protocols.outOfBand.OutOfBandInvitation import io.iohk.atala.prism.walletsdk.prismagent.protocols.outOfBand.PrismOnboardingInvitation -import io.iohk.atala.prism.walletsdk.prismagent.protocols.ProtocolType import io.ktor.http.HttpStatusCode -import io.ktor.utils.io.core.toByteArray import kotlinx.coroutines.flow.flow import kotlinx.coroutines.test.runTest import kotlin.test.BeforeTest @@ -22,6 +24,7 @@ import kotlin.test.assertEquals import kotlin.test.assertFailsWith import kotlin.test.assertFalse import kotlin.test.assertTrue + /* ktlint-disable import-ordering */ @OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class) @@ -84,6 +87,7 @@ class PrismAgentTests { null, null, ) + val newDID = agent.createNewPeerDID(services = emptyArray(), updateMediator = false) assertEquals(newDID, validDID) @@ -91,6 +95,41 @@ class PrismAgentTests { assertTrue { plutoMock.wasStorePeerDIDAndPrivateKeysCalled } } + @Test + fun testCreateNewPeerDID_whenUpdateMediatorFalse_thenShouldUseProvidedServices() = runTest { + val apollo = ApolloImpl() + val castor = CastorImpl(apollo) + val agent = PrismAgent( + apollo, + castor, + plutoMock, + mercuryMock, + polluxMock, + connectionManager, + null, + null, + ) + + val seAccept = arrayOf("someAccepts") + val seRoutingKeys = arrayOf("someRoutingKey") + val service = DIDDocument.Service( + id = "DIDCommV2", + type = arrayOf(DIDCOMM_MESSAGING), + serviceEndpoint = DIDDocument.ServiceEndpoint( + uri = "localhost:8082", + accept = seAccept, + routingKeys = seRoutingKeys, + ), + ) + val newDID = agent.createNewPeerDID(services = arrayOf(service), updateMediator = false) + + val document = castor.resolveDID(newDID.toString()) + val services = document.services + assertTrue(services.isNotEmpty()) + assertEquals(service.type.first(), services.first().type.first()) + assertEquals(service.serviceEndpoint, services.first().serviceEndpoint) + } + @Test fun testPrismAgentOnboardingInvitation_shouldAcceptOnboardingInvitation_whenStatusIs200() = runTest { val agent = PrismAgent( @@ -317,7 +356,8 @@ class PrismAgentTests { @Test fun test_OOPInvitationInURLFormat() = runTest { - val oob = "https://my.domain.com/path?_oob=eyJpZCI6ImQzNjM3NzlhLWYyMmItNGFiNC1hYjY0LTkxZjkxNjgzNzYwNyIsInR5cGUiOiJodHRwczovL2RpZGNvbW0ub3JnL291dC1vZi1iYW5kLzIuMC9pbnZpdGF0aW9uIiwiZnJvbSI6ImRpZDpwZWVyOjIuRXo2TFNjcGZReGJ2VEhLaGpvbzVvMzlmc254VEp1RTRobVp3ckROUE5BVzI0dmFORi5WejZNa3UzSkpVTDNkaHpYQXB0RWpuUDFpNkF0TDlTNGlwRTNYOHM3MWV4MW9WVGNHLlNleUowSWpvaVpHMGlMQ0p6SWpvaWFIUjBjSE02THk5ck9ITXRaR1YyTG1GMFlXeGhjSEpwYzIwdWFXOHZjSEpwYzIwdFlXZGxiblF2Wkdsa1kyOXRiU0lzSW5JaU9sdGRMQ0poSWpwYkltUnBaR052YlcwdmRqSWlYWDAiLCJib2R5Ijp7ImdvYWxfY29kZSI6ImlvLmF0YWxhcHJpc20uY29ubmVjdCIsImdvYWwiOiJFc3RhYmxpc2ggYSB0cnVzdCBjb25uZWN0aW9uIGJldHdlZW4gdHdvIHBlZXJzIHVzaW5nIHRoZSBwcm90b2NvbCAnaHR0cHM6Ly9hdGFsYXByaXNtLmlvL21lcmN1cnkvY29ubmVjdGlvbnMvMS4wL3JlcXVlc3QnIiwiYWNjZXB0IjpbXX19" + val oob = + "https://my.domain.com/path?_oob=eyJpZCI6ImQzNjM3NzlhLWYyMmItNGFiNC1hYjY0LTkxZjkxNjgzNzYwNyIsInR5cGUiOiJodHRwczovL2RpZGNvbW0ub3JnL291dC1vZi1iYW5kLzIuMC9pbnZpdGF0aW9uIiwiZnJvbSI6ImRpZDpwZWVyOjIuRXo2TFNjcGZReGJ2VEhLaGpvbzVvMzlmc254VEp1RTRobVp3ckROUE5BVzI0dmFORi5WejZNa3UzSkpVTDNkaHpYQXB0RWpuUDFpNkF0TDlTNGlwRTNYOHM3MWV4MW9WVGNHLlNleUowSWpvaVpHMGlMQ0p6SWpvaWFIUjBjSE02THk5ck9ITXRaR1YyTG1GMFlXeGhjSEpwYzIwdWFXOHZjSEpwYzIwdFlXZGxiblF2Wkdsa1kyOXRiU0lzSW5JaU9sdGRMQ0poSWpwYkltUnBaR052YlcwdmRqSWlYWDAiLCJib2R5Ijp7ImdvYWxfY29kZSI6ImlvLmF0YWxhcHJpc20uY29ubmVjdCIsImdvYWwiOiJFc3RhYmxpc2ggYSB0cnVzdCBjb25uZWN0aW9uIGJldHdlZW4gdHdvIHBlZXJzIHVzaW5nIHRoZSBwcm90b2NvbCAnaHR0cHM6Ly9hdGFsYXByaXNtLmlvL21lcmN1cnkvY29ubmVjdGlvbnMvMS4wL3JlcXVlc3QnIiwiYWNjZXB0IjpbXX19" val agent = PrismAgent( apollo = apolloMock, castor = castorMock,