Skip to content

Commit

Permalink
Update edc dependency to 0.11.0
Browse files Browse the repository at this point in the history
Signed-off-by: Lars Geyer-Blaumeiser <[email protected]>
  • Loading branch information
lgblaumeiser committed Jan 29, 2025
1 parent 358f320 commit be601aa
Show file tree
Hide file tree
Showing 14 changed files with 148 additions and 32 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
* Copyright (c) 2025 Cofinity-X GmbH
*
* This program and the accompanying materials are made available under the
* terms of the Apache License, Version 2.0 which is available at
* https://www.apache.org/licenses/LICENSE-2.0
*
* SPDX-License-Identifier: Apache-2.0
*
* Contributors:
* Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation
* Cofinity-X GmbH
*
*/
package org.eclipse.tractusx.bdrs.api.directory.authentication;

import org.eclipse.edc.api.auth.spi.ApiAuthenticationProvider;
import org.eclipse.edc.api.auth.spi.registry.ApiAuthenticationProviderRegistry;

import java.util.HashMap;
import java.util.Map;

public class ApiAuthenticationProviderRegistryImpl implements ApiAuthenticationProviderRegistry {
private final Map<String, ApiAuthenticationProvider> providers = new HashMap<>();

@Override
public void register(String type, ApiAuthenticationProvider provider) {
providers.put(type, provider);
}

@Override
public ApiAuthenticationProvider resolve(String type) {
return providers.get(type);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft
* Copyright (c) 2025 Cofinity-X GmbH
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
Expand All @@ -19,18 +20,19 @@

package org.eclipse.tractusx.bdrs.api.directory.authentication;

import dev.failsafe.RetryPolicy;
import okhttp3.OkHttpClient;
import org.eclipse.edc.api.auth.spi.AuthenticationRequestFilter;
import org.eclipse.edc.api.auth.spi.registry.ApiAuthenticationProviderRegistry;
import org.eclipse.edc.api.auth.spi.registry.ApiAuthenticationRegistry;
import org.eclipse.edc.http.client.EdcHttpClientImpl;
import org.eclipse.edc.http.spi.EdcHttpClient;
import org.eclipse.edc.iam.did.spi.resolution.DidPublicKeyResolver;
import org.eclipse.edc.iam.identitytrust.service.verification.MultiFormatPresentationVerifier;
import org.eclipse.edc.iam.identitytrust.transform.to.JwtToVerifiableCredentialTransformer;
import org.eclipse.edc.iam.identitytrust.transform.to.JwtToVerifiablePresentationTransformer;
import org.eclipse.edc.iam.verifiablecredentials.StatusList2021RevocationService;
import org.eclipse.edc.iam.verifiablecredentials.VerifiableCredentialValidationServiceImpl;
import org.eclipse.edc.iam.verifiablecredentials.revocation.bitstring.BitstringStatusListRevocationService;
import org.eclipse.edc.iam.verifiablecredentials.revocation.statuslist2021.StatusList2021RevocationService;
import org.eclipse.edc.iam.verifiablecredentials.spi.model.RevocationServiceRegistry;
import org.eclipse.edc.iam.verifiablecredentials.spi.model.revocation.bitstringstatuslist.BitstringStatusListStatus;
import org.eclipse.edc.iam.verifiablecredentials.spi.model.revocation.statuslist2021.StatusList2021Status;
import org.eclipse.edc.iam.verifiablecredentials.spi.validation.TrustedIssuerRegistry;
import org.eclipse.edc.jsonld.JsonLdConfiguration;
import org.eclipse.edc.jsonld.TitaniumJsonLd;
Expand Down Expand Up @@ -80,6 +82,9 @@ public class CredentialBasedAuthenticationExtension implements ServiceExtension
@Inject
private ApiAuthenticationRegistry registry;

@Inject
private RevocationServiceRegistry revocationServiceRegistry;

private TrustedIssuerRegistry trustedIssuerRegistry;
private TypeTransformerRegistryImpl typeTransformerRegistry;

Expand All @@ -96,8 +101,9 @@ public void initialize(ServiceExtensionContext context) {
var presentationVerifier = new MultiFormatPresentationVerifier(null, jwtVerifier);

var validity = context.getConfig().getLong(REVOCATION_CACHE_VALIDITY, DEFAULT_REVOCATION_CACHE_VALIDITY_MILLIS);
var statuslistService = new StatusList2021RevocationService(typeManager.getMapper(), validity);
var validationService = new VerifiableCredentialValidationServiceImpl(presentationVerifier, createTrustedIssuerRegistry(), statuslistService, clock);
revocationServiceRegistry.addService(StatusList2021Status.TYPE, new StatusList2021RevocationService(typeManager.getMapper(), validity));
revocationServiceRegistry.addService(BitstringStatusListStatus.TYPE, new BitstringStatusListRevocationService(typeManager.getMapper(), validity));
var validationService = new VerifiableCredentialValidationServiceImpl(presentationVerifier, createTrustedIssuerRegistry(), revocationServiceRegistry, clock);

var authService = new CredentialBasedAuthenticationService(context.getMonitor(), typeManager.getMapper(), validationService, typeTransformerRegistry(context));
registry.register(DIRECTORY_CONTEXT, authService);
Expand Down Expand Up @@ -125,7 +131,7 @@ public TypeTransformerRegistry typeTransformerRegistry(ServiceExtensionContext c
}

@Provider
public EdcHttpClient httpClient(ServiceExtensionContext context) {
return new EdcHttpClientImpl(new OkHttpClient(), RetryPolicy.ofDefaults(), context.getMonitor().withPrefix(MONITOR_PREFIX));
public ApiAuthenticationProviderRegistry apiAuthenticationProviderRegistry() {
return new ApiAuthenticationProviderRegistryImpl();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
* Copyright (c) 2025 Cofinity-X GmbH
*
* This program and the accompanying materials are made available under the
* terms of the Apache License, Version 2.0 which is available at
* https://www.apache.org/licenses/LICENSE-2.0
*
* SPDX-License-Identifier: Apache-2.0
*
* Contributors:
* Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation
* Cofinity-X GmbH
*
*/
package org.eclipse.tractusx.bdrs.api.directory.authentication;

import dev.failsafe.RetryPolicy;
import okhttp3.OkHttpClient;
import org.eclipse.edc.http.client.EdcHttpClientImpl;
import org.eclipse.edc.http.spi.EdcHttpClient;
import org.eclipse.edc.runtime.metamodel.annotation.Extension;
import org.eclipse.edc.runtime.metamodel.annotation.Provider;
import org.eclipse.edc.spi.system.ServiceExtension;
import org.eclipse.edc.spi.system.ServiceExtensionContext;

@Extension("HTTP Client Extension")
public class HttpClientExtension implements ServiceExtension {
public static final String MONITOR_PREFIX = "Presentation Transformation";

@Provider
public EdcHttpClient httpClient(ServiceExtensionContext context) {
return new EdcHttpClientImpl(new OkHttpClient(), RetryPolicy.ofDefaults(), context.getMonitor().withPrefix(MONITOR_PREFIX));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,15 @@
package org.eclipse.tractusx.bdrs.api.directory.authentication;

import org.eclipse.edc.keys.KeyParserRegistryImpl;
import org.eclipse.edc.keys.VaultPrivateKeyResolver;
import org.eclipse.edc.keys.keyparsers.JwkParser;
import org.eclipse.edc.keys.keyparsers.PemParser;
import org.eclipse.edc.keys.spi.KeyParserRegistry;
import org.eclipse.edc.keys.spi.PrivateKeyResolver;
import org.eclipse.edc.runtime.metamodel.annotation.Extension;
import org.eclipse.edc.runtime.metamodel.annotation.Inject;
import org.eclipse.edc.runtime.metamodel.annotation.Provider;
import org.eclipse.edc.spi.security.Vault;
import org.eclipse.edc.spi.system.ServiceExtension;
import org.eclipse.edc.spi.system.ServiceExtensionContext;
import org.eclipse.edc.spi.types.TypeManager;
Expand All @@ -38,6 +41,19 @@ public class KeyParserRegistryExtension implements ServiceExtension {
@Inject
private TypeManager typeManager;

@Inject
private Vault vault;

private PrivateKeyResolver privateKeyResolver;

@Provider
public PrivateKeyResolver privateKeyResolver(ServiceExtensionContext context) {
if (privateKeyResolver == null) {
privateKeyResolver = new VaultPrivateKeyResolver(keyParserRegistry(context), vault, context.getMonitor().withPrefix("PrivateKeyResolution"), context.getConfig());
}
return privateKeyResolver;
}

@Provider
public KeyParserRegistry keyParserRegistry(ServiceExtensionContext context) {
var keyParserRegistry = new KeyParserRegistryImpl();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,25 +22,22 @@
import org.eclipse.edc.iam.verifiablecredentials.spi.model.Issuer;
import org.eclipse.edc.iam.verifiablecredentials.spi.validation.TrustedIssuerRegistry;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

public class TrustedIssuerRegistryImpl implements TrustedIssuerRegistry {
private final Map<String, Issuer> store = new HashMap<>();
private final Map<String, Set<String>> store = new ConcurrentHashMap<>();

@Override
public void addIssuer(Issuer issuer) {
store.put(issuer.id(), issuer);
public void register(Issuer issuer, String credentialType) {
store.computeIfAbsent(issuer.id(), k -> new HashSet<>()).add(credentialType);
}

@Override
public Issuer getById(String id) {
return store.get(id);
public Set<String> getSupportedTypes(Issuer issuer) {
return store.getOrDefault(issuer.id(), Set.of());
}

@Override
public Collection<Issuer> getTrustedIssuers() {
return store.values();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@
#
org.eclipse.tractusx.bdrs.api.directory.authentication.CredentialBasedAuthenticationExtension
org.eclipse.tractusx.bdrs.api.directory.authentication.KeyParserRegistryExtension
org.eclipse.tractusx.bdrs.api.directory.authentication.HttpClientExtension
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft
* Copyright (c) 2025 Cofinity-X GmbH
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
Expand All @@ -25,6 +26,8 @@
import org.eclipse.edc.spi.system.ServiceExtension;
import org.eclipse.edc.spi.system.ServiceExtensionContext;
import org.eclipse.edc.web.spi.WebService;
import org.eclipse.edc.web.spi.configuration.PortMapping;
import org.eclipse.edc.web.spi.configuration.PortMappingRegistry;
import org.eclipse.tractusx.bdrs.spi.store.DidEntryStore;

import static org.eclipse.tractusx.bdrs.api.directory.DirectoryApiExtension.NAME;
Expand All @@ -37,23 +40,31 @@ public class DirectoryApiExtension implements ServiceExtension {
public static final String NAME = "BPN Directory API";

@Setting(value = "Port for the Directory API", required = true)
public static final String MGMT_API_PORT = "web.http.directory.port";
@Setting(value = "Path for the Management API", required = true)
public static final String MGMT_API_PATH = "web.http.directory.path";
public static final String DIRECTORY_API_PORT = "web.http.directory.port";
@Setting(value = "Path for the Directory API", required = true)
public static final String DIRECTORY_API_PATH = "web.http.directory.path";
static final String CONTEXT_NAME = "directory";
@Inject
private DidEntryStore store;

@Inject
private WebService webService;

@Inject
private PortMappingRegistry portMappingRegistry;

@Override
public String name() {
return NAME;
}

@Override
public void initialize(ServiceExtensionContext context) {
var port = context.getSetting(DIRECTORY_API_PORT, 8082);
var path = context.getSetting(DIRECTORY_API_PATH, "/directory");
var portMapping = new PortMapping(CONTEXT_NAME, port, path);
portMappingRegistry.register(portMapping);

webService.registerResource(CONTEXT_NAME, new DirectoryApiController(store));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,21 @@

import org.eclipse.edc.api.auth.spi.AuthenticationRequestFilter;
import org.eclipse.edc.api.auth.spi.registry.ApiAuthenticationRegistry;
import org.eclipse.edc.runtime.metamodel.annotation.BaseExtension;
import org.eclipse.edc.runtime.metamodel.annotation.Extension;
import org.eclipse.edc.runtime.metamodel.annotation.Inject;
import org.eclipse.edc.runtime.metamodel.annotation.Setting;
import org.eclipse.edc.spi.system.ServiceExtension;
import org.eclipse.edc.spi.system.ServiceExtensionContext;
import org.eclipse.edc.web.spi.WebService;
import org.eclipse.edc.web.spi.configuration.PortMapping;
import org.eclipse.edc.web.spi.configuration.PortMappingRegistry;
import org.eclipse.tractusx.bdrs.spi.store.DidEntryStore;

import static org.eclipse.tractusx.bdrs.api.management.ManagementApiExtension.NAME;

/**
* Loads resources for the BPN Directory Management API.
*/
@BaseExtension
@Extension(NAME)
public class ManagementApiExtension implements ServiceExtension {
public static final String NAME = "Management API";
Expand All @@ -53,13 +53,21 @@ public class ManagementApiExtension implements ServiceExtension {
@Inject
private ApiAuthenticationRegistry registry;

@Inject
private PortMappingRegistry portMappingRegistry;

@Override
public String name() {
return NAME;
}

@Override
public void initialize(ServiceExtensionContext context) {
var port = context.getSetting(MGMT_API_PORT, 8081);
var path = context.getSetting(MGMT_API_PATH, "/management");
var portMapping = new PortMapping(CONTEXT_NAME, port, path);
portMappingRegistry.register(portMapping);

webService.registerResource(CONTEXT_NAME, new ManagementApiController(store));
webService.registerResource(CONTEXT_NAME, new AuthenticationRequestFilter(registry, "management-api"));
}
Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ allprojects {

// configure which version of the annotation processor to use. defaults to the same version as the plugin
configure<org.eclipse.edc.plugins.autodoc.AutodocExtension> {
outputDirectory.set(project.buildDir)
outputDirectory.set(project.layout.buildDirectory.asFile)
processorVersion.set(annotationProcessorVersion)
}

Expand Down
4 changes: 2 additions & 2 deletions extensions/store/sql/did-entry-store-sql/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ dependencies {
implementation(libs.edc.spi.core)
implementation(libs.edc.spi.transaction)
implementation(libs.edc.spi.transaction.datasource)
implementation(libs.edc.core.sql)
implementation(libs.edc.lib.sql)

testImplementation(libs.edc.junit)
testImplementation(testFixtures(project(":spi:core-spi")))
testImplementation(testFixtures(libs.edc.core.sql))
testImplementation(testFixtures(libs.edc.sql.testfixtures))
}

6 changes: 3 additions & 3 deletions extensions/store/sql/sql-lib/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ dependencies {
implementation(libs.edc.spi.transaction)
implementation(libs.edc.spi.transaction.datasource)
implementation(project(":spi:core-spi"))
implementation(libs.edc.core.sql)
implementation(libs.edc.lib.sql)

implementation(libs.flyway.core)
// starting from flyway 10, they've moved to a more modular structure,
// so we need to add PG support explicitly
Expand All @@ -36,6 +36,6 @@ dependencies {

testImplementation(libs.edc.junit)
testImplementation(testFixtures(project(":spi:core-spi")))
testImplementation(testFixtures(libs.edc.core.sql))
testImplementation(testFixtures(libs.edc.sql.testfixtures))
}

6 changes: 5 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ format.version = "1.1"

[versions]
assertj = "3.27.3"
edc = "0.7.1"
edc = "0.11.0"
nimbus = "10.0.1"
restAssured = "5.5.0"
jupiter = "5.11.4"
Expand Down Expand Up @@ -33,21 +33,25 @@ edc-spi-jwt = { module = "org.eclipse.edc:jwt-spi", version.ref = "edc" }
edc-spi-token = { module = "org.eclipse.edc:token-spi", version.ref = "edc" }
edc-spi-identitytrust = { module = "org.eclipse.edc:identity-trust-spi", version.ref = "edc" }
edc-spi-vc = { module = "org.eclipse.edc:verifiable-credentials-spi", version.ref = "edc" }
edc-spi-keys = { module = "org.eclipse.edc:keys-spi", version.ref = "edc" }
edc-spi-auth = { module = "org.eclipse.edc:auth-spi", version.ref = "edc" }
edc-auth-tokenbased = { module = "org.eclipse.edc:auth-tokenbased", version.ref = "edc" }
edc-vault-filesystem = { module = "org.eclipse.edc:vault-filesystem", version.ref = "edc" }
edc-vault-hashicorp = { module = "org.eclipse.edc:vault-hashicorp", version.ref = "edc" }
edc-junit = { module = "org.eclipse.edc:junit", version.ref = "edc" }
edc-api-observability = { module = "org.eclipse.edc:api-observability", version.ref = "edc" }
edc-core-sql = { module = "org.eclipse.edc:sql-core", version.ref = "edc" }
edc-sql-testfixtures = { module = "org.eclipse.edc:sql-test-fixtures", version.ref = "edc" }
edc-transaction-local = { module = "org.eclipse.edc:transaction-local", version.ref = "edc" }
edc-sql-pool = { module = "org.eclipse.edc:sql-pool-apache-commons", version.ref = "edc" }
edc-core-token = { module = "org.eclipse.edc:token-core", version.ref = "edc" }

edc-lib-keys = { module = "org.eclipse.edc:keys-lib", version.ref = "edc" }
edc-lib-transform = { module = "org.eclipse.edc:transform-lib", version.ref = "edc" }
edc-lib-jsonld = { module = "org.eclipse.edc:json-ld-lib", version.ref = "edc" }
edc-lib-json = { module = "org.eclipse.edc:json-lib", version.ref = "edc" }
edc-lib-http = { module = "org.eclipse.edc:http-lib", version.ref = "edc" }
edc-lib-sql = { module = "org.eclipse.edc:sql-lib", version.ref = "edc" }

# Third party libs
assertj = { module = "org.assertj:assertj-core", version.ref = "assertj" }
Expand Down
1 change: 1 addition & 0 deletions runtimes/bdrs-server-memory/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ dependencies {
runtimeOnly(libs.edc.core.did)
runtimeOnly(libs.edc.identitydidweb)
runtimeOnly(libs.edc.identitytrust.issuers)
runtimeOnly(libs.edc.core.token)

runtimeOnly(project(":core:core-services"))
runtimeOnly(project(":api:directory-api"))
Expand Down
Loading

0 comments on commit be601aa

Please sign in to comment.