Skip to content

Commit 9aa1d0a

Browse files
committed
Fix missing result check in DecentralizedIdentityService
1 parent 2d40b2f commit 9aa1d0a

File tree

2 files changed

+44
-19
lines changed

2 files changed

+44
-19
lines changed

extensions/common/iam/decentralized-identity/identity-did-service/src/main/java/org/eclipse/dataspaceconnector/identity/DecentralizedIdentityService.java

+4
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ public Result<ClaimToken> verifyJwtToken(TokenRepresentation tokenRepresentation
9393

9494
monitor.debug("verification successful! Fetching data from IdentityHub");
9595
var credentialsResult = credentialsVerifier.getVerifiedCredentials(didResult.getContent());
96+
if (credentialsResult.failed()) {
97+
credentialsResult.getFailureMessages().forEach(m -> monitor.debug(() -> "Failure when getting verified credentials: " + m));
98+
return Result.failure("Failed to get verifiable credentials: " + credentialsResult.getFailureDetail());
99+
}
96100

97101
monitor.debug("Building ClaimToken");
98102
var tokenBuilder = ClaimToken.Builder.newInstance();

extensions/common/iam/decentralized-identity/identity-did-service/src/test/java/org/eclipse/dataspaceconnector/identity/DecentralizedIdentityServiceTest.java

+40-19
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@
1414

1515
package org.eclipse.dataspaceconnector.identity;
1616

17+
import static org.assertj.core.api.Assertions.assertThat;
18+
import static org.eclipse.dataspaceconnector.junit.testfixtures.TestUtils.getResourceFileContentAsString;
19+
import static org.junit.jupiter.api.Assertions.assertEquals;
20+
import static org.junit.jupiter.api.Assertions.assertTrue;
21+
import static org.mockito.ArgumentMatchers.any;
22+
import static org.mockito.Mockito.mock;
23+
import static org.mockito.Mockito.when;
24+
1725
import com.fasterxml.jackson.core.JsonProcessingException;
1826
import com.fasterxml.jackson.databind.ObjectMapper;
1927
import com.nimbusds.jose.jwk.ECKey;
@@ -26,7 +34,6 @@
2634
import org.eclipse.dataspaceconnector.iam.did.spi.document.VerificationMethod;
2735
import org.eclipse.dataspaceconnector.iam.did.spi.resolution.DidResolver;
2836
import org.eclipse.dataspaceconnector.iam.did.spi.resolution.DidResolverRegistry;
29-
import org.eclipse.dataspaceconnector.spi.iam.ClaimToken;
3037
import org.eclipse.dataspaceconnector.spi.iam.TokenParameters;
3138
import org.eclipse.dataspaceconnector.spi.monitor.ConsoleMonitor;
3239
import org.eclipse.dataspaceconnector.spi.result.Result;
@@ -36,10 +43,7 @@
3643

3744
import java.time.Clock;
3845
import java.util.Map;
39-
40-
import static org.eclipse.dataspaceconnector.junit.testfixtures.TestUtils.getResourceFileContentAsString;
41-
import static org.junit.jupiter.api.Assertions.assertEquals;
42-
import static org.junit.jupiter.api.Assertions.assertTrue;
46+
import java.util.UUID;
4347

4448
/**
4549
* Test the {@link DecentralizedIdentityService} with a key algorithm. See {@link WithP256Test} for concrete impl.
@@ -48,30 +52,47 @@
4852
abstract class DecentralizedIdentityServiceTest {
4953
private static final String DID_DOCUMENT = getResourceFileContentAsString("dids.json");
5054

55+
private CredentialsVerifier credentialsVerifierMock;
5156
private DecentralizedIdentityService identityService;
5257

5358
@Test
5459
void generateAndVerifyJwtToken_valid() {
55-
var result = identityService.obtainClientCredentials(TokenParameters.Builder.newInstance()
56-
.scope("Foo")
57-
.audience("Bar")
58-
.build());
60+
when(credentialsVerifierMock.getVerifiedCredentials(any())).thenReturn(Result.success(Map.of("region", "eu")));
61+
62+
var result = identityService.obtainClientCredentials(defaultTokenParameters());
5963
assertTrue(result.succeeded());
6064

61-
Result<ClaimToken> verificationResult = identityService.verifyJwtToken(result.getContent(), "Bar");
65+
var verificationResult = identityService.verifyJwtToken(result.getContent(), "Bar");
6266
assertTrue(verificationResult.succeeded());
6367
assertEquals("eu", verificationResult.getContent().getClaims().get("region"));
6468
}
6569

6670
@Test
6771
void generateAndVerifyJwtToken_wrongAudience() {
68-
var result = identityService.obtainClientCredentials(TokenParameters.Builder.newInstance()
69-
.scope("Foo")
70-
.audience("Bar")
71-
.build());
72+
var result = identityService.obtainClientCredentials(defaultTokenParameters());
73+
74+
var verificationResult = identityService.verifyJwtToken(result.getContent(), "Bar2");
75+
assertTrue(verificationResult.failed());
76+
}
77+
78+
@Test
79+
void generateAndVerifyJwtToken_getVerifiedCredentialsFailed() {
80+
var errorMsg = UUID.randomUUID().toString();
81+
when(credentialsVerifierMock.getVerifiedCredentials(any())).thenReturn(Result.failure(errorMsg));
7282

73-
Result<ClaimToken> verificationResult = identityService.verifyJwtToken(result.getContent(), "Bar2");
83+
var result = identityService.obtainClientCredentials(defaultTokenParameters());
84+
assertTrue(result.succeeded());
85+
86+
var verificationResult = identityService.verifyJwtToken(result.getContent(), "Bar");
7487
assertTrue(verificationResult.failed());
88+
assertThat(verificationResult.getFailureDetail()).contains(errorMsg);
89+
}
90+
91+
private static TokenParameters defaultTokenParameters() {
92+
return TokenParameters.Builder.newInstance()
93+
.scope("Foo")
94+
.audience("Bar")
95+
.build();
7596
}
7697

7798
@BeforeEach
@@ -80,9 +101,9 @@ void setUp() {
80101
var privateKey = new EcPrivateKeyWrapper(keyPair.toECKey());
81102

82103
var didResolver = new TestResolverRegistry(DID_DOCUMENT, keyPair);
83-
CredentialsVerifier verifier = document -> Result.success(Map.of("region", "eu"));
84-
String didUrl = "random.did.url";
85-
identityService = new DecentralizedIdentityService(didResolver, verifier, new ConsoleMonitor(), privateKey, didUrl, Clock.systemUTC());
104+
credentialsVerifierMock = mock(CredentialsVerifier.class);
105+
var didUrl = "random.did.url";
106+
identityService = new DecentralizedIdentityService(didResolver, credentialsVerifierMock, new ConsoleMonitor(), privateKey, didUrl, Clock.systemUTC());
86107
}
87108

88109
@NotNull
@@ -114,7 +135,7 @@ public void register(DidResolver resolver) {
114135
public Result<DidDocument> resolve(String didKey) {
115136
try {
116137
var did = new ObjectMapper().readValue(hubUrlDid, DidDocument.class);
117-
ECKey key = (ECKey) keyPair.toPublicJWK();
138+
var key = (ECKey) keyPair.toPublicJWK();
118139
did.getVerificationMethod().add(VerificationMethod.Builder.create()
119140
.type("JsonWebKey2020")
120141
.id("test-key")

0 commit comments

Comments
 (0)