Skip to content

Commit

Permalink
feat: implement holder credential-request state machine (#602)
Browse files Browse the repository at this point in the history
* state machine skeleton

* added holder-side state machine and tests

* added override

* update state machine

* renamed to *manager

* fix tests, SQL impl
  • Loading branch information
paullatzelsperger authored Feb 19, 2025
1 parent eb40fd6 commit b41ba4c
Show file tree
Hide file tree
Showing 25 changed files with 945 additions and 616 deletions.
3 changes: 3 additions & 0 deletions core/identity-hub-core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,16 @@ dependencies {
implementation(libs.edc.lib.jws2020)
implementation(libs.edc.lib.common.crypto)
implementation(libs.edc.lib.token)
implementation(libs.edc.lib.statemachine)
implementation(libs.edc.spi.token)
implementation(libs.edc.spi.identity.did)
implementation(libs.edc.vc.ldp)
implementation(libs.edc.vc.jwt) // JtiValidationRule


testImplementation(project(":core:common-core"))
testImplementation(libs.junit.jupiter.api)
testImplementation(libs.awaitility)
testImplementation(libs.edc.junit)
testImplementation(libs.edc.jsonld)
testImplementation(testFixtures(project(":spi:keypair-spi")))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.eclipse.edc.iam.verifiablecredentials.spi.model.CredentialFormat;
import org.eclipse.edc.iam.verifiablecredentials.spi.model.RevocationServiceRegistry;
import org.eclipse.edc.identityhub.core.services.query.CredentialQueryResolverImpl;
import org.eclipse.edc.identityhub.core.services.verifiablecredential.CredentialRequestServiceImpl;
import org.eclipse.edc.identityhub.core.services.verifiablecredential.CredentialRequestManagerImpl;
import org.eclipse.edc.identityhub.core.services.verifiablecredential.CredentialStatusCheckServiceImpl;
import org.eclipse.edc.identityhub.core.services.verifiablecredential.CredentialWriterImpl;
import org.eclipse.edc.identityhub.core.services.verifiablepresentation.PresentationCreatorRegistryImpl;
Expand All @@ -39,7 +39,7 @@
import org.eclipse.edc.identityhub.spi.model.IdentityHubConstants;
import org.eclipse.edc.identityhub.spi.participantcontext.ParticipantContextService;
import org.eclipse.edc.identityhub.spi.transformation.ScopeToCriterionTransformer;
import org.eclipse.edc.identityhub.spi.verifiablecredentials.CredentialRequestService;
import org.eclipse.edc.identityhub.spi.verifiablecredentials.CredentialRequestManager;
import org.eclipse.edc.identityhub.spi.verifiablecredentials.CredentialStatusCheckService;
import org.eclipse.edc.identityhub.spi.verifiablecredentials.generator.CredentialWriter;
import org.eclipse.edc.identityhub.spi.verifiablecredentials.generator.PresentationCreatorRegistry;
Expand Down Expand Up @@ -140,6 +140,7 @@ public class CoreServicesExtension implements ServiceExtension {

@Setting(key = "edc.ih.iam.id", description = "DID of the holder")
private String ownDid;
private CredentialRequestManagerImpl credentialRequestService;

@Override
public String name() {
Expand All @@ -152,6 +153,11 @@ public void initialize(ServiceExtensionContext context) {
suiteRegistry.register(IdentityHubConstants.JWS_2020_SIGNATURE_SUITE, new Jws2020SignatureSuite(JacksonJsonLd.createObjectMapper()));
}

@Override
public void start() {
credentialRequestService.start();
}

@Provider
public SelfIssuedTokenVerifier createAccessTokenVerifier(ServiceExtensionContext context) {
var keyResolver = new KeyPairResourcePublicKeyResolver(store, keyParserRegistry, context.getMonitor(), fallbackService);
Expand Down Expand Up @@ -180,7 +186,6 @@ public PresentationCreatorRegistry presentationCreatorRegistry(ServiceExtensionC
return presentationCreatorRegistry;
}


@Provider
public VerifiablePresentationService presentationGenerator(ServiceExtensionContext context) {
return new VerifiablePresentationServiceImpl(presentationCreatorRegistry(context), context.getMonitor());
Expand All @@ -198,15 +203,19 @@ public CredentialStatusCheckService createStatusCheckService() {
}

@Provider
public CredentialRequestService createDefaultCredentialRequestService() {
return new CredentialRequestServiceImpl(credentialRequestStore,
didResolverRegistry,
typeTransformerRegistry.forContext(DCP_SCOPE_V_1_0),
httpClient,
secureTokenService,
ownDid,
transactionContext
);
public CredentialRequestManager createDefaultCredentialRequestService(ServiceExtensionContext context) {
if (credentialRequestService == null) {
credentialRequestService = CredentialRequestManagerImpl.Builder.newInstance()
.store(credentialRequestStore)
.didResolverRegistry(didResolverRegistry)
.typeTransformerRegistry(typeTransformerRegistry.forContext(DCP_SCOPE_V_1_0))
.httpClient(httpClient)
.secureTokenService(secureTokenService)
.ownDid(ownDid)
.transactionContext(transactionContext)
.monitor(context.getMonitor())
.build();
}
return credentialRequestService;
}

}
Loading

0 comments on commit b41ba4c

Please sign in to comment.