Skip to content

Commit 0a1672f

Browse files
authored
feat: introduce holderPid and issuerPid (#608)
1 parent c952c2b commit 0a1672f

File tree

41 files changed

+316
-76
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+316
-76
lines changed

core/common-core/src/main/resources/dcp.v1.0.jsonld

+18-5
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,15 @@
2121
"@context": {
2222
"credentials": {
2323
"@id": "dcp:credentials",
24-
"@container": "@set"
24+
"@container": "@set",
25+
"@type": "@json"
26+
},
27+
"issuerPid": {
28+
"@id": "dcp:issuerPid",
29+
"@type": "@id"
2530
},
26-
"requestId": {
27-
"@id": "dcp:requestId",
31+
"holderPid": {
32+
"@id": "dcp:holderPid",
2833
"@type": "@id"
2934
}
3035
}
@@ -69,6 +74,10 @@
6974
"CredentialRequestMessage": {
7075
"@id": "dcp:CredentialRequestMessage",
7176
"@context": {
77+
"holderPid": {
78+
"@id": "dcp:holderPid",
79+
"@type": "@id"
80+
},
7281
"credentials": {
7382
"@id": "dcp:credentials",
7483
"@type": "@json"
@@ -79,8 +88,12 @@
7988
"CredentialStatus": {
8089
"@id": "dcp:CredentialStatus",
8190
"@context": {
82-
"requestId": {
83-
"@id": "dcp:requestId",
91+
"holderPid": {
92+
"@id": "dcp:holderPid",
93+
"@type": "@id"
94+
},
95+
"issuerPid": {
96+
"@id": "dcp:issuerPid",
8497
"@type": "@id"
8598
},
8699
"status": {

core/identity-hub-core/src/main/java/org/eclipse/edc/identityhub/core/services/verifiablecredential/CredentialRequestManagerImpl.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ private Boolean processRequested(HolderCredentialRequest request) {
202202
}
203203

204204
private Processor processRequestsInState(HolderRequestState state, Function<HolderCredentialRequest, Boolean> function) {
205-
var filter = new Criterion[]{hasState(state.code()), isNotPending()};
205+
var filter = new Criterion[]{ hasState(state.code()), isNotPending() };
206206
return createProcessor(function, filter);
207207
}
208208

@@ -271,7 +271,7 @@ private Result<Request> createCredentialsStatusRequest(TokenRepresentation token
271271
*/
272272
private Result<Request> createCredentialsRequest(TokenRepresentation token, String issuerRequestEndpointUrl, String requestId, Map<String, String> typesAndFormats) {
273273
var rqMessage = CredentialRequestMessage.Builder.newInstance();
274-
rqMessage.requestId(requestId);
274+
rqMessage.holderPid(requestId);
275275

276276
typesAndFormats.forEach((type, format) -> rqMessage.credential(new CredentialRequest(type, format, null)));
277277

core/issuerservice/issuerservice-issuance/src/main/java/org/eclipse/edc/issuerservice/issuance/generator/JwtCredentialGenerator.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public class JwtCredentialGenerator implements CredentialGenerator {
4242
public static final String VERIFIABLE_CREDENTIAL_CLAIM = "vc";
4343
public static final String CREDENTIAL_SUBJECT = "credentialSubject";
4444
public static final String VERIFIABLE_CREDENTIAL = "VerifiableCredential";
45+
public static final String TYPE_PROPERTY = "type";
46+
4547
private final TokenGenerationService tokenGenerationService;
4648
private final Clock clock;
4749

@@ -107,7 +109,7 @@ private TokenDecorator vcDecorator(String type, String participantId, Verifiable
107109
private Map<String, Object> createVcClaim(String type, VerifiableCredential verifiableCredential) {
108110
return Map.of(
109111
JsonLdKeywords.CONTEXT, List.of(VcConstants.W3C_CREDENTIALS_URL),
110-
JsonLdKeywords.TYPE, List.of(VERIFIABLE_CREDENTIAL, type),
112+
TYPE_PROPERTY, List.of(VERIFIABLE_CREDENTIAL, type),
111113
CREDENTIAL_SUBJECT, credentialSubjectClaims(verifiableCredential));
112114
}
113115

core/issuerservice/issuerservice-issuance/src/main/java/org/eclipse/edc/issuerservice/issuance/process/IssuanceProcessManagerImpl.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,10 @@ private VerifiableCredentialResource toResource(IssuanceProcess process, Verifia
124124
}
125125

126126
private StatusResult<Collection<VerifiableCredentialContainer>> deliverCredentials(IssuanceProcess process, Collection<VerifiableCredentialContainer> credentials) {
127-
var result = credentialStorageClient.deliverCredentials(process.getIssuerContextId(), process.getParticipantId(), credentials);
127+
var result = credentialStorageClient.deliverCredentials(process, credentials);
128128
if (result.succeeded()) {
129129
return StatusResult.success(credentials);
130-
} else {
131-
return StatusResult.failure(ResponseStatus.ERROR_RETRY);
132-
}
130+
} else return StatusResult.failure(ResponseStatus.ERROR_RETRY);
133131
}
134132

135133
private void transitionToDelivered(IssuanceProcess process) {

core/issuerservice/issuerservice-issuance/src/test/java/org/eclipse/edc/issuerservice/issuance/generator/JwtCredentialGeneratorTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ void generateCredential() {
9797
assertThat(extractJwtHeader(container.rawVc()).getKeyID()).isEqualTo("did:example:issuer#%s".formatted(PUBLIC_KEY_ID));
9898

9999
assertThat(extractedClaims.getClaim(VERIFIABLE_CREDENTIAL_CLAIM)).isInstanceOfSatisfying(Map.class, vcClaim -> {
100+
assertThat((List) vcClaim.get("type")).contains("MembershipCredential");
100101
assertThat((Map) vcClaim.get("credentialSubject")).containsAllEntriesOf(subjectClaims);
101102
});
102103
}

core/issuerservice/issuerservice-issuance/src/test/java/org/eclipse/edc/issuerservice/issuance/process/IssuanceProcessManagerImplTest.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -111,14 +111,15 @@ void approved_shouldGenerateAndDispatchCredentials() {
111111
var process = IssuanceProcess.Builder.newInstance().state(APPROVED.code())
112112
.participantId("participantId")
113113
.issuerContextId("issuerContextId")
114+
.holderPid("holderPid")
114115
.credentialFormats(Map.of(credentialDefinition.getCredentialType(), CredentialFormat.VC1_0_JWT))
115116
.build();
116117

117118
when(issuanceProcessStore.nextNotLeased(anyInt(), stateIs(APPROVED.code()))).thenReturn(List.of(process)).thenReturn(emptyList());
118119
when(credentialDefinitionStore.query(any())).thenReturn(StoreResult.success(List.of(credentialDefinition)));
119120
when(credentialGenerator.generateCredentials("issuerContextId", "participantId", List.of(generationRequests), process.getClaims())).thenReturn(Result.success(List.of(credential)));
120121
when(credentialStore.create(any())).thenReturn(StoreResult.success());
121-
when(credentialStorageClient.deliverCredentials("issuerContextId", "participantId", List.of(credential))).thenReturn(Result.success());
122+
when(credentialStorageClient.deliverCredentials(process, List.of(credential))).thenReturn(Result.success());
122123

123124
issuanceProcessManager.start();
124125

@@ -146,6 +147,7 @@ void approved_shouldTransitionToErrored_whenGenerationErrors() {
146147
var process = IssuanceProcess.Builder.newInstance().state(APPROVED.code())
147148
.participantId("participantId")
148149
.issuerContextId("issuerContextId")
150+
.holderPid("holderPid")
149151
.credentialFormats(Map.of(credentialDefinition.getCredentialType(), CredentialFormat.VC1_0_JWT))
150152
.stateCount(2)
151153
.build();

core/issuerservice/issuerservice-issuance/src/test/java/org/eclipse/edc/issuerservice/issuance/process/IssuanceProcessServiceImplTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ private IssuanceProcess createIssuanceProcess() {
7676
.state(IssuanceProcessStates.APPROVED.code())
7777
.participantId("participantId")
7878
.issuerContextId("issuerContextId")
79+
.holderPid("holderPid")
7980
.build();
8081
}
8182
}

e2e-tests/admin-api-tests/src/test/java/org/eclipse/edc/identityhub/tests/dcp/DcpIssuanceApiEndToEndTest.java

+2
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ abstract static class Tests {
9292
"https://w3id.org/dspace-dcp/v1.0/dcp.jsonld"
9393
],
9494
"@type": "CredentialRequestMessage",
95+
"holderPid": "holderPid",
9596
"credentials":[
9697
{
9798
"credentialType": "MembershipCredential",
@@ -231,6 +232,7 @@ void requestCredential(IssuerServiceEndToEndTestContext context, ParticipantServ
231232
assertThat(process.getClaims()).containsAllEntriesOf(claims);
232233
assertThat(process.getState()).isEqualTo(IssuanceProcessStates.DELIVERED.code());
233234
assertThat(process.getIssuerContextId()).isEqualTo(ISSUER_ID);
235+
assertThat(process.getHolderPid()).isEqualTo("holderPid");
234236
});
235237
});
236238
}

e2e-tests/identity-api-tests/src/test/java/org/eclipse/edc/identityhub/tests/StorageApiEndToEndTest.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@
5858
import static org.assertj.core.api.Assertions.assertThat;
5959
import static org.eclipse.edc.iam.identitytrust.spi.DcpConstants.DSPACE_DCP_NAMESPACE_V_1_0;
6060
import static org.eclipse.edc.identityhub.protocols.dcp.spi.model.CredentialMessage.CREDENTIALS_TERM;
61-
import static org.eclipse.edc.identityhub.protocols.dcp.spi.model.CredentialMessage.REQUEST_ID_TERM;
61+
import static org.eclipse.edc.identityhub.protocols.dcp.spi.model.CredentialMessage.HOLDER_PID_TERM;
62+
import static org.eclipse.edc.identityhub.protocols.dcp.spi.model.CredentialMessage.ISSUER_PID_TERM;
6263
import static org.eclipse.edc.identityhub.tests.fixtures.TestData.JWT_VC_EXAMPLE;
6364
import static org.eclipse.edc.identityhub.tests.fixtures.TestData.VC_EXAMPLE_2;
6465
import static org.eclipse.edc.identityhub.verifiablecredentials.testfixtures.JwtCreationUtil.CONSUMER_DID;
@@ -238,7 +239,8 @@ private JsonObject createCredentialMessage(JsonObject... credentials) {
238239
.add(JsonLdKeywords.VALUE, credentialContainers.build()));
239240

240241
return Json.createObjectBuilder()
241-
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri(REQUEST_ID_TERM), "test-request-id")
242+
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri(ISSUER_PID_TERM), "test-request-id")
243+
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri(HOLDER_PID_TERM), "test-holder-id")
242244
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri(CREDENTIALS_TERM), credentialsJsonArray)
243245
.build();
244246
}

extensions/store/sql/issuance-process-store-sql/src/main/java/org/eclipse/edc/issuerservice/store/sql/issuanceprocess/BaseSqlDialectStatements.java

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public String getInsertTemplate() {
4343
.column(getErrorDetailColumn())
4444
.column(getParticipantIdColumn())
4545
.column(getIssuerContextIdColumn())
46+
.column(getHolderPidColumn())
4647
.jsonColumn(getClaimsColumn())
4748
.jsonColumn(getCredentialDefinitionsColumn())
4849
.jsonColumn(getCredentialFormatsColumn())

extensions/store/sql/issuance-process-store-sql/src/main/java/org/eclipse/edc/issuerservice/store/sql/issuanceprocess/IssuanceProcessStoreStatements.java

+4
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ default String getPendingColumn() {
5959
return "pending";
6060
}
6161

62+
default String getHolderPidColumn() {
63+
return "holder_pid";
64+
}
65+
6266
String getInsertTemplate();
6367

6468
String getUpdateTemplate();

extensions/store/sql/issuance-process-store-sql/src/main/java/org/eclipse/edc/issuerservice/store/sql/issuanceprocess/SqlIssuanceProcessStore.java

+2
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ private void insert(Connection conn, IssuanceProcess process) {
167167
process.getErrorDetail(),
168168
process.getParticipantId(),
169169
process.getIssuerContextId(),
170+
process.getHolderPid(),
170171
toJson(process.getClaims()),
171172
toJson(process.getCredentialDefinitions()),
172173
toJson(process.getCredentialFormats())
@@ -209,6 +210,7 @@ private IssuanceProcess mapResultSet(ResultSet resultSet) throws Exception {
209210
.errorDetail(resultSet.getString(statements.getErrorDetailColumn()))
210211
.participantId(resultSet.getString(statements.getParticipantIdColumn()))
211212
.issuerContextId(resultSet.getString(statements.getIssuerContextIdColumn()))
213+
.holderPid(resultSet.getString(statements.getHolderPidColumn()))
212214
.claims(fromJson(resultSet.getString(statements.getClaimsColumn()), getTypeRef()))
213215
.credentialDefinitions(fromJson(resultSet.getString(statements.getCredentialDefinitionsColumn()), ATTESTATIONS_LIST_REF))
214216
.credentialFormats(fromJson(resultSet.getString(statements.getCredentialFormatsColumn()), CREDENTIAL_FORMATS_REF))

extensions/store/sql/issuance-process-store-sql/src/main/java/org/eclipse/edc/issuerservice/store/sql/issuanceprocess/schema/postgres/IssuanceProcessMapping.java

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public class IssuanceProcessMapping extends StatefulEntityMapping {
3232
public static final String FIELD_CLAIMS = "claims";
3333
public static final String FIELD_CREDENTIAL_DEFINITIONS = "credentialDefinitions";
3434
public static final String FIELD_CREDENTIAL_FORMATS = "credentialFormats";
35+
private static final String FIELD_HOLDER_PID = "holderPid";
3536
private static final String FIELD_PENDING = "pending";
3637

3738
public IssuanceProcessMapping(IssuanceProcessStoreStatements statements) {
@@ -41,6 +42,7 @@ public IssuanceProcessMapping(IssuanceProcessStoreStatements statements) {
4142
add(FIELD_ISSUER_CONTEXT_ID, statements.getIssuerContextIdColumn());
4243
add(FIELD_CLAIMS, new JsonFieldTranslator(FIELD_CLAIMS));
4344
add(FIELD_PENDING, statements.getPendingColumn());
45+
add(FIELD_HOLDER_PID, statements.getHolderPidColumn());
4446
add(FIELD_CREDENTIAL_DEFINITIONS, new JsonArrayTranslator(statements.getCredentialDefinitionsColumn()));
4547
add(FIELD_CREDENTIAL_FORMATS, new JsonFieldTranslator(statements.getCredentialFormatsColumn()));
4648
}

extensions/store/sql/issuance-process-store-sql/src/main/resources/issuance-process-schema.sql

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ CREATE TABLE IF NOT EXISTS edc_issuance_process
4040
lease_id VARCHAR CONSTRAINT issuance_process_lease_lease_id_fk REFERENCES edc_lease ON DELETE SET NULL,
4141
participant_id VARCHAR NOT NULL,
4242
issuer_context_id VARCHAR NOT NULL,
43+
holder_pid VARCHAR NOT NULL,
4344
claims JSON NOT NULL,
4445
credential_definitions JSONB NOT NULL,
4546
credential_formats JSONB NOT NULL

protocols/dcp/dcp-identityhub/storage-api/src/main/java/org/eclipse/edc/identityhub/api/storage/StorageApiController.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public Response storeCredential(@PathParam("participantContextId") String partic
8989
.orElseThrow(f -> new AuthenticationFailedException("ID token verification failed: %s".formatted(f.getFailureDetail())));
9090

9191

92-
// todo: implement response validation by fetching the original CredentialRequest from the DB (using the requestId)
92+
// todo: implement response validation by fetching the original CredentialRequest from the DB (using the holderPid )
9393
// and comparing the credential types therein
9494
monitor.warning("Validation of requested credential types against received credential types is not yet implemented.");
9595

protocols/dcp/dcp-identityhub/storage-api/src/main/java/org/eclipse/edc/identityhub/api/validation/CredentialMessageValidator.java

+10-4
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
import static java.util.Optional.ofNullable;
2626
import static org.eclipse.edc.iam.identitytrust.spi.DcpConstants.DSPACE_DCP_NAMESPACE_V_1_0;
2727
import static org.eclipse.edc.identityhub.protocols.dcp.spi.model.CredentialMessage.CREDENTIALS_TERM;
28-
import static org.eclipse.edc.identityhub.protocols.dcp.spi.model.CredentialMessage.REQUEST_ID_TERM;
28+
import static org.eclipse.edc.identityhub.protocols.dcp.spi.model.CredentialMessage.HOLDER_PID_TERM;
29+
import static org.eclipse.edc.identityhub.protocols.dcp.spi.model.CredentialMessage.ISSUER_PID_TERM;
2930
import static org.eclipse.edc.validator.spi.ValidationResult.failure;
3031
import static org.eclipse.edc.validator.spi.ValidationResult.success;
3132
import static org.eclipse.edc.validator.spi.Violation.violation;
@@ -43,9 +44,14 @@ public ValidationResult validate(JsonObject input) {
4344
if (input == null) {
4445
return failure(violation("Credential message was null", "."));
4546
}
46-
var requestId = input.get(namespace.toIri(REQUEST_ID_TERM));
47-
if (isNullObject(requestId)) {
48-
return failure(violation("Must contain a 'requestId' property.", null));
47+
var issuerPid = input.get(namespace.toIri(ISSUER_PID_TERM));
48+
if (isNullObject(issuerPid)) {
49+
return failure(violation("Must contain a 'issuerPid' property.", null));
50+
}
51+
52+
var holderPid = input.get(namespace.toIri(HOLDER_PID_TERM));
53+
if (isNullObject(holderPid)) {
54+
return failure(violation("Must contain a 'holderPid' property.", null));
4955
}
5056
var credentialsObject = input.get(namespace.toIri(CREDENTIALS_TERM));
5157
if (isNullObject(credentialsObject)) {

protocols/dcp/dcp-identityhub/storage-api/src/test/java/org/eclipse/edc/identityhub/api/storage/StorageApiControllerTest.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ private ClaimToken claimToken() {
189189

190190
private CredentialMessage credentialMessage() {
191191
return CredentialMessage.Builder.newInstance()
192-
.requestId(UUID.randomUUID().toString())
192+
.issuerPid(UUID.randomUUID().toString())
193+
.holderPid(UUID.randomUUID().toString())
193194
.credential(new CredentialContainer("SomeCredential", "vcdm11_jwt", "SOME_JWT_STRING"))
194195
.build();
195196
}

protocols/dcp/dcp-identityhub/storage-api/src/test/java/org/eclipse/edc/identityhub/api/validation/CredentialMessageValidatorTest.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
import java.util.UUID;
2424

2525
import static org.eclipse.edc.iam.identitytrust.spi.DcpConstants.DSPACE_DCP_NAMESPACE_V_1_0;
26+
import static org.eclipse.edc.identityhub.protocols.dcp.spi.model.CredentialMessage.CREDENTIALS_TERM;
27+
import static org.eclipse.edc.identityhub.protocols.dcp.spi.model.CredentialMessage.HOLDER_PID_TERM;
28+
import static org.eclipse.edc.identityhub.protocols.dcp.spi.model.CredentialMessage.ISSUER_PID_TERM;
2629
import static org.eclipse.edc.junit.assertions.AbstractResultAssert.assertThat;
2730
import static org.mockito.Mockito.mock;
2831

@@ -34,8 +37,9 @@ class CredentialMessageValidatorTest {
3437
@Test
3538
void validate_success() {
3639
var msg = Json.createObjectBuilder()
37-
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri("requestId"), UUID.randomUUID().toString())
38-
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri("credentials"), Json.createArrayBuilder()
40+
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri(ISSUER_PID_TERM), UUID.randomUUID().toString())
41+
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri(HOLDER_PID_TERM), UUID.randomUUID().toString())
42+
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri(CREDENTIALS_TERM), Json.createArrayBuilder()
3943
.add(Json.createObjectBuilder()
4044
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri("credentialType"), "SomeCredential")
4145
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri("format"), "vcdm11_jwt")
@@ -47,8 +51,9 @@ void validate_success() {
4751
@Test
4852
void validate_emptyCredentials_success() {
4953
var msg = Json.createObjectBuilder()
50-
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri("requestId"), UUID.randomUUID().toString())
51-
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri("credentials"), Json.createArrayBuilder())
54+
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri(ISSUER_PID_TERM), UUID.randomUUID().toString())
55+
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri(HOLDER_PID_TERM), UUID.randomUUID().toString())
56+
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri(CREDENTIALS_TERM), Json.createArrayBuilder())
5257
.build();
5358
assertThat(validator.validate(jsonLd.expand(msg).getContent())).isSucceeded();
5459
}
@@ -57,7 +62,7 @@ void validate_emptyCredentials_success() {
5762
void validate_requestIdMissing_failure() {
5863
var msg = Json.createObjectBuilder()
5964
// missing: requestId
60-
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri("credentials"), Json.createArrayBuilder()
65+
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri(CREDENTIALS_TERM), Json.createArrayBuilder()
6166
.add(Json.createObjectBuilder()
6267
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri("credentialType"), "SomeCredential")
6368
.add(DSPACE_DCP_NAMESPACE_V_1_0.toIri("format"), "vcdm11_jwt")

protocols/dcp/dcp-issuer/dcp-issuer-api/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ dependencies {
3333
implementation(libs.edc.dcp.transform)
3434
implementation(libs.edc.lib.validator)
3535
implementation(project(":protocols:dcp:dcp-transform-lib"))
36+
implementation(project(":protocols:dcp:dcp-validation-lib"))
3637
implementation(libs.jakarta.rsApi)
3738
testImplementation(libs.edc.junit)
3839
testImplementation(libs.edc.jsonld)

protocols/dcp/dcp-issuer/dcp-issuer-api/src/main/java/org/eclipse/edc/identityhub/protocols/dcp/issuer/IssuerApiExtension.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import com.fasterxml.jackson.databind.DeserializationFeature;
1818
import org.eclipse.edc.identityhub.protocols.dcp.issuer.api.v1alpha.credentialrequest.CredentialRequestApiController;
19-
import org.eclipse.edc.identityhub.protocols.dcp.issuer.api.v1alpha.credentialrequest.validation.CredentialRequestMessageValidator;
2019
import org.eclipse.edc.identityhub.protocols.dcp.issuer.api.v1alpha.credentialrequeststatus.CredentialRequestStatusApiController;
2120
import org.eclipse.edc.identityhub.protocols.dcp.issuer.api.v1alpha.issuermetadata.IssuerMetadataApiController;
2221
import org.eclipse.edc.identityhub.protocols.dcp.issuer.spi.DcpIssuerService;
@@ -25,6 +24,7 @@
2524
import org.eclipse.edc.identityhub.protocols.dcp.transform.from.JsonObjectFromCredentialRequestStatusTransformer;
2625
import org.eclipse.edc.identityhub.protocols.dcp.transform.from.JsonObjectFromIssuerMetadataTransformer;
2726
import org.eclipse.edc.identityhub.protocols.dcp.transform.to.JsonObjectToCredentialRequestMessageTransformer;
27+
import org.eclipse.edc.identityhub.protocols.dcp.validation.CredentialRequestMessageValidator;
2828
import org.eclipse.edc.identityhub.spi.participantcontext.ParticipantContextService;
2929
import org.eclipse.edc.jsonld.spi.JsonLd;
3030
import org.eclipse.edc.jsonld.spi.JsonLdNamespace;

0 commit comments

Comments
 (0)