Skip to content

Commit

Permalink
Spring sdk upgrade (#410)
Browse files Browse the repository at this point in the history
* wip

* AB2D-6270 Ab2d,libs -Analyze level of effort and address critical Snyk security vulnerabilities

* AB2D-6270 Ab2d,libs -Analyze level of effort and address critical Snyk security vulnerabilities

* AB2D-6270 Ab2d,libs -Analyze level of effort and address critical Snyk security vulnerabilities

* wip

* wip

* wip

* wip

* revert gradle version

* upgrade spring web version

* add tests

* add tests

* fix build

* merge from master

* cleanup

* upgrade event-client version
  • Loading branch information
smirnovaae authored Sep 4, 2024
1 parent 0823a2a commit 57c8d52
Show file tree
Hide file tree
Showing 20 changed files with 195 additions and 198 deletions.
2 changes: 1 addition & 1 deletion ab2d-bfd/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ dependencies {
implementation "ca.uhn.hapi.fhir:hapi-fhir-client:${hapiVersion}"
implementation "ca.uhn.hapi.fhir:hapi-fhir-structures-dstu3:${hapiVersion}"
implementation "ca.uhn.hapi.fhir:hapi-fhir-structures-r4:${hapiVersion}"
implementation "org.springframework.retry:spring-retry:1.3.4"
implementation "org.springframework.retry:spring-retry:2.0.8"
implementation "com.newrelic.agent.java:newrelic-api:${newRelicVersion}"
testImplementation "org.testcontainers:testcontainers:${testContainerVersion}"
testImplementation "org.testcontainers:postgresql:${testContainerVersion}"
Expand Down
6 changes: 3 additions & 3 deletions ab2d-contracts-client/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ repositories {
version "$contractClientVersion"
dependencies {
implementation "org.projectlombok:lombok:${lombokVersion}"
implementation "org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion"
implementation "org.springframework.boot:spring-boot-starter-validation:$springBootVersion"
implementation "org.springframework.boot:spring-boot-starter-web:$springBootVersion"
annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
testImplementation "org.springframework.boot:spring-boot-starter-test:$springBootVersion"
testImplementation "org.junit.jupiter:junit-jupiter-api:${jupiterVersion}"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${jupiterVersion}"
implementation "javax.validation:validation-api:2.0.1.Final"
implementation "org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion"
implementation "org.springframework.boot:spring-boot-starter-web:$springBootVersion"
}

test {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package gov.cms.ab2d.contracts.model;

import java.time.OffsetDateTime;
import javax.validation.constraints.NotNull;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package gov.cms.ab2d.contracts.model;

import java.time.OffsetDateTime;
import javax.persistence.MappedSuperclass;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
Expand Down
6 changes: 4 additions & 2 deletions ab2d-events-client/build.gradle
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
version "$eventClientVersion"
dependencies {
implementation(platform(annotationProcessor("com.slack.api:slack-api-client:$slackAPIVersion")))
implementation "commons-codec:commons-codec:1.9"
implementation "org.springframework.boot:spring-boot-starter:${springBootVersion}"
implementation "org.springframework.boot:spring-boot-starter-data-jpa:${springBootVersion}"
implementation "org.springframework:spring-web:${springWebVersion}"
implementation "org.springframework:spring-webmvc:${springWebVersion}"
implementation "org.springframework.boot:spring-boot-starter-jdbc:${springBootVersion}"
implementation "org.springframework.boot:spring-boot-starter-web:${springBootVersion}"
implementation "io.awspring.cloud:spring-cloud-starter-aws:${springCloudAwsVersion}"
implementation "io.awspring.cloud:spring-cloud-aws-messaging:${springCloudAwsVersion}"
implementation "io.awspring.cloud:spring-cloud-aws-dependencies:${springCloudAwsVersion}"
implementation "io.awspring.cloud:spring-cloud-aws-starter-sqs:${springCloudAwsVersion}"
implementation "io.awspring.cloud:spring-cloud-aws-starter:${springCloudAwsVersion}"
implementation "com.fasterxml.jackson.module:jackson-module-parameter-names:${jacksonVersion}"
implementation "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jacksonVersion}"
implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:${jacksonVersion}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import gov.cms.ab2d.eventclient.config.Ab2dEnvironment;
import gov.cms.ab2d.eventclient.events.LoggableEvent;
import java.util.List;
import org.springframework.stereotype.Repository;

import java.util.List;
@Repository
public interface EventClient {

enum LogType {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
package gov.cms.ab2d.eventclient.clients;

import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSAsync;
import com.amazonaws.services.sqs.AmazonSQSAsyncClientBuilder;
import com.amazonaws.services.sqs.model.QueueDoesNotExistException;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
Expand All @@ -15,16 +9,21 @@
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import gov.cms.ab2d.eventclient.config.Ab2dEnvironment;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import io.awspring.cloud.messaging.config.QueueMessageHandlerFactory;
import io.awspring.cloud.messaging.support.NotificationMessageArgumentResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.converter.MessageConverter;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.CreateQueueRequest;
import software.amazon.awssdk.services.sqs.model.SqsException;

import java.net.URI;
import java.net.URISyntaxException;

@Configuration
@Slf4j
Expand Down Expand Up @@ -53,34 +52,26 @@ public SQSConfig(@Value("${cloud.aws.region.static}") String region,

@Primary
@Bean
public AmazonSQSAsync amazonSQSAsync() {
public SqsClient amazonSQSAsync() throws URISyntaxException {
log.info("Locakstack url " + url);
if (null != url) {
return (AmazonSQSAsync) createQueue(AmazonSQSAsyncClientBuilder
.standard()
.withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
.withEndpointConfiguration(getEndpointConfig(url))
if (url != null) {
return createQueue(SqsClient.builder()
.credentialsProvider(DefaultCredentialsProvider.builder().build())
.endpointOverride(new URI(url))
.region(Region.US_EAST_1)
.build());
}
return AmazonSQSAsyncClientBuilder
.standard()
.withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
.withRegion(Regions.US_EAST_1)
.build();
return createQueue(SqsClient.builder()
.credentialsProvider(DefaultCredentialsProvider.builder().build())
.region(Region.US_EAST_1)
.build());
}

@Bean
public SQSEventClient sqsEventClient(AmazonSQS amazonSQS) {
public SQSEventClient sqsEventClient(SqsClient amazonSQS) {
return new SQSEventClient(amazonSQS, objectMapper(), sqsQueueName);
}

@Bean
public QueueMessageHandlerFactory queueMessageHandlerFactory(MessageConverter messageConverter) {
var factory = new QueueMessageHandlerFactory();
factory.setArgumentResolvers(List.of(new NotificationMessageArgumentResolver(messageConverter)));
return factory;
}

/*
This is a static method to avoid breaking existing projects mapping.
*/
Expand All @@ -102,19 +93,18 @@ protected MessageConverter messageConverter() {
return jacksonMessageConverter;
}

// Until localstack is built out more, create the queue here when running locally
private AmazonSQS createQueue(AmazonSQS amazonSQS) {
public SqsClient createQueue(SqsClient sqsClient) {
try {
amazonSQS.getQueueUrl(sqsQueueName);
log.info("Queue already exists");
} catch (QueueDoesNotExistException e) {
amazonSQS.createQueue(sqsQueueName);
CreateQueueRequest createQueueRequest = CreateQueueRequest.builder()
.queueName(sqsQueueName)
.build();

sqsClient.createQueue(createQueueRequest);
log.info("Queue created");
} catch (SqsException e) {
log.error(e.getMessage());
}
return amazonSQS;
return sqsClient;
}

private AwsClientBuilder.EndpointConfiguration getEndpointConfig(String localstackURl) {
return new AwsClientBuilder.EndpointConfiguration(localstackURl, region);
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package gov.cms.ab2d.eventclient.clients;

import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.model.InvalidMessageContentsException;
import com.amazonaws.services.sqs.model.SendMessageRequest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import gov.cms.ab2d.eventclient.config.Ab2dEnvironment;
Expand All @@ -15,17 +13,23 @@
import gov.cms.ab2d.eventclient.messages.SlackSQSMessage;
import gov.cms.ab2d.eventclient.messages.TraceAndAlertSQSMessage;
import gov.cms.ab2d.eventclient.messages.TraceSQSMessage;

import java.util.List;

import lombok.extern.slf4j.Slf4j;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;
import software.amazon.awssdk.services.sqs.model.SqsException;
import software.amazon.awssdk.services.sqs.model.GetQueueUrlRequest;

@Slf4j
public class SQSEventClient implements EventClient {
private final AmazonSQS amazonSQS;
private final SqsClient amazonSQS;
private final ObjectMapper mapper;

private final String queueName;

public SQSEventClient(AmazonSQS amazonSQS, ObjectMapper mapper, String queueName) {
public SQSEventClient(SqsClient amazonSQS, ObjectMapper mapper, String queueName) {
this.amazonSQS = amazonSQS;
this.mapper = mapper;
this.queueName = queueName;
Expand Down Expand Up @@ -101,15 +105,21 @@ public void log(LogType type, LoggableEvent event) {
}
}

private void sendMessage(SQSMessages message) {
String queueUrl = amazonSQS.getQueueUrl(queueName).getQueueUrl();
public void sendMessage(SQSMessages message) {
try {
SendMessageRequest sendMessageRequest = new SendMessageRequest()
.withQueueUrl(queueUrl)
.withMessageBody(mapper.writeValueAsString(message));
GetQueueUrlRequest getQueueRequest = GetQueueUrlRequest.builder()
.queueName(queueName)
.build();

String queueUrl = amazonSQS.getQueueUrl(getQueueRequest).queueUrl();
SendMessageRequest sendMessageRequest = SendMessageRequest.builder()
.queueUrl(queueUrl)
.messageBody(mapper.writeValueAsString(message))
.build();

amazonSQS.sendMessage(sendMessageRequest);
} catch (JsonProcessingException | UnsupportedOperationException | InvalidMessageContentsException e) {

} catch (JsonProcessingException | UnsupportedOperationException | SqsException e) {
log.info(e.getMessage());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,7 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication(
scanBasePackages = {"gov.cms.ab2d.eventclient"},
exclude = {
io.awspring.cloud.autoconfigure.context.ContextInstanceDataAutoConfiguration.class,
io.awspring.cloud.autoconfigure.context.ContextStackAutoConfiguration.class,
io.awspring.cloud.autoconfigure.context.ContextRegionProviderAutoConfiguration.class,
io.awspring.cloud.autoconfigure.messaging.SqsAutoConfiguration.class

}
)
@SpringBootApplication(scanBasePackages = {"gov.cms.ab2d.eventclient"})
public class SpringBootApp {
public static void main(String[] args) {
SpringApplication.run(SpringBootApp.class, args);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
@Slf4j
public class AB2DLocalstackContainer extends LocalStackContainer {

private static final DockerImageName IMAGE_VERSION = DockerImageName.parse("localstack/localstack:latest");
private static final DockerImageName IMAGE_VERSION = DockerImageName.parse("localstack/localstack:3.5.0");

public AB2DLocalstackContainer() {
super(IMAGE_VERSION);
Expand All @@ -22,6 +22,6 @@ public void start() {
super.withServices(Service.SQS);
super.start();
System.setProperty("AWS_URL",
"localhost:" + this.getMappedPort(EnabledService.named("SQS").getPort()));
"http://localhost:" + this.getMappedPort(EnabledService.named("SQS").getPort()));
}
}
Loading

0 comments on commit 57c8d52

Please sign in to comment.