Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 1a81570d authored by Marco Amoia's avatar Marco Amoia
Browse files

Merge branch 'release' into 'main'

release 0.8.0

See merge request !157
parents 56c02850 d746227d
No related branches found
No related tags found
2 merge requests!158Align to main and update version,!157release 0.8.0
Pipeline #240199 passed
Showing
with 282 additions and 48 deletions
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.8.0] - 2024-12-02
### Added
- Added `mandatory` field in `DocumentDTO`
- Added API endpoint HEAD /keypair existsKeypair in `KeyPairExchange`.
- Added `Shedlock` dependency.
- Added `isAuthenticated()` method in `JwtService`.
- Added user `id` to `KeycloakUserDTO`.
- Added `APPLICANT` role constant.
- Added `filename`, `filesize` and `hasContent` to `DocumentDTO`
- Added readonly `mandatory` property to `DocumentDTO`.
- Added sonar configuration.
- Added DTOs and model interface.
- Added `StatusException` constructor overload.
- Use @UtilityClass annotation for utils
- Added Base64 util to calculate length in bytes from string length
### Changed
- Renamed OnboardingRequestFilter field
- `OnboardingRequestService.create()` now takes an `OnboardingRequestDTO`
- Refactored onboarding procedure.
- Reversed comments order.
- Field `KeycloakUserDTO.roles` is not readonly anymore.
- Converted `id` field type from `long` to `UUID` in `MimeTypeDTO`, `OnboardingStatusDTO`, `ParticipantTypeDTO`.
### Fixed
- Fix query param `ParticipantExchange`.
- Fix `isAuthenticated()` method in `JwtService`
- Fix `CreationTimeStamp` and `updateTimestamp` in `DocumentDTO` and `OnboardingRequestDTO`.
- Fix `AuthorizationHeaderInterceptor`
### Removed
- Remove READ_ONLY access from `KeycloakUserDTO.roles`
- Remove old validation interfaces, to be replaced with events.
## [0.7.0] - 2024-11-11
### Added
- Add `participantType` field on `OnboardingRequestDTO`.
- Added Gateway business logging.
- Added `loadPrivateKey()` in `CredentialUtil`.
- Added auxiliary methods to `PemUtil`.
### Changed
- Update http client version to 0.7.0.
- `AlgorithmConfig` is now an interface.
- Adapted logic to use `credential-id` instead of `participant-id`.
- Refactor `OnboardingRequestExchange`.
- When loading keystore, the sign of the private key and of the certificate is now checked.
### Fixed
- Fixed `CSRExchange`.
- Fixed `LoggingFilter`.
- Fixed `TestCertificateUtil`.
- Fixed `AbstractCertificateSignRequest`.
### Removed
- Removed `participantType` enum.
- Removed `CertificateRequest` because now CSR is stored in DB.
PROJECT_VERSION_NUMBER="0.7.0"
PROJECT_VERSION_NUMBER="0.8.0"
......@@ -13,7 +13,7 @@
<groupId>com.aruba.simpl</groupId>
<artifactId>simpl-parent</artifactId>
<version>0.7.0</version>
<version>0.8.0</version>
<packaging>pom</packaging>
<properties>
......@@ -30,8 +30,11 @@
<spotless.version>2.43.0</spotless.version>
<spring-shell.version>3.3.1</spring-shell.version>
<simpl.common.logging.version>1.0.0-SNAPSHOT.39.1a139b97</simpl.common.logging.version>
<simpl.httpclient.version>0.7.0</simpl.httpclient.version>
<simpl.httpclient.version>0.8.0</simpl.httpclient.version>
<nimbus.version>9.41.2</nimbus.version>
<spring-statemachine-core.version>4.0.0</spring-statemachine-core.version>
<tika-core.version>3.0.0-BETA2</tika-core.version>
<shedlock-spring>5.16.0</shedlock-spring>
</properties>
<modules>
......@@ -157,7 +160,26 @@
<artifactId>nimbus-jose-jwt</artifactId>
<version>${nimbus.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.statemachine</groupId>
<artifactId>spring-statemachine-core</artifactId>
<version>${spring-statemachine-core.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>${tika-core.version}</version>
</dependency>
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-spring</artifactId>
<version>${shedlock-spring}</version>
</dependency>
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-provider-jdbc-template</artifactId>
<version>${shedlock-spring}</version>
</dependency>
</dependencies>
</dependencyManagement>
......
......@@ -6,7 +6,7 @@
<parent>
<groupId>com.aruba.simpl</groupId>
<artifactId>simpl-parent</artifactId>
<version>0.7.0</version>
<version>0.8.0</version>
</parent>
<artifactId>simpl-commons-data</artifactId>
......
package com.aruba.simpl.common.model.dto;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class ApproveDTO {
List<UUID> excludeIdentityAttributes = new ArrayList<>();
}
package com.aruba.simpl.common.model.dto;
import com.aruba.simpl.common.model.validators.AddDocumentFromDataOperation;
import com.aruba.simpl.common.model.validators.AddDocumentFromTemplateOperation;
import com.aruba.simpl.common.model.validators.CreateOnboardingRequestOperation;
import com.aruba.simpl.common.model.validators.SetDocumentOperation;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Null;
import com.aruba.simpl.common.model.interfaces.DocumentModel;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.Instant;
import java.util.UUID;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class DocumentDTO {
// @ValidDocumentRequest(groups = RequestAdditionalDocument) // TODO Validation
public class DocumentDTO implements DocumentModel {
// @NotNull(groups = UploadDocument.class)
private UUID id;
@Null(groups = AddDocumentFromDataOperation.class)
@NotNull(groups = AddDocumentFromTemplateOperation.class) private DocumentTemplateDTO documentTemplate;
// @Null(groups = UploadDocument.class)
private DocumentTemplateDTO documentTemplate;
@Null(groups = AddDocumentFromTemplateOperation.class)
@NotBlank(groups = CreateOnboardingRequestOperation.class)
@NotBlank(groups = AddDocumentFromDataOperation.class)
private String mimeType;
// @Null(groups = UploadDocument.class)
private MimeTypeDTO mimeType;
@Null(groups = AddDocumentFromTemplateOperation.class)
@NotBlank(groups = AddDocumentFromDataOperation.class)
private String description;
@NotNull(groups = CreateOnboardingRequestOperation.class) @NotNull(groups = SetDocumentOperation.class) private String content;
// @NotNull(groups = UploadDocument.class)
private String filename;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Long filesize;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Instant creationTimestamp;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Instant updateTimestamp;
// @NotNull(groups = UploadDocument.class)
private String content;
public Boolean getHasContent() {
return filesize != null && filesize > 0;
}
public Boolean getMandatory() {
return getDocumentTemplate() == null || getDocumentTemplate().isMandatory();
}
}
......@@ -23,8 +23,7 @@ public class DocumentTemplateDTO {
@Getter(value = AccessLevel.NONE)
@NotNull private Boolean mandatory;
@NotBlank
private String mimeType;
@NotNull private MimeTypeDTO mimeType;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Instant creationTimestamp;
......
......@@ -3,6 +3,7 @@ package com.aruba.simpl.common.model.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import lombok.ToString;
......@@ -12,6 +13,9 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class KeycloakUserDTO {
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private String id;
@NotBlank
private String username;
......@@ -29,6 +33,5 @@ public class KeycloakUserDTO {
@NotBlank
private String password;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private List<String> roles;
private List<String> roles = new ArrayList<>();
}
package com.aruba.simpl.common.model.dto;
import jakarta.validation.constraints.NotBlank;
import java.util.UUID;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class MimeTypeDTO {
private UUID id;
@NotBlank
private String value;
@NotBlank
private String description;
}
package com.aruba.simpl.common.model.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class OnboardingApplicantDTO {
@NotBlank
private String username;
@NotBlank
private String firstName;
@NotBlank
private String lastName;
@Email(regexp = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$")
@NotBlank
private String email;
@ToString.Exclude
@NotBlank
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password;
}
package com.aruba.simpl.common.model.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotNull;
import java.time.Instant;
import java.util.*;
import lombok.Data;
......@@ -9,21 +11,31 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class OnboardingRequestDTO {
private UUID id;
private String onboardingStatusValue;
private UUID participantId;
private String applicantRepresentative;
private Instant creationTimestamp;
private Instant updateTimestamp;
private Long expirationTimeframe;
private Instant lastParticipantUpdateTimestamp;
private OnboardingStatusDTO status;
@NotNull private OnboardingApplicantDTO applicant;
@NotNull private ParticipantTypeDTO participantType;
@NotNull private String organization;
private List<DocumentDTO> documents;
private List<CommentDTO> comments;
private String participantType;
private String rejectionCause;
private Long expirationTimeframe;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Instant creationTimestamp;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Instant updateTimestamp;
private Instant lastParticipantUpdateTimestamp;
public List<CommentDTO> getComments() {
return Optional.ofNullable(comments).orElse(List.of()).stream()
.sorted(Comparator.comparing(CommentDTO::getCreationTimestamp))
.sorted(Comparator.comparing(CommentDTO::getCreationTimestamp).reversed())
.toList();
}
}
package com.aruba.simpl.common.model.dto;
import com.aruba.simpl.common.model.enums.OnboardingStatusValue;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import java.util.UUID;
import lombok.Data;
import lombok.experimental.Accessors;
@Accessors(chain = true)
@Data
public class OnboardingStatusDTO {
private UUID id;
@NotBlank
@Size(max = 255)
private String label;
@NotBlank
@Size(max = 255)
private OnboardingStatusValue value;
}
package com.aruba.simpl.common.model.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.UUID;
import lombok.Data;
import lombok.experimental.Accessors;
......@@ -8,8 +8,9 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class ParticipantTypeDTO {
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
Long id;
UUID id;
String value;
String label;
}
package com.aruba.simpl.common.model.enums;
public enum OnboardingStatusValue {
IN_PROGRESS,
IN_REVIEW,
REJECTED,
APPROVED
}
package com.aruba.simpl.common.model.interfaces;
public interface DocumentModel {
Long getFilesize();
default Boolean getHasContent() {
return getFilesize() != null && getFilesize() > 0;
}
}
package com.aruba.simpl.common.model.validators;
public interface AddDocumentFromDataOperation {}
package com.aruba.simpl.common.model.validators;
public interface AddDocumentFromTemplateOperation {}
......@@ -2,4 +2,4 @@ package com.aruba.simpl.common.model.validators;
import jakarta.validation.groups.Default;
public interface CreateOnboardingRequestOperation extends Default {}
public interface CreateOnboardingRequestOperation extends Default {} // TODO remove if possible
package com.aruba.simpl.common.model.validators;
public interface SetDocumentOperation {}
package com.aruba.simpl.common.model.validators;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = {ValidDocumentRequestValidator.class})
public @interface ValidDocumentRequest {
String message() default "{com.aruba.simpl.common.model.validators.ValidDocumentRequest.message}";
Class<?>[] groups() default {}; // TODO RequestAdditionalDocument
Class<? extends Payload>[] payload() default {};
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment