diff --git a/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/agent/server/config/AppConfig.scala b/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/agent/server/config/AppConfig.scala index b0379ce672..f77eb1b6bc 100644 --- a/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/agent/server/config/AppConfig.scala +++ b/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/agent/server/config/AppConfig.scala @@ -28,7 +28,7 @@ object AppConfig { val urlRegex = """^(http|https)://[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(:[0-9]{1,5})?(/.*)?$""".r urlRegex.findFirstMatchIn(url) match case Some(_) => - Try(java.net.URL(url)).toEither.left.map(ex /*java.net.MalformedURLException*/ => + Try(java.net.URI(url).toURL()).toEither.left.map(ex /*java.net.MalformedURLException*/ => Config.Error.InvalidData(zio.Chunk.empty, ex.getMessage()) ) case _ => Left(Config.Error.InvalidData(zio.Chunk.empty, s"Invalid URL: $url")) diff --git a/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/event/controller/EventController.scala b/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/event/controller/EventController.scala index 0aa9f38ed5..08c2a0f425 100644 --- a/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/event/controller/EventController.scala +++ b/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/event/controller/EventController.scala @@ -15,7 +15,7 @@ import org.hyperledger.identus.iam.wallet.http.controller.WalletManagementContro import org.hyperledger.identus.shared.models.WalletAccessContext import zio.* -import java.net.URL +import java.net.URI import scala.language.implicitConversions import java.util.UUID @@ -44,7 +44,9 @@ class EventControllerImpl(service: WalletManagementService) extends EventControl request: CreateWebhookNotification )(implicit rc: RequestContext): ZIO[WalletAccessContext, ErrorResponse, WebhookNotification] = { for { - url <- ZIO.attempt(new URL(request.url)).mapError(e => ErrorResponse.badRequest(detail = Some(e.toString()))) + url <- ZIO + .attempt(new URI(request.url).toURL()) + .mapError(e => ErrorResponse.badRequest(detail = Some(e.toString()))) notificationConfig <- EventNotificationConfig.applyWallet(url, request.customHeaders.getOrElse(Map.empty)) _ <- service .createWalletNotification(notificationConfig) diff --git a/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/agent/server/AgentInitializationSpec.scala b/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/agent/server/AgentInitializationSpec.scala index 028bca98cf..f1435c44e3 100644 --- a/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/agent/server/AgentInitializationSpec.scala +++ b/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/agent/server/AgentInitializationSpec.scala @@ -23,6 +23,7 @@ import zio.test.* import zio.test.Assertion.* import zio.test.ZIOSpecDefault +import java.net.URI import java.net.URL object AgentInitializationSpec extends ZIOSpecDefault, PostgresTestContainerSupport, ApolloSpecHelper { @@ -113,7 +114,7 @@ object AgentInitializationSpec extends ZIOSpecDefault, PostgresTestContainerSupp test("create wallet with provided webhook") { val url = "http://example.com" for { - _ <- AgentInitialization.run.overrideConfig(webhookUrl = Some(URL(url))) + _ <- AgentInitialization.run.overrideConfig(webhookUrl = Some(URI(url).toURL())) webhooks <- ZIO .serviceWithZIO[WalletNonSecretStorage]( _.walletNotification @@ -127,7 +128,7 @@ object AgentInitializationSpec extends ZIOSpecDefault, PostgresTestContainerSupp val url = "http://example.com" val apiKey = "secret" for { - _ <- AgentInitialization.run.overrideConfig(webhookUrl = Some(URL(url)), webhookApiKey = Some(apiKey)) + _ <- AgentInitialization.run.overrideConfig(webhookUrl = Some(URI(url).toURL()), webhookApiKey = Some(apiKey)) webhooks <- ZIO .serviceWithZIO[WalletNonSecretStorage]( _.walletNotification diff --git a/cloud-agent/service/wallet-api/src/main/scala/org/hyperledger/identus/agent/walletapi/sql/JdbcDIDNonSecretStorage.scala b/cloud-agent/service/wallet-api/src/main/scala/org/hyperledger/identus/agent/walletapi/sql/JdbcDIDNonSecretStorage.scala index efaaea1d36..4a3cca2265 100644 --- a/cloud-agent/service/wallet-api/src/main/scala/org/hyperledger/identus/agent/walletapi/sql/JdbcDIDNonSecretStorage.scala +++ b/cloud-agent/service/wallet-api/src/main/scala/org/hyperledger/identus/agent/walletapi/sql/JdbcDIDNonSecretStorage.scala @@ -242,32 +242,6 @@ class JdbcDIDNonSecretStorage(xa: Transactor[ContextAwareTask], xb: Transactor[T } } - override def listHdKeyPath( - did: PrismDID - ): RIO[WalletAccessContext, Seq[(String, ArraySeq[Byte], ManagedDIDHdKeyPath)]] = { - val cxnIO = - sql""" - | SELECT - | key_id, - | operation_hash, - | key_usage, - | key_index - | FROM public.prism_did_key - | WHERE did = $did AND key_mode = ${KeyManagementMode.HD} - """.stripMargin - .query[(String, ArraySeq[Byte], VerificationRelationship | InternalKeyPurpose, Int)] - .to[List] - - for { - state <- getManagedDIDState(did) - paths <- cxnIO.transactWallet(xa) - } yield state.map(_.didIndex).fold(Nil) { didIndex => - paths.map { (keyId, operationHash, keyUsage, keyIndex) => - (keyId, operationHash, ManagedDIDHdKeyPath(didIndex, keyUsage, keyIndex)) - } - } - } - override def insertKeyMeta( did: PrismDID, keyId: String, diff --git a/cloud-agent/service/wallet-api/src/main/scala/org/hyperledger/identus/agent/walletapi/sql/package.scala b/cloud-agent/service/wallet-api/src/main/scala/org/hyperledger/identus/agent/walletapi/sql/package.scala index aa0cd77a42..92a2b61ae7 100644 --- a/cloud-agent/service/wallet-api/src/main/scala/org/hyperledger/identus/agent/walletapi/sql/package.scala +++ b/cloud-agent/service/wallet-api/src/main/scala/org/hyperledger/identus/agent/walletapi/sql/package.scala @@ -22,6 +22,7 @@ import zio.json.* import zio.json.ast.Json import zio.json.ast.Json.* +import java.net.URI import java.net.URL import java.time.Instant import java.util.UUID @@ -123,7 +124,7 @@ package object sql { given arraySeqByteGet: Get[ArraySeq[Byte]] = Get[Array[Byte]].map(ArraySeq.from) given arraySeqBytePut: Put[ArraySeq[Byte]] = Put[Array[Byte]].contramap(_.toArray) - given urlGet: Get[URL] = Get[String].map(URL(_)) + given urlGet: Get[URL] = Get[String].map(URI(_).toURL()) given urlPut: Put[URL] = Put[String].contramap(_.toString()) given octetKeyPairGet: Get[OctetKeyPair] = Get[String].map(OctetKeyPair.parse) diff --git a/cloud-agent/service/wallet-api/src/main/scala/org/hyperledger/identus/agent/walletapi/storage/DIDNonSecretStorage.scala b/cloud-agent/service/wallet-api/src/main/scala/org/hyperledger/identus/agent/walletapi/storage/DIDNonSecretStorage.scala index 9400fba217..e8fce8710d 100644 --- a/cloud-agent/service/wallet-api/src/main/scala/org/hyperledger/identus/agent/walletapi/storage/DIDNonSecretStorage.scala +++ b/cloud-agent/service/wallet-api/src/main/scala/org/hyperledger/identus/agent/walletapi/storage/DIDNonSecretStorage.scala @@ -6,8 +6,6 @@ import org.hyperledger.identus.mercury.model.DidId import org.hyperledger.identus.shared.models.WalletAccessContext import zio.* -import scala.collection.immutable.ArraySeq - trait DIDNonSecretStorage { def getManagedDIDState(did: PrismDID): RIO[WalletAccessContext, Option[ManagedDIDState]] @@ -35,8 +33,6 @@ trait DIDNonSecretStorage { operationHash: Array[Byte] ): RIO[WalletAccessContext, Unit] - def listHdKeyPath(did: PrismDID): RIO[WalletAccessContext, Seq[(String, ArraySeq[Byte], ManagedDIDHdKeyPath)]] - /** Return a list of Managed DID as well as a count of all filtered items */ def listManagedDID( offset: Option[Int], diff --git a/cloud-agent/service/wallet-api/src/test/scala/org/hyperledger/identus/agent/walletapi/service/ManagedDIDServiceSpec.scala b/cloud-agent/service/wallet-api/src/test/scala/org/hyperledger/identus/agent/walletapi/service/ManagedDIDServiceSpec.scala index 9ec66640c9..2ab28ebaa0 100644 --- a/cloud-agent/service/wallet-api/src/test/scala/org/hyperledger/identus/agent/walletapi/service/ManagedDIDServiceSpec.scala +++ b/cloud-agent/service/wallet-api/src/test/scala/org/hyperledger/identus/agent/walletapi/service/ManagedDIDServiceSpec.scala @@ -343,7 +343,7 @@ object ManagedDIDServiceSpec ctx2 = ZLayer.succeed(WalletAccessContext(walletId2)) svc <- ZIO.service[ManagedDIDService] storage <- ZIO.service[DIDNonSecretStorage] - urlTmp = java.net.URL("http://example.com") + urlTmp = java.net.URI("http://example.com").toURL() peerDid1 <- svc.createAndStorePeerDID(urlTmp).provide(ctx1) peerDid2 <- svc.createAndStorePeerDID(urlTmp).provide(ctx2) record1 <- storage.getPeerDIDRecord(peerDid1.did) @@ -563,7 +563,7 @@ object ManagedDIDServiceSpec ctx1 = ZLayer.succeed(WalletAccessContext(walletId1)) ctx2 = ZLayer.succeed(WalletAccessContext(walletId2)) svc <- ZIO.service[ManagedDIDService] - urlTmp = java.net.URL("http://example.com") + urlTmp = java.net.URI("http://example.com").toURL() dids1 <- ZIO.foreach(1 to 3)(_ => svc.createAndStorePeerDID(urlTmp)).provide(ctx1) dids2 <- ZIO.foreach(1 to 3)(_ => svc.createAndStorePeerDID(urlTmp)).provide(ctx2) ownWalletDids1 <- ZIO.foreach(dids1)(d => svc.getPeerDID(d.did).exit).provide(ctx1) diff --git a/cloud-agent/service/wallet-api/src/test/scala/org/hyperledger/identus/agent/walletapi/storage/JdbcWalletNonSecretStorageSpec.scala b/cloud-agent/service/wallet-api/src/test/scala/org/hyperledger/identus/agent/walletapi/storage/JdbcWalletNonSecretStorageSpec.scala index e112843b3d..9214ac3b1d 100644 --- a/cloud-agent/service/wallet-api/src/test/scala/org/hyperledger/identus/agent/walletapi/storage/JdbcWalletNonSecretStorageSpec.scala +++ b/cloud-agent/service/wallet-api/src/test/scala/org/hyperledger/identus/agent/walletapi/storage/JdbcWalletNonSecretStorageSpec.scala @@ -14,7 +14,7 @@ import zio.* import zio.test.* import zio.test.Assertion.* -import java.net.URL +import java.net.URI object JdbcWalletNonSecretStorageSpec extends ZIOSpecDefault, PostgresTestContainerSupport { @@ -156,7 +156,7 @@ object JdbcWalletNonSecretStorageSpec extends ZIOSpecDefault, PostgresTestContai for { storage <- ZIO.service[WalletNonSecretStorage] wallet <- createWallets(1).map(_.head) - config = EventNotificationConfig(wallet.id, URL("https://example.com")) + config = EventNotificationConfig(wallet.id, URI("https://example.com").toURL()) _ <- storage .createWalletNotification(config) .provide(ZLayer.succeed(WalletAccessContext(wallet.id))) @@ -171,11 +171,11 @@ object JdbcWalletNonSecretStorageSpec extends ZIOSpecDefault, PostgresTestContai limit = JdbcWalletNonSecretStorage.MAX_WEBHOOK_PER_WALLET _ <- ZIO.foreach(1 to limit) { _ => storage - .createWalletNotification(EventNotificationConfig(wallet.id, URL("https://example.com"))) + .createWalletNotification(EventNotificationConfig(wallet.id, URI("https://example.com").toURL())) .provide(ZLayer.succeed(WalletAccessContext(wallet.id))) } exit <- storage - .createWalletNotification(EventNotificationConfig(wallet.id, URL("https://example.com"))) + .createWalletNotification(EventNotificationConfig(wallet.id, URI("https://example.com").toURL())) .provide(ZLayer.succeed(WalletAccessContext(wallet.id))) .exit } yield assert(exit)(fails(isSubtype[TooManyWebhook](anything))) @@ -186,7 +186,7 @@ object JdbcWalletNonSecretStorageSpec extends ZIOSpecDefault, PostgresTestContai wallets <- createWallets(2) wallet1 = wallets.head wallet2 = wallets.last - config = EventNotificationConfig(wallet1.id, URL("https://example.com")) + config = EventNotificationConfig(wallet1.id, URI("https://example.com").toURL()) _ <- storage .createWalletNotification(config) .provide(ZLayer.succeed(WalletAccessContext(wallet1.id))) diff --git a/mercury/protocol-invitation/src/main/scala/org/hyperledger/identus/mercury/protocol/invitation/OutOfBand.scala b/mercury/protocol-invitation/src/main/scala/org/hyperledger/identus/mercury/protocol/invitation/OutOfBand.scala index 7cd2a59be5..001958f311 100644 --- a/mercury/protocol-invitation/src/main/scala/org/hyperledger/identus/mercury/protocol/invitation/OutOfBand.scala +++ b/mercury/protocol-invitation/src/main/scala/org/hyperledger/identus/mercury/protocol/invitation/OutOfBand.scala @@ -1,5 +1,6 @@ package org.hyperledger.identus.mercury.protocol.invitation +import java.net.URI import java.net.URL import java.{util => ju} import org.hyperledger.identus.mercury.protocol.invitation.v2._ @@ -8,7 +9,7 @@ import io.circe.parser._ object OutOfBand { - def parseLink(url: String): Option[String] = parseLink(new URL(url)) + def parseLink(url: String): Option[String] = parseLink(new URI(url).toURL()) def parseLink(url: URL): Option[String] = (url.getQuery() match { case str if str.startsWith("_oob=") => Some(str.drop(5)) case _ => None diff --git a/mercury/protocol-invitation/src/main/scala/org/hyperledger/identus/mercury/protocol/invitation/ServiceType.scala b/mercury/protocol-invitation/src/main/scala/org/hyperledger/identus/mercury/protocol/invitation/ServiceType.scala index 7f3ea642ec..0ce650c6de 100644 --- a/mercury/protocol-invitation/src/main/scala/org/hyperledger/identus/mercury/protocol/invitation/ServiceType.scala +++ b/mercury/protocol-invitation/src/main/scala/org/hyperledger/identus/mercury/protocol/invitation/ServiceType.scala @@ -2,7 +2,7 @@ package org.hyperledger.identus.mercury.protocol.invitation import cats.implicits._ import io.circe.syntax._ import io.circe.generic.semiauto.{deriveDecoder, deriveEncoder} -import io.circe.{Decoder, Encoder, HCursor} +import io.circe.{Decoder, Encoder} sealed trait ServiceType diff --git a/mercury/protocol-outofband-login/src/main/scala/org/hyperledger/identus/mercury/protocol/outofbandlogin/Utils.scala b/mercury/protocol-outofband-login/src/main/scala/org/hyperledger/identus/mercury/protocol/outofbandlogin/Utils.scala index 675933383e..229a6abcf3 100644 --- a/mercury/protocol-outofband-login/src/main/scala/org/hyperledger/identus/mercury/protocol/outofbandlogin/Utils.scala +++ b/mercury/protocol-outofband-login/src/main/scala/org/hyperledger/identus/mercury/protocol/outofbandlogin/Utils.scala @@ -1,5 +1,6 @@ package org.hyperledger.identus.mercury.protocol.outofbandlogin +import java.net.URI import java.net.URL import org.hyperledger.identus.mercury @@ -10,7 +11,7 @@ object Utils { */ def getNewMsgId: String = java.util.UUID.randomUUID().toString - def parseLink(url: String): Option[String] = parseLink(new URL(url)) + def parseLink(url: String): Option[String] = parseLink(new URI(url).toURL()) def parseLink(url: URL): Option[String] = (url.getQuery() match { case str if str.startsWith("_oob=") => Some(str.drop(5)) case _ => None diff --git a/mercury/protocol-present-proof/src/test/scala/org/hyperledger/identus/mercury/protocol/presentproof/PresentationSpec.scala b/mercury/protocol-present-proof/src/test/scala/org/hyperledger/identus/mercury/protocol/presentproof/PresentationSpec.scala index 90c7121b31..43a12c46c7 100644 --- a/mercury/protocol-present-proof/src/test/scala/org/hyperledger/identus/mercury/protocol/presentproof/PresentationSpec.scala +++ b/mercury/protocol-present-proof/src/test/scala/org/hyperledger/identus/mercury/protocol/presentproof/PresentationSpec.scala @@ -7,7 +7,6 @@ import org.hyperledger.identus.mercury.model.AttachmentDescriptor import org.hyperledger.identus.mercury.model.AttachmentDescriptor.attachmentDescriptorEncoderV2 import munit.* import org.hyperledger.identus.mercury.model.{LinkData, DidId} -import org.hyperledger.identus.mercury.protocol.presentproof.Presentation class PresentationSpec extends ZSuite {