diff --git a/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/oid4vci/service/OIDCCredentialIssuerService.scala b/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/oid4vci/service/OIDCCredentialIssuerService.scala index 29e1eb6b41..4e17335a65 100644 --- a/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/oid4vci/service/OIDCCredentialIssuerService.scala +++ b/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/oid4vci/service/OIDCCredentialIssuerService.scala @@ -14,7 +14,6 @@ import org.hyperledger.identus.pollux.core.service.{ OID4VCIIssuerMetadataServiceError, URIDereferencer } -import org.hyperledger.identus.pollux.vc.jwt.* import org.hyperledger.identus.pollux.vc.jwt.{ DID as PolluxDID, DidResolver, @@ -22,13 +21,13 @@ import org.hyperledger.identus.pollux.vc.jwt.{ JWT, JWTVerification, JwtCredential, - W3cCredentialPayload + W3cCredentialPayload, + * } import org.hyperledger.identus.shared.models.{WalletAccessContext, WalletId} import zio.* -import java.net.URL -import java.security.PublicKey +import java.net.{URI, URL} import java.time.Instant import java.util.UUID import scala.util.Try @@ -248,7 +247,7 @@ case class OIDCCredentialIssuerServiceImpl( _ <- CredentialSchema .validateJWTCredentialSubject(schemaId.toString(), simpleZioToCirce(claims).noSpaces, uriDereferencer) .mapError(e => CredentialSchemaError(e)) - session <- buildNewIssuanceSession(issuerId, issuingDID, claims) + session <- buildNewIssuanceSession(issuerId, issuingDID, claims, schemaId) _ <- issuanceSessionStorage .start(session) .mapError(e => ServiceError(s"Failed to start issuance session: ${e.message}")) @@ -278,7 +277,8 @@ case class OIDCCredentialIssuerServiceImpl( private def buildNewIssuanceSession( issuerId: UUID, issuerDid: PrismDID, - claims: zio.json.ast.Json + claims: zio.json.ast.Json, + schemaId: URI ): UIO[IssuanceSession] = { for { id <- ZIO.random.flatMap(_.nextUUID) @@ -290,7 +290,7 @@ case class OIDCCredentialIssuerServiceImpl( nonce = nonce.toString, issuerState = issuerState.toString, claims = claims, - schemaId = None, // FIXME: populate correct value + schemaId = Some(schemaId.toString), subjectDid = None, // FIXME: populate correct value issuingDid = issuerDid, ) diff --git a/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/oid4vci/domain/OIDCCredentialIssuerServiceSpec.scala b/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/oid4vci/domain/OIDCCredentialIssuerServiceSpec.scala index 3900129de3..9e76cc074f 100644 --- a/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/oid4vci/domain/OIDCCredentialIssuerServiceSpec.scala +++ b/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/oid4vci/domain/OIDCCredentialIssuerServiceSpec.scala @@ -162,7 +162,7 @@ object OIDCCredentialIssuerServiceSpec MockOID4VCIIssuerMetadataService.empty, layers ), - test("create credential-offer with valid claims") { + test("create credential-offer with valid claims and schemaId") { val wac = ZLayer.succeed(WalletAccessContext(WalletId.random)) val claims = Json( "credentialSubject" -> Json.Obj( @@ -187,7 +187,8 @@ object OIDCCredentialIssuerServiceSpec .provide(wac) issuerState = offer.grants.get.authorization_code.issuer_state.get session <- oidcCredentialIssuerService.getIssuanceSessionByIssuerState(issuerState) - } yield assert(session.claims)(equalTo(claims)) + } yield assert(session.claims)(equalTo(claims)) && + assert(session.schemaId)(isSome(equalTo("resource:///vc-schema-example.json"))) }.provide( MockDIDService.empty, MockManagedDIDService.empty,