Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -88,15 +88,28 @@ public ServiceResult<Void> write(String holderPid, String issuerPid, Collection<
// verify that the received credentials correspond to the credential request that was made prior
var receivedCredential = resource.getVerifiableCredential();
var receivedTypes = receivedCredential.credential().getType();
var receivedFormat = receivedCredential.format().toString();

// convert received format to a CredentialFormat
var receivedFormat = CredentialProfile.formatForProfile(writeRequest.credentialFormat());
if (receivedFormat.failed()) {
return receivedFormat.mapFailure();
}

// check if the list of originally requested credentials contains the received credential
var requestedCredential = holderRequest.getIdsAndFormats().stream()
.filter(rqc -> receivedTypes.contains(rqc.credentialType()) && receivedFormat.equalsIgnoreCase(rqc.format()))
.filter(rqc -> receivedTypes.contains(rqc.credentialType()))
// for compatibility, we need to convert both to a CredentialFormat and compare that:
.filter(rqc -> {
var requestedFormat = CredentialProfile.formatForProfile(rqc.format());
if (requestedFormat.failed()) {
return false;
}
return requestedFormat.getContent().equals(receivedFormat.getContent());
})
.findFirst();

if (requestedCredential.isEmpty()) {
return ServiceResult.unauthorized("No credential request was made for Credentials of type '%s' serialized as '%s'".formatted(receivedTypes, receivedFormat));
return ServiceResult.unauthorized("No credential request was made for Credentials of type '%s' serialized as '%s'".formatted(receivedTypes, receivedFormat.getContent()));
}

// store the credential object ID for later use, e.g. automatic re-issuance
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ plugins {

dependencies {
api(project(":spi:issuerservice:issuerservice-issuance-spi"))
api(project(":spi:verifiable-credential-spi"))
implementation(project(":extensions:api:issuer-admin-api:issuer-admin-api-configuration"))
implementation(libs.edc.spi.auth)
implementation(libs.edc.spi.web)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import org.eclipse.edc.iam.verifiablecredentials.spi.model.CredentialFormat;
import org.eclipse.edc.identityhub.spi.verifiablecredentials.model.CredentialProfile;
import org.eclipse.edc.issuerservice.spi.issuance.model.CredentialDefinition;
import org.eclipse.edc.issuerservice.spi.issuance.model.CredentialRuleDefinition;
import org.eclipse.edc.issuerservice.spi.issuance.model.MappingDefinition;
Expand Down Expand Up @@ -92,7 +92,7 @@ public CredentialDefinition toCredentialDefinition(String participantContextId)
.jsonSchema(jsonSchema)
.jsonSchemaUrl(jsonSchemaUrl)
.validity(validity)
.formatFrom(CredentialFormat.valueOf(format.toUpperCase()))
.formatFrom(CredentialProfile.formatForProfile(format).orElseThrow(f -> new IllegalArgumentException(f.getFailureDetail())))
.attestations(attestations)
.rules(rules)
.mappings(mappings)
Expand Down