Skip to content

Commit

Permalink
feat: delete credential issuer endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
patlo-iog committed May 7, 2024
1 parent b0e9f59 commit f26c615
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,19 @@ object CredentialIssuerEndpoints {
.name("getCredentialIssuers")
.summary("List all credential issuers")

val deleteCredentialIssuerEndpoint: Endpoint[
(ApiKeyCredentials, JwtCredentials),
(RequestContext, UUID),
ErrorResponse,
Unit,
Any
] = baseIssuerPrivateEndpoint.delete
.in(issuerIdPathSegment)
.errorOut(EndpointOutputs.basicFailureAndNotFoundAndForbidden)
.out(statusCode(StatusCode.Ok).description("Credential issuer deleted successfully"))
.name("deleteCredentialIssuer")
.summary("Delete a credential issuer")

val createCredentialConfigurationEndpoint: Endpoint[
(ApiKeyCredentials, JwtCredentials),
(RequestContext, UUID, CreateCredentialConfigurationRequest),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,18 @@ case class CredentialIssuerServerEndpoints(
}
}

val deleteCredentialIssuerServerEndpoint: ZServerEndpoint[Any, Any] =
CredentialIssuerEndpoints.deleteCredentialIssuerEndpoint
.zServerSecurityLogic(SecurityLogic.authorizeWalletAccessWith(_)(authenticator, authorizer))
.serverLogic { wac =>
{ case (rc, issuerId) =>
credentialIssuerController
.deleteCredentialIssuer(rc, issuerId)
.provideSomeLayer(ZLayer.succeed(wac))
.logTrace(rc)
}
}

val createCredentialConfigurationServerEndpoint: ZServerEndpoint[Any, Any] =
CredentialIssuerEndpoints.createCredentialConfigurationEndpoint
.zServerSecurityLogic(SecurityLogic.authorizeWalletAccessWith(_)(authenticator, authorizer))
Expand All @@ -104,6 +116,7 @@ case class CredentialIssuerServerEndpoints(
nonceServerEndpoint,
createCredentialIssuerServerEndpoint,
getCredentialIssuersServerEndpoint,
deleteCredentialIssuerServerEndpoint,
createCredentialConfigurationServerEndpoint,
issuerMetadataServerEndpoint
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ trait CredentialIssuerController {
ctx: RequestContext
): ZIO[WalletAccessContext, ErrorResponse, CredentialIssuerPage]

def deleteCredentialIssuer(
ctx: RequestContext,
issuerId: UUID,
): ZIO[WalletAccessContext, ErrorResponse, Unit]

def createCredentialConfiguration(
ctx: RequestContext,
issuerId: UUID,
Expand Down Expand Up @@ -239,6 +244,14 @@ case class CredentialIssuerControllerImpl(
contents = issuers.map(i => i)
)

override def deleteCredentialIssuer(
ctx: RequestContext,
issuerId: UUID
): ZIO[WalletAccessContext, ErrorResponse, Unit] =
for {
_ <- issuerMetadataService.deleteCredentialIssuer(issuerId)
} yield ()

override def createCredentialConfiguration(
ctx: RequestContext,
issuerId: UUID,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ import org.hyperledger.identus.shared.models.WalletId
import zio.*

import java.util.UUID
import java.{util => ju}

trait OIDC4VCIssuerMetadataRepository {
def createIssuer(issuer: CredentialIssuer): URIO[WalletAccessContext, Unit]
def findWalletIssuers: URIO[WalletAccessContext, Seq[CredentialIssuer]]
def findIssuer(issuerId: UUID): UIO[Option[CredentialIssuer]]
def deleteIssuer(issuerId: UUID): URIO[WalletAccessContext, Unit]
def createCredentialConfiguration(issuerId: UUID, config: CredentialConfiguration): URIO[WalletAccessContext, Unit]
def findAllCredentialConfigurations(issuerId: UUID): UIO[Seq[CredentialConfiguration]]
}
Expand All @@ -36,6 +38,12 @@ class InMemoryOIDC4VCIssuerMetadataRepository(
override def findIssuer(issuerId: UUID): UIO[Option[CredentialIssuer]] =
issuerStore.get.map(m => m.values.flatten.find(_.id == issuerId))

override def deleteIssuer(issuerId: ju.UUID): URIO[WalletAccessContext, Unit] =
for {
walletId <- ZIO.serviceWith[WalletAccessContext](_.walletId)
_ <- issuerStore.update(m => m.updated(walletId, m.getOrElse(walletId, Nil).filter(_.id != issuerId)))
} yield ()

override def createCredentialConfiguration(
issuerId: UUID,
config: CredentialConfiguration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ trait OIDC4VCIssuerMetadataService {
def createCredentialIssuer(authorizationServer: URL): URIO[WalletAccessContext, CredentialIssuer]
def getCredentialIssuers: URIO[WalletAccessContext, Seq[CredentialIssuer]]
def getCredentialIssuer(issuerId: UUID): IO[IssuerIdNotFound, CredentialIssuer]
def deleteCredentialIssuer(issuerId: UUID): URIO[WalletAccessContext, Unit]
def createCredentialConfiguration(
issuerId: UUID,
format: CredentialFormat,
Expand Down Expand Up @@ -74,6 +75,9 @@ class OIDC4VCIssuerMetadataServiceImpl(repository: OIDC4VCIssuerMetadataReposito
.findIssuer(issuerId)
.someOrFail(IssuerIdNotFound(issuerId))

override def deleteCredentialIssuer(issuerId: UUID): URIO[WalletAccessContext, Unit] =
repository.deleteIssuer(issuerId)

override def createCredentialConfiguration(
issuerId: UUID,
format: CredentialFormat,
Expand Down

0 comments on commit f26c615

Please sign in to comment.