Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
FabioPinheiro committed May 8, 2024
1 parent 356d295 commit 9960646
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,47 @@ object IssueBackgroundJobs extends BackgroundJobsHelper {
.gauge("issuance_flow_holder_req_pending_to_generated_flow_ms_gauge")
.trackDurationWith(_.toMetricsSeconds)

case IssueCredentialRecord(
id,
_,
_,
_,
_,
_,
_,
CredentialFormat.SDJWT,
Role.Holder,
Some(subjectId),
_,
_,
RequestPending,
Some(offer),
None,
_,
_,
_,
_,
_,
_,
_
) =>
val holderPendingToGeneratedFlow = for {
walletAccessContext <- buildWalletAccessContextLayer(offer.to)
result <- (for {
credentialService <- ZIO.service[CredentialService]
_ <- credentialService
.generateSDJWTCredentialRequest(id)
.provideSomeLayer(ZLayer.succeed(walletAccessContext))
} yield ()).mapError(e => (walletAccessContext, handleCredentialErrors(e)))
} yield result

holderPendingToGeneratedFlow @@ HolderPendingToGeneratedSuccess.trackSuccess
@@ HolderPendingToGeneratedFailed.trackError
@@ HolderPendingToGeneratedAll
@@ Metric
.gauge("issuance_flow_holder_req_pending_to_generated_flow_ms_gauge")
.trackDurationWith(_.toMetricsSeconds)

case IssueCredentialRecord(
id,
_,
Expand Down Expand Up @@ -420,6 +461,52 @@ object IssueBackgroundJobs extends BackgroundJobsHelper {
.gauge("issuance_flow_issuer_cred_pending_to_generated_flow_ms_gauge")
.trackDurationWith(_.toMetricsSeconds)

// Credential is pending, can be generated by Issuer
case IssueCredentialRecord(
id,
_,
_,
_,
_,
_,
_,
CredentialFormat.SDJWT,
Role.Issuer,
_,
_,
_,
CredentialPending,
_,
_,
_,
Some(issue),
_,
Some(issuerDID),
_,
_,
_,
) =>
// Generate the JWT Credential and store it in DB as an attachment to IssueCredentialData
// Set ProtocolState to CredentialGenerated
// TODO Move all logic to service
val issuerPendingToGeneratedFlow = for {
walletAccessContext <- buildWalletAccessContextLayer(issue.from)
result <- (for {
credentialService <- ZIO.service[CredentialService]
config <- ZIO.service[AppConfig]
_ <- credentialService
.generateSDJWTCredential(id, config.pollux.statusListRegistry.publicEndpointUrl.toExternalForm)
.provideSomeLayer(ZLayer.succeed(walletAccessContext))
} yield ()).mapError(e => (walletAccessContext, e))
} yield result

issuerPendingToGeneratedFlow @@ IssuerPendingToGeneratedSuccess.trackSuccess
@@ IssuerPendingToGeneratedFailed.trackError
@@ IssuerPendingToGeneratedAll
@@ Metric
.gauge("issuance_flow_issuer_cred_pending_to_generated_flow_ms_gauge")
.trackDurationWith(_.toMetricsSeconds)

case IssueCredentialRecord(
id,
_,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@ trait CredentialService {
recordId: DidCommID
): ZIO[WalletAccessContext, CredentialServiceError, IssueCredentialRecord]

def generateSDJWTCredentialRequest(
recordId: DidCommID
): ZIO[WalletAccessContext, CredentialServiceError, IssueCredentialRecord]

def generateAnonCredsCredentialRequest(
recordId: DidCommID
): ZIO[WalletAccessContext, CredentialServiceError, IssueCredentialRecord]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -585,6 +585,45 @@ private class CredentialServiceImpl(
} yield record
}

override def generateJWTCredentialRequest(
recordId: DidCommID
): ZIO[WalletAccessContext, CredentialServiceError, IssueCredentialRecord] = {
???
// for {
// record <- getRecordWithState(recordId, ProtocolState.RequestPending)
// subjectId <- ZIO
// .fromOption(record.subjectId)
// .mapError(_ => CredentialServiceError.UnexpectedError(s"Subject Id not found in record: ${recordId.value}"))
// subjectDID <- ZIO
// .fromEither(PrismDID.fromString(subjectId))
// .mapError(_ => CredentialServiceError.UnsupportedDidFormat(subjectId))
// longFormPrismDID <- getLongForm(subjectDID, true).mapError(err => UnexpectedError(err.getMessage))
// jwtIssuer <- createJwtIssuer(longFormPrismDID, VerificationRelationship.Authentication)
// presentationPayload <- createPresentationPayload(record, jwtIssuer)
// signedPayload = JwtPresentation.encodeJwt(presentationPayload.toJwtPresentationPayload, jwtIssuer)
// formatAndOffer <- ZIO
// .fromOption(record.offerCredentialFormatAndData)
// .mapError(_ => InvalidFlowStateError(s"No offer found for this record: $recordId"))
// request = createDidCommRequestCredential(formatAndOffer._1, formatAndOffer._2, signedPayload)
// count <- credentialRepository
// .updateWithJWTRequestCredential(recordId, request, ProtocolState.RequestGenerated)
// .mapError(RepositoryError.apply) @@ CustomMetricsAspect.endRecordingTime(
// s"${record.id}_issuance_flow_holder_req_pending_to_generated",
// "issuance_flow_holder_req_pending_to_generated_ms_gauge"
// ) @@ CustomMetricsAspect.startRecordingTime(s"${record.id}_issuance_flow_holder_req_generated_to_sent")
// _ <- count match
// case 1 => ZIO.succeed(())
// case n => ZIO.fail(RecordIdNotFound(recordId))
// record <- credentialRepository
// .getIssueCredentialRecord(record.id)
// .mapError(RepositoryError.apply)
// .flatMap {
// case None => ZIO.fail(RecordIdNotFound(recordId))
// case Some(value) => ZIO.succeed(value)
// }
// } yield record
}

override def generateAnonCredsCredentialRequest(
recordId: DidCommID
): ZIO[WalletAccessContext, CredentialServiceError, IssueCredentialRecord] = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,11 @@ class CredentialServiceNotifier(
): ZIO[WalletAccessContext, CredentialServiceError, IssueCredentialRecord] =
notifyOnSuccess(svc.generateJWTCredentialRequest(recordId))

override def generateSDJWTCredentialRequest(
recordId: DidCommID
): ZIO[WalletAccessContext, CredentialServiceError, IssueCredentialRecord] =
notifyOnSuccess(svc.generateSDJWTCredentialRequest(recordId))

override def generateAnonCredsCredentialRequest(
recordId: DidCommID
): ZIO[WalletAccessContext, CredentialServiceError, IssueCredentialRecord] =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ object MockCredentialService extends Mock[CredentialService] {
object AcceptCredentialOffer
extends Effect[(DidCommID, Option[String]), CredentialServiceError, IssueCredentialRecord]
object GenerateJWTCredentialRequest extends Effect[DidCommID, CredentialServiceError, IssueCredentialRecord]
object GenerateSDJWTCredentialRequest extends Effect[DidCommID, CredentialServiceError, IssueCredentialRecord]
object GenerateAnonCredsCredentialRequest extends Effect[DidCommID, CredentialServiceError, IssueCredentialRecord]
object ReceiveCredentialRequest extends Effect[RequestCredential, CredentialServiceError, IssueCredentialRecord]
object AcceptCredentialRequest extends Effect[DidCommID, CredentialServiceError, IssueCredentialRecord]
Expand Down Expand Up @@ -165,6 +166,11 @@ object MockCredentialService extends Mock[CredentialService] {
): IO[CredentialServiceError, IssueCredentialRecord] =
proxy(GenerateJWTCredentialRequest, recordId)

override def generateSDJWTCredentialRequest(
recordId: DidCommID
): IO[CredentialServiceError, IssueCredentialRecord] =
proxy(GenerateSDJWTCredentialRequest, recordId)

override def generateAnonCredsCredentialRequest(
recordId: DidCommID
): ZIO[WalletAccessContext, CredentialServiceError, IssueCredentialRecord] =
Expand Down

0 comments on commit 9960646

Please sign in to comment.