Skip to content

Commit

Permalink
fix: segregate credential config model
Browse files Browse the repository at this point in the history
  • Loading branch information
patlo-iog committed May 7, 2024
1 parent 3a8aff2 commit accff4f
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ object CredentialIssuerEndpoints {
.description("An issuer identifier in the oidc4vc protocol")
.example(UUID.fromString("f47ac10b-58cc-4372-a567-0e02b2c3d479"))

private val credentialConfigurationIdSegment = path[String]("credentialConfigurationId")
private val credentialConfigIdSegment = path[String]("configurationId")
.description("An identifier for the credential configuration")
.example("configurationId")

Expand Down Expand Up @@ -204,7 +204,7 @@ object CredentialIssuerEndpoints {
Unit,
Any
] = baseIssuerPrivateEndpoint.delete
.in(issuerIdPathSegment / "credential-configurations" / credentialConfigurationIdSegment)
.in(issuerIdPathSegment / "credential-configurations" / credentialConfigIdSegment)
.out(
statusCode(StatusCode.Ok).description("Credential configuration deleted successfully")
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import org.hyperledger.identus.pollux.core.model.oidc4vc.CredentialConfiguration
import sttp.tapir.Schema
import zio.json.*

import java.time.OffsetDateTime
import java.time.ZoneOffset
import scala.language.implicitConversions

final case class CreateCredentialConfigurationRequest(
Expand All @@ -19,13 +21,11 @@ object CreateCredentialConfigurationRequest {
}

final case class CredentialConfiguration(
configurationId: String,
format: CredentialFormat,
scope: String,
credential_definition: CredentialDefinition,
cryptographic_binding_methods_supported: Seq[String] = Seq("did:prism"),
credential_signing_alg_values_supported: Seq[String] = Seq("ES256K"),
proof_types_supported: SupportProofType =
SupportProofType(jwt = ProofTypeConfiguration(proof_signing_alg_values_supported = Seq("ES256K")))
schemaId: String,
createdAt: OffsetDateTime
)

object CredentialConfiguration {
Expand All @@ -35,28 +35,10 @@ object CredentialConfiguration {

given Conversion[PolluxCredentialConfiguration, CredentialConfiguration] = cc =>
CredentialConfiguration(
configurationId = cc.configurationId,
format = cc.format,
scope = cc.scope,
credential_definition = CredentialDefinition(
`@context` = Some(Seq("https://www.w3.org/2018/credentials/v1")),
`type` = Seq("VerifiableCredential"),
credentialSubject = None
)
schemaId = cc.schemaId.toString(),
createdAt = cc.createdAt.atOffset(ZoneOffset.UTC),
)
}

final case class SupportProofType(jwt: ProofTypeConfiguration)

object SupportProofType {
given schema: Schema[SupportProofType] = Schema.derived
given encoder: JsonEncoder[SupportProofType] = DeriveJsonEncoder.gen
given decoder: JsonDecoder[SupportProofType] = DeriveJsonDecoder.gen
}

final case class ProofTypeConfiguration(proof_signing_alg_values_supported: Seq[String])

object ProofTypeConfiguration {
given schema: Schema[ProofTypeConfiguration] = Schema.derived
given encoder: JsonEncoder[ProofTypeConfiguration] = DeriveJsonEncoder.gen
given decoder: JsonDecoder[ProofTypeConfiguration] = DeriveJsonDecoder.gen
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ case class IssuerMetadata(
credential_issuer: String,
authorization_servers: Option[Seq[String]],
credential_endpoint: String,
credential_configurations_supported: Map[String, CredentialConfiguration]
credential_configurations_supported: Map[String, SupportedCredentialConfiguration]
)

object IssuerMetadata {
Expand All @@ -31,7 +31,50 @@ object IssuerMetadata {
authorization_servers = Some(Seq(issuer.authorizationServer.toString())),
credential_endpoint = s"$credentialIssuerBaseUrl/credentials",
credential_configurations_supported =
credentialConfigurations.map(cc => (cc.configurationId, cc: CredentialConfiguration)).toMap
credentialConfigurations.map(cc => (cc.configurationId, cc: SupportedCredentialConfiguration)).toMap
)
}
}

final case class SupportedCredentialConfiguration(
format: CredentialFormat,
scope: String,
credential_definition: CredentialDefinition,
cryptographic_binding_methods_supported: Seq[String] = Seq("did:prism"),
credential_signing_alg_values_supported: Seq[String] = Seq("ES256K"),
proof_types_supported: SupportProofType =
SupportProofType(jwt = ProofTypeConfiguration(proof_signing_alg_values_supported = Seq("ES256K")))
)

object SupportedCredentialConfiguration {
given schema: Schema[SupportedCredentialConfiguration] = Schema.derived
given encoder: JsonEncoder[SupportedCredentialConfiguration] = DeriveJsonEncoder.gen
given decoder: JsonDecoder[SupportedCredentialConfiguration] = DeriveJsonDecoder.gen

given Conversion[pollux.CredentialConfiguration, SupportedCredentialConfiguration] = cc =>
SupportedCredentialConfiguration(
format = cc.format,
scope = cc.scope,
credential_definition = CredentialDefinition(
`@context` = Some(Seq("https://www.w3.org/2018/credentials/v1")),
`type` = Seq("VerifiableCredential"),
credentialSubject = None
)
)
}

final case class SupportProofType(jwt: ProofTypeConfiguration)

object SupportProofType {
given schema: Schema[SupportProofType] = Schema.derived
given encoder: JsonEncoder[SupportProofType] = DeriveJsonEncoder.gen
given decoder: JsonDecoder[SupportProofType] = DeriveJsonDecoder.gen
}

final case class ProofTypeConfiguration(proof_signing_alg_values_supported: Seq[String])

object ProofTypeConfiguration {
given schema: Schema[ProofTypeConfiguration] = Schema.derived
given encoder: JsonEncoder[ProofTypeConfiguration] = DeriveJsonEncoder.gen
given decoder: JsonDecoder[ProofTypeConfiguration] = DeriveJsonDecoder.gen
}

0 comments on commit accff4f

Please sign in to comment.