Skip to content

Commit

Permalink
Spring-boot 3 Support (#781)
Browse files Browse the repository at this point in the history
* Spring-boot 3 Support
  • Loading branch information
alfespa17 authored Apr 12, 2024
1 parent 22dd490 commit 3f9589f
Show file tree
Hide file tree
Showing 53 changed files with 321 additions and 163 deletions.
46 changes: 37 additions & 9 deletions api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,40 +15,42 @@
<description>Spring Boot Terrakube API</description>
<properties>
<java.version>17</java.version>
<elide.version>6.1.12</elide.version>
<liquibase-core.version>4.8.0</liquibase-core.version>
<elide.version>7.0.3</elide.version>
<liquibase-core.version>4.26.0</liquibase-core.version>
<azure.version>5.7.0</azure.version>
<mssql-jdbc.version>11.2.3.jre17</mssql-jdbc.version>
<msal4j.version>1.11.2</msal4j.version>
<lombok.version>1.18.28</lombok.version>
<jgit.version>6.6.1.202309021850-r</jgit.version>
<rest-assured.version>4.5.1</rest-assured.version>
<junit-jupiter-api.version>5.9.0</junit-jupiter-api.version>
<groovy.version>3.0.8</groovy.version>
<!--groovy.version>4.0.20</groovy.version-->
<postgresql.version>42.7.2</postgresql.version>
<mysql.version>8.0.28</mysql.version>
<mockserver-spring-test-listener.version>5.13.2</mockserver-spring-test-listener.version>
<snakeyaml.version>2.0</snakeyaml.version>
<quartz.version>2.3.2</quartz.version>
<quartz.version>2.5.0-rc1</quartz.version>
<aws-sdk.version>1.12.261</aws-sdk.version>
<gcp-libraries-bom.version>26.3.0</gcp-libraries-bom.version>
<jjwt.version>0.11.5</jjwt.version>
<jedis.version>3.9.0</jedis.version>
<commons-text.version>1.10.0</commons-text.version>
<jedis.version>4.4.7</jedis.version>
<commons-text.version>1.11.0</commons-text.version>
<commons-lang3.version>3.13.0</commons-lang3.version>
<sonar.coverage.jacoco.xmlReportPaths>${basedir}/../${aggregate.report.dir}
</sonar.coverage.jacoco.xmlReportPaths>
<maven-artifact.version>3.8.8</maven-artifact.version>
<commons-io.version>2.15.1</commons-io.version>
<!--BUILDPACK DATA-->
<buildpack.builder>paketobuildpacks/builder-jammy-tiny</buildpack.builder>
<buildpack.java>gcr.io/paketo-buildpacks/java:12.0.0</buildpack.java>
<buildpack.telemetry>gcr.io/paketo-buildpacks/opentelemetry</buildpack.telemetry>
<buildpack.builder>paketobuildpacks/builder-jammy-base</buildpack.builder>
<buildpack.java>gcr.io/paketo-buildpacks/java:12.1.0</buildpack.java>
<buildpack.telemetry>gcr.io/paketo-buildpacks/opentelemetry:1.7.1</buildpack.telemetry>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.1.10</version>
<configuration>
<image>
<builder>${buildpack.builder}</builder>
Expand Down Expand Up @@ -104,6 +106,14 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
Expand Down Expand Up @@ -216,6 +226,12 @@
<artifactId>commons-text</artifactId>
<version>${commons-text.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
Expand Down Expand Up @@ -288,6 +304,18 @@
<artifactId>maven-artifact</artifactId>
<version>${maven-artifact.version}</version>
</dependency>
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>nimbus-jose-jwt</artifactId>
<version>9.38-rc3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>nimbus-jose-jwt</artifactId>
<version>9.37.3</version>
<scope>compile</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import org.terrakube.api.rs.workspace.parameters.Variable;
import org.terrakube.api.rs.workspace.tag.WorkspaceTag;

import liquibase.pro.packaged.lo;

import org.terrakube.api.rs.tag.Tag;
import org.springframework.beans.factory.annotation.Value;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.terrakube.api.repository.JobRepository;
import org.terrakube.api.repository.StepRepository;
import org.terrakube.api.repository.WorkspaceRepository;
import org.terrakube.api.rs.job.Job;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;

import javax.swing.text.html.Option;
import java.util.*;

@Slf4j
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import jakarta.persistence.*;
import java.util.Date;

@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import java.util.Optional;
import java.util.UUID;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManagerResolver;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
Expand All @@ -16,33 +16,33 @@
import org.terrakube.api.repository.PatRepository;
import org.terrakube.api.repository.TeamTokenRepository;

import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;

@Slf4j
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
@EnableMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
public class DexWebSecurityAdapter {

@Bean
public SecurityFilterChain filterChain(HttpSecurity http, @Value("${org.terrakube.token.issuer-uri}") String issuerUri, @Value("${org.terrakube.token.pat}") String patJwtSecret, @Value("${org.terrakube.token.internal}") String internalJwtSecret, PatRepository patRepository, TeamTokenRepository teamTokenRepository) throws Exception {
http.cors().and().csrf().ignoringAntMatchers("/remote/tfe/v2/configuration-versions/*", "/tfstate/v1/archive/*/terraform.tfstate", "/tfstate/v1/archive/*/terraform.json.tfstate","/webhook/v1/**").and().authorizeRequests(authz -> {
http.cors().and().csrf().ignoringRequestMatchers("/remote/tfe/v2/configuration-versions/*", "/tfstate/v1/archive/*/terraform.tfstate", "/tfstate/v1/archive/*/terraform.json.tfstate","/webhook/v1/**").and().authorizeRequests(authz -> {
authz
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.antMatchers("/actuator/**").permitAll()
.antMatchers("/error").permitAll()
.antMatchers("/callback/v1/**").permitAll()
.antMatchers("/webhook/v1/**").permitAll()
.antMatchers("/.well-known/terraform.json").permitAll()
.antMatchers("/remote/tfe/v2/ping").permitAll()
.antMatchers(HttpMethod.PUT, "/remote/tfe/v2/configuration-versions/*").permitAll()
.antMatchers(HttpMethod.PUT,"/tfstate/v1/archive/*/terraform.tfstate").permitAll()
.antMatchers(HttpMethod.PUT,"/tfstate/v1/archive/*/terraform.json.tfstate").permitAll()
.antMatchers("/remote/tfe/v2/plans/*/logs").permitAll()
.antMatchers("/remote/tfe/v2/applies/*/logs").permitAll()
.antMatchers("/app/*/*/runs/*").permitAll()
.requestMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.requestMatchers("/actuator/**").permitAll()
.requestMatchers("/error").permitAll()
.requestMatchers("/callback/v1/**").permitAll()
.requestMatchers("/webhook/v1/**").permitAll()
.requestMatchers("/.well-known/terraform.json").permitAll()
.requestMatchers("/remote/tfe/v2/ping").permitAll()
.requestMatchers(HttpMethod.PUT, "/remote/tfe/v2/configuration-versions/*").permitAll()
.requestMatchers(HttpMethod.PUT,"/tfstate/v1/archive/*/terraform.tfstate").permitAll()
.requestMatchers(HttpMethod.PUT,"/tfstate/v1/archive/*/terraform.json.tfstate").permitAll()
.requestMatchers("/remote/tfe/v2/plans/*/logs").permitAll()
.requestMatchers("/remote/tfe/v2/applies/*/logs").permitAll()
.requestMatchers("/app/*/*/runs/*").permitAll()
.anyRequest().authenticated();
}
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.terrakube.api.plugin.security.groups.dex;

import com.nimbusds.jose.shaded.json.JSONArray;
import com.yahoo.elide.core.security.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
Expand All @@ -16,7 +15,7 @@ public class DexGroupServiceImpl implements GroupService {
public boolean isMember(User user, String group) {
JwtAuthenticationToken principal = ((JwtAuthenticationToken) user.getPrincipal());
boolean isMember = false;
for (String groupName : toStringArray((JSONArray) principal.getTokenAttributes().get("groups"))) {
for (String groupName : toStringArray((java.util.ArrayList) principal.getTokenAttributes().get("groups"))) {
if (groupName.equals(group))
isMember = true;
}
Expand All @@ -29,7 +28,7 @@ public boolean isServiceMember(User user, String group) {
JwtAuthenticationToken principal = ((JwtAuthenticationToken) user.getPrincipal());
boolean isMember = principal.getTokenAttributes().get("iss").equals("TerrakubeInternal")? true: false;
if(!isMember) {
for (String groupName : toStringArray((JSONArray) principal.getTokenAttributes().get("groups"))) {
for (String groupName : toStringArray((java.util.ArrayList) principal.getTokenAttributes().get("groups"))) {
if (groupName.equals(group))
isMember = true;
}
Expand All @@ -40,7 +39,7 @@ public boolean isServiceMember(User user, String group) {
return isMember;
}

private String[] toStringArray(JSONArray array) {
private String[] toStringArray(java.util.ArrayList array) {
if (array == null)
return new String[0];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import org.quartz.*;
import org.springframework.stereotype.Service;
import org.terrakube.api.plugin.scheduler.ScheduleJobService;
import org.terrakube.api.plugin.scheduler.module.DeleteStorageCacheJob;
import org.terrakube.api.plugin.scheduler.workspace.DeleteStorageBackendJob;
import org.terrakube.api.repository.ScheduleRepository;
import org.terrakube.api.repository.WorkspaceRepository;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

import java.nio.charset.StandardCharsets;

import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;

import java.io.IOException;
import java.security.Principal;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,6 @@
import org.terrakube.api.rs.workspace.history.archive.ArchiveType;
import org.terrakube.api.rs.workspace.tag.WorkspaceTag;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.text.ParseException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import org.apache.commons.codec.binary.StringUtils;
import org.terrakube.api.plugin.storage.StorageTypeService;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,9 @@
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.terrakube.api.repository.ArchiveRepository;
import org.terrakube.api.repository.HistoryRepository;
import org.terrakube.api.rs.workspace.history.History;
import org.terrakube.api.rs.workspace.history.archive.Archive;

import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.UUID;

@Slf4j
@AllArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.terrakube.api.plugin.streaming;

import liquibase.repackaged.org.apache.commons.text.TextStringBuilder;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.connection.stream.*;
Expand All @@ -9,6 +8,7 @@
import org.terrakube.api.repository.StepRepository;
import org.terrakube.api.rs.job.JobStatus;
import org.terrakube.api.rs.job.step.Step;
import org.apache.commons.text.TextStringBuilder;

import java.util.List;
import java.util.UUID;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package org.terrakube.api.plugin.token.team;

import com.nimbusds.jose.shaded.json.JSONArray;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.security.Keys;
import lombok.extern.slf4j.Slf4j;
import net.minidev.json.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
Expand Down Expand Up @@ -108,7 +108,7 @@ public List<Group> searchToken(JwtAuthenticationToken principalJwt){

public List<String> getCurrentGroups(JwtAuthenticationToken principalJwt) {
Object groups = principalJwt.getTokenAttributes().get("groups");
JSONArray array = (JSONArray) groups;
List array = (java.util.ArrayList) groups;
List<String> list = new ArrayList();
for (int i = 0; i < array.size(); i++) {
list.add(array.get(i).toString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,21 @@
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import org.apache.commons.lang3.function.TriFunction;
import org.springframework.http.ResponseEntity;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import com.datical.liquibase.ext.checks.config.TriFunction;
import com.fasterxml.jackson.core.JsonProcessingException;

import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.Map;
import java.util.function.BiFunction;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
Expand Down
20 changes: 20 additions & 0 deletions api/src/main/java/org/terrakube/api/rs/IdConverter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.terrakube.api.rs;

import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter;

import java.util.UUID;

@Converter
public class IdConverter implements
AttributeConverter<UUID, String> {
@Override
public String convertToDatabaseColumn(UUID uuid) {
return uuid.toString();
}

@Override
public UUID convertToEntityAttribute(String s) {
return UUID.fromString(s);
}
}
Loading

0 comments on commit 3f9589f

Please sign in to comment.