Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chore/414 update reload client #963

Merged
merged 3 commits into from
Jan 31, 2024
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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
- Implemented asset publisher component functionality
- Updated postgres to version 15.4
- Migrated from okhttpclient (feign implementation) to resttemplate.
- Refactored rest templates

### Removed

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import org.eclipse.tractusx.traceability.common.properties.FeignDefaultProperties;
import org.eclipse.tractusx.traceability.common.properties.TraceabilityProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
Expand All @@ -55,21 +54,15 @@
@Slf4j
public class RestTemplateConfiguration {

public static final String EDC_REST_TEMPLATE = "edcRestTemplate";
public static final String REST_TEMPLATE = "restTemplate";
public static final String SUBMODEL_TEMPLATE = "submodelTemplate";
public static final String EDC_NOTIFICATION_TEMPLATE = "edcNotificationTemplate";

private static final String EDC_API_KEY_HEADER_NAME = "X-Api-Key";

private static final String IRS_API_KEY_HEADER_NAME = "X-API-KEY";

private final OAuth2AuthorizedClientService oAuth2AuthorizedClientService;
private final ClientRegistrationRepository clientRegistrationRepository;


/* RestTemplate used by trace x for the edc contracts used within the edc provider.*/
@Bean
@Qualifier(EDC_REST_TEMPLATE)
public RestTemplate edcRestTemplate(@Autowired EdcProperties edcProperties) {
return new RestTemplateBuilder()
.rootUri(edcProperties.getProviderEdcUrl())
Expand All @@ -79,14 +72,15 @@ public RestTemplate edcRestTemplate(@Autowired EdcProperties edcProperties) {
.build();
}

/* RestTemplate used by trace x for the notification transfer to the edc controlplane including edc api key*/
@Bean
@Qualifier(EDC_NOTIFICATION_TEMPLATE)
public RestTemplate edcNotificationTemplate(@Autowired EdcProperties edcProperties) {
return new RestTemplateBuilder()
.defaultHeader(EDC_API_KEY_HEADER_NAME, edcProperties.getApiAuthKey())
.build();
}

/* RestTemplate used by trace x for the irs api with the admin api key*/
@Bean
public RestTemplate irsAdminTemplate(@Autowired TraceabilityProperties traceabilityProperties) {
return new RestTemplateBuilder()
Expand All @@ -96,6 +90,7 @@ public RestTemplate irsAdminTemplate(@Autowired TraceabilityProperties traceabil
.build();
}

/* RestTemplate used by trace x for the irs api with the regular api key*/
@Bean
public RestTemplate irsRegularTemplate(@Autowired TraceabilityProperties traceabilityProperties) {
return new RestTemplateBuilder()
Expand All @@ -106,25 +101,17 @@ public RestTemplate irsRegularTemplate(@Autowired TraceabilityProperties traceab
.build();
}

/* RestTemplate used by trace x for the submodel server*/
@Bean
@Qualifier(REST_TEMPLATE)
public RestTemplate edcTemplate() {
return new RestTemplateBuilder()
.build();
}


@Bean
@Qualifier(SUBMODEL_TEMPLATE)
public RestTemplate submodelRestTemplate(@Autowired TraceabilityProperties traceabilityProperties, @Autowired FeignDefaultProperties feignDefaultProperties) {

return new RestTemplateBuilder()
.rootUri(traceabilityProperties.getSubmodelBase())
.setConnectTimeout(Duration.ofMillis(feignDefaultProperties.getConnectionTimeoutMillis()))
.setReadTimeout(Duration.ofMillis(feignDefaultProperties.getReadTimeoutMillis()))
.build();
}

/* RestTemplate used by the digital twin registry client library*/
@Bean
public RestTemplate digitalTwinRegistryRestTemplate(
final RestTemplateBuilder restTemplateBuilder,
Expand All @@ -135,6 +122,7 @@ public RestTemplate digitalTwinRegistryRestTemplate(
clientRegistrationId).build();
}

/* RestTemplate used by the edc client library*/
@Bean
public RestTemplate edcClientRestTemplate() {
return new RestTemplateBuilder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,41 +23,38 @@

import lombok.extern.slf4j.Slf4j;
import org.eclipse.tractusx.traceability.qualitynotification.domain.base.exception.BadRequestException;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.DefaultUriBuilderFactory;

import static java.lang.String.format;
import static org.eclipse.tractusx.traceability.common.config.RestTemplateConfiguration.EDC_NOTIFICATION_TEMPLATE;

// TODO - either refactor this class to use feignClient with a common httpClient or remove it once IRS-Lib is done
@Slf4j
@Component
public class HttpCallService {


private final RestTemplate edcNotificationTemplate;

public HttpCallService(@Qualifier(EDC_NOTIFICATION_TEMPLATE) RestTemplate edcNotificationTemplate) {
public HttpCallService(RestTemplate edcNotificationTemplate) {
this.edcNotificationTemplate = edcNotificationTemplate;
}


public void sendRequest(EdcNotificationRequest request) {
edcNotificationTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(request.getUrl()));
HttpEntity<String> entity = new HttpEntity<>(request.getBody(), request.getHeaders());
try {
var response = edcNotificationTemplate.exchange("", HttpMethod.POST, entity, new ParameterizedTypeReference<>() {
var response = edcNotificationTemplate.exchange(request.getUrl(), HttpMethod.POST, entity, new ParameterizedTypeReference<>() {
});
var body = response.getBody();
if (!response.getStatusCode().is2xxSuccessful() || body == null) {
throw new BadRequestException(format("Control plane responded with: %s %s", response.getStatusCode(), body != null ? body.toString() : ""));
log.info("Control plane responded with response: {}", response);

Check failure

Code scanning / CodeQL

Log Injection

This log entry depends on a [user-provided value](1).
log.info("Control plane responded with status: {}", response.getStatusCode());
if (!response.getStatusCode().is2xxSuccessful()) {
throw new BadRequestException(format("Control plane responded with: %s", response.getStatusCode()));
}
} catch (Exception e) {
log.warn(e.getMessage());
throw e;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,13 @@
import org.eclipse.tractusx.traceability.common.properties.TraceabilityProperties;
import org.eclipse.tractusx.traceability.qualitynotification.application.contract.model.NotificationMethod;
import org.eclipse.tractusx.traceability.qualitynotification.application.contract.model.NotificationType;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.asset.model.*;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.asset.model.CreateEdcAssetException;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.asset.model.EdcAsset;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.asset.model.EdcAssetProperties;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.asset.model.EdcContext;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.asset.model.EdcCreateDataAssetRequest;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.asset.model.EdcDataAddress;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
Expand All @@ -38,7 +42,6 @@

import java.util.UUID;

import static org.eclipse.tractusx.traceability.common.config.RestTemplateConfiguration.EDC_REST_TEMPLATE;
import static org.eclipse.tractusx.traceability.common.config.JsonLdConfigurationTraceX.NAMESPACE_EDC;
import static org.eclipse.tractusx.traceability.common.model.SecurityUtils.sanitize;
import static org.eclipse.tractusx.traceability.common.model.SecurityUtils.sanitizeHtml;
Expand All @@ -55,13 +58,13 @@ public class EdcNotificationAssetService {
private static final String TRACE_FOSS_QUALITY_NOTIFICATION_ALERT_URL_TEMPLATE = "/api/qualityalerts/%s";

private final TraceabilityProperties traceabilityProperties;
private final RestTemplate restTemplate;
private final RestTemplate edcRestTemplate;
private final EdcProperties edcProperties;

@Autowired
public EdcNotificationAssetService(TraceabilityProperties traceabilityProperties, @Qualifier(EDC_REST_TEMPLATE) RestTemplate edcRestTemplate, EdcProperties edcProperties) {
public EdcNotificationAssetService(TraceabilityProperties traceabilityProperties, RestTemplate edcRestTemplate, EdcProperties edcProperties) {
this.traceabilityProperties = traceabilityProperties;
this.restTemplate = edcRestTemplate;
this.edcRestTemplate = edcRestTemplate;
this.edcProperties = edcProperties;
}

Expand Down Expand Up @@ -111,7 +114,7 @@ public String createNotificationAsset(NotificationMethod notificationMethod, Not
final ResponseEntity<String> createEdcDataAssetResponse;

try {
createEdcDataAssetResponse = restTemplate.postForEntity(
createEdcDataAssetResponse = edcRestTemplate.postForEntity(
edcProperties.getAssetsPath(),
createDataAssetRequest,
String.class
Expand Down Expand Up @@ -146,7 +149,7 @@ public void deleteNotificationAsset(String notificationAssetId) {
.toUriString();

try {
restTemplate.delete(deleteUri);
edcRestTemplate.delete(deleteUri);
} catch (RestClientException e) {
log.error("Failed to delete EDC notification asset {}. Reason: ", notificationAssetId, e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,12 @@
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.contract.model.EdcContractDefinitionCriteria;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.contract.model.EdcCreateContractDefinitionRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

import static org.eclipse.tractusx.traceability.common.config.RestTemplateConfiguration.EDC_REST_TEMPLATE;
import static org.eclipse.tractusx.traceability.common.config.JsonLdConfigurationTraceX.NAMESPACE_EDC;
import static org.eclipse.tractusx.traceability.common.model.SecurityUtils.sanitize;
import static org.eclipse.tractusx.traceability.common.model.SecurityUtils.sanitizeHtml;
Expand All @@ -51,13 +49,13 @@ public class EdcContractDefinitionService {
private static final String ASSET_SELECTOR_TYPE = "CriterionDto";
private static final String CONTRACT_DEFINITION_TYPE = "ContractDefinition";

private final RestTemplate restTemplate;
private final RestTemplate edcRestTemplate;
private final EdcProperties edcProperties;
private final ObjectMapper objectMapper;

@Autowired
public EdcContractDefinitionService(@Qualifier(EDC_REST_TEMPLATE) RestTemplate edcRestTemplate, EdcProperties edcProperties, ObjectMapper objectMapper) {
this.restTemplate = edcRestTemplate;
public EdcContractDefinitionService(RestTemplate edcRestTemplate, EdcProperties edcProperties, ObjectMapper objectMapper) {
this.edcRestTemplate = edcRestTemplate;
this.edcProperties = edcProperties;
this.objectMapper = objectMapper;
}
Expand Down Expand Up @@ -85,7 +83,7 @@ public String createContractDefinition(String notificationAssetId, String access
final ResponseEntity<String> createContractDefinitionResponse;
log.info("EdcCreateContractDefinitionRequest {}", objectMapper.writeValueAsString(createContractDefinitionRequest));
try {
createContractDefinitionResponse = restTemplate.postForEntity(edcProperties.getContractDefinitionsPath(), createContractDefinitionRequest, String.class);
createContractDefinitionResponse = edcRestTemplate.postForEntity(edcProperties.getContractDefinitionsPath(), createContractDefinitionRequest, String.class);
} catch (RestClientException e) {
log.error("Failed to create edc contract definition for {} notification asset and {} policy definition id. Reason: ", notificationAssetId, accessPolicyId, e);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.policy.model.EdcPolicyPermissionConstraint;
import org.eclipse.tractusx.traceability.qualitynotification.domain.contract.policy.model.EdcPolicyPermissionConstraintExpression;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
Expand All @@ -46,7 +45,6 @@
import java.util.List;
import java.util.UUID;

import static org.eclipse.tractusx.traceability.common.config.RestTemplateConfiguration.EDC_REST_TEMPLATE;
import static org.eclipse.tractusx.traceability.common.config.JsonLdConfigurationTraceX.NAMESPACE_ODRL;
import static org.eclipse.tractusx.traceability.common.model.SecurityUtils.sanitize;
import static org.eclipse.tractusx.traceability.common.model.SecurityUtils.sanitizeHtml;
Expand All @@ -62,15 +60,14 @@ public class EdcPolicyDefinitionService {
private static final String CONSTRAINT = "Constraint";
private static final String OPERATOR_PREFIX = "odrl:";
private final ObjectMapper objectMapper;
private final RestTemplate restTemplate;
private final RestTemplate edcRestTemplate;
private final EdcProperties edcProperties;

private final TraceabilityProperties traceabilityProperties;

@Autowired
public EdcPolicyDefinitionService(ObjectMapper objectMapper, @Qualifier(EDC_REST_TEMPLATE) RestTemplate edcRestTemplate, EdcProperties edcProperties, TraceabilityProperties traceabilityProperties) {
public EdcPolicyDefinitionService(ObjectMapper objectMapper, RestTemplate edcRestTemplate, EdcProperties edcProperties, TraceabilityProperties traceabilityProperties) {
this.objectMapper = objectMapper;
this.restTemplate = edcRestTemplate;
this.edcRestTemplate = edcRestTemplate;
this.edcProperties = edcProperties;
this.traceabilityProperties = traceabilityProperties;
}
Expand Down Expand Up @@ -110,7 +107,7 @@ public String createAccessPolicy() throws JsonProcessingException {
log.info("EdcCreatePolicyDefinitionRequest {}", objectMapper.writeValueAsString(edcCreatePolicyDefinitionRequest));
final ResponseEntity<String> createPolicyDefinitionResponse;
try {
createPolicyDefinitionResponse = restTemplate.postForEntity(edcProperties.getPolicyDefinitionsPath(), edcCreatePolicyDefinitionRequest, String.class);
createPolicyDefinitionResponse = edcRestTemplate.postForEntity(edcProperties.getPolicyDefinitionsPath(), edcCreatePolicyDefinitionRequest, String.class);
} catch (RestClientException e) {
log.error("Failed to create EDC notification asset policy. Reason: ", e);

Expand Down Expand Up @@ -143,7 +140,7 @@ public void deleteAccessPolicy(String accessPolicyId) {
.toUriString();

try {
restTemplate.delete(deleteUri);
edcRestTemplate.delete(deleteUri);
} catch (RestClientException e) {
log.error("Failed to delete EDC notification asset policy {}. Reason: ", cleanAccessPolicyId, e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,31 +18,28 @@
********************************************************************************/
package org.eclipse.tractusx.traceability.submodel.infrastructure.repository;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.client.RestTemplate;

import static org.eclipse.tractusx.traceability.common.config.RestTemplateConfiguration.SUBMODEL_TEMPLATE;

@Component
public class SubmodelClient {

private final RestTemplate submodelTemplate;
private final RestTemplate submodelRestTemplate;


public SubmodelClient(@Qualifier(SUBMODEL_TEMPLATE) RestTemplate submodelTemplate) {
this.submodelTemplate = submodelTemplate;
public SubmodelClient(RestTemplate submodelRestTemplate) {
this.submodelRestTemplate = submodelRestTemplate;
}

public void createSubmodel(String submodelId, @RequestBody String payload) {
submodelTemplate.exchange("/api/submodel/data/" + submodelId, HttpMethod.POST, new HttpEntity<>(payload), Void.class);
submodelRestTemplate.exchange("/api/submodel/data/" + submodelId, HttpMethod.POST, new HttpEntity<>(payload), Void.class);
}


public String getSubmodel(String submodelId) {
return submodelTemplate.exchange("/api/submodel/data/" + submodelId, HttpMethod.GET, null, String.class).getBody();
return submodelRestTemplate.exchange("/api/submodel/data/" + submodelId, HttpMethod.GET, null, String.class).getBody();
}
}