Skip to content

Commit 6e74cd8

Browse files
chore: remove base64 encoding (#937)
* feat: prepare deprecation of base64 encoded participant context IDs * chore: remove base64 encoding for participant-context-ID * checkstyle * remove old DCP context * trigger ci * remove old DSPACE context * fix compile errors * checkstyle * update api version file * fix tests
1 parent 7bef529 commit 6e74cd8

64 files changed

Lines changed: 454 additions & 631 deletions

File tree

Some content is hidden

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

core/common-core/src/main/java/org/eclipse/edc/identityhub/DefaultServicesExtension.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import java.net.URISyntaxException;
4848
import java.time.Clock;
4949

50-
import static org.eclipse.edc.iam.decentralizedclaims.spi.DcpConstants.DCP_CONTEXT_URL;
5150
import static org.eclipse.edc.iam.decentralizedclaims.spi.DcpConstants.DSPACE_DCP_V_1_0_CONTEXT;
5251
import static org.eclipse.edc.iam.verifiablecredentials.spi.VcConstants.DID_CONTEXT_URL;
5352
import static org.eclipse.edc.iam.verifiablecredentials.spi.VcConstants.JWS_2020_URL;
@@ -157,7 +156,6 @@ public CredentialOfferStore createCredentialOfferStore() {
157156
private void cacheContextDocuments(ClassLoader classLoader) {
158157
try {
159158
jsonLd.registerCachedDocument(PRESENTATION_EXCHANGE_URL, classLoader.getResource(PRESENTATION_EXCHANGE_V_1_JSON).toURI());
160-
jsonLd.registerCachedDocument(DCP_CONTEXT_URL, classLoader.getResource(PRESENTATION_QUERY_V_08_JSON).toURI());
161159
jsonLd.registerCachedDocument(DSPACE_DCP_V_1_0_CONTEXT, classLoader.getResource(DSPACE_DCP_V_1_0_JSON_LD).toURI());
162160
jsonLd.registerCachedDocument(DID_CONTEXT_URL, classLoader.getResource(DID_JSON).toURI());
163161
jsonLd.registerCachedDocument(JWS_2020_URL, classLoader.getResource(JWS_2020_JSON).toURI());

core/identity-hub-core/src/main/java/org/eclipse/edc/identityhub/core/services/verifiablepresentation/generators/JwtPresentationGenerator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
package org.eclipse.edc.identityhub.core.services.verifiablepresentation.generators;
1616

17-
import org.eclipse.edc.iam.decentralizedclaims.spi.DcpConstants;
1817
import org.eclipse.edc.iam.verifiablecredentials.spi.VcConstants;
1918
import org.eclipse.edc.iam.verifiablecredentials.spi.model.VerifiableCredentialContainer;
2019
import org.eclipse.edc.identityhub.spi.verifiablecredentials.generator.PresentationGenerator;
@@ -122,7 +121,7 @@ private TokenDecorator vpDecorator(List<String> rawVcs, String issuerId) {
122121

123122
private Map<String, Object> createVpClaim(List<String> rawVcs) {
124123
return Map.of(
125-
JsonLdKeywords.CONTEXT, List.of(DcpConstants.DCP_CONTEXT_URL, VcConstants.W3C_CREDENTIALS_URL, VcConstants.PRESENTATION_EXCHANGE_URL),
124+
JsonLdKeywords.CONTEXT, List.of(VcConstants.W3C_CREDENTIALS_URL, VcConstants.PRESENTATION_EXCHANGE_URL),
126125
VP_TYPE_PROPERTY, VcConstants.VERIFIABLE_PRESENTATION_TYPE,
127126
VERIFIABLE_CREDENTIAL_PROPERTY, rawVcs
128127
);

core/identity-hub-core/src/main/java/org/eclipse/edc/identityhub/core/services/verifiablepresentation/generators/LdpPresentationGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public JsonObject generatePresentation(String participantContextId, List<Verifia
133133
var types = (List) additionalData.get(TYPE_ADDITIONAL_DATA);
134134
var presentationObject = Json.createObjectBuilder()
135135
.add(JsonLdKeywords.CONTEXT, stringArray(List.of(VcConstants.W3C_CREDENTIALS_URL, VcConstants.PRESENTATION_EXCHANGE_URL)))
136-
.add(ID_PROPERTY, DcpConstants.DCP_CONTEXT_URL + "/id/" + UUID.randomUUID())
136+
.add(ID_PROPERTY, DcpConstants.DSPACE_DCP_V_1_0_CONTEXT + "/id/" + UUID.randomUUID())
137137
.add(VP_TYPE_PROPERTY, stringArray(types))
138138
.add(HOLDER_PROPERTY, issuerId)
139139
.add(VERIFIABLE_CREDENTIAL_PROPERTY, toJsonArray(credentials))

core/identity-hub-core/src/test/java/org/eclipse/edc/identityhub/core/services/verifiablecredential/CredentialRequestManagerImplTest.java

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ class StateMachine {
152152
private static final Duration MAX_DURATION = Duration.ofSeconds(5);
153153

154154
@ParameterizedTest(name = "state = {0}")
155-
@ValueSource(strings = {"CREATED", "REQUESTING"})
155+
@ValueSource(strings = { "CREATED", "REQUESTING" })
156156
void processInitial_shouldSendRequest(String stateString) {
157157
var state = HolderRequestState.valueOf(stateString);
158158
when(resolver.resolve(eq(ISSUER_DID))).thenReturn(success(didDocument()));
@@ -178,7 +178,7 @@ void processInitial_shouldSendRequest(String stateString) {
178178
}
179179

180180
@ParameterizedTest(name = "state = {0}")
181-
@ValueSource(strings = {"CREATED", "REQUESTING"})
181+
@ValueSource(strings = { "CREATED", "REQUESTING" })
182182
void processInitial_whenDidNotResolvable_shouldTransitionToError(String stateString) {
183183
var state = HolderRequestState.valueOf(stateString);
184184

@@ -187,20 +187,21 @@ void processInitial_whenDidNotResolvable_shouldTransitionToError(String stateStr
187187
.state(state.code())
188188
.build();
189189
when(store.nextNotLeased(anyInt(), stateIs(state.code())))
190-
.thenReturn(List.of(rq));
190+
.thenReturn(List.of(rq))
191+
.thenReturn(List.of());
191192

192193
credentialRequestService.start();
193194

194195
await().atMost(MAX_DURATION).untilAsserted(() -> {
195196
var inOrder = inOrder(resolver, store);
196197
inOrder.verify(resolver).resolve(eq(ISSUER_DID));
197-
inOrder.verify(store, times(2)).save(argThat(r -> r.getState() == ERROR.code() && r.getErrorDetail().equals("foobar")));
198+
inOrder.verify(store, times(1)).save(argThat(r -> r.getState() == ERROR.code() && r.getErrorDetail().equals("foobar")));
198199
verifyNoMoreInteractions(resolver, sts, httpClient);
199200
});
200201
}
201202

202203
@ParameterizedTest(name = "state = {0}")
203-
@ValueSource(strings = {"CREATED", "REQUESTING"})
204+
@ValueSource(strings = { "CREATED", "REQUESTING" })
204205
void processInitial_whenDidDoesNotContainEndpoint_shouldTransitionToError(String stateString) {
205206
var state = HolderRequestState.valueOf(stateString);
206207

@@ -213,20 +214,21 @@ void processInitial_whenDidDoesNotContainEndpoint_shouldTransitionToError(String
213214
.state(state.code())
214215
.build();
215216
when(store.nextNotLeased(anyInt(), stateIs(state.code())))
216-
.thenReturn(List.of(rq));
217+
.thenReturn(List.of(rq))
218+
.thenReturn(List.of());
217219

218220
credentialRequestService.start();
219221

220222
await().atMost(MAX_DURATION).untilAsserted(() -> {
221223
var inOrder = inOrder(resolver, store);
222224
inOrder.verify(resolver).resolve(eq(ISSUER_DID));
223-
inOrder.verify(store, times(2)).save(argThat(r -> r.getState() == ERROR.code() && r.getErrorDetail().contains("DID Document does not contain any 'IssuerService' endpoint")));
225+
inOrder.verify(store, times(1)).save(argThat(r -> r.getState() == ERROR.code() && r.getErrorDetail().contains("DID Document does not contain any 'IssuerService' endpoint")));
224226
verifyNoMoreInteractions(resolver, sts, httpClient);
225227
});
226228
}
227229

228230
@ParameterizedTest(name = "state = {0}")
229-
@ValueSource(strings = {"CREATED", "REQUESTING"})
231+
@ValueSource(strings = { "CREATED", "REQUESTING" })
230232
void processInitial_whenStsFails_shouldTransitionToError(String stateString) {
231233
var state = HolderRequestState.valueOf(stateString);
232234

@@ -237,20 +239,21 @@ void processInitial_whenStsFails_shouldTransitionToError(String stateString) {
237239
.state(state.code())
238240
.build();
239241
when(store.nextNotLeased(anyInt(), stateIs(state.code())))
240-
.thenReturn(List.of(rq));
242+
.thenReturn(List.of(rq))
243+
.thenReturn(List.of());
241244

242245
credentialRequestService.start();
243246

244247
await().atMost(MAX_DURATION).untilAsserted(() -> {
245248
var inOrder = inOrder(resolver, store, httpClient, sts);
246249
inOrder.verify(resolver).resolve(eq(ISSUER_DID));
247250
inOrder.verify(sts).createToken(anyString(), anyMap(), ArgumentMatchers.isNull());
248-
inOrder.verify(store, times(2)).save(argThat(r -> r.getState() == ERROR.code() && r.getErrorDetail().equals("sts-failure")));
251+
inOrder.verify(store, times(1)).save(argThat(r -> r.getState() == ERROR.code() && r.getErrorDetail().equals("sts-failure")));
249252
});
250253
}
251254

252255
@ParameterizedTest(name = "state = {0}")
253-
@ValueSource(strings = {"CREATED", "REQUESTING"})
256+
@ValueSource(strings = { "CREATED", "REQUESTING" })
254257
void processInitial_whenIssuerReturnsError_shouldTransitionToError(String stateString) {
255258
var state = HolderRequestState.valueOf(stateString);
256259
when(resolver.resolve(eq(ISSUER_DID))).thenReturn(success(didDocument()));
@@ -260,7 +263,8 @@ void processInitial_whenIssuerReturnsError_shouldTransitionToError(String stateS
260263
.state(state.code())
261264
.build();
262265
when(store.nextNotLeased(anyInt(), stateIs(state.code())))
263-
.thenReturn(List.of(rq));
266+
.thenReturn(List.of(rq))
267+
.thenReturn(List.of());
264268

265269
credentialRequestService.start();
266270

@@ -269,7 +273,7 @@ void processInitial_whenIssuerReturnsError_shouldTransitionToError(String stateS
269273
inOrder.verify(resolver).resolve(eq(ISSUER_DID));
270274
inOrder.verify(sts).createToken(anyString(), anyMap(), ArgumentMatchers.isNull());
271275
inOrder.verify(httpClient).execute(any(), (Function<Response, Result<String>>) any());
272-
inOrder.verify(store, times(2)).save(argThat(r -> r.getState() == ERROR.code() && r.getErrorDetail().equals("issuer failure bad request")));
276+
inOrder.verify(store, times(1)).save(argThat(r -> r.getState() == ERROR.code() && r.getErrorDetail().equals("issuer failure bad request")));
273277
});
274278
}
275279

@@ -284,7 +288,7 @@ private HolderCredentialRequest.Builder createRequest() {
284288

285289

286290
private Criterion[] stateIs(int state) {
287-
return aryEq(new Criterion[]{hasState(state), isNotPending()});
291+
return aryEq(new Criterion[]{ hasState(state), isNotPending() });
288292
}
289293

290294
}

core/identity-hub-core/src/test/java/org/eclipse/edc/identityhub/core/services/verifiablepresentation/generators/LdpPresentationGeneratorTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242

4343
import static org.assertj.core.api.Assertions.assertThat;
4444
import static org.assertj.core.api.Assertions.assertThatThrownBy;
45-
import static org.eclipse.edc.iam.decentralizedclaims.spi.DcpConstants.DCP_CONTEXT_URL;
4645
import static org.eclipse.edc.identityhub.spi.model.IdentityHubConstants.DID_CONTEXT_URL;
4746
import static org.eclipse.edc.identityhub.spi.model.IdentityHubConstants.JWS_2020_URL;
4847
import static org.eclipse.edc.identityhub.spi.model.IdentityHubConstants.PRESENTATION_EXCHANGE_URL;
@@ -173,7 +172,6 @@ private TitaniumJsonLd initializeJsonLd() {
173172
jld.registerCachedDocument(DID_CONTEXT_URL, TestUtils.getResource("did.json"));
174173
jld.registerCachedDocument(JWS_2020_URL, TestUtils.getResource("jws2020.json"));
175174
jld.registerCachedDocument(W3C_CREDENTIALS_URL, TestUtils.getResource("credentials.v1.json"));
176-
jld.registerCachedDocument(DCP_CONTEXT_URL, TestUtils.getResource("dcp.v08.json"));
177175
jld.registerCachedDocument(PRESENTATION_EXCHANGE_URL, TestUtils.getResource("presentation-exchange.v1.json"));
178176
jld.registerCachedDocument("https://www.w3.org/2018/credentials/examples/v1", TestUtils.getResource("examples.v1.json"));
179177
return jld;

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import org.junit.jupiter.api.extension.BeforeAllCallback;
4343
import org.junit.jupiter.api.extension.RegisterExtension;
4444

45-
import java.util.Base64;
4645
import java.util.Map;
4746

4847
import static io.restassured.http.ContentType.JSON;
@@ -59,7 +58,6 @@ public class AttestationApiEndToEndTest {
5958
abstract static class Tests {
6059

6160
public static final String USER = "user";
62-
public static final String USER_BASE64 = Base64.getUrlEncoder().encodeToString(USER.getBytes());
6361

6462
@BeforeAll
6563
static void setup(IssuerService issuer) {
@@ -86,7 +84,7 @@ void createAttestationDefinition(IssuerService issuer, AttestationDefinitionStor
8684
.contentType(JSON)
8785
.header(authorizeUser(USER, issuerService))
8886
.body(createAttestationDefinition("test-id", "test-type", Map.of("foo", "bar")))
89-
.post("/v1alpha/participants/%s/attestations".formatted(USER_BASE64))
87+
.post("/v1alpha/participants/%s/attestations".formatted(USER))
9088
.then()
9189
.log().ifValidationFails()
9290
.statusCode(201);
@@ -101,7 +99,7 @@ void createAttestationDefinition_notAuthorized(IssuerService issuer) {
10199
.contentType(JSON)
102100
.header(authorizeUser("anotherUser", issuer))
103101
.body(createAttestationDefinition("test-id", "test-type", Map.of("foo", "bar")))
104-
.post("/v1alpha/participants/%s/attestations".formatted(USER_BASE64))
102+
.post("/v1alpha/participants/%s/attestations".formatted(USER))
105103
.then()
106104
.log().ifValidationFails()
107105
.statusCode(403);
@@ -115,7 +113,7 @@ void createAttestationDefinition_shouldReturn400_whenValidationFails(IssuerServi
115113
.contentType(JSON)
116114
.header(authorizeUser(USER, issuer))
117115
.body(createAttestationDefinition("test-id", "test-failure-type", Map.of("foo", "bar")))
118-
.post("/v1alpha/participants/%s/attestations".formatted(USER_BASE64))
116+
.post("/v1alpha/participants/%s/attestations".formatted(USER))
119117
.then()
120118
.log().ifValidationFails()
121119
.statusCode(400);
@@ -148,7 +146,7 @@ void queryAttestations(IssuerService issuer, AttestationDefinitionStore store, H
148146
.sortOrder(SortOrder.ASC)
149147
.filter(new Criterion("attestationType", "=", "test-type"))
150148
.build())
151-
.post("/v1alpha/participants/%s/attestations/query".formatted(USER_BASE64))
149+
.post("/v1alpha/participants/%s/attestations/query".formatted(USER))
152150
.then()
153151
.log().ifValidationFails()
154152
.statusCode(200)
@@ -175,7 +173,7 @@ void queryAttestations_notAuthorized(IssuerService issuer, AttestationDefinition
175173
.sortOrder(SortOrder.ASC)
176174
.filter(new Criterion("attestationType", "=", "test-type"))
177175
.build())
178-
.post("/v1alpha/participants/%s/attestations/query".formatted(USER_BASE64))
176+
.post("/v1alpha/participants/%s/attestations/query".formatted(USER))
179177
.then()
180178
.log().ifValidationFails()
181179
.statusCode(200)

0 commit comments

Comments
 (0)