diff --git a/persistence-service-v1/keycloak-commons/pom.xml b/persistence-service-v1/keycloak-commons/pom.xml
deleted file mode 100644
index c1180d44a..000000000
--- a/persistence-service-v1/keycloak-commons/pom.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
- persistence-service-v1
- com.iqser.red.service
- 2.0-SNAPSHOT
-
-
- 4.0.0
-
- keycloak-commons
-
-
-
-
- com.iqser.red.commons
- spring-commons
-
-
- com.iqser.red.commons
- logging-commons
-
-
- org.apache.commons
- commons-lang3
- 3.9
-
-
- org.apache.commons
- commons-compress
- 1.21
-
-
- org.apache.commons
- commons-collections4
- 4.4
-
-
-
- com.iqser.red.commons
- metric-commons
-
-
-
- org.keycloak
- keycloak-spring-boot-adapter-core
- ${keycloak.version}
-
-
-
- org.keycloak
- keycloak-spring-security-adapter
- ${keycloak.version}
-
-
-
- org.keycloak
- keycloak-admin-client
- ${keycloak.version}
-
-
-
- com.fasterxml.jackson.dataformat
- jackson-dataformat-xml
- 2.13.4
-
-
-
- com.google.guava
- guava
-
-
-
-
- io.github.openfeign
- feign-core
- provided
-
-
-
- org.springframework
- spring-web
- provided
-
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
-
- org.springframework.boot
- spring-boot-starter-validation
-
-
-
- org.springframework.boot
- spring-boot-starter-data-redis
-
-
-
- com.iqser.red.commons
- jackson-commons
-
-
-
-
- com.iqser.red.commons
- test-commons
- test
-
-
- org.springframework.retry
- spring-retry
-
-
-
-
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/DefaultKeyCloakCommonsConfiguration.java b/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/DefaultKeyCloakCommonsConfiguration.java
deleted file mode 100644
index 4abdbf0fd..000000000
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/DefaultKeyCloakCommonsConfiguration.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.iqser.red.keycloak.commons;
-
-import java.time.Duration;
-
-import org.springframework.boot.autoconfigure.cache.RedisCacheManagerBuilderCustomizer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.cache.RedisCacheConfiguration;
-
-@Configuration
-@ComponentScan
-public class DefaultKeyCloakCommonsConfiguration {
-
- public static final String USERS_CACHE = "users";
-
-
- @Bean
- public RedisCacheManagerBuilderCustomizer redisUserCacheManagerBuilderCustomizer() {
-
- return (builder) -> builder.withCacheConfiguration(USERS_CACHE, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(10)));
- }
-
-}
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/KeyCloakAdminClientService.java b/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/KeyCloakAdminClientService.java
deleted file mode 100644
index cbc5768c4..000000000
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/KeyCloakAdminClientService.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.iqser.red.keycloak.commons;
-
-import java.util.concurrent.TimeUnit;
-
-import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
-import org.jboss.resteasy.client.jaxrs.internal.ResteasyClientBuilderImpl;
-import org.keycloak.OAuth2Constants;
-import org.keycloak.admin.client.Keycloak;
-import org.keycloak.admin.client.KeycloakBuilder;
-import org.springframework.stereotype.Service;
-
-@Service
-public class KeyCloakAdminClientService {
-
- private final Keycloak adminClient;
-
-
- public KeyCloakAdminClientService(KeyCloakSettings settings) {
-
- adminClient = KeycloakBuilder.builder()
- .serverUrl(settings.getServerUrl())
- .realm(settings.getRealm())
- .clientId(settings.getClientId())
- .clientSecret(settings.getClientSecret())
- .grantType(OAuth2Constants.CLIENT_CREDENTIALS)
- .resteasyClient(new ResteasyClientBuilderImpl().connectionTTL(2, TimeUnit.SECONDS)
- .hostnameVerification(ResteasyClientBuilder.HostnameVerificationPolicy.ANY)
- .connectionPoolSize(settings.getConnectionPoolSize())
- .disableTrustManager()
- .build())
- .build();
-
- }
-
-
- public Keycloak getAdminClient() {
-
- return adminClient;
- }
-
-}
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/KeyCloakSettings.java b/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/KeyCloakSettings.java
deleted file mode 100644
index 241a9cd3c..000000000
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/KeyCloakSettings.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.iqser.red.keycloak.commons;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-import lombok.Data;
-
-@Data
-@ConfigurationProperties("commons.keycloak")
-public class KeyCloakSettings {
-
- private String serverUrl;
- private String realm;
- private String applicationClientId;
- private String clientId;
- private String clientSecret;
- private String issuer;
- private String rolePrefix = "RED_";
- private int connectionPoolSize = 10;
- private boolean scmEnabled;
-
-}
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/KeycloakSecurity.java b/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/KeycloakSecurity.java
deleted file mode 100644
index c82653400..000000000
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/KeycloakSecurity.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.iqser.red.keycloak.commons;
-
-import java.util.Optional;
-import java.util.function.Function;
-
-import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
-import org.keycloak.representations.AccessToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-import lombok.experimental.UtilityClass;
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * Collection of helpful functions to easily access information about an authenticated user.
- */
-@Slf4j
-@UtilityClass
-public class KeycloakSecurity {
-
- /**
- * Determines the unique identifier for the currently logged in user.
- *
- * @return The unique user identifier. Never {@code null}.
- */
- public String getUserId() {
-
- Authentication auth = SecurityContextHolder.getContext().getAuthentication();
- if (auth == null) {
- return "anonymousUser";
- }
- return auth.getName();
- }
-
-
- public Optional getRealm(){
- return getToken(t -> {
- String issuer = t.getIssuer();
- String realm = issuer.substring(issuer.lastIndexOf('/') + 1);
- log.info(realm);
- return realm;
- });
- }
-
-
- public Optional getToken(Function function) {
- Authentication auth = SecurityContextHolder.getContext().getAuthentication();
- if (!(auth instanceof KeycloakAuthenticationToken)) {
- return Optional.empty();
- }
-
- KeycloakAuthenticationToken keycloakAuth = (KeycloakAuthenticationToken) auth;
- return Optional.ofNullable(function.apply(keycloakAuth.getAccount().getKeycloakSecurityContext().getToken()));
- }
-
-}
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/KeycloakSecurityService.java b/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/KeycloakSecurityService.java
deleted file mode 100644
index 17580dc7e..000000000
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/KeycloakSecurityService.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.iqser.red.keycloak.commons;
-
-import org.springframework.stereotype.Service;
-
-@Service
-public class KeycloakSecurityService {
-
- /**
- * Determines the unique identifier for the currently logged in user.
- *
- * @return The unique user identifier. Never {@code null}.
- */
- public String getUserId() {
-
- return KeycloakSecurity.getUserId();
- }
-
-}
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/RealmService.java b/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/RealmService.java
deleted file mode 100644
index b00d46c63..000000000
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/RealmService.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.iqser.red.keycloak.commons;
-
-import org.keycloak.admin.client.resource.RealmResource;
-import org.springframework.stereotype.Service;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Service
-@RequiredArgsConstructor
-@Slf4j
-public class RealmService {
-
- private final KeyCloakAdminClientService keycloak;
-
- public RealmResource realm(String tenantId) {
-
- return keycloak.getAdminClient().realm(tenantId);
- }
-
-}
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/UserListingService.java b/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/UserListingService.java
deleted file mode 100644
index 7cfa830ce..000000000
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/UserListingService.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.iqser.red.keycloak.commons;
-
-import static com.iqser.red.keycloak.commons.DefaultKeyCloakCommonsConfiguration.USERS_CACHE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_ADMIN_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_MANAGER_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_USER_ADMIN_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_USER_ROLE;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.keycloak.representations.idm.UserRepresentation;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.retry.support.RetryTemplate;
-import org.springframework.stereotype.Service;
-
-import com.iqser.red.keycloak.commons.model.User;
-import com.iqser.red.keycloak.commons.roles.ApplicationRoles;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class UserListingService {
-
- private final RealmService realmService;
- private final RetryTemplate retryTemplate = RetryTemplate.builder().maxAttempts(3).exponentialBackoff(1000, 2, 5000).build();
-
-
- @Cacheable(value = USERS_CACHE, key = "#tenantId")
- public List getAllUsers(String tenantId) {
-
- return retryTemplate.execute(context -> {
-
- var realm = realmService.realm(tenantId);
- List allUsers = realm.users().search(null, 0, 500);
-
- Map> usersByRole = new HashMap<>();
- if(!allUsers.isEmpty()) {
- var realmRoles = realm.roles().list().stream().map(r -> r.getName().toUpperCase()).collect(Collectors.toSet());
- for (var role : ApplicationRoles.ROLE_DATA.keySet()) {
- if(realmRoles.contains(role)) {
- Set users = realm.roles().get(role).getRoleUserMembers(0, 500);
- usersByRole.put(role, users.stream().map(UserRepresentation::getId).collect(Collectors.toSet()));
- }
- }
- }
-
- return compactUsers(allUsers, usersByRole);
-
- });
-
- }
-
-
- private List compactUsers(List allUsers, Map> usersByRole) {
-
- List users = new ArrayList<>();
-
- for (var userRepresentation : allUsers) {
- var user = convertBasicUser(userRepresentation);
- for (var entry : usersByRole.entrySet()) {
- if (entry.getValue().contains(user.getUserId())) {
- user.getRoles().add(entry.getKey());
- }
- }
- users.add(user);
- }
-
- users.forEach(user -> {
- if (user.getRoles().contains(RED_MANAGER_ROLE)) {
- user.getRoles().add(RED_USER_ROLE);
- }
- if (user.getRoles().contains(RED_ADMIN_ROLE)) {
- user.getRoles().add(RED_USER_ADMIN_ROLE);
- }
- });
-
- return users;
- }
-
-
- public User convertBasicUser(UserRepresentation userRepresentation) {
-
- return User.builder()
- .email(userRepresentation.getEmail())
- .username(userRepresentation.getUsername())
- .firstName(userRepresentation.getFirstName())
- .lastName(userRepresentation.getLastName())
- .userId(userRepresentation.getId())
- .isActive(userRepresentation.isEnabled())
- .build();
- }
-
-}
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/roles/ApplicationRoles.java b/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/roles/ApplicationRoles.java
deleted file mode 100644
index e07164db5..000000000
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/roles/ApplicationRoles.java
+++ /dev/null
@@ -1,259 +0,0 @@
-package com.iqser.red.keycloak.commons.roles;
-
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ADD_COMMENT;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ADD_DICTIONARY_ENTRY;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ADD_DOSSIER_DICTIONARY_ENTRY;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ADD_UPDATE_DICTIONARY_TYPE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ADD_UPDATE_DOSSIER;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ADD_UPDATE_DOSSIER_DICTIONARY_TYPE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ARCHIVE_DOSSIER;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.CONVERT_HIGHLIGHTS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.CREATE_TENANT;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_COMMENT;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_DICTIONARY_ENTRY;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_DICTIONARY_TYPE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_DOSSIER;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_DOSSIER_DICTIONARY_ENTRY;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_DOSSIER_DICTIONARY_TYPE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_FILE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_HIGHLIGHTS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_IMPORTED_REDACTIONS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_MANUAL_REDACTION;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_REPORT_TEMPLATE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DEPLOYMENT_INFO;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DOWNLOAD_ANNOTATED_FILE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DOWNLOAD_ORIGINAL_FILE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DOWNLOAD_REDACTED_FILE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DOWNLOAD_REDACTION_PREVIEW_FILE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DOWNLOAD_REPORT_TEMPLATE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DO_MANUAL_REDACTION;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.EXCLUDE_INCLUDE_FILE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.EXCLUDE_INCLUDE_PAGES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.GET_HIGHLIGHTS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.GET_REPORT_TEMPLATES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.GET_RSS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.GET_TENANTS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.MANAGE_ACL_PERMISSIONS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.MANAGE_USER_PREFERENCES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.MANAGE_VIEWED_PAGES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.PROCESS_DOWNLOAD;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.PROCESS_MANUAL_REDACTION_REQUEST;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.PROCESS_TEXT_HIGHLIGHTS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_ALL_USERS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_APP_CONFIG;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_COLORS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DICTIONARY_TYPES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DIGITAL_SIGNATURE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER_ATTRIBUTES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER_ATTRIBUTES_CONFIG;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER_STATUS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER_TEMPLATES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOWNLOAD_STATUS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_FILE_ATTRIBUTES_CONFIG;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_FILE_STATUS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_GENERAL_CONFIGURATION;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_LEGAL_BASIS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_LICENSE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_LICENSE_REPORT;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_MANUAL_REDACTIONS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_NOTIFICATIONS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_REDACTION_LOG;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_RULES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_SMTP_CONFIGURATION;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_USERS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_VERSIONS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_WATERMARK;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.REANALYZE_DOSSIER;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.REANALYZE_FILE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.REINDEX;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.REQUEST_MANUAL_REDACTION;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ROTATE_PAGE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.SEARCH;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.SEARCH_AUDIT_LOG;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.SET_REVIEWER;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.SET_STATUS_APPROVED;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.SET_STATUS_UNDER_APPROVAL;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.UNARCHIVE_DOSSIER;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.UPDATE_LICENSE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.UPDATE_MY_PROFILE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.UPDATE_NOTIFICATIONS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.UPLOAD_FILE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.UPLOAD_REPORT_TEMPLATE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_APP_CONFIG;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_COLORS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_DIGITAL_SIGNATURE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_DOSSIER_ATTRIBUTES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_DOSSIER_ATTRIBUTES_CONFIG;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_DOSSIER_STATUS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_DOSSIER_TEMPLATES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_FILE_ATTRIBUTES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_FILE_ATTRIBUTES_CONFIG;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_GENERAL_CONFIGURATION;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_LEGAL_BASIS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_RULES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_SMTP_CONFIGURATION;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_USERS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_WATERMARK;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-import com.google.common.collect.Sets;
-
-public final class ApplicationRoles {
-
- public static final String RED_USER_ROLE = "RED_USER";
- public static final String RED_MANAGER_ROLE = "RED_MANAGER";
- public static final String RED_ADMIN_ROLE = "RED_ADMIN";
- public static final String RED_USER_ADMIN_ROLE = "RED_USER_ADMIN";
-
- public static final Set RED_ROLES = Sets.newHashSet(RED_USER_ROLE, RED_MANAGER_ROLE, RED_ADMIN_ROLE, RED_USER_ADMIN_ROLE);
-
- public static final Set UNMAPPED_ACTION_ROLES = Sets.newHashSet(UNARCHIVE_DOSSIER, UPDATE_LICENSE, GET_RSS);
-
- public static final Set RED_USER_ACTION_ROLES = Sets.newHashSet(ADD_COMMENT,
- READ_LICENSE,
- READ_APP_CONFIG,
- READ_DOSSIER_STATUS,
- ADD_DOSSIER_DICTIONARY_ENTRY,
- DO_MANUAL_REDACTION,
- ADD_UPDATE_DOSSIER_DICTIONARY_TYPE,
- DELETE_COMMENT,
- DELETE_DOSSIER_DICTIONARY_ENTRY,
- DELETE_DOSSIER_DICTIONARY_TYPE,
- DELETE_FILE,
- DELETE_MANUAL_REDACTION,
- DOWNLOAD_ANNOTATED_FILE,
- DOWNLOAD_ORIGINAL_FILE,
- DOWNLOAD_REDACTED_FILE,
- DOWNLOAD_REDACTION_PREVIEW_FILE,
- DOWNLOAD_REPORT_TEMPLATE,
- EXCLUDE_INCLUDE_FILE,
- EXCLUDE_INCLUDE_PAGES,
- GET_REPORT_TEMPLATES,
- MANAGE_USER_PREFERENCES,
- MANAGE_VIEWED_PAGES,
- PROCESS_DOWNLOAD,
- PROCESS_MANUAL_REDACTION_REQUEST,
- READ_COLORS,
- READ_DICTIONARY_TYPES,
- READ_DIGITAL_SIGNATURE,
- READ_DOSSIER,
- READ_DOSSIER_ATTRIBUTES,
- READ_DOSSIER_ATTRIBUTES_CONFIG,
- READ_DOSSIER_TEMPLATES,
- READ_DOWNLOAD_STATUS,
- READ_FILE_ATTRIBUTES_CONFIG,
- READ_FILE_STATUS,
- READ_GENERAL_CONFIGURATION,
- READ_LEGAL_BASIS,
- READ_MANUAL_REDACTIONS,
- READ_NOTIFICATIONS,
- READ_REDACTION_LOG,
- READ_RULES,
- READ_USERS,
- READ_VERSIONS,
- READ_WATERMARK,
- REANALYZE_DOSSIER,
- REANALYZE_FILE,
- REQUEST_MANUAL_REDACTION,
- ROTATE_PAGE,
- SEARCH,
- SEARCH_AUDIT_LOG,
- SET_REVIEWER,
- SET_STATUS_APPROVED,
- SET_STATUS_UNDER_APPROVAL,
- UPDATE_MY_PROFILE,
- UPDATE_NOTIFICATIONS,
- UPLOAD_FILE,
- WRITE_FILE_ATTRIBUTES,
- PROCESS_TEXT_HIGHLIGHTS,
- GET_HIGHLIGHTS,
- CONVERT_HIGHLIGHTS,
- DELETE_HIGHLIGHTS,
- DELETE_IMPORTED_REDACTIONS);
-
- public static final Set RED_ADMIN_ACTION_ROLES = Sets.newHashSet(ADD_DICTIONARY_ENTRY,
- ADD_UPDATE_DICTIONARY_TYPE,
- WRITE_DOSSIER_STATUS,
- READ_DOSSIER_STATUS,
- DELETE_DICTIONARY_ENTRY,
- DELETE_DICTIONARY_TYPE,
- DELETE_REPORT_TEMPLATE,
- DOWNLOAD_REPORT_TEMPLATE,
- GET_REPORT_TEMPLATES,
- MANAGE_USER_PREFERENCES,
- READ_COLORS,
- READ_DICTIONARY_TYPES,
- READ_DIGITAL_SIGNATURE,
- READ_DOSSIER_ATTRIBUTES,
- READ_DOSSIER_ATTRIBUTES_CONFIG,
- READ_DOSSIER_TEMPLATES,
- READ_FILE_ATTRIBUTES_CONFIG,
- READ_LEGAL_BASIS,
- READ_LICENSE_REPORT,
- READ_NOTIFICATIONS,
- READ_RULES,
- READ_SMTP_CONFIGURATION,
- READ_VERSIONS,
- READ_WATERMARK,
- REINDEX,
- SEARCH_AUDIT_LOG,
- UPDATE_NOTIFICATIONS,
- UPLOAD_REPORT_TEMPLATE,
- WRITE_COLORS,
- WRITE_DIGITAL_SIGNATURE,
- WRITE_DOSSIER_ATTRIBUTES_CONFIG,
- WRITE_DOSSIER_TEMPLATES,
- WRITE_FILE_ATTRIBUTES_CONFIG,
- WRITE_GENERAL_CONFIGURATION,
- WRITE_LEGAL_BASIS,
- WRITE_RULES,
- WRITE_SMTP_CONFIGURATION,
- WRITE_WATERMARK,
- WRITE_APP_CONFIG,
- MANAGE_ACL_PERMISSIONS,
- CREATE_TENANT,
- GET_TENANTS,
- DEPLOYMENT_INFO);
-
- public static final Set RED_MANAGER_ACTION_ROLES = Sets.newHashSet(ADD_UPDATE_DOSSIER, ARCHIVE_DOSSIER, DELETE_DOSSIER, WRITE_DOSSIER_ATTRIBUTES);
-
- public static final Set RED_USER_ADMIN_ACTION_ROLES = Sets.newHashSet(MANAGE_USER_PREFERENCES,
- READ_ALL_USERS,
- READ_DOSSIER,
- READ_APP_CONFIG,
- READ_GENERAL_CONFIGURATION,
- READ_GENERAL_CONFIGURATION,
- READ_NOTIFICATIONS,
- READ_USERS,
- UPDATE_MY_PROFILE,
- UPDATE_NOTIFICATIONS,
- WRITE_USERS,
- READ_LICENSE);
-
- public static final Map> ROLE_DATA = Map.of(RED_USER_ROLE,
- RED_USER_ACTION_ROLES,
- RED_MANAGER_ROLE,
- RED_MANAGER_ACTION_ROLES,
- RED_ADMIN_ROLE,
- RED_ADMIN_ACTION_ROLES,
- RED_USER_ADMIN_ROLE,
- RED_USER_ADMIN_ACTION_ROLES);
-
-
- private ApplicationRoles() {}
-
-
- public static void validateRoles(Collection roles) {
-
- for (String role : roles) {
- if (!ROLE_DATA.containsKey(role)) {
- throw new IllegalArgumentException("Invalid Role: " + role);
- }
- }
- }
-
-}
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/security/RedBearerTokenRequestAuthenticator.java b/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/security/RedBearerTokenRequestAuthenticator.java
deleted file mode 100644
index d233efc12..000000000
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/security/RedBearerTokenRequestAuthenticator.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.iqser.red.keycloak.commons.security;
-
-import javax.security.cert.X509Certificate;
-
-import org.keycloak.adapters.BearerTokenRequestAuthenticator;
-import org.keycloak.adapters.KeycloakDeployment;
-import org.keycloak.adapters.OIDCAuthenticationError;
-import org.keycloak.adapters.spi.AuthOutcome;
-import org.keycloak.adapters.spi.HttpFacade;
-import org.keycloak.common.VerificationException;
-import org.keycloak.jose.jws.JWSInput;
-import org.keycloak.jose.jws.JWSInputException;
-
-public class RedBearerTokenRequestAuthenticator extends BearerTokenRequestAuthenticator {
-
- private final String issuerUrl;
-
-
- public RedBearerTokenRequestAuthenticator(KeycloakDeployment deployment, String issuerUrl) {
-
- super(deployment);
- this.issuerUrl = issuerUrl;
- }
-
-
- // This is the exact method copied from BearerTokenRequestAuthenticator but with a custom Token Verifier.
- @Override
- protected AuthOutcome authenticateToken(HttpFacade exchange, String tokenString) {
-
- this.log.debug("Verifying access_token");
- if (this.log.isTraceEnabled()) {
- try {
- JWSInput jwsInput = new JWSInput(tokenString);
- String wireString = jwsInput.getWireString();
- this.log.tracef("\taccess_token: %s", wireString.substring(0, wireString.lastIndexOf(".")) + ".signature");
- } catch (JWSInputException var8) {
- this.log.debugf(var8, "Failed to parse access_token: %s", tokenString);
- }
- }
-
- try {
- this.token = RedTokenVerifier.verifyToken(tokenString, this.deployment, issuerUrl);
- } catch (VerificationException var7) {
- this.log.debug("Failed to verify token");
- this.challenge = this.challengeResponse(exchange, OIDCAuthenticationError.Reason.INVALID_TOKEN, "invalid_token", var7.getMessage());
- return AuthOutcome.FAILED;
- }
-
- if (this.token.getIssuedAt() < this.deployment.getNotBefore()) {
- this.log.debug("Stale token");
- this.challenge = this.challengeResponse(exchange, OIDCAuthenticationError.Reason.STALE_TOKEN, "invalid_token", "Stale token");
- return AuthOutcome.FAILED;
- } else {
- boolean verifyCaller = false;
- if (this.deployment.isUseResourceRoleMappings()) {
- verifyCaller = this.token.isVerifyCaller(this.deployment.getResourceName());
- } else {
- verifyCaller = this.token.isVerifyCaller();
- }
-
- this.surrogate = null;
- if (verifyCaller) {
- if (this.token.getTrustedCertificates() == null || this.token.getTrustedCertificates().isEmpty()) {
- this.log.warn("No trusted certificates in token");
- this.challenge = this.clientCertChallenge();
- return AuthOutcome.FAILED;
- }
-
- X509Certificate[] chain = new X509Certificate[0];
-
- try {
- chain = exchange.getCertificateChain();
- } catch (Exception var6) {
- log.debug(var6);
- }
-
- if (chain == null || chain.length == 0) {
- this.log.warn("No certificates provided by undertow to verify the caller");
- this.challenge = this.clientCertChallenge();
- return AuthOutcome.FAILED;
- }
-
- this.surrogate = chain[0].getSubjectDN().getName();
- }
-
- this.log.debug("successful authorized");
- return AuthOutcome.AUTHENTICATED;
- }
- }
-
-}
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/security/RedQueryParameterTokenRequestAuthenticator.java b/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/security/RedQueryParameterTokenRequestAuthenticator.java
deleted file mode 100644
index cc5c37e27..000000000
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/security/RedQueryParameterTokenRequestAuthenticator.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.iqser.red.keycloak.commons.security;
-
-import javax.security.cert.X509Certificate;
-
-import org.keycloak.adapters.KeycloakDeployment;
-import org.keycloak.adapters.OIDCAuthenticationError;
-import org.keycloak.adapters.QueryParameterTokenRequestAuthenticator;
-import org.keycloak.adapters.spi.AuthOutcome;
-import org.keycloak.adapters.spi.HttpFacade;
-import org.keycloak.common.VerificationException;
-import org.keycloak.jose.jws.JWSInput;
-import org.keycloak.jose.jws.JWSInputException;
-
-public class RedQueryParameterTokenRequestAuthenticator extends QueryParameterTokenRequestAuthenticator {
-
- private final String issuerUrl;
-
-
- public RedQueryParameterTokenRequestAuthenticator(KeycloakDeployment deployment, String issuerUrl) {
-
- super(deployment);
- this.issuerUrl = issuerUrl;
- }
-
-
- // This is the exact method copied from BearerTokenRequestAuthenticator but with a custom Token Verifier.
- @Override
- protected AuthOutcome authenticateToken(HttpFacade exchange, String tokenString) {
-
- this.log.debug("Verifying access_token");
- if (this.log.isTraceEnabled()) {
- try {
- JWSInput jwsInput = new JWSInput(tokenString);
- String wireString = jwsInput.getWireString();
- this.log.tracef("\taccess_token: %s", wireString.substring(0, wireString.lastIndexOf(".")) + ".signature");
- } catch (JWSInputException var8) {
- this.log.debugf(var8, "Failed to parse access_token: %s", tokenString);
- }
- }
-
- try {
- this.token = RedTokenVerifier.verifyToken(tokenString, this.deployment, issuerUrl);
- } catch (VerificationException var7) {
- this.log.debug("Failed to verify token");
- this.challenge = this.challengeResponse(exchange, OIDCAuthenticationError.Reason.INVALID_TOKEN, "invalid_token", var7.getMessage());
- return AuthOutcome.FAILED;
- }
-
- if (this.token.getIssuedAt() < this.deployment.getNotBefore()) {
- this.log.debug("Stale token");
- this.challenge = this.challengeResponse(exchange, OIDCAuthenticationError.Reason.STALE_TOKEN, "invalid_token", "Stale token");
- return AuthOutcome.FAILED;
- } else {
- boolean verifyCaller = false;
- if (this.deployment.isUseResourceRoleMappings()) {
- verifyCaller = this.token.isVerifyCaller(this.deployment.getResourceName());
- } else {
- verifyCaller = this.token.isVerifyCaller();
- }
-
- this.surrogate = null;
- if (verifyCaller) {
- if (this.token.getTrustedCertificates() == null || this.token.getTrustedCertificates().isEmpty()) {
- this.log.warn("No trusted certificates in token");
- this.challenge = this.clientCertChallenge();
- return AuthOutcome.FAILED;
- }
-
- X509Certificate[] chain = new X509Certificate[0];
-
- try {
- chain = exchange.getCertificateChain();
- } catch (Exception var6) {
- log.debug(var6);
- }
-
- if (chain == null || chain.length == 0) {
- this.log.warn("No certificates provided by undertow to verify the caller");
- this.challenge = this.clientCertChallenge();
- return AuthOutcome.FAILED;
- }
-
- this.surrogate = chain[0].getSubjectDN().getName();
- }
-
- this.log.debug("successful authorized");
- return AuthOutcome.AUTHENTICATED;
- }
- }
-
-}
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/security/RedTokenVerifier.java b/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/security/RedTokenVerifier.java
deleted file mode 100644
index 4c8697306..000000000
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/security/RedTokenVerifier.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.iqser.red.keycloak.commons.security;
-
-import static org.keycloak.TokenVerifier.IS_ACTIVE;
-import static org.keycloak.TokenVerifier.SUBJECT_EXISTS_CHECK;
-
-import java.security.PublicKey;
-
-import org.apache.commons.lang3.StringUtils;
-import org.keycloak.TokenVerifier;
-import org.keycloak.adapters.KeycloakDeployment;
-import org.keycloak.adapters.rotation.PublicKeyLocator;
-import org.keycloak.common.VerificationException;
-import org.keycloak.representations.AccessToken;
-
-import lombok.experimental.UtilityClass;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@UtilityClass
-public class RedTokenVerifier {
-
- public AccessToken verifyToken(String tokenString, KeycloakDeployment deployment, String issuerUrl) throws VerificationException {
-
- TokenVerifier tokenVerifier = createVerifier(tokenString, deployment, issuerUrl);
- if (deployment.isVerifyTokenAudience()) {
- tokenVerifier.audience(deployment.getResourceName());
- }
-
- return tokenVerifier.verify().getToken();
- }
-
-
- private TokenVerifier createVerifier(String tokenString, KeycloakDeployment deployment, String issuerUrl) throws VerificationException {
-
- TokenVerifier tokenVerifier = TokenVerifier.create(tokenString, AccessToken.class)
- .withChecks(SUBJECT_EXISTS_CHECK, IS_ACTIVE, new TokenVerifier.TokenTypeCheck("bearer"), new IssuerCheck(issuerUrl));
-
- String kid = tokenVerifier.getHeader().getKeyId();
- PublicKey publicKey = getPublicKey(kid, deployment);
- tokenVerifier.publicKey(publicKey);
- return tokenVerifier;
- }
-
-
- private PublicKey getPublicKey(String kid, KeycloakDeployment deployment) throws VerificationException {
-
- PublicKeyLocator pkLocator = deployment.getPublicKeyLocator();
- PublicKey publicKey = pkLocator.getPublicKey(kid, deployment);
- if (publicKey == null) {
- log.debug("Didn't find publicKey for kid: {}", kid);
- throw new VerificationException("Didn't find publicKey for specified kid");
- } else {
- return publicKey;
- }
- }
-
-
- @Slf4j
- public static class IssuerCheck implements TokenVerifier.Predicate {
-
- private final String issuerUrl;
-
-
- public IssuerCheck(String issuerUrl) {
-
- this.issuerUrl = issuerUrl;
- }
-
-
- public boolean test(AccessToken t) throws VerificationException {
-
- if (StringUtils.isEmpty(this.issuerUrl)) {
- log.debug("Issuer Not Set, skipping verification");
- return true;
- } else if (!this.issuerUrl.equalsIgnoreCase(t.getIssuer())) {
- var message = "Invalid token issuer. Expected '" + this.issuerUrl + "', but was '" + t.getIssuer() + "'";
- log.debug(message);
- throw new VerificationException(message);
- } else {
- log.debug("Issuer Verification Successful");
- return true;
- }
- }
-
- }
-
-}
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/security/SecuredKeyCloakConfiguration.java b/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/security/SecuredKeyCloakConfiguration.java
deleted file mode 100644
index de5dd6133..000000000
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/security/SecuredKeyCloakConfiguration.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.iqser.red.keycloak.commons.security;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.keycloak.adapters.AdapterTokenStore;
-import org.keycloak.adapters.BearerTokenRequestAuthenticator;
-import org.keycloak.adapters.KeycloakDeployment;
-import org.keycloak.adapters.QueryParameterTokenRequestAuthenticator;
-import org.keycloak.adapters.RequestAuthenticator;
-import org.keycloak.adapters.spi.HttpFacade;
-import org.keycloak.adapters.springboot.KeycloakBaseSpringBootConfiguration;
-import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
-import org.keycloak.adapters.springsecurity.KeycloakConfiguration;
-import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider;
-import org.keycloak.adapters.springsecurity.authentication.SpringSecurityRequestAuthenticator;
-import org.keycloak.adapters.springsecurity.authentication.SpringSecurityRequestAuthenticatorFactory;
-import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
-import org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.Primary;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.builders.WebSecurity;
-import org.springframework.security.config.http.SessionCreationPolicy;
-import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
-import org.springframework.security.web.authentication.HttpStatusEntryPoint;
-import org.springframework.security.web.authentication.session.NullAuthenticatedSessionStrategy;
-import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;
-
-import com.iqser.red.keycloak.commons.KeyCloakSettings;
-
-import lombok.RequiredArgsConstructor;
-
-@ConditionalOnProperty(value = "keycloak.enabled", havingValue = "true")
-@RequiredArgsConstructor
-@KeycloakConfiguration
-@EnableConfigurationProperties(KeyCloakSettings.class)
-@Import(KeycloakSpringBootConfigResolver.class)
-public class SecuredKeyCloakConfiguration extends KeycloakWebSecurityConfigurerAdapter {
-
- private final KeyCloakSettings keyCloakSettings;
-
-
- @Bean
- public KeycloakBaseSpringBootConfiguration keycloakBaseSpringBootConfiguration() {
-
- return new KeycloakBaseSpringBootConfiguration();
- }
-
-
- // Submits the KeycloakAuthenticationProvider to the AuthenticationManager
- @Autowired
- public void configureGlobal(AuthenticationManagerBuilder auth) {
-
- KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
- SimpleAuthorityMapper simpleAuthorityMapper = new SimpleAuthorityMapper();
- simpleAuthorityMapper.setPrefix("");
- keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(simpleAuthorityMapper);
- auth.authenticationProvider(keycloakAuthenticationProvider);
- }
-
-
- @Override
- public void configure(WebSecurity web) {
-
- web.ignoring()
- .antMatchers("/actuator/health/**",
- "/redaction-gateway-v1/async/download/with-ott/**",
- "/redaction-gateway-v1/docs/**",
- "/redaction-gateway-v1/docs",
- "/redaction-gateway-v1/tenants/simple",
- "/redaction-gateway-v1",
- "/internal-api/**");
-
- web.ignoring().antMatchers(HttpMethod.OPTIONS, "/**");
- }
-
-
- @Bean
- @Primary
- @Override
- protected KeycloakAuthenticationProcessingFilter keycloakAuthenticationProcessingFilter() throws Exception {
-
- KeycloakAuthenticationProcessingFilter filter = new KeycloakAuthenticationProcessingFilter(authenticationManagerBean());
-
- filter.setSessionAuthenticationStrategy(sessionAuthenticationStrategy());
- filter.setRequestAuthenticatorFactory(new SpringSecurityRequestAuthenticatorFactory() {
-
- @Override
- public RequestAuthenticator createRequestAuthenticator(HttpFacade facade,
- HttpServletRequest request,
- KeycloakDeployment deployment,
- AdapterTokenStore tokenStore,
- int sslRedirectPort) {
-
- return new SpringSecurityRequestAuthenticator(facade, request, deployment, tokenStore, sslRedirectPort) {
-
- @Override
- protected BearerTokenRequestAuthenticator createBearerTokenAuthenticator() {
-
- return new RedBearerTokenRequestAuthenticator(deployment, keyCloakSettings.getIssuer());
- }
-
-
- @Override
- protected QueryParameterTokenRequestAuthenticator createQueryParameterTokenRequestAuthenticator() {
-
- return new RedQueryParameterTokenRequestAuthenticator(deployment, keyCloakSettings.getIssuer());
- }
- };
- }
- });
-
- return filter;
- }
-
-
- // Specifies the session authentication strategy
- @Bean
- @Override
- protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
-
- return new NullAuthenticatedSessionStrategy();
- }
-
-
- @Override
- protected void configure(HttpSecurity http) throws Exception {
-
- super.configure(http);
-
- http.anonymous().disable();
-
- http.authorizeRequests().anyRequest().authenticated();
-
- http.csrf().disable();
-
- http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
-
- http.exceptionHandling().authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED));
-
- }
-
-}
diff --git a/persistence-service-v1/keycloak-commons/src/test/java/com/iqser/red/keycloak/commons/IdentityTest.java b/persistence-service-v1/keycloak-commons/src/test/java/com/iqser/red/keycloak/commons/IdentityTest.java
deleted file mode 100644
index fbb8a0d17..000000000
--- a/persistence-service-v1/keycloak-commons/src/test/java/com/iqser/red/keycloak/commons/IdentityTest.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.iqser.red.keycloak.commons;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.jupiter.api.Test;
-
-public class IdentityTest {
-
- @Test
- public void mockTest() {
-
- int i = 1;
- assertThat(i).isEqualTo(1);
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/pom.xml b/persistence-service-v1/persistence-service-external-api-impl-v1/pom.xml
index 1b35b5eed..9ee0c3019 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/pom.xml
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/pom.xml
@@ -24,10 +24,6 @@
${project.version}
-
- org.springdoc
- springdoc-openapi-ui
-
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/PersistenceServiceExternalApiConfiguration.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/PersistenceServiceExternalApiConfiguration.java
index f95d1fd57..b766c71fb 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/PersistenceServiceExternalApiConfiguration.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/PersistenceServiceExternalApiConfiguration.java
@@ -1,27 +1,11 @@
package com.iqser.red.persistence.service.v1.external.api.impl;
-import org.keycloak.adapters.KeycloakConfigResolver;
-import org.keycloak.adapters.springboot.KeycloakSpringBootProperties;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.iqser.red.persistence.service.v1.external.api.impl.multitenacy.HeaderBasedKeycloakRealmResolver;
@Configuration
@ComponentScan
public class PersistenceServiceExternalApiConfiguration {
- @Bean
- public KeycloakConfigResolver keycloakConfigResolver(ObjectMapper objectMapper) {
- return new HeaderBasedKeycloakRealmResolver(objectMapper);
- }
-
- @Autowired
- public void setKeycloakSpringBootProperties(final KeycloakSpringBootProperties keycloakProperties) {
- HeaderBasedKeycloakRealmResolver.setAdapterConfig(keycloakProperties);
- }
-
}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ApplicationConfigurationController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ApplicationConfigurationController.java
index 5fa62e395..46fa872cc 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ApplicationConfigurationController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ApplicationConfigurationController.java
@@ -1,9 +1,8 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_APP_CONFIG;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_APP_CONFIG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_APP_CONFIG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_APP_CONFIG;
-import javax.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestBody;
@@ -15,6 +14,7 @@ import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConv
import com.iqser.red.service.persistence.service.v1.api.external.resource.ApplicationConfigurationResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig;
+import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/AuditController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/AuditController.java
index b1674e124..fc5c4148b 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/AuditController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/AuditController.java
@@ -1,6 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.SEARCH_AUDIT_LOG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.SEARCH_AUDIT_LOG;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import java.util.List;
@@ -9,7 +9,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.external.resource.AuditResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/CustomPermissionMappingController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/CustomPermissionMappingController.java
index e136ef769..7501e0732 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/CustomPermissionMappingController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/CustomPermissionMappingController.java
@@ -1,6 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.MANAGE_ACL_PERMISSIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.MANAGE_ACL_PERMISSIONS;
import java.util.List;
import java.util.Set;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java
index 9bfbb9a1e..7726f2c90 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java
@@ -10,7 +10,6 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-import javax.validation.Valid;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
@@ -24,7 +23,7 @@ import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
@@ -44,6 +43,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type;
import feign.FeignException;
+import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DigitalSignatureController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DigitalSignatureController.java
index 305b628da..69fdf691b 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DigitalSignatureController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DigitalSignatureController.java
@@ -1,7 +1,7 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DIGITAL_SIGNATURE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_DIGITAL_SIGNATURE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DIGITAL_SIGNATURE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_DIGITAL_SIGNATURE;
import java.nio.charset.StandardCharsets;
@@ -10,7 +10,7 @@ import org.springframework.util.Base64Utils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureKmsEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.DigitalSignatureKmsService;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierAttributesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierAttributesController.java
index db854f671..fbe041996 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierAttributesController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierAttributesController.java
@@ -1,10 +1,10 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER_ATTRIBUTES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER_ATTRIBUTES_CONFIG;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_DOSSIER_ATTRIBUTES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_DOSSIER_ATTRIBUTES_CONFIG;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_FILE_ATTRIBUTES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER_ATTRIBUTES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER_ATTRIBUTES_CONFIG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_DOSSIER_ATTRIBUTES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_DOSSIER_ATTRIBUTES_CONFIG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_FILE_ATTRIBUTES;
import java.util.List;
import java.util.Map;
@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierAttributesManagementService;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierController.java
index 1769a0cab..f3d31656c 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierController.java
@@ -1,10 +1,10 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ADD_UPDATE_DOSSIER;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ARCHIVE_DOSSIER;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_DOSSIER;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.UNARCHIVE_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ADD_UPDATE_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ARCHIVE_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UNARCHIVE_DOSSIER;
import java.time.OffsetDateTime;
import java.util.ArrayList;
@@ -33,15 +33,15 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.google.common.collect.Lists;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
-import com.iqser.red.keycloak.commons.model.User;
-import com.iqser.red.keycloak.commons.roles.ApplicationRoles;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
+import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles;
import com.iqser.red.service.persistence.management.v1.processor.acl.custom.dossier.DossierACLService;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusManagementService;
-import com.iqser.red.service.persistence.management.v1.processor.service.UserService;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.external.resource.DossierResource;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatsController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatsController.java
index cad6c04b0..6ec2b86af 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatsController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatsController.java
@@ -1,6 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER;
import java.util.List;
import java.util.Set;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatusController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatusController.java
index 412904122..ebab0a2ad 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatusController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatusController.java
@@ -1,12 +1,12 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER_STATUS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_DOSSIER_STATUS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER_STATUS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_DOSSIER_STATUS;
import java.util.List;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateController.java
index 566225450..2858db5f3 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateController.java
@@ -1,9 +1,7 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER_TEMPLATES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_DOSSIER_TEMPLATES;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_MANAGER_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_USER_ROLE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER_TEMPLATES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_DOSSIER_TEMPLATES;
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
import java.io.IOException;
@@ -14,10 +12,7 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.annotation.PostConstruct;
-
import org.apache.commons.lang3.StringUtils;
-import org.keycloak.representations.idm.RoleRepresentation;
import org.springframework.beans.BeanUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
@@ -27,15 +22,14 @@ import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.acl.custom.dossier.DossierACLService;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateStatsService;
-import com.iqser.red.service.persistence.management.v1.processor.service.UserService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
import com.iqser.red.service.persistence.service.v1.api.external.resource.DossierTemplateResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel;
@@ -49,6 +43,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.importexport.ExportDownloadRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.importexport.ImportDossierTemplateRequest;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import feign.FeignException;
import io.micrometer.core.annotation.Timed;
@@ -115,26 +110,23 @@ public class DossierTemplateController implements DossierTemplateResource {
@Override
- @PreAuthorize("hasAuthority('" + READ_DOSSIER_TEMPLATES + "')")
+ @PreAuthorize("hasAuthority('" + WRITE_DOSSIER_TEMPLATES + "')")
public void deleteDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId) {
String userId = KeycloakSecurity.getUserId();
- if (!userService.checkUserHasAdminRole(userId)) {
- throw new BadRequestException("Only admin user can delete the dossier template");
- }
List dossiers = dossierManagementService.getAllDossiers(true, false);
- if (dossiers != null && dossiers.stream().anyMatch(dossier -> dossier.getDossierTemplateId().equals(dossierTemplateId))) {
- throw new ConflictException("Can not delete dossier template because there are dossiers based on it");
- }
+ if (dossiers != null && dossiers.stream().anyMatch(dossier -> dossier.getDossierTemplateId().equals(dossierTemplateId))) {
+ throw new ConflictException("Can not delete dossier template because there are dossiers based on it");
+ }
- dossierTemplateManagementService.deleteDossierTemplate(dossierTemplateId, userId);
- auditPersistenceService.audit(AuditRequest.builder()
- .userId(KeycloakSecurity.getUserId())
- .objectId(dossierTemplateId)
- .category(AuditCategory.DOSSIER_TEMPLATE.name())
- .message("Dossier Template has been deleted")
- .build());
+ dossierTemplateManagementService.deleteDossierTemplate(dossierTemplateId, userId);
+ auditPersistenceService.audit(AuditRequest.builder()
+ .userId(KeycloakSecurity.getUserId())
+ .objectId(dossierTemplateId)
+ .category(AuditCategory.DOSSIER_TEMPLATE.name())
+ .message("Dossier Template has been deleted")
+ .build());
}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateStatsController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateStatsController.java
index c7f9c886f..05b1cfa18 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateStatsController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateStatsController.java
@@ -1,6 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER_TEMPLATES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER_TEMPLATES;
import java.util.List;
import java.util.Set;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DownloadController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DownloadController.java
index 2b071854b..0a43bea64 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DownloadController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DownloadController.java
@@ -1,7 +1,7 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.PROCESS_DOWNLOAD;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOWNLOAD_STATUS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.PROCESS_DOWNLOAD;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOWNLOAD_STATUS;
import static com.iqser.red.service.persistence.management.v1.processor.utils.DownloadBufferUtils.fileProxyStreamForDownload;
import java.util.List;
@@ -24,7 +24,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.persistence.service.v1.external.api.impl.service.OneTimeTokenService;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
@@ -34,7 +34,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.Downloa
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.StringEncodingUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.external.resource.DownloadResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DownloadResponse;
@@ -51,6 +50,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.download.Do
import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadStatus;
import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadWithOptionRequest;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ExternalControllerAdvice.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ExternalControllerAdvice.java
index ad1a2ab9f..c3de89a09 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ExternalControllerAdvice.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ExternalControllerAdvice.java
@@ -30,9 +30,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.BadRe
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
-import com.iqser.red.service.persistence.management.v1.processor.service.job.AutomaticAnalysisJob;
-import com.iqser.red.service.persistence.management.v1.processor.service.job.SyncUserPermissionsJob;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java
index 08d977a65..f19db25c9 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java
@@ -1,8 +1,8 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_FILE_ATTRIBUTES_CONFIG;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_FILE_ATTRIBUTES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_FILE_ATTRIBUTES_CONFIG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_FILE_ATTRIBUTES_CONFIG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_FILE_ATTRIBUTES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_FILE_ATTRIBUTES_CONFIG;
import java.util.List;
import java.util.Map;
@@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileManagementController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileManagementController.java
index 37ab4ef81..93c599b97 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileManagementController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileManagementController.java
@@ -1,8 +1,8 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_FILE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DOWNLOAD_ORIGINAL_FILE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ROTATE_PAGE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_FILE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DOWNLOAD_ORIGINAL_FILE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ROTATE_PAGE;
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
import static com.iqser.red.service.persistence.management.v1.processor.utils.DownloadBufferUtils.fileProxyStreamForDownload;
@@ -24,7 +24,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.google.common.collect.Sets;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.client.pdftronredactionservice.PDFTronClient;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException;
@@ -35,7 +35,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.Reanaly
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils;
import com.iqser.red.service.persistence.management.v1.processor.utils.StringEncodingUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.external.resource.FileManagementResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.RotatePagesRequest;
@@ -43,6 +42,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.Audit
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import feign.FeignException;
import io.micrometer.core.annotation.Timed;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/GeneralSettingsController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/GeneralSettingsController.java
deleted file mode 100644
index 3005f1920..000000000
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/GeneralSettingsController.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_GENERAL_CONFIGURATION;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_GENERAL_CONFIGURATION;
-
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.iqser.red.service.persistence.management.v1.processor.service.GeneralConfigurationService;
-import com.iqser.red.service.persistence.service.v1.api.external.resource.GeneralSettingsResource;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.GeneralConfigurationModel;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@RestController
-@RequiredArgsConstructor
-public class GeneralSettingsController implements GeneralSettingsResource {
-
- private final GeneralConfigurationService generalConfigurationService;
-
-
- @Override
- @PreAuthorize("hasAuthority('" + READ_GENERAL_CONFIGURATION + "')")
- public GeneralConfigurationModel getGeneralConfigurations() {
-
- return generalConfigurationService.getGeneralConfigurations();
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + WRITE_GENERAL_CONFIGURATION + "')")
- public void updateGeneralConfigurations(@RequestBody GeneralConfigurationModel generalConfigurationModel) {
-
- generalConfigurationService.updateGeneralConfigurations(generalConfigurationModel);
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/HighlightsController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/HighlightsController.java
index aeeca3c3e..0344eb89e 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/HighlightsController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/HighlightsController.java
@@ -1,9 +1,9 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.CONVERT_HIGHLIGHTS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_HIGHLIGHTS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_IMPORTED_REDACTIONS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.GET_HIGHLIGHTS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.CONVERT_HIGHLIGHTS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_HIGHLIGHTS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_IMPORTED_REDACTIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.GET_HIGHLIGHTS;
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
import static com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils.getStorageId;
@@ -19,12 +19,12 @@ import com.iqser.red.service.pdftron.redaction.v1.api.model.highlights.TextHighl
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
import com.iqser.red.service.persistence.management.v1.processor.service.ReanalysisService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.external.resource.HighlightsResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AnnotationIds;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.DeleteImportedRedactionsRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import feign.FeignException;
import lombok.RequiredArgsConstructor;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LegalBasisMappingController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LegalBasisMappingController.java
index 69c9cc4aa..be114b3d8 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LegalBasisMappingController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LegalBasisMappingController.java
@@ -1,18 +1,18 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_LEGAL_BASIS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_LEGAL_BASIS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_LEGAL_BASIS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_LEGAL_BASIS;
import java.util.List;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LicenseController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LicenseController.java
index 186e31416..b284cc556 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LicenseController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LicenseController.java
@@ -1,7 +1,7 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_LICENSE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.UPDATE_LICENSE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_LICENSE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UPDATE_LICENSE;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
@@ -11,13 +11,13 @@ import org.springframework.core.env.Environment;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.external.resource.LicenseResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.license.Feature;
import com.iqser.red.service.persistence.service.v1.api.shared.model.license.FeatureType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.license.License;
import com.iqser.red.service.persistence.service.v1.api.shared.model.license.RedactionLicenseModel;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LicenseReportController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LicenseReportController.java
index d55efcd2c..12ff2536f 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LicenseReportController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LicenseReportController.java
@@ -1,12 +1,12 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_LICENSE_REPORT;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_LICENSE_REPORT;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.service.LicenseReportService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.external.resource.LicenseReportResource;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ManualRedactionController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ManualRedactionController.java
index 792a507fd..800681b31 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ManualRedactionController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ManualRedactionController.java
@@ -1,12 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ADD_COMMENT;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_COMMENT;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_MANUAL_REDACTION;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DO_MANUAL_REDACTION;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.PROCESS_MANUAL_REDACTION_REQUEST;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_MANUAL_REDACTIONS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.REQUEST_MANUAL_REDACTION;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.*;
import static com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUtils.toTypeId;
import java.util.ArrayList;
@@ -22,7 +16,6 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService;
@@ -51,6 +44,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.Lega
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ManualRedactionWrapper;
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RemoveRedactionRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ResizeRedactionRequest;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationController.java
index 444fb4547..7dce245d0 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationController.java
@@ -1,7 +1,7 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_NOTIFICATIONS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.UPDATE_NOTIFICATIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_NOTIFICATIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UPDATE_NOTIFICATIONS;
import java.time.OffsetDateTime;
import java.util.List;
@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.external.resource.NotificationResource;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationPreferencesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationPreferencesController.java
index 4cb20a8fa..4eaa9c0cd 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationPreferencesController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationPreferencesController.java
@@ -1,7 +1,7 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_NOTIFICATIONS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.UPDATE_NOTIFICATIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_NOTIFICATIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UPDATE_NOTIFICATIONS;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -9,7 +9,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPreferencesPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.external.resource.NotificationPreferencesResource;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RSSController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RSSController.java
index 6c525ed3c..46167cafe 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RSSController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RSSController.java
@@ -1,6 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.GET_RSS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.GET_RSS;
import java.util.Map;
import java.util.stream.Collectors;
@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.client.redactionreportservice.RssReportClient;
import com.iqser.red.service.persistence.management.v1.processor.service.ComponentOverrideService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReanalysisController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReanalysisController.java
index 1fb50fa56..ef8afeb59 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReanalysisController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReanalysisController.java
@@ -1,6 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.*;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.*;
import java.util.ArrayList;
import java.util.HashSet;
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.google.common.collect.Sets;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RedactionLogController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RedactionLogController.java
index 60cf7abe9..f7c2fc52a 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RedactionLogController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RedactionLogController.java
@@ -1,6 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_REDACTION_LOG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_REDACTION_LOG;
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
import java.io.ByteArrayOutputStream;
@@ -22,7 +22,6 @@ import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
import com.iqser.red.service.persistence.management.v1.processor.service.RedactionLogService;
import com.iqser.red.service.persistence.management.v1.processor.utils.StringEncodingUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.external.resource.RedactionLogResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.FilteredRedactionLogRequest;
@@ -30,6 +29,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlo
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.section.SectionGrid;
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import feign.FeignException;
import lombok.RequiredArgsConstructor;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java
index 9fe322eb2..aab701f12 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java
@@ -1,9 +1,9 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_REPORT_TEMPLATE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DOWNLOAD_REPORT_TEMPLATE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.GET_REPORT_TEMPLATES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.UPLOAD_REPORT_TEMPLATE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_REPORT_TEMPLATE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DOWNLOAD_REPORT_TEMPLATE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.GET_REPORT_TEMPLATES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UPLOAD_REPORT_TEMPLATE;
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
import java.io.ByteArrayInputStream;
@@ -27,7 +27,7 @@ import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.client.redactionreportservice.PlaceholderClient;
import com.iqser.red.service.persistence.management.v1.processor.client.redactionreportservice.ReportTemplatePlaceholderClient;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
@@ -39,7 +39,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
import com.iqser.red.service.persistence.management.v1.processor.utils.StringEncodingUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.external.resource.ReportTemplateResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.PlaceholdersResponse;
@@ -50,6 +49,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.ReportTemplateUploadRequest;
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import feign.FeignException;
import lombok.RequiredArgsConstructor;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java
index 1088f8a77..4911f0fd3 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java
@@ -1,7 +1,7 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_RULES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_RULES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_RULES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_RULES;
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
import java.io.ByteArrayInputStream;
@@ -21,7 +21,6 @@ import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RedactionClient;
import com.iqser.red.service.persistence.management.v1.processor.exception.FileUploadException;
import com.iqser.red.service.persistence.management.v1.processor.exception.InvalidRulesException;
@@ -31,6 +30,7 @@ import com.iqser.red.service.persistence.service.v1.api.external.resource.RulesR
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.Rules;
import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AuditRequest;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import feign.FeignException;
import lombok.RequiredArgsConstructor;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SMTPConfigurationController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SMTPConfigurationController.java
deleted file mode 100644
index a86de7098..000000000
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SMTPConfigurationController.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_SMTP_CONFIGURATION;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_SMTP_CONFIGURATION;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
-import com.iqser.red.keycloak.commons.RealmService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.SMTPConfigurationService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
-import com.iqser.red.service.persistence.service.v1.api.external.resource.SMTPConfigurationResource;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.SMTPConfiguration;
-
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@RestController
-@RequiredArgsConstructor
-public class SMTPConfigurationController implements SMTPConfigurationResource {
-
- private final RealmService realmService;
-
- private final SMTPConfigurationService smtpConfigurationService;
-
- private final ObjectMapper objectMapper;
-
-
- @Override
- @PreAuthorize("hasAuthority('" + READ_SMTP_CONFIGURATION + "')")
- public SMTPConfiguration getCurrentSMTPConfiguration() {
-
- return smtpConfigurationService.getCurrentSMTPConfiguration(true);
-
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + WRITE_SMTP_CONFIGURATION + "')")
- public void updateSMTPConfiguration(@RequestBody SMTPConfiguration smtpConfigurationModel) {
-
- smtpConfigurationService.updateSMTPConfiguration(smtpConfigurationModel);
-
- // also update in KC
- var realmRepresentation = realmService.realm(TenantContext.getTenantId()).toRepresentation();
- var propertiesMap = convertSMTPConfigurationModelToMap(smtpConfigurationModel);
- realmRepresentation.setSmtpServer(propertiesMap);
- realmService.realm(TenantContext.getTenantId()).update(realmRepresentation);
-
- }
-
-
- private Map convertSMTPConfigurationModelToMap(SMTPConfiguration smtpConfigurationModel) {
-
- Map propertiesMap = objectMapper.convertValue(smtpConfigurationModel, Map.class);
- Map stringPropertiesMap = new HashMap<>();
- propertiesMap.forEach((key, value) -> {
- if (value != null) {
- stringPropertiesMap.put(key, value.toString());
- } else {
- stringPropertiesMap.put(key, "");
- }
- });
- return stringPropertiesMap;
- }
-
-
- @SneakyThrows
- @Override
- @PreAuthorize("hasAuthority('" + WRITE_SMTP_CONFIGURATION + "')")
- public void testSMTPConfiguration(@RequestBody SMTPConfiguration smtpConfigurationModel) {
-
- var currentUserEmail = realmService.realm(TenantContext.getTenantId()).users().get(KeycloakSecurity.getUserId()).toRepresentation().getEmail();
-
- smtpConfigurationService.testSMTPConfiguration(currentUserEmail, smtpConfigurationModel);
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + WRITE_SMTP_CONFIGURATION + "')")
- public void clearSMTPConfiguration() {
-
- smtpConfigurationService.deleteConfiguration();
-
- // also update in KC
- var realmRepresentation = realmService.realm(TenantContext.getTenantId()).toRepresentation();
- realmRepresentation.setSmtpServer(new HashMap<>());
- realmService.realm(TenantContext.getTenantId()).update(realmRepresentation);
-
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SearchController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SearchController.java
index fbc8590ea..6072699d5 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SearchController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SearchController.java
@@ -1,6 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.SEARCH;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.SEARCH;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestBody;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java
index 4d14dcced..9d1bac410 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java
@@ -1,6 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.*;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.*;
import java.time.OffsetDateTime;
import java.util.ArrayList;
@@ -11,7 +11,7 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -20,15 +20,14 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
-import com.iqser.red.keycloak.commons.roles.ApplicationRoles;
+import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles;
import com.iqser.red.service.persistence.management.v1.processor.acl.custom.dossier.DossierACLService;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException;
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusManagementService;
-import com.iqser.red.service.persistence.management.v1.processor.service.UserService;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.external.resource.StatusResource;
@@ -42,6 +41,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus;
import com.iqser.red.service.persistence.service.v1.api.shared.model.notification.NotificationType;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusReportController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusReportController.java
index 14be2625e..547832cdb 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusReportController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusReportController.java
@@ -1,7 +1,7 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER;
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
import java.io.ByteArrayInputStream;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/TenantsController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/TenantsController.java
deleted file mode 100644
index d28a3efdc..000000000
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/TenantsController.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.*;
-
-import java.util.List;
-
-import javax.validation.Valid;
-
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
-import com.iqser.red.service.persistence.management.v1.processor.service.DeploymentKeyService;
-import com.iqser.red.service.persistence.management.v1.processor.service.TenantManagementService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
-import com.iqser.red.service.persistence.service.v1.api.external.resource.TenantsResource;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.SimpleTenantResponse;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantResponse;
-
-import lombok.RequiredArgsConstructor;
-
-@RestController
-@RequiredArgsConstructor
-public class TenantsController implements TenantsResource {
-
- private final TenantManagementService tenantManagementService;
- private final DeploymentKeyService deploymentKeyService;
-
-
- @PreAuthorize("hasAuthority('" + CREATE_TENANT + "')")
- public void createTenant(@Valid @RequestBody TenantRequest tenantRequest) {
-
- try {
- tenantManagementService.createTenant(tenantRequest);
- } catch (IllegalArgumentException e) {
- throw new BadRequestException(e.getMessage(), e);
- }
- }
-
-
- @PreAuthorize("hasAuthority('" + GET_TENANTS + "')")
- public List getTenants() {
-
- return tenantManagementService.getTenants();
- }
-
-
- @PreAuthorize("hasAuthority('" + DEPLOYMENT_INFO + "')")
- public JSONPrimitive getDeploymentKey(@PathVariable(TENANT_ID_PARAM) String tenantId) {
-
- return JSONPrimitive.of(deploymentKeyService.getDeploymentKey(tenantId));
- }
-
-
- public List getSimpleTenants() {
- return MagicConverter.convert(tenantManagementService.getTenants(), SimpleTenantResponse.class);
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UploadController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UploadController.java
index e0af8b37d..e61dac23d 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UploadController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UploadController.java
@@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.pdftron.redaction.v1.api.model.ByteContentDocument;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UserController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UserController.java
deleted file mode 100644
index 7ee004aa7..000000000
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UserController.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.*;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import javax.validation.Valid;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.iqser.red.keycloak.commons.KeyCloakSettings;
-import com.iqser.red.keycloak.commons.model.User;
-import com.iqser.red.service.persistence.management.v1.processor.exception.AuthenticationFailedException;
-import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
-import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
-import com.iqser.red.service.persistence.management.v1.processor.service.UserService;
-import com.iqser.red.service.persistence.service.v1.api.external.resource.UserResource;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateUserRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.ResetPasswordRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.UpdateMyProfileRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.UpdateProfileRequest;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@RestController
-@RequiredArgsConstructor
-public class UserController implements UserResource {
-
- private final UserService userService;
- private final KeyCloakSettings keyCloakSettings;
-
-
- @Override
- @PreAuthorize("hasAuthority('" + READ_USERS + "')")
- public List getAllRedUsers(@RequestParam(name = REFRESH_CACHE_PARAM, defaultValue = "false", required = false) boolean bypassCache) {
-
- if (bypassCache) {
- userService.evictUserCache();
- }
-
- return userService.getAllUsers()
- .stream()
- .filter(user -> user.getRoles().stream().anyMatch(r -> r.startsWith(keyCloakSettings.getRolePrefix())))
- .collect(Collectors.toList());
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + READ_ALL_USERS + "')")
- public List getAllUsers(@RequestParam(name = REFRESH_CACHE_PARAM, defaultValue = "false", required = false) boolean bypassCache) {
-
- if (bypassCache) {
- userService.evictUserCache();
- }
-
- return userService.getAllUsers();
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + WRITE_USERS + "')")
- public void updateProfile(@PathVariable(USER_ID) String userId, @RequestBody UpdateProfileRequest updateProfileRequest) {
-
- this.userService.updateProfile(userId, updateProfileRequest);
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + UPDATE_MY_PROFILE + "')")
- public void updateMyProfile(@Valid @RequestBody UpdateMyProfileRequest updateProfileRequest) {
-
- try {
- this.userService.updateMyProfile(updateProfileRequest);
- } catch (AuthenticationFailedException e) {
- throw new BadRequestException(e.getMessage(), e);
- }
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + WRITE_USERS + "')")
- public void deleteUsers(@RequestParam(USER_ID) List userIds) {
-
- userIds.forEach(this::deleteUser);
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + WRITE_USERS + "')")
- public void deleteUser(@PathVariable(USER_ID) String userId) {
-
- userService.deleteUser(userId);
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + WRITE_USERS + "')")
- public User createUser(@RequestBody CreateUserRequest user) {
-
- return this.userService.createUser(user);
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + READ_USERS + "')")
- public User getUserById(@PathVariable(USER_ID) String userId) {
-
- if (StringUtils.isEmpty(userId)) {
- throw new BadRequestException("The userId should not be empty.");
- }
- return userService.getUserById(userId).orElseThrow(() -> new NotFoundException("User not found"));
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + WRITE_USERS + "')")
- public void setRoles(@PathVariable(USER_ID) String userId, @RequestBody List roles) {
-
- userService.setRoles(userId, roles);
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + WRITE_USERS + "')")
- public void resetPassword(@PathVariable(USER_ID) String userId, @RequestBody ResetPasswordRequest resetPasswordRequest) {
-
- this.userService.resetPassword(userId, resetPasswordRequest);
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + WRITE_USERS + "')")
- public User activateProfile(@PathVariable(USER_ID) String userId, @RequestParam(IS_ACTIVE_PARAM) boolean isActive) {
-
- return this.userService.activateProfile(userId, isActive);
-
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UserPreferenceController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UserPreferenceController.java
deleted file mode 100644
index ea90a1fdf..000000000
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UserPreferenceController.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.MANAGE_USER_PREFERENCES;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
-import com.iqser.red.service.persistence.management.v1.processor.service.UserService;
-import com.iqser.red.service.persistence.service.v1.api.external.resource.UserPreferenceResource;
-
-import lombok.RequiredArgsConstructor;
-
-@RestController
-@RequiredArgsConstructor
-public class UserPreferenceController implements UserPreferenceResource {
-
- private final UserService userService;
-
-
- @Override
- @PreAuthorize("hasAuthority('" + MANAGE_USER_PREFERENCES + "')")
- public Map> getAllUserAttributes() {
-
- String userId = KeycloakSecurity.getUserId();
-
- var userResource = userService.getUserResource(userId);
- var userRepresentation = userResource.toRepresentation();
-
- var attributes = userRepresentation.getAttributes();
-
- return attributes != null ? attributes : new HashMap<>();
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + MANAGE_USER_PREFERENCES + "')")
- public void setAttribute(@PathVariable(KEY_PARAMETER_NAME) String key, List values) {
-
- String userId = KeycloakSecurity.getUserId();
-
- var userResource = userService.getUserResource(userId);
- var userRepresentation = userResource.toRepresentation();
-
- var attributes = userRepresentation.getAttributes();
- if (attributes == null) {
- attributes = new HashMap<>();
- }
- attributes.put(key, values);
- userRepresentation.setAttributes(attributes);
-
- userResource.update(userRepresentation);
-
- }
-
-
- @Override
- @PreAuthorize("hasAuthority('" + MANAGE_USER_PREFERENCES + "')")
- public void deleteAttribute(@PathVariable(KEY_PARAMETER_NAME) String key) {
-
- String userId = KeycloakSecurity.getUserId();
-
- var userResource = userService.getUserResource(userId);
- var userRepresentation = userResource.toRepresentation();
- if (userRepresentation.getAttributes() != null) {
- userRepresentation.getAttributes().remove(key);
- }
-
- userResource.update(userRepresentation);
-
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/VersionsController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/VersionsController.java
index c3426cec8..293c542f7 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/VersionsController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/VersionsController.java
@@ -1,6 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_VERSIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_VERSIONS;
import java.util.HashMap;
import java.util.List;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ViewedPagesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ViewedPagesController.java
index c1df7d4cc..630cddc41 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ViewedPagesController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ViewedPagesController.java
@@ -1,6 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.MANAGE_VIEWED_PAGES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.MANAGE_VIEWED_PAGES;
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
import java.util.HashSet;
@@ -10,7 +10,6 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
import com.iqser.red.service.persistence.management.v1.processor.service.AnalysisFlagsCalculationService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
@@ -20,6 +19,7 @@ import com.iqser.red.service.persistence.service.v1.api.external.resource.Viewed
import com.iqser.red.service.persistence.service.v1.api.shared.model.ViewedPages;
import com.iqser.red.service.persistence.service.v1.api.shared.model.ViewedPagesRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ViewedPage;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import feign.FeignException;
import lombok.RequiredArgsConstructor;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/WatermarkController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/WatermarkController.java
index 8e08410ff..5f436f8e1 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/WatermarkController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/WatermarkController.java
@@ -1,7 +1,7 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_WATERMARK;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_WATERMARK;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_WATERMARK;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_WATERMARK;
import java.util.List;
@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/interceptors/DownloadTempFileInterceptor.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/interceptors/DownloadTempFileInterceptor.java
index 5446970b2..36a8736c3 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/interceptors/DownloadTempFileInterceptor.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/interceptors/DownloadTempFileInterceptor.java
@@ -4,12 +4,11 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Do
import java.io.File;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
@Component
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/multitenacy/HeaderBasedKeycloakRealmResolver.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/multitenacy/HeaderBasedKeycloakRealmResolver.java
deleted file mode 100644
index 2df18be82..000000000
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/multitenacy/HeaderBasedKeycloakRealmResolver.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.iqser.red.persistence.service.v1.external.api.impl.multitenacy;
-
-import static com.iqser.red.service.persistence.management.v1.processor.multitenancy.TenantInterceptor.TENANT_HEADER_NAME;
-
-import java.util.Base64;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.keycloak.adapters.KeycloakConfigResolver;
-import org.keycloak.adapters.KeycloakDeployment;
-import org.keycloak.adapters.KeycloakDeploymentBuilder;
-import org.keycloak.adapters.OIDCHttpFacade;
-import org.keycloak.adapters.spi.HttpFacade;
-import org.keycloak.representations.adapters.config.AdapterConfig;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
-
-import lombok.RequiredArgsConstructor;
-import lombok.Setter;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@RequiredArgsConstructor
-public class HeaderBasedKeycloakRealmResolver implements KeycloakConfigResolver {
-
- private final Map cache = new ConcurrentHashMap<>();
-
- @Setter
- private static AdapterConfig adapterConfig;
-
- private KeycloakDeployment defaultDeployment;
- private final ObjectMapper objectMapper;
-
-
- @Override
- public KeycloakDeployment resolve(OIDCHttpFacade.Request request) {
-
- String tenant = getHeader(request, TENANT_HEADER_NAME);
-
- if (tenant == null) {
- // TODO always send as header and remove this.
- tenant = getTenantFromBearerToken(request);
- }
-
- if (tenant == null) {
- if (defaultDeployment == null) {
- defaultDeployment = KeycloakDeploymentBuilder.build(adapterConfig);
- }
- return defaultDeployment;
- }
-
- return cache.computeIfAbsent(tenant, this::createKeyCloakDeployment);
- }
-
-
- // PMD marks this as unused, although it is clearly used.
- // This seems to be a bug in PMD.
- @SuppressWarnings("PMD.UnusedPrivateMethod")
- @SneakyThrows
- private String getTenantFromBearerToken(HttpFacade.Request request) {
-
- String authHeader = request.getHeader("Authorization");
- if (authHeader == null) {
- return null;
- }
- String[] chunks = authHeader.split(" ")[1].split("\\.");
- Base64.Decoder decoder = Base64.getUrlDecoder();
-
- String payload = new String(decoder.decode(chunks[1]));
- JsonNode actualObj = objectMapper.readTree(payload);
- String issuer = actualObj.get("iss").asText();
- return issuer.substring(issuer.lastIndexOf('/') + 1);
- }
-
-
- private KeycloakDeployment createKeyCloakDeployment(String tenant) {
-
- var config = MagicConverter.convert(adapterConfig, AdapterConfig.class);
- config.setRealm(tenant);
-
- return KeycloakDeploymentBuilder.build(config);
- }
-
-
- // PMD marks this as unused, although it is clearly used.
- // This seems to be a bug in PMD.
- @SuppressWarnings("PMD.UnusedPrivateMethod")
- private String getHeader(HttpFacade.Request request, String headerName) {
-
- List values = request.getHeaders(headerName);
- if (values == null || values.isEmpty()) {
- return null;
- }
- return values.get(values.size() - 1);
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerAutoConfiguration.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerAutoConfiguration.java
deleted file mode 100644
index 6cd3db109..000000000
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerAutoConfiguration.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.iqser.red.persistence.service.v1.external.api.impl.swagger;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-import org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties;
-import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
-import org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType;
-import org.springframework.boot.actuate.endpoint.ExposableEndpoint;
-import org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver;
-import org.springframework.boot.actuate.endpoint.web.EndpointMapping;
-import org.springframework.boot.actuate.endpoint.web.EndpointMediaTypes;
-import org.springframework.boot.actuate.endpoint.web.ExposableWebEndpoint;
-import org.springframework.boot.actuate.endpoint.web.WebEndpointsSupplier;
-import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier;
-import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier;
-import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.env.Environment;
-import org.springframework.util.StringUtils;
-import org.springframework.web.cors.CorsConfiguration;
-import org.springframework.web.cors.CorsConfigurationSource;
-import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
-import org.springframework.web.servlet.config.annotation.EnableWebMvc;
-
-import io.swagger.v3.oas.annotations.OpenAPIDefinition;
-import io.swagger.v3.oas.models.Components;
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.info.Info;
-import io.swagger.v3.oas.models.security.OAuthFlow;
-import io.swagger.v3.oas.models.security.OAuthFlows;
-import io.swagger.v3.oas.models.security.SecurityRequirement;
-import io.swagger.v3.oas.models.security.SecurityScheme;
-
-@OpenAPIDefinition
-@Configuration
-@EnableWebMvc
-@EnableConfigurationProperties(SwaggerProperties.class)
-@ConditionalOnProperty(value = "swagger.enabled", havingValue = "true")
-public class SwaggerAutoConfiguration {
-
- private static final String TITLE = "API Documentation for Redaction Gateway";
- private static final String DESCRIPTION = "Description for redaction";
- private static final String VERSION = "1.0";
- private static final String OAUTH_NAME = "RED-OAUTH";
- private static final String PROTOCOL_URL_FORMAT = "/auth/realms//protocol/openid-connect";
-
-
- @Bean
- public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier,
- ServletEndpointsSupplier servletEndpointsSupplier,
- ControllerEndpointsSupplier controllerEndpointsSupplier,
- EndpointMediaTypes endpointMediaTypes,
- CorsEndpointProperties corsProperties,
- WebEndpointProperties webEndpointProperties,
- Environment environment) {
-
- List> allEndpoints = new ArrayList<>();
- Collection webEndpoints = webEndpointsSupplier.getEndpoints();
- allEndpoints.addAll(webEndpoints);
- allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
- allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
- String basePath = webEndpointProperties.getBasePath();
- EndpointMapping endpointMapping = new EndpointMapping(basePath);
- boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);
- return new WebMvcEndpointHandlerMapping(endpointMapping,
- webEndpoints,
- endpointMediaTypes,
- corsProperties.toCorsConfiguration(),
- new EndpointLinksResolver(allEndpoints, basePath),
- shouldRegisterLinksMapping,
- null);
- }
-
-
- private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {
-
- return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
- }
-
-
- @Bean
- public CorsConfigurationSource corsConfigurationSource() {
-
- CorsConfiguration configuration = new CorsConfiguration();
- configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "HEAD"));
- configuration.applyPermitDefaultValues();
- UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
- source.registerCorsConfiguration("/**", configuration);
- return source;
- }
-
-
- @Bean
- public OpenAPI customOpenApi() {
-
- return new OpenAPI().info(new Info().title(TITLE).version(VERSION).description(DESCRIPTION))
- .components(new Components().addSecuritySchemes(OAUTH_NAME, createOAuthScheme()))
- .addSecurityItem(new SecurityRequirement().addList(OAUTH_NAME));
- }
-
-
- private SecurityScheme createOAuthScheme() {
-
- OAuthFlows flows = createOAuthFlows();
-
- return new SecurityScheme().type(SecurityScheme.Type.OAUTH2).flows(flows);
- }
-
-
- private OAuthFlows createOAuthFlows() {
-
- OAuthFlow flow = createAuthorizationCodeFlow();
-
- return new OAuthFlows().authorizationCode(flow);
- }
-
-
- private OAuthFlow createAuthorizationCodeFlow() {
-
- return new OAuthFlow().authorizationUrl(PROTOCOL_URL_FORMAT + "/auth").tokenUrl(PROTOCOL_URL_FORMAT + "/token");
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerCustomDocsController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerCustomDocsController.java
deleted file mode 100644
index 62bd10bfc..000000000
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerCustomDocsController.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.iqser.red.persistence.service.v1.external.api.impl.swagger;
-
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.springdoc.webmvc.api.OpenApiWebMvcResource;
-import org.springdoc.webmvc.ui.SwaggerConfigResource;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.iqser.red.service.persistence.service.v1.api.external.resource.ExternalApi;
-
-import io.swagger.v3.oas.annotations.Operation;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-
-@RestController
-@RequiredArgsConstructor
-public class SwaggerCustomDocsController {
-
- private final OpenApiWebMvcResource openApiWebMvcResource;
-
- private final SwaggerConfigResource swaggerConfigResource;
-
- @Value("${springdoc.api-docs.path:#{T(org.springdoc.core.Constants).DEFAULT_API_DOCS_URL}}")
- private String apiDocsUrl;
-
-
- @SneakyThrows
- @Operation(hidden = true)
- @GetMapping(ExternalApi.BASE_PATH + "/docs/tenant")
- public String getDocs(HttpServletRequest request, @RequestParam(value = "tenantId", required = false, defaultValue = "redaction") String tenantId) {
- var response = openApiWebMvcResource.openapiJson(request, ExternalApi.BASE_PATH + "/docs/tenant", Locale.getDefault());
- return response.replace("", tenantId);
-
- }
-
-
- @Operation(hidden = true)
- @GetMapping(value = "/redaction-gateway-v1/docs/swagger-config", produces = MediaType.APPLICATION_JSON_VALUE)
- public Map getSwaggerUiConfig(HttpServletRequest request) {
-
- var map = swaggerConfigResource.openapiJson(request);
- map.put("url", apiDocsUrl);
- return map;
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerHomeController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerHomeController.java
deleted file mode 100644
index d863c0d7c..000000000
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerHomeController.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.iqser.red.persistence.service.v1.external.api.impl.swagger;
-
-import java.io.IOException;
-
-import javax.annotation.PostConstruct;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Controller
-@ConditionalOnProperty(value = "swagger.enabled", havingValue = "true")
-public class SwaggerHomeController {
-
- @Value("${server.servlet.context-path:}")
- private String contextPath;
-
-
- @GetMapping({"/redaction-gateway-v1", "/","redaction-gateway-v1/docs"})
- public void home(HttpServletRequest request, HttpServletResponse response) throws IOException {
-
- response.sendRedirect(contextPath + "/redaction-gateway-v1/docs/swagger-ui");
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerProperties.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerProperties.java
deleted file mode 100644
index ec420e631..000000000
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerProperties.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.iqser.red.persistence.service.v1.external.api.impl.swagger;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import lombok.Data;
-
-@Data
-@ConfigurationProperties("swagger")
-public class SwaggerProperties {
-
- @JsonProperty("auth-server-url")
- protected String authServerUrl = "";
- private boolean enabled;
- private boolean securityEnabled;
- private String defaultClientId;
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerTenantMvcConfigurer.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerTenantMvcConfigurer.java
deleted file mode 100644
index 0a39a7aba..000000000
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/swagger/SwaggerTenantMvcConfigurer.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.iqser.red.persistence.service.v1.external.api.impl.swagger;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.config.annotation.EnableWebMvc;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-import com.iqser.red.service.persistence.service.v1.api.external.resource.ExternalApi;
-
-@Configuration
-@EnableWebMvc
-public class SwaggerTenantMvcConfigurer implements WebMvcConfigurer {
-
- @Value("${springdoc.api-docs.path:#{T(org.springdoc.core.Constants).DEFAULT_API_DOCS_URL}}")
- private String path;
-
-
- @Override
- public void addInterceptors(InterceptorRegistry registry) {
-
- var cleanedUpPath = path.contains("?") ? path.substring(0, path.indexOf("?")) : path;
- registry.addInterceptor(new DocsInterceptor()).addPathPatterns(cleanedUpPath);
- }
-
-
- public static class DocsInterceptor implements HandlerInterceptor {
-
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-
- var query = "";
- if (!StringUtils.isBlank(request.getQueryString())) {
- query = "?" + request.getQueryString();
- }
- response.sendRedirect(ExternalApi.BASE_PATH + "/docs/tenant" + query);
- return false;
- }
-
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-v1/pom.xml b/persistence-service-v1/persistence-service-external-api-v1/pom.xml
index 54aa3ed57..a2605d023 100644
--- a/persistence-service-v1/persistence-service-external-api-v1/pom.xml
+++ b/persistence-service-v1/persistence-service-external-api-v1/pom.xml
@@ -136,12 +136,6 @@
${project.version}
compile
-
- com.iqser.red.service
- keycloak-commons
- ${project.version}
- compile
-
diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ApplicationConfigurationResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ApplicationConfigurationResource.java
index a2b516b1e..152009c44 100644
--- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ApplicationConfigurationResource.java
+++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ApplicationConfigurationResource.java
@@ -1,6 +1,5 @@
package com.iqser.red.service.persistence.service.v1.api.external.resource;
-import javax.validation.Valid;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
@@ -15,6 +14,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import jakarta.validation.Valid;
public interface ApplicationConfigurationResource {
diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/GeneralSettingsResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/GeneralSettingsResource.java
deleted file mode 100644
index 24f944806..000000000
--- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/GeneralSettingsResource.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.external.resource;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-import com.iqser.red.service.persistence.service.v1.api.shared.model.GeneralConfigurationModel;
-
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.responses.ApiResponses;
-
-public interface GeneralSettingsResource {
-
- String SMTP_PATH = ExternalApi.BASE_PATH + "/configuration/general";
-
-
- @ResponseBody
- @ResponseStatus(value = HttpStatus.OK)
- @GetMapping(value = SMTP_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Returns the current general Configuration.")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK.")})
- GeneralConfigurationModel getGeneralConfigurations();
-
-
- @ResponseStatus(value = HttpStatus.NO_CONTENT)
- @PostMapping(value = SMTP_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Write General Configurations to KeyCloak")
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "General Configuration updated successful."), @ApiResponse(responseCode = "400", description = "General Configuration update failed.")})
- void updateGeneralConfigurations(@RequestBody GeneralConfigurationModel generalConfigurationModel);
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/SMTPConfigurationResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/SMTPConfigurationResource.java
deleted file mode 100644
index 2da24ed22..000000000
--- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/SMTPConfigurationResource.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.external.resource;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.SMTPConfiguration;
-
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.responses.ApiResponses;
-
-public interface SMTPConfigurationResource {
-
- String SMTP_PATH = ExternalApi.BASE_PATH + "/configuration/smtp";
-
- String TEST_PATH = "/test";
-
-
- @ResponseBody
- @ResponseStatus(value = HttpStatus.OK)
- @GetMapping(value = SMTP_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Returns the current SMTP Configuration.")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK."), @ApiResponse(responseCode = "404", description = "SMTP not configured.")})
- SMTPConfiguration getCurrentSMTPConfiguration();
-
-
- @ResponseStatus(value = HttpStatus.NO_CONTENT)
- @PostMapping(value = SMTP_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Write SMTP Settings to KeyCloak")
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "SMTP Configuration updated successful."), @ApiResponse(responseCode = "400", description = "SMTP update failed.")})
- void updateSMTPConfiguration(@RequestBody SMTPConfiguration smtpConfigurationModel);
-
-
- @ResponseStatus(value = HttpStatus.OK)
- @PostMapping(value = SMTP_PATH + TEST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Test SMTP Settings to KeyCloak")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "SMTP Configuration is valid."), @ApiResponse(responseCode = "400", description = "SMTP test failed.")})
- void testSMTPConfiguration(@RequestBody SMTPConfiguration smtpConfigurationModel);
-
-
- @ResponseStatus(value = HttpStatus.NO_CONTENT)
- @DeleteMapping(value = SMTP_PATH)
- @Operation(summary = "Clear SMTP Settings to KeyCloak")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "SMTP Configuration has been cleared."), @ApiResponse(responseCode = "400", description = "Failed to clear SMTP Configuration.")})
- void clearSMTPConfiguration();
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/TenantsResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/TenantsResource.java
deleted file mode 100644
index 35de894da..000000000
--- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/TenantsResource.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.external.resource;
-
-import java.util.List;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.SimpleTenantResponse;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantResponse;
-
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.responses.ApiResponses;
-
-@ResponseStatus(value = HttpStatus.OK)
-public interface TenantsResource {
-
- String TENANT_ID_PARAM = "tenantId";
- String TENANT_ID_PATH_PARAM = "/{" + TENANT_ID_PARAM + "}";
-
-
- @PostMapping(value = ExternalApi.BASE_PATH + "/tenants", consumes = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Creates a new Tenant", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")})
- void createTenant(@RequestBody TenantRequest tenant);
-
-
- @GetMapping(value = ExternalApi.BASE_PATH + "/tenants", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Gets all existing tenant", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")})
- List getTenants();
-
- @GetMapping(value = ExternalApi.BASE_PATH + "/tenants/simple", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Gets all existing tenant in a simplified format", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")})
- List getSimpleTenants();
-
-
- @GetMapping(value = ExternalApi.BASE_PATH + "/deploymentKey" + TENANT_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Returns the deployment key for a tenant", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")})
- JSONPrimitive getDeploymentKey(@PathVariable(TENANT_ID_PARAM) String tenantId);
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UserPreferenceResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UserPreferenceResource.java
deleted file mode 100644
index de6dd61ab..000000000
--- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UserPreferenceResource.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.external.resource;
-
-import java.util.List;
-import java.util.Map;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.responses.ApiResponses;
-
-public interface UserPreferenceResource {
-
- String PREFERENCES_PATH = ExternalApi.BASE_PATH + "/attributes";
- String KEY_PARAMETER_NAME = "key";
- String KEY_PATH_VARIABLE = "/{" + KEY_PARAMETER_NAME + "}";
-
-
- @ResponseBody
- @ResponseStatus(value = HttpStatus.OK)
- @GetMapping(value = PREFERENCES_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Get User Attributes.", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")})
- Map> getAllUserAttributes();
-
-
- @ResponseStatus(HttpStatus.NO_CONTENT)
- @PutMapping(value = PREFERENCES_PATH + KEY_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "Store User Attribute by key.", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK")})
- void setAttribute(@PathVariable(KEY_PARAMETER_NAME) String key, @RequestBody List values);
-
-
- @ResponseBody
- @ResponseStatus(value = HttpStatus.NO_CONTENT)
- @DeleteMapping(value = PREFERENCES_PATH + KEY_PATH_VARIABLE)
- @Operation(summary = "Delete User Preferences by key.", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK")})
- void deleteAttribute(@PathVariable(KEY_PARAMETER_NAME) String key);
-
-}
diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UserResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UserResource.java
deleted file mode 100644
index 218b6d80d..000000000
--- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UserResource.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.external.resource;
-
-import java.util.List;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-import com.iqser.red.keycloak.commons.model.User;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateUserRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.ResetPasswordRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.UpdateMyProfileRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.UpdateProfileRequest;
-
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.responses.ApiResponses;
-
-@ResponseStatus(value = HttpStatus.OK)
-public interface UserResource {
-
- String USER_REST_PATH = ExternalApi.BASE_PATH + "/user";
- String RED_USER_REST_PATH = USER_REST_PATH + "/red";
- String UPDATE_USER_PROFILE_PATH = USER_REST_PATH + "/profile";
- String ACTIVATE_USER_PROFILE_PATH = UPDATE_USER_PROFILE_PATH + "/activate";
- String UPDATE_MY_USER_PROFILE_PATH = USER_REST_PATH + "/my-profile";
- String USER_ID = "userId";
- String USER_ID_PATH_VARIABLE = "/{" + USER_ID + "}";
-
- String USER_ROLE_REST_PATH = USER_REST_PATH + USER_ID_PATH_VARIABLE + "/role";
-
- String RESET_PASSWORD_PATH = USER_REST_PATH + USER_ID_PATH_VARIABLE + "/reset-password";
-
- String REFRESH_CACHE_PARAM = "refreshCache";
- String IS_ACTIVE_PARAM = "isActive";
-
-
- @ResponseBody
- @Operation(summary = "Gets the users who contain redaction roles.", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "400", description = "Invalid " + "offset or limit specified.")})
- @GetMapping(value = RED_USER_REST_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
- List getAllRedUsers(@RequestParam(name = REFRESH_CACHE_PARAM, defaultValue = "false", required = false) boolean bypassCache);
-
-
- @ResponseBody
- @Operation(summary = "Gets all the users in realm with information of roles.", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "400", description = "Invalid " + "offset or limit specified.")})
- @GetMapping(value = USER_REST_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
- List getAllUsers(@RequestParam(name = REFRESH_CACHE_PARAM, defaultValue = "false", required = false) boolean bypassCache);
-
-
- @ResponseBody
- @ResponseStatus(value = HttpStatus.NO_CONTENT)
- @Operation(summary = "Update your own user-profile.", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "400", description = "Failed to update profile, e-mail cannot be empty")})
- @PostMapping(value = UPDATE_USER_PROFILE_PATH + USER_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE)
- void updateProfile(@PathVariable(USER_ID) String userId, @RequestBody UpdateProfileRequest updateProfileRequest);
-
-
- @ResponseBody
- @ResponseStatus(value = HttpStatus.NO_CONTENT)
- @Operation(summary = "Update your own user-profile.", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "400", description = "Failed to update profile, e-mail cannot be empty")})
- @PostMapping(value = UPDATE_MY_USER_PROFILE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
- void updateMyProfile(@RequestBody UpdateMyProfileRequest updateProfileRequest);
-
-
- @ResponseBody
- @ResponseStatus(value = HttpStatus.NO_CONTENT)
- @Operation(summary = "Deletes given user", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "405", description = "Operation is not allowed."), @ApiResponse(responseCode = "409", description = "Conflict while deleting user.")})
- @DeleteMapping(value = USER_REST_PATH + USER_ID_PATH_VARIABLE)
- void deleteUser(@PathVariable(USER_ID) String userId);
-
-
- @ResponseBody
- @ResponseStatus(value = HttpStatus.NO_CONTENT)
- @Operation(summary = "Deletes given users", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "405", description = "Operation is not allowed."), @ApiResponse(responseCode = "409", description = "Conflict while deleting user.")})
- @DeleteMapping(value = USER_REST_PATH)
- void deleteUsers(@RequestParam(USER_ID) List userIds);
-
-
- @ResponseBody
- @Operation(summary = "Create a new user.", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "400", description = "Invalid Data."), @ApiResponse(responseCode = "409", description = "User already exists.")})
- @PostMapping(value = USER_REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
- User createUser(@RequestBody CreateUserRequest user);
-
-
- @ResponseBody
- @Operation(summary = "Gets the user in realm with information of roles.", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "The " + "userId can not be found."), @ApiResponse(responseCode = "400", description = "The provided user id is empty or " + "null.")})
- @GetMapping(value = USER_REST_PATH + USER_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)
- User getUserById(@PathVariable(USER_ID) String userId);
-
-
- @ResponseStatus(value = HttpStatus.NO_CONTENT)
- @Operation(summary = "Add a role to users", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "No Content"), @ApiResponse(responseCode = "404", description = "The provided userId can not be found."), @ApiResponse(responseCode = "400", description = "One ore more roles are not valid.")})
- @PostMapping(value = USER_ROLE_REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
- void setRoles(@PathVariable(USER_ID) String userId, @RequestBody List roles);
-
-
- @ResponseStatus(value = HttpStatus.NO_CONTENT)
- @Operation(summary = "Reset a user's password", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "No Content"), @ApiResponse(responseCode = "404", description = "The provided userId can not be found.")})
- @PostMapping(value = RESET_PASSWORD_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
- void resetPassword(@PathVariable(USER_ID) String userId, @RequestBody ResetPasswordRequest resetPasswordRequest);
-
-
- @ResponseBody
- @Operation(summary = "Activate/ deactivate a user-profile.", description = "None")
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "400", description = "Failed to activate/deactivate profile")})
- @PostMapping(value = ACTIVATE_USER_PROFILE_PATH + USER_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)
- User activateProfile(@PathVariable(USER_ID) String userId, @RequestParam(IS_ACTIVE_PARAM) boolean isActive);
-
-}
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierInternalController.java
index 1788dba2d..686b4eae8 100644
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierInternalController.java
+++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierInternalController.java
@@ -2,7 +2,7 @@ package com.iqser.red.service.persistence.v1.internal.api.controller;
import java.util.List;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/LegalBasisMappingInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/LegalBasisMappingInternalController.java
index 0d0b43cf2..c6ea5a75f 100644
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/LegalBasisMappingInternalController.java
+++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/LegalBasisMappingInternalController.java
@@ -4,7 +4,7 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma
import java.util.List;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/TenantsInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/TenantsInternalController.java
deleted file mode 100644
index ec78bf150..000000000
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/TenantsInternalController.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.iqser.red.service.persistence.v1.internal.api.controller;
-
-import java.util.List;
-
-import javax.validation.Valid;
-
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
-import com.iqser.red.service.persistence.management.v1.processor.service.DeploymentKeyService;
-import com.iqser.red.service.persistence.management.v1.processor.service.TenantManagementService;
-import com.iqser.red.service.persistence.service.v1.api.internal.resources.TenantsResource;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantResponse;
-
-import lombok.RequiredArgsConstructor;
-
-@RestController
-@RequiredArgsConstructor
-public class TenantsInternalController implements TenantsResource {
-
- private final TenantManagementService tenantManagementService;
- private final DeploymentKeyService deploymentKeyService;
-
-
- public void createTenant(@Valid @RequestBody TenantRequest tenantRequest) {
-
- try {
- tenantManagementService.createTenant(tenantRequest);
- } catch (IllegalArgumentException e) {
- throw new BadRequestException(e.getMessage(), e);
- }
- }
-
-
- public List getTenants() {
-
- return tenantManagementService.getTenants();
- }
-
-
- public TenantResponse getTenant(@PathVariable(TENANT_ID_PARAM) String tenantId) {
-
- return tenantManagementService.getTenant(tenantId);
- }
-
-
- public JSONPrimitive getDeploymentKey(@PathVariable(TENANT_ID_PARAM) String tenantId) {
-
- return JSONPrimitive.of(deploymentKeyService.getDeploymentKey(tenantId));
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/TenantsResource.java b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/TenantsResource.java
deleted file mode 100644
index 158f862a2..000000000
--- a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/TenantsResource.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.internal.resources;
-
-import java.util.List;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantResponse;
-
-@ResponseStatus(value = HttpStatus.OK)
-public interface TenantsResource {
-
- String TENANT_PATH = "/tenants";
- String TENANT_ID_PARAM = "tenantId";
- String TENANT_ID_PATH_PARAM = "/{" + TENANT_ID_PARAM + "}";
-
-
- @PostMapping(value = InternalApi.BASE_PATH + TENANT_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
- void createTenant(@RequestBody TenantRequest tenantRequest);
-
-
- @GetMapping(value = InternalApi.BASE_PATH + TENANT_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
- List getTenants();
-
-
- @GetMapping(value = InternalApi.BASE_PATH + TENANT_PATH + TENANT_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE)
- TenantResponse getTenant(@PathVariable(TENANT_ID_PARAM) String tenantId);
-
-
- @GetMapping(value = InternalApi.BASE_PATH + "/deploymentKey" + TENANT_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE)
- JSONPrimitive getDeploymentKey(@PathVariable(TENANT_ID_PARAM) String tenantId);
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/pom.xml b/persistence-service-v1/persistence-service-processor-v1/pom.xml
index 31bfe8fa0..938627ea9 100644
--- a/persistence-service-v1/persistence-service-processor-v1/pom.xml
+++ b/persistence-service-v1/persistence-service-processor-v1/pom.xml
@@ -16,12 +16,30 @@
6.4.1
0.4.0
+ 0.5.0
+ 0.14.0
+ 0.6.0
-
-
-
+
+ com.knecon.fforesight
+ jobs-commons
+ ${jobs-commons.version}
+
+
+
+ com.knecon.fforesight
+ keycloak-commons
+ ${keycloak-commons.version}
+
+
+
+ com.knecon.fforesight
+ swagger-commons
+ ${swagger-commons.version}
+
+
com.iqser.red.service
pdftron-redaction-service-api-v1
@@ -146,11 +164,6 @@
org.springframework.boot
spring-boot-starter-data-redis
-
- com.iqser.red.service
- keycloak-commons
- ${project.version}
-
com.iqser.red.commons
@@ -216,11 +229,6 @@
spring-cloud-starter-openfeign
-
- org.springframework.boot
- spring-boot-starter-quartz
-
-
org.springframework.boot
spring-boot-starter-amqp
@@ -249,11 +257,6 @@
log4j-slf4j-impl
test
-
- org.liquibase
- liquibase-core
- 4.3.1
-
com.yannbriancon
spring-hibernate-query-utils
@@ -283,7 +286,6 @@
lombok.launch.AnnotationProcessorHider$AnnotationProcessor
- com.dslplatform.json.processor.CompiledJsonAnnotationProcessor
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/PersistenceServiceProcessorConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/PersistenceServiceProcessorConfiguration.java
index 580b42302..8b21d111d 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/PersistenceServiceProcessorConfiguration.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/PersistenceServiceProcessorConfiguration.java
@@ -2,7 +2,9 @@ package com.iqser.red.service.persistence.management.v1.processor;
import javax.sql.DataSource;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.support.PageJacksonModule;
import org.springframework.cloud.openfeign.support.SortJacksonModule;
@@ -11,6 +13,7 @@ import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
+import org.springframework.core.env.Environment;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.retry.backoff.ExponentialBackOffPolicy;
import org.springframework.retry.policy.SimpleRetryPolicy;
@@ -20,11 +23,16 @@ import com.iqser.red.service.persistence.management.v1.processor.client.pdftronr
import com.iqser.red.service.persistence.management.v1.processor.client.redactionreportservice.StatusReportClient;
import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RedactionClient;
import com.iqser.red.service.persistence.management.v1.processor.client.searchservice.SearchClient;
+import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient;
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
+import jakarta.annotation.PostConstruct;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
@Configuration
@ComponentScan
-@EnableFeignClients(basePackageClasses = {PDFTronClient.class, StatusReportClient.class, SearchClient.class, RedactionClient.class})
+@EnableFeignClients(basePackageClasses = {PDFTronClient.class, StatusReportClient.class, SearchClient.class, RedactionClient.class, UsersClient.class})
public class PersistenceServiceProcessorConfiguration {
public static final String TENANT_DATA_SOURCE_QUALIFIER = "multiTenantDataSource";
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/api/ICustomPermissionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/api/ICustomPermissionService.java
index 1a7c31e9a..7e27a0b2c 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/api/ICustomPermissionService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/api/ICustomPermissionService.java
@@ -14,23 +14,22 @@ import org.springframework.security.acls.model.MutableAcl;
import org.springframework.security.acls.model.MutableAclService;
import org.springframework.transaction.annotation.Transactional;
-import com.iqser.red.keycloak.commons.UserListingService;
-import com.iqser.red.keycloak.commons.model.User;
import com.iqser.red.service.persistence.management.v1.processor.acl.AbstractACLService;
import com.iqser.red.service.persistence.management.v1.processor.acl.RedPermission;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
+import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
import com.iqser.red.service.persistence.service.v1.api.shared.model.permission.CustomPermissionMappingModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.permission.CustomPermissionModel;
public abstract class ICustomPermissionService extends AbstractACLService {
- protected final UserListingService userListingService;
+ protected final UsersClient usersClient;
- protected ICustomPermissionService(UserListingService userListingService, MutableAclService mutableAclService) {
+ protected ICustomPermissionService(UsersClient usersClient, MutableAclService mutableAclService) {
super(mutableAclService);
- this.userListingService = userListingService;
+ this.usersClient = usersClient;
}
@@ -109,7 +108,7 @@ public abstract class ICustomPermissionService exten
private Set getUserIds() {
- return userListingService.getAllUsers(TenantContext.getTenantId()).stream().map(User::getUserId).collect(Collectors.toSet());
+ return usersClient.getAllUsers(true).stream().map(User::getUserId).collect(Collectors.toSet());
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/AccessObjectDossierObjectPermissionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/AccessObjectDossierObjectPermissionService.java
index b7c2058e8..26d09550a 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/AccessObjectDossierObjectPermissionService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/AccessObjectDossierObjectPermissionService.java
@@ -1,18 +1,15 @@
package com.iqser.red.service.persistence.management.v1.processor.acl.custom.dossier;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.security.acls.model.MutableAclService;
import org.springframework.stereotype.Service;
-
-import com.iqser.red.keycloak.commons.UserListingService;
import com.iqser.red.service.persistence.management.v1.processor.acl.RedPermission;
import com.iqser.red.service.persistence.management.v1.processor.acl.custom.api.ICustomPermissionService;
+import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService;
-import com.iqser.red.service.persistence.management.v1.processor.service.TenantManagementService;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
@Service
@@ -20,11 +17,11 @@ public class AccessObjectDossierObjectPermissionService extends ICustomPermissio
private final DossierManagementService dossierManagementService;
- public AccessObjectDossierObjectPermissionService(UserListingService userService,
+ public AccessObjectDossierObjectPermissionService(UsersClient usersClient,
MutableAclService mutableAclService,
DossierManagementService dossierManagementService) {
- super(userService, mutableAclService);
+ super(usersClient, mutableAclService);
this.dossierManagementService = dossierManagementService;
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/ViewObjectDossierObjectPermissionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/ViewObjectDossierObjectPermissionService.java
index dddb54669..d0a72864a 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/ViewObjectDossierObjectPermissionService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/ViewObjectDossierObjectPermissionService.java
@@ -8,11 +8,10 @@ import java.util.stream.Collectors;
import org.springframework.security.acls.model.MutableAclService;
import org.springframework.stereotype.Service;
-import com.iqser.red.keycloak.commons.UserListingService;
import com.iqser.red.service.persistence.management.v1.processor.acl.RedPermission;
import com.iqser.red.service.persistence.management.v1.processor.acl.custom.api.ICustomPermissionService;
+import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService;
-import com.iqser.red.service.persistence.management.v1.processor.service.TenantManagementService;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
@Service
@@ -21,9 +20,9 @@ public class ViewObjectDossierObjectPermissionService extends ICustomPermissionS
private final DossierManagementService dossierManagementService;
- public ViewObjectDossierObjectPermissionService(UserListingService userService, MutableAclService mutableAclService, DossierManagementService dossierManagementService) {
+ public ViewObjectDossierObjectPermissionService(UsersClient usersClient, MutableAclService mutableAclService, DossierManagementService dossierManagementService) {
- super(userService, mutableAclService);
+ super(usersClient, mutableAclService);
this.dossierManagementService = dossierManagementService;
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/initializer/ACLInitializer.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/initializer/ACLInitializer.java
index 552f03d4e..ff7360deb 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/initializer/ACLInitializer.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/initializer/ACLInitializer.java
@@ -3,11 +3,8 @@ package com.iqser.red.service.persistence.management.v1.processor.acl.custom.ini
import java.util.Comparator;
import java.util.List;
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Service;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import lombok.RequiredArgsConstructor;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/initializer/CustomDossierPermissionsACLInitializer.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/initializer/CustomDossierPermissionsACLInitializer.java
index 110c3d57f..3f59a3248 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/initializer/CustomDossierPermissionsACLInitializer.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/initializer/CustomDossierPermissionsACLInitializer.java
@@ -9,8 +9,6 @@ import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.acl.RedPermission;
import com.iqser.red.service.persistence.management.v1.processor.acl.custom.service.CustomPermissionService;
-import com.iqser.red.service.persistence.management.v1.processor.service.TenantManagementService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.permission.CustomPermissionMappingModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.permission.CustomPermissionModel;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/client/tenantusermanagementservice/UsersClient.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/client/tenantusermanagementservice/UsersClient.java
new file mode 100644
index 000000000..4f1276eeb
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/client/tenantusermanagementservice/UsersClient.java
@@ -0,0 +1,24 @@
+package com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice;
+
+import java.util.List;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
+
+@FeignClient(name = "UsersClient", url = "${tenant-user-management-service.url}")
+public interface UsersClient {
+
+ String REFRESH_CACHE_PARAM = "refreshCache";
+ String USER_REST_PATH = "/user";
+
+
+ @ResponseBody
+ @GetMapping(value = USER_REST_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
+ List getAllUsers(@RequestParam(name = REFRESH_CACHE_PARAM, defaultValue = "false", required = false) boolean bypassCache);
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/CleanupDownloadSchedulerConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/CleanupDownloadSchedulerConfiguration.java
deleted file mode 100644
index 9a9f5e26d..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/CleanupDownloadSchedulerConfiguration.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.configuration;
-
-import java.util.concurrent.Executor;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Configuration
-@EnableScheduling
-@RequiredArgsConstructor
-public class CleanupDownloadSchedulerConfiguration {
-
- @Bean
- public Executor taskExecutor() {
-
- ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
- executor.setCorePoolSize(1);
- executor.setMaxPoolSize(1);
- executor.setThreadNamePrefix("CleanupDownloadScheduler-");
- executor.initialize();
- return executor;
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/TenantMessagingConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/TenantMessagingConfiguration.java
new file mode 100644
index 000000000..6c8eef759
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/TenantMessagingConfiguration.java
@@ -0,0 +1,50 @@
+package com.iqser.red.service.persistence.management.v1.processor.configuration;
+
+
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.FanoutExchange;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.core.QueueBuilder;
+import org.springframework.amqp.core.TopicExchange;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import lombok.RequiredArgsConstructor;
+
+@Configuration
+@RequiredArgsConstructor
+public class TenantMessagingConfiguration {
+
+ public static final String PERSISTENCE_SERVICE_TENANT_EVENTS_DQL = "persistence-service-tenant-events-dql";
+ public static final String PERSISTENCE_SERVICE_TENANT_CREATED_QUEUE = "persistence-service-tenant-created-queue";
+
+
+ @Bean("persistenceServiceTenantCreatedQueue")
+ public Queue persistenceServiceTenantCreatedQueue() {
+ return QueueBuilder.durable(PERSISTENCE_SERVICE_TENANT_CREATED_QUEUE)
+ .withArgument("x-dead-letter-exchange", "").withArgument("x-dead-letter-routing-key", PERSISTENCE_SERVICE_TENANT_EVENTS_DQL).build();
+ }
+
+ @Bean
+ public Queue persistenceServiceTenantDLQ() {
+
+ return QueueBuilder.durable(PERSISTENCE_SERVICE_TENANT_EVENTS_DQL).build();
+ }
+
+
+ @Bean
+ public Binding tenantExchangeBinding(@Qualifier("persistenceServiceTenantCreatedQueue") Queue persistenceServiceTenantCreatedQueue,
+ @Qualifier("tenantExchange") TopicExchange tenantExchange) {
+ return BindingBuilder.bind(persistenceServiceTenantCreatedQueue).to(tenantExchange).with("tenant.created");
+ }
+
+ @Bean(name = "tenantExchange")
+ TopicExchange tenantExchange(@Value("${fforesight.tenant-exchange.name}") String tenantExchangeName) {
+
+ return new TopicExchange(tenantExchangeName);
+ }
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/UserMessagingConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/UserMessagingConfiguration.java
new file mode 100644
index 000000000..a92085370
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/UserMessagingConfiguration.java
@@ -0,0 +1,149 @@
+package com.iqser.red.service.persistence.management.v1.processor.configuration;
+
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.core.QueueBuilder;
+import org.springframework.amqp.core.TopicExchange;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import lombok.RequiredArgsConstructor;
+
+@Configuration
+@RequiredArgsConstructor
+public class UserMessagingConfiguration {
+
+ public static final String PERSISTENCE_SERVICE_USER_CREATED_QUEUE = "persistence-service-user-created-queue";
+ public static final String PERSISTENCE_SERVICE_USER_DELETED_QUEUE = "persistence-service-user-deleted-queue";
+ public static final String PERSISTENCE_SERVICE_USER_UPDATED_QUEUE = "persistence-service-user-updated-queue";
+ public static final String PERSISTENCE_SERVICE_USER_STATUS_CHANGED_QUEUE = "persistence-service-user-status-changed-queue";
+ public static final String PERSISTENCE_SERVICE_USER_ROLES_UPDATED_QUEUE = "persistence-service-user-roles-updated-queue";
+ public static final String PERSISTENCE_SERVICE_USER_OWN_PROFILE_UPDATED_QUEUE = "persistence-service-user-own-profile-updated-queue";
+ public static final String PERSISTENCE_SERVICE_USER_EVENTS_DQL = "persistence-service-user-events-dql";
+
+
+ @Bean("persistenceServiceUserRolesUpdatedQueue")
+ public Queue persistenceServiceUserRolesUpdatedQueue() {
+
+ return QueueBuilder.durable(PERSISTENCE_SERVICE_USER_ROLES_UPDATED_QUEUE)
+ .withArgument("x-dead-letter-exchange", "")
+ .withArgument("x-dead-letter-routing-key", PERSISTENCE_SERVICE_USER_EVENTS_DQL)
+ .build();
+ }
+
+
+ @Bean
+ public Binding userRolesUpdatedBinding(@Qualifier("persistenceServiceUserRolesUpdatedQueue") Queue persistenceServiceUserRolesUpdatedQueue,
+ @Qualifier("userExchange") TopicExchange userExchange) {
+
+ return BindingBuilder.bind(persistenceServiceUserRolesUpdatedQueue).to(userExchange).with("user.rolesUpdated");
+ }
+
+
+ @Bean("persistenceServiceUserStatusChangedQueue")
+ public Queue persistenceServiceUserStatusChangedQueue() {
+
+ return QueueBuilder.durable(PERSISTENCE_SERVICE_USER_STATUS_CHANGED_QUEUE)
+ .withArgument("x-dead-letter-exchange", "")
+ .withArgument("x-dead-letter-routing-key", PERSISTENCE_SERVICE_USER_EVENTS_DQL)
+ .build();
+ }
+
+
+ @Bean
+ public Binding userStatusChangedBinding(@Qualifier("persistenceServiceUserStatusChangedQueue") Queue persistenceServiceUserStatusChangedQueue,
+ @Qualifier("userExchange") TopicExchange userExchange) {
+
+ return BindingBuilder.bind(persistenceServiceUserStatusChangedQueue).to(userExchange).with("user.statusChanged");
+ }
+
+
+ @Bean("persistenceServiceUserUpdatedQueue")
+ public Queue persistenceServiceUserUpdatedQueue() {
+
+ return QueueBuilder.durable(PERSISTENCE_SERVICE_USER_UPDATED_QUEUE)
+ .withArgument("x-dead-letter-exchange", "")
+ .withArgument("x-dead-letter-routing-key", PERSISTENCE_SERVICE_USER_EVENTS_DQL)
+ .build();
+ }
+
+
+ @Bean
+ public Binding userUpdatedBinding(@Qualifier("persistenceServiceUserUpdatedQueue") Queue persistenceServiceUserUpdatedQueue,
+ @Qualifier("userExchange") TopicExchange userExchange) {
+
+ return BindingBuilder.bind(persistenceServiceUserUpdatedQueue).to(userExchange).with("user.updated");
+ }
+
+
+ @Bean("persistenceServiceUserDeletedQueue")
+ public Queue persistenceServiceUserDeletedQueue() {
+
+ return QueueBuilder.durable(PERSISTENCE_SERVICE_USER_DELETED_QUEUE)
+ .withArgument("x-dead-letter-exchange", "")
+ .withArgument("x-dead-letter-routing-key", PERSISTENCE_SERVICE_USER_EVENTS_DQL)
+ .build();
+ }
+
+
+ @Bean
+ public Binding userDeletedBinding(@Qualifier("persistenceServiceUserDeletedQueue") Queue persistenceServiceUserDeletedQueue,
+ @Qualifier("userExchange") TopicExchange userExchange) {
+
+ return BindingBuilder.bind(persistenceServiceUserDeletedQueue).to(userExchange).with("user.deleted");
+ }
+
+
+ @Bean("persistenceServiceUserOwnProfileUpdatedQueue")
+ public Queue persistenceServiceUserOwnProfileUpdatedQueue() {
+
+ return QueueBuilder.durable(PERSISTENCE_SERVICE_USER_OWN_PROFILE_UPDATED_QUEUE)
+ .withArgument("x-dead-letter-exchange", "")
+ .withArgument("x-dead-letter-routing-key", PERSISTENCE_SERVICE_USER_EVENTS_DQL)
+ .build();
+ }
+
+
+ @Bean
+ public Binding userProfileUpdatedBinding(@Qualifier("persistenceServiceUserOwnProfileUpdatedQueue") Queue persistenceServiceUserOwnProfileUpdatedQueue,
+ @Qualifier("userExchange") TopicExchange userExchange) {
+
+ return BindingBuilder.bind(persistenceServiceUserOwnProfileUpdatedQueue).to(userExchange).with("user.ownProfileUpdated");
+ }
+
+
+ @Bean("persistenceServiceUserCreatedQueue")
+ public Queue persistenceServiceUserCreatedQueue() {
+
+ return QueueBuilder.durable(PERSISTENCE_SERVICE_USER_CREATED_QUEUE)
+ .withArgument("x-dead-letter-exchange", "")
+ .withArgument("x-dead-letter-routing-key", PERSISTENCE_SERVICE_USER_EVENTS_DQL)
+ .build();
+ }
+
+
+ @Bean
+ public Binding userCreatedBinding(@Qualifier("persistenceServiceUserCreatedQueue") Queue persistenceServiceUserCreatedQueue,
+ @Qualifier("userExchange") TopicExchange userExchange) {
+
+ return BindingBuilder.bind(persistenceServiceUserCreatedQueue).to(userExchange).with("user.created");
+ }
+
+
+ @Bean
+ public Queue persistenceServiceUserEventsDLQ() {
+
+ return QueueBuilder.durable(PERSISTENCE_SERVICE_USER_EVENTS_DQL).build();
+ }
+
+
+ @Bean(name = "userExchange")
+ TopicExchange tenantExchange(@Value("${fforesight.user-exchange.name}") String userExchange) {
+
+ return new TopicExchange(userExchange);
+ }
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/AnnotationEntityId.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/AnnotationEntityId.java
index beffc1083..bb127624a 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/AnnotationEntityId.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/AnnotationEntityId.java
@@ -2,8 +2,8 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.annotat
import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/CommentEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/CommentEntity.java
index 46f710767..739f5bcf8 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/CommentEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/CommentEntity.java
@@ -2,12 +2,13 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.annotat
import java.time.OffsetDateTime;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
@@ -25,7 +26,7 @@ import lombok.NoArgsConstructor;
public class CommentEntity {
@Id
- @GeneratedValue
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IdRemovalEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IdRemovalEntity.java
index a51b61868..2a6288ebd 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IdRemovalEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IdRemovalEntity.java
@@ -4,14 +4,14 @@ import java.time.OffsetDateTime;
import java.util.HashSet;
import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.ElementCollection;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.ElementCollection;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java
index c0f20732a..3bcdfdb3f 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java
@@ -2,13 +2,13 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.annotat
import java.time.OffsetDateTime;
-import javax.persistence.Column;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualImageRecategorizationEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualImageRecategorizationEntity.java
index 2e916373b..0bc4031a3 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualImageRecategorizationEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualImageRecategorizationEntity.java
@@ -2,13 +2,13 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.annotat
import java.time.OffsetDateTime;
-import javax.persistence.Column;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java
index 45a2ddc40..7df85029e 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java
@@ -2,13 +2,13 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.annotat
import java.time.OffsetDateTime;
-import javax.persistence.Column;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java
index 20ba0f1d3..2b813a191 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java
@@ -6,15 +6,15 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.ElementCollection;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.ElementCollection;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java
index 1709ec6c7..01826a240 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java
@@ -4,15 +4,15 @@ import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
-import javax.persistence.Column;
-import javax.persistence.ElementCollection;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.ElementCollection;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/RectangleEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/RectangleEntity.java
index 6ad0ffcf1..1ff69ffe6 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/RectangleEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/RectangleEntity.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.annotations;
-import javax.persistence.Embeddable;
+import jakarta.persistence.Embeddable;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ViewedPageEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ViewedPageEntity.java
index be19f82fe..f8286d4d1 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ViewedPageEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ViewedPageEntity.java
@@ -3,14 +3,14 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.annotat
import java.io.Serializable;
import java.time.OffsetDateTime;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.ManyToOne;
-import javax.persistence.MapsId;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.MapsId;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/audit/AuditEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/audit/AuditEntity.java
index 935a2872d..0b2763e7d 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/audit/AuditEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/audit/AuditEntity.java
@@ -4,14 +4,15 @@ import java.time.OffsetDateTime;
import java.util.HashMap;
import java.util.Map;
-import javax.persistence.Basic;
-import javax.persistence.Column;
-import javax.persistence.Convert;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Basic;
+import jakarta.persistence.Column;
+import jakarta.persistence.Convert;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.management.v1.processor.utils.JSONMapConverter;
@@ -29,7 +30,7 @@ import lombok.NoArgsConstructor;
public class AuditEntity {
@Id
- @GeneratedValue
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
private long recordId;
@Column
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/ApplicationConfigurationEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/ApplicationConfigurationEntity.java
index 21a7db40f..05fcc900a 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/ApplicationConfigurationEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/ApplicationConfigurationEntity.java
@@ -1,9 +1,9 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/ColorsEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/ColorsEntity.java
index 284a481fa..5557df0de 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/ColorsEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/ColorsEntity.java
@@ -1,11 +1,11 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.PrePersist;
-import javax.persistence.PreUpdate;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.PrePersist;
+import jakarta.persistence.PreUpdate;
+import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryEntryEntity.java
index 0a254059a..69521864f 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryEntryEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryEntryEntity.java
@@ -1,11 +1,11 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryFalsePositiveEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryFalsePositiveEntryEntity.java
index 608f0803f..dcb2fea76 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryFalsePositiveEntryEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryFalsePositiveEntryEntity.java
@@ -1,12 +1,12 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryFalseRecommendationEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryFalseRecommendationEntryEntity.java
index 122fb842c..a712ac189 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryFalseRecommendationEntryEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryFalseRecommendationEntryEntity.java
@@ -1,11 +1,11 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureEntity.java
index 0d19c49aa..b2bdaf86a 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureEntity.java
@@ -1,10 +1,10 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Lob;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.service.v1.api.shared.model.utils.SuppressFBWarnings;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureKmsEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureKmsEntity.java
index 14e713e23..eb89041e6 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureKmsEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureKmsEntity.java
@@ -1,10 +1,12 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-import javax.persistence.Table;
+import jakarta.persistence.Basic;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Lob;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.service.v1.api.shared.model.utils.SuppressFBWarnings;
@@ -40,6 +42,7 @@ public class DigitalSignatureKmsEntity {
private String kmsSecretKey;
@Column
@Lob
+ @Basic(fetch= FetchType.EAGER)
private byte[] certificate;
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureTypeEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureTypeEntity.java
index 0e18e3e9b..acd7e1a2a 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureTypeEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureTypeEntity.java
@@ -1,11 +1,11 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.DigitalSignatureType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.utils.SuppressFBWarnings;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/FileAttributesGeneralConfigurationEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/FileAttributesGeneralConfigurationEntity.java
index 325c976da..d03bf6c98 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/FileAttributesGeneralConfigurationEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/FileAttributesGeneralConfigurationEntity.java
@@ -1,11 +1,11 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.MapsId;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.MapsId;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisEntity.java
index 171ddc270..59309f109 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisEntity.java
@@ -1,7 +1,7 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisMappingEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisMappingEntity.java
index 27b17760b..cf88548a8 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisMappingEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisMappingEntity.java
@@ -3,11 +3,11 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.configu
import java.util.ArrayList;
import java.util.List;
-import javax.persistence.Column;
-import javax.persistence.ElementCollection;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.ElementCollection;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/RuleSetEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/RuleSetEntity.java
index cf95ce0e8..ca9c9f938 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/RuleSetEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/RuleSetEntity.java
@@ -1,10 +1,10 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Lob;
+import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/SMTPConfigurationEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/SMTPConfigurationEntity.java
deleted file mode 100644
index 6628b7044..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/SMTPConfigurationEntity.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.entity.configuration;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import com.iqser.red.service.persistence.service.v1.api.shared.model.utils.SuppressFBWarnings;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Entity
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@Table(name = "smtp_configuration")
-@SuppressFBWarnings("RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE")
-public class SMTPConfigurationEntity {
-
- public static final String ID = "CONFIG_ID";
-
- @Id
- private final String id = SMTPConfigurationEntity.ID;
-
- @Column(name = "from_email")
- private String from;
- @Column
- private String fromDisplayName;
- @Column
- private String envelopeFrom;
- @Column
- private String host;
- @Column
- private Integer port;
- @Column
- private String replyTo;
- @Column
- private String replyToDisplayName;
- @Column
- private boolean ssl;
- @Column
- private boolean starttls;
-
- // if AUTH is true, following must also be set
- @Column
- private boolean auth;
- @Column(name = "username")
- private String user;
- @Column
- private String password;
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/TypeEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/TypeEntity.java
index 40756b5f1..b72dbbae3 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/TypeEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/TypeEntity.java
@@ -2,13 +2,13 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.configu
import java.time.OffsetDateTime;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java
index a68aa1624..32072f0b4 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java
@@ -2,17 +2,17 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.configu
import java.time.OffsetDateTime;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.HorizontalTextAlignment;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeConfigEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeConfigEntity.java
index fa5fc0955..68f6c7e11 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeConfigEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeConfigEntity.java
@@ -1,12 +1,12 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.dossier;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierAttributeType;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeEntity.java
index 26e8a2700..f2e1ea0fd 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeEntity.java
@@ -2,11 +2,11 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.dossier
import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java
index 126193a57..feeb1226b 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java
@@ -6,19 +6,19 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Convert;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.Convert;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java
index cbc9a710e..8b6529b1b 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java
@@ -3,14 +3,14 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.dossier
import java.util.ArrayList;
import java.util.List;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java
index 82ab163a4..cccddd75f 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java
@@ -6,13 +6,13 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.Convert;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-import javax.persistence.Transient;
+import jakarta.persistence.Column;
+import jakarta.persistence.Convert;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.Table;
+import jakarta.persistence.Transient;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeConfigEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeConfigEntity.java
index b0bb6a1e5..21830d49d 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeConfigEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeConfigEntity.java
@@ -1,12 +1,12 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.dossier;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileAttributeType;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeEntity.java
index eaa0880e7..add81d9e4 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeEntity.java
@@ -2,11 +2,11 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.dossier
import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java
index b207efa52..5b9e71035 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java
@@ -6,17 +6,17 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Convert;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.Convert;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/ReportTemplateEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/ReportTemplateEntity.java
index 487fb0cc0..2d3e69bfa 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/ReportTemplateEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/ReportTemplateEntity.java
@@ -4,13 +4,13 @@ import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnore;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadStatusEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadStatusEntity.java
index ad6852b22..e73b651db 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadStatusEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadStatusEntity.java
@@ -6,16 +6,16 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.Convert;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Convert;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/index/IndexInformationEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/index/IndexInformationEntity.java
index 64e49c17a..e1e33db3e 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/index/IndexInformationEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/index/IndexInformationEntity.java
@@ -2,10 +2,10 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.index;
import java.time.OffsetDateTime;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.service.v1.api.shared.model.utils.SuppressFBWarnings;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/migration/MigrationEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/migration/MigrationEntity.java
index 94669aff2..08a214d4c 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/migration/MigrationEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/migration/MigrationEntity.java
@@ -1,10 +1,11 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.migration;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -20,7 +21,7 @@ import lombok.NoArgsConstructor;
public class MigrationEntity {
@Id
- @GeneratedValue
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationEntity.java
index 8ff18f92b..3602548d7 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationEntity.java
@@ -4,14 +4,16 @@ import java.time.OffsetDateTime;
import java.util.HashMap;
import java.util.Map;
-import javax.persistence.Basic;
-import javax.persistence.Column;
-import javax.persistence.Convert;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Basic;
+import jakarta.persistence.Column;
+import jakarta.persistence.Convert;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.SequenceGenerator;
+import jakarta.persistence.Table;
import com.iqser.red.service.persistence.management.v1.processor.utils.JSONMapConverter;
@@ -29,7 +31,7 @@ import lombok.NoArgsConstructor;
public class NotificationEntity {
@Id
- @GeneratedValue
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationPreferencesEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationPreferencesEntity.java
index 921089116..c5ba59d42 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationPreferencesEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationPreferencesEntity.java
@@ -3,12 +3,12 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.notific
import java.util.ArrayList;
import java.util.List;
-import javax.persistence.Column;
-import javax.persistence.ElementCollection;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.ElementCollection;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/permissions/CustomPermissionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/permissions/CustomPermissionEntity.java
index 4cad37374..b41e3dab1 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/permissions/CustomPermissionEntity.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/permissions/CustomPermissionEntity.java
@@ -2,11 +2,11 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.permiss
import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.IdClass;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.IdClass;
+import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/jobs/CustomQuartzConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/jobs/CustomQuartzConfiguration.java
deleted file mode 100644
index 209b3c185..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/jobs/CustomQuartzConfiguration.java
+++ /dev/null
@@ -1,177 +0,0 @@
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-package com.iqser.red.service.persistence.management.v1.processor.jobs;
-
-import java.util.Map;
-import java.util.Properties;
-
-import javax.sql.DataSource;
-
-import org.quartz.Calendar;
-import org.quartz.JobDetail;
-import org.quartz.Scheduler;
-import org.quartz.Trigger;
-import org.quartz.impl.jdbcjobstore.PostgreSQLDelegate;
-import org.springframework.beans.factory.ObjectProvider;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
-import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
-import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration;
-import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
-import org.springframework.boot.autoconfigure.quartz.QuartzDataSource;
-import org.springframework.boot.autoconfigure.quartz.QuartzDataSourceInitializer;
-import org.springframework.boot.autoconfigure.quartz.QuartzDataSourceScriptDatabaseInitializer;
-import org.springframework.boot.autoconfigure.quartz.QuartzProperties;
-import org.springframework.boot.autoconfigure.quartz.QuartzTransactionManager;
-import org.springframework.boot.autoconfigure.quartz.SchedulerFactoryBeanCustomizer;
-import org.springframework.boot.autoconfigure.sql.init.OnDatabaseInitializationCondition;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Conditional;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.core.annotation.Order;
-import org.springframework.scheduling.quartz.SchedulerFactoryBean;
-import org.springframework.scheduling.quartz.SpringBeanJobFactory;
-import org.springframework.transaction.PlatformTransactionManager;
-
-@Configuration(proxyBeanMethods = false)
-@ConditionalOnClass({Scheduler.class, SchedulerFactoryBean.class, PlatformTransactionManager.class})
-@EnableConfigurationProperties({QuartzProperties.class})
-@AutoConfigureAfter({DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, LiquibaseAutoConfiguration.class, FlywayAutoConfiguration.class})
-public class CustomQuartzConfiguration {
-
- public CustomQuartzConfiguration() {
-
- }
-
-
- @Bean
- @ConditionalOnMissingBean
- public SchedulerFactoryBean quartzScheduler(QuartzProperties properties,
- @Qualifier("masterDataSource") DataSource dataSource,
- ObjectProvider customizers,
- ObjectProvider jobDetails,
- Map calendars,
- ObjectProvider triggers,
- ApplicationContext applicationContext) {
-
- SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
- SpringBeanJobFactory jobFactory = new SpringBeanJobFactory();
- jobFactory.setApplicationContext(applicationContext);
- schedulerFactoryBean.setJobFactory(jobFactory);
- if (properties.getSchedulerName() != null) {
- schedulerFactoryBean.setSchedulerName(properties.getSchedulerName());
- }
-
- schedulerFactoryBean.setDataSource(dataSource);
- schedulerFactoryBean.setAutoStartup(properties.isAutoStartup());
- schedulerFactoryBean.setStartupDelay((int) properties.getStartupDelay().getSeconds());
- schedulerFactoryBean.setWaitForJobsToCompleteOnShutdown(properties.isWaitForJobsToCompleteOnShutdown());
- schedulerFactoryBean.setOverwriteExistingJobs(properties.isOverwriteExistingJobs());
- if (!properties.getProperties().isEmpty()) {
- schedulerFactoryBean.setQuartzProperties(this.asProperties(properties.getProperties()));
- }
-
- schedulerFactoryBean.setJobDetails(jobDetails.orderedStream().toArray((x$0) -> {
- return new JobDetail[x$0];
- }));
- schedulerFactoryBean.setCalendars(calendars);
- schedulerFactoryBean.setTriggers(triggers.orderedStream().toArray((x$0) -> {
- return new Trigger[x$0];
- }));
- customizers.orderedStream().forEach((customizer) -> {
- customizer.customize(schedulerFactoryBean);
- });
- return schedulerFactoryBean;
- }
-
-
- private Properties asProperties(Map source) {
-
- Properties properties = new Properties();
- properties.putAll(source);
- return properties;
- }
-
-
- @Configuration(proxyBeanMethods = false)
- @ConditionalOnSingleCandidate(DataSource.class)
- @ConditionalOnProperty(prefix = "spring.quartz", name = {"job-store-type"}, havingValue = "jdbc")
- @Import({DatabaseInitializationDependencyConfigurer.class})
- protected static class JdbcStoreTypeConfiguration {
-
- protected JdbcStoreTypeConfiguration() {
-
- }
-
-
- @Bean
- @Order(0)
- public SchedulerFactoryBeanCustomizer dataSourceCustomizer(QuartzProperties properties,
- @Qualifier("masterDataSource") DataSource dataSource,
- @QuartzDataSource ObjectProvider quartzDataSource,
- @Qualifier("masterTransactionManager") ObjectProvider transactionManager,
- @QuartzTransactionManager ObjectProvider quartzTransactionManager) {
-
- return (schedulerFactoryBean) -> {
- DataSource dataSourceToUse = this.getDataSource(dataSource, quartzDataSource);
- schedulerFactoryBean.setDataSource(dataSourceToUse);
- PlatformTransactionManager txManager = this.getTransactionManager(transactionManager, quartzTransactionManager);
- if (txManager != null) {
- schedulerFactoryBean.setTransactionManager(txManager);
- }
-
- };
- }
-
-
- private DataSource getDataSource(DataSource dataSource, ObjectProvider quartzDataSource) {
-
- DataSource dataSourceIfAvailable = quartzDataSource.getIfAvailable();
- return dataSourceIfAvailable != null ? dataSourceIfAvailable : dataSource;
- }
-
-
- private PlatformTransactionManager getTransactionManager(ObjectProvider transactionManager,
- ObjectProvider quartzTransactionManager) {
-
- PlatformTransactionManager transactionManagerIfAvailable = quartzTransactionManager.getIfAvailable();
- return transactionManagerIfAvailable != null ? transactionManagerIfAvailable : transactionManager.getIfUnique();
- }
-
-
- @Bean
- @ConditionalOnMissingBean({QuartzDataSourceScriptDatabaseInitializer.class, QuartzDataSourceInitializer.class})
- @Conditional({CustomQuartzConfiguration.JdbcStoreTypeConfiguration.OnQuartzDatasourceInitializationCondition.class})
- public QuartzDataSourceScriptDatabaseInitializer quartzDataSourceScriptDatabaseInitializer(DataSource dataSource,
- @QuartzDataSource ObjectProvider quartzDataSource,
- QuartzProperties properties) {
-
- DataSource dataSourceToUse = this.getDataSource(dataSource, quartzDataSource);
- return new QuartzDataSourceScriptDatabaseInitializer(dataSourceToUse, properties);
- }
-
-
- static class OnQuartzDatasourceInitializationCondition extends OnDatabaseInitializationCondition {
-
- OnQuartzDatasourceInitializationCondition() {
-
- super("Quartz", "spring.quartz.jdbc.initialize-schema");
- }
-
- }
-
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/metrics/HibernateStatisticsInterceptor.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/metrics/HibernateStatisticsInterceptor.java
deleted file mode 100644
index 6a0d05f6c..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/metrics/HibernateStatisticsInterceptor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.metrics;
-
-import org.hibernate.EmptyInterceptor;
-
-public class HibernateStatisticsInterceptor extends EmptyInterceptor {
-
- private final ThreadLocal queryCount = new ThreadLocal<>();
-
-
- public void startCounter() {
-
- queryCount.set(0);
- }
-
-
- public Integer getQueryCount() {
-
- return queryCount.get();
- }
-
-
- public void clearCounter() {
-
- queryCount.remove();
- }
-
-
- @Override
- public String onPrepareStatement(String sql) {
-
- Integer count = queryCount.get();
- if (count != null) {
- queryCount.set(count + 1);
- }
- return super.onPrepareStatement(sql);
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/metrics/MetricsConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/metrics/MetricsConfiguration.java
deleted file mode 100644
index afd5685f3..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/metrics/MetricsConfiguration.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.metrics;
-
-import java.util.Map;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.autoconfigure.orm.jpa.HibernatePropertiesCustomizer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-
-import lombok.RequiredArgsConstructor;
-
-@Configuration
-@RequiredArgsConstructor
-@ComponentScan(basePackageClasses = MetricsConfiguration.class)
-@ConditionalOnProperty(value = "metrics.persistence.enabled", havingValue = "true")
-public class MetricsConfiguration implements HibernatePropertiesCustomizer {
-
- @Override
- public void customize(Map hibernateProperties) {
-
- hibernateProperties.put("hibernate.session_factory.interceptor", hibernateInterceptor());
- }
-
-
- @Bean
- public HibernateStatisticsInterceptor hibernateInterceptor() {
-
- return new HibernateStatisticsInterceptor();
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/metrics/PersistenceMetricsAspect.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/metrics/PersistenceMetricsAspect.java
deleted file mode 100644
index 39872c843..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/metrics/PersistenceMetricsAspect.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.metrics;
-
-import java.util.concurrent.TimeUnit;
-
-import javax.annotation.PostConstruct;
-
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.stereotype.Component;
-
-import io.micrometer.core.instrument.DistributionSummary;
-import io.micrometer.core.instrument.MeterRegistry;
-import io.micrometer.core.instrument.Timer;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Aspect
-@Component
-@RequiredArgsConstructor
-@ConditionalOnProperty(value = "metrics.persistence.enabled", havingValue = "true")
-public class PersistenceMetricsAspect {
-
- private final MeterRegistry meterRegistry;
-
- private final HibernateStatisticsInterceptor statisticsInterceptor;
-
-
- @PostConstruct
- protected void postConstruct() {
-
- log.warn("Persistence Metrics are enabled!");
- }
-
-
- @Pointcut("execution(public * org.springframework.data.repository.Repository+.*(..))")
- public void monitor() {
-
- }
-
-
- @Around("monitor()")
- public Object profile(ProceedingJoinPoint pjp) throws Throwable {
-
- long start = System.currentTimeMillis();
- try {
- statisticsInterceptor.startCounter();
- return pjp.proceed();
- } finally {
- Integer queryCount = statisticsInterceptor.getQueryCount();
- statisticsInterceptor.clearCounter();
- long elapsedTime = System.currentTimeMillis() - start;
-
- try {
- String repository = pjp.getTarget().getClass().getSimpleName();
- if (pjp.getThis().getClass().getGenericInterfaces().length > 0) {
- repository = pjp.getThis().getClass().getGenericInterfaces()[0].getTypeName();
- }
- String label = repository + ":" + pjp.getSignature().getName();
-
- processQueryCounterSummary(label, queryCount);
- processTimer(label, elapsedTime);
- } catch (Exception e) {
- log.debug("Processing Metrics failed", e);
- }
- }
-
- }
-
-
- private void processQueryCounterSummary(String label, int queryCount) {
-
- final String metric = "QueryCounter:" + label;
- final DistributionSummary summary = meterRegistry.find(metric).summary();
- if (summary != null) {
- summary.record(queryCount);
- } else {
- meterRegistry.summary(metric, "JPA", "QueryCount").record(queryCount);
- }
- }
-
-
- private void processTimer(String label, long elapsedTime) {
-
- final String metric = "Timer:" + label;
- final Timer foundCounter = meterRegistry.find(metric).timer();
- if (foundCounter != null) {
- foundCounter.record(elapsedTime, TimeUnit.MILLISECONDS);
- } else {
- meterRegistry.timer(metric, "JPA", "Timer").record(elapsedTime, TimeUnit.MILLISECONDS);
- }
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationStarterService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationStarterService.java
index aa318b542..f0ae93c44 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationStarterService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationStarterService.java
@@ -10,9 +10,9 @@ import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.MigrationPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantProvider;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -26,13 +26,13 @@ public class MigrationStarterService {
private final FileManagementServiceSettings settings;
private final ApplicationContext ctx;
private final MigrationPersistenceService migrationPersistenceService;
- private final TenantRepository tenantRepository;
+ private final TenantProvider tenantProvider;
- @EventListener(ApplicationReadyEvent.class)
+ @EventListener(ApplicationReadyEvent.class)
public void migrate() {
- tenantRepository.findAll().forEach(tenant -> {
+ tenantProvider.getTenants().forEach(tenant -> {
TenantContext.setTenantId(tenant.getTenantId());
@@ -43,7 +43,7 @@ public class MigrationStarterService {
// This should only run in post upgrade hook
if (settings.isMigrateOnly()) {
- tenantRepository.findAll().forEach(tenant -> {
+ tenantProvider.getTenants().forEach(tenant -> {
runForTenant(tenant.getTenantId());
});
@@ -64,7 +64,7 @@ public class MigrationStarterService {
}
- public void runForTenant(String tenantId) {
+ public synchronized void runForTenant(String tenantId) {
TenantContext.setTenantId(tenantId);
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/EncryptSMTPPasswordsMigration11.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/EncryptSMTPPasswordsMigration11.java
deleted file mode 100644
index 0000c067f..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/EncryptSMTPPasswordsMigration11.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.migration.migrations;
-
-import javax.transaction.Transactional;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.iqser.red.service.persistence.management.v1.processor.migration.Migration;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.SMTPConfigurationService;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Service
-public class EncryptSMTPPasswordsMigration11 extends Migration {
-
- private static final String NAME = "Encrypt SMTP Config Passwords";
- private static final long VERSION = 11;
-
- @Autowired
- private SMTPConfigurationService smtpConfigurationService;
-
-
- public EncryptSMTPPasswordsMigration11() {
-
- super(NAME, VERSION);
- }
-
-
- @Override
- @Transactional
- protected void migrate() {
-
- smtpConfigurationService.encryptPasswordIfNecessary();
- }
-
-}
-
-
-
-
-
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ReduceTextFileSizeMigration10.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ReduceTextFileSizeMigration10.java
index 4967107ac..c3865f96e 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ReduceTextFileSizeMigration10.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ReduceTextFileSizeMigration10.java
@@ -9,10 +9,10 @@ import com.iqser.red.service.persistence.management.v1.processor.migration.migra
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.Setter;
import lombok.SneakyThrows;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/SimplifiedTextMigration12.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/SimplifiedTextMigration12.java
index bb51d151d..1040914bc 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/SimplifiedTextMigration12.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/SimplifiedTextMigration12.java
@@ -8,10 +8,10 @@ import com.iqser.red.service.persistence.management.v1.processor.migration.migra
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.Setter;
import lombok.SneakyThrows;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/AbstractTextContainer.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/AbstractTextContainer.java
index 9ae942f9a..4de4c32b6 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/AbstractTextContainer.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/AbstractTextContainer.java
@@ -1,6 +1,5 @@
package com.iqser.red.service.persistence.management.v1.processor.migration.migrations.model.reducetext;
-import com.dslplatform.json.JsonAttribute;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Rectangle;
@@ -44,7 +43,6 @@ public abstract class AbstractTextContainer {
@JsonIgnore
- @JsonAttribute(ignore = true)
public float getHeight() {
return maxY - minY;
@@ -52,7 +50,6 @@ public abstract class AbstractTextContainer {
@JsonIgnore
- @JsonAttribute(ignore = true)
public float getWidth() {
return maxX - minX;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Image.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Image.java
index 578d9eeca..d3752467e 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Image.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Image.java
@@ -1,6 +1,5 @@
package com.iqser.red.service.persistence.management.v1.processor.migration.migrations.model.reducetext;
-import com.dslplatform.json.CompiledJson;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -9,7 +8,6 @@ import lombok.NoArgsConstructor;
@Data
@Builder
-@CompiledJson
@NoArgsConstructor
@AllArgsConstructor
public class Image {
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/RedRectangle2D.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/RedRectangle2D.java
index de9f4a503..b25021c71 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/RedRectangle2D.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/RedRectangle2D.java
@@ -1,7 +1,5 @@
package com.iqser.red.service.persistence.management.v1.processor.migration.migrations.model.reducetext;
-import com.dslplatform.json.CompiledJson;
-import com.dslplatform.json.JsonAttribute;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
@@ -11,7 +9,6 @@ import lombok.NoArgsConstructor;
@Data
@Builder
-@CompiledJson
@NoArgsConstructor
@AllArgsConstructor
public class RedRectangle2D {
@@ -36,7 +33,6 @@ public class RedRectangle2D {
@JsonIgnore
- @JsonAttribute(ignore = true)
public boolean isEmpty() {
return width <= 0.0f || height <= 0.0f;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/RedTextPosition.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/RedTextPosition.java
index eab32fed3..9184b10cc 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/RedTextPosition.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/RedTextPosition.java
@@ -1,6 +1,5 @@
package com.iqser.red.service.persistence.management.v1.processor.migration.migrations.model.reducetext;
-import com.dslplatform.json.CompiledJson;
import com.dslplatform.json.JsonAttribute;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -15,7 +14,6 @@ import lombok.NoArgsConstructor;
@Builder
@NoArgsConstructor
@AllArgsConstructor
-@CompiledJson
public class RedTextPosition {
// Same values
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/SectionText.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/SectionText.java
index 69e78134b..90c4d2fde 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/SectionText.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/SectionText.java
@@ -7,7 +7,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import com.dslplatform.json.CompiledJson;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.section.SectionArea;
import lombok.AllArgsConstructor;
@@ -17,7 +16,6 @@ import lombok.NoArgsConstructor;
@Data
@Builder
-@CompiledJson
@NoArgsConstructor
@AllArgsConstructor
public class SectionText {
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Text.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Text.java
index 84eac28c9..7fc5c6637 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Text.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Text.java
@@ -3,14 +3,12 @@ package com.iqser.red.service.persistence.management.v1.processor.migration.migr
import java.util.ArrayList;
import java.util.List;
-import com.dslplatform.json.CompiledJson;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
-@CompiledJson
@NoArgsConstructor
@AllArgsConstructor
public class Text {
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/TextBlock.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/TextBlock.java
index dc3824388..2a2a42ea0 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/TextBlock.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/TextBlock.java
@@ -3,8 +3,6 @@ package com.iqser.red.service.persistence.management.v1.processor.migration.migr
import java.util.ArrayList;
import java.util.List;
-import com.dslplatform.json.CompiledJson;
-import com.dslplatform.json.JsonAttribute;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
@@ -15,7 +13,6 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@Builder
@Data
-@CompiledJson
@NoArgsConstructor
public class TextBlock extends AbstractTextContainer {
@@ -49,7 +46,6 @@ public class TextBlock extends AbstractTextContainer {
@Override
@JsonIgnore
- @JsonAttribute(ignore = true)
public String getText() {
return null;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/TextPositionSequence.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/TextPositionSequence.java
index 9662fcc6a..e499f8bda 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/TextPositionSequence.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/TextPositionSequence.java
@@ -3,8 +3,6 @@ package com.iqser.red.service.persistence.management.v1.processor.migration.migr
import java.util.ArrayList;
import java.util.List;
-import com.dslplatform.json.CompiledJson;
-import com.dslplatform.json.JsonAttribute;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -17,7 +15,6 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@Data
@Builder
-@CompiledJson
@NoArgsConstructor
@AllArgsConstructor
public class TextPositionSequence {
@@ -39,7 +36,6 @@ public class TextPositionSequence {
private float pageWidth;
- @JsonAttribute
@JsonProperty
public float getDir() {
@@ -47,17 +43,14 @@ public class TextPositionSequence {
}
- @JsonAttribute
@JsonProperty
public int getRotation() {return textPositions.get(0).getRotation();}
- @JsonAttribute
@JsonProperty
public float getPageHeight() {return textPositions.get(0).getPageHeight();}
- @JsonAttribute
@JsonProperty
public float getPageWidth() {return textPositions.get(0).getPageWidth();}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/simplifiedtext/Text.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/simplifiedtext/Text.java
index 5982a82fb..4d8ca77dc 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/simplifiedtext/Text.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/simplifiedtext/Text.java
@@ -3,14 +3,12 @@ package com.iqser.red.service.persistence.management.v1.processor.migration.migr
import java.util.ArrayList;
import java.util.List;
-import com.dslplatform.json.CompiledJson;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
-@CompiledJson
@NoArgsConstructor
@AllArgsConstructor
public class Text {
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/AsyncConfig.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/AsyncConfig.java
deleted file mode 100644
index 5767e412e..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/AsyncConfig.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy;
-
-import java.util.concurrent.Executor;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.AsyncConfigurerSupport;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-
-@Configuration
-public class AsyncConfig extends AsyncConfigurerSupport {
-
- @Override
- public Executor getAsyncExecutor() {
-
- ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
-
- executor.setCorePoolSize(7);
- executor.setMaxPoolSize(42);
- executor.setQueueCapacity(11);
- executor.setThreadNamePrefix("TenantAwareTaskExecutor-");
- executor.setTaskDecorator(new TenantAwareTaskDecorator());
- executor.initialize();
-
- return executor;
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/ForwardTenantInterceptor.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/ForwardTenantInterceptor.java
deleted file mode 100644
index 79e25a06d..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/ForwardTenantInterceptor.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy;
-
-import org.springframework.stereotype.Component;
-
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
-
-import feign.RequestInterceptor;
-import feign.RequestTemplate;
-
-@Component
-public class ForwardTenantInterceptor implements RequestInterceptor {
-
- public static final String TENANT_HEADER_NAME = "X-TENANT-ID";
-
- @Override
- public void apply(RequestTemplate template) {
- template.header(TENANT_HEADER_NAME, TenantContext.getTenantId());
- }
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/MultiTenancyMessagingConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/MultiTenancyMessagingConfiguration.java
deleted file mode 100644
index a98a96782..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/MultiTenancyMessagingConfiguration.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy;
-
-import static com.iqser.red.service.persistence.management.v1.processor.multitenancy.TenantInterceptor.TENANT_HEADER_NAME;
-
-import org.springframework.amqp.rabbit.config.AbstractRabbitListenerContainerFactory;
-import org.springframework.amqp.rabbit.core.RabbitTemplate;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanPostProcessor;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
-
-@Configuration
-public class MultiTenancyMessagingConfiguration {
-
- @Bean
- public static BeanPostProcessor multitenancyBeanPostProcessor() {
-
- return new BeanPostProcessor() {
-
- @Override
- public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
-
- if (bean instanceof RabbitTemplate) {
-
- ((RabbitTemplate) bean).setBeforePublishPostProcessors(m -> {
- m.getMessageProperties().setHeader(TENANT_HEADER_NAME, TenantContext.getTenantId());
- return m;
- });
-
- } else if (bean instanceof AbstractRabbitListenerContainerFactory) {
-
- ((AbstractRabbitListenerContainerFactory>) bean).setAfterReceivePostProcessors(m -> {
- String tenant = m.getMessageProperties().getHeader(TENANT_HEADER_NAME);
-
- if (tenant != null) {
- TenantContext.setTenantId(tenant);
- } else {
- throw new RuntimeException("No Tenant is set queue message");
- }
- return m;
- });
- }
- return bean;
- }
- };
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/MultiTenancyWebConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/MultiTenancyWebConfiguration.java
deleted file mode 100644
index 0981a01de..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/MultiTenancyWebConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-
-import com.iqser.red.commons.spring.DefaultWebMvcConfiguration;
-
-@Configuration
-public class MultiTenancyWebConfiguration extends DefaultWebMvcConfiguration {
-
- private final TenantInterceptor tenantInterceptor;
-
-
- @Autowired
- public MultiTenancyWebConfiguration(TenantInterceptor tenantInterceptor) {
-
- this.tenantInterceptor = tenantInterceptor;
- }
-
-
- @Override
- public void addInterceptors(InterceptorRegistry registry) {
-
- registry.addWebRequestInterceptor(tenantInterceptor);
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/StorageConnectionProviderImpl.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/StorageConnectionProviderImpl.java
deleted file mode 100644
index 78c1a3f70..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/StorageConnectionProviderImpl.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy;
-
-import org.springframework.stereotype.Service;
-
-import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
-import com.iqser.red.service.persistence.management.v1.processor.service.EncryptionDecryptionService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
-import com.iqser.red.storage.commons.model.AzureStorageConnection;
-import com.iqser.red.storage.commons.model.S3StorageConnection;
-import com.iqser.red.storage.commons.service.StorageConnectionProvider;
-
-import lombok.RequiredArgsConstructor;
-
-@Service
-@RequiredArgsConstructor
-public class StorageConnectionProviderImpl implements StorageConnectionProvider {
-
- private final EncryptionDecryptionService encryptionDecryptionService;
- private final TenantRepository tenantRepository;
-
-
- @Override
- public AzureStorageConnection getAzureStorageConnection(String tenantId) {
-
- var tenant = tenantRepository.findById(tenantId).orElseThrow(() -> new NotFoundException("Tenant does not exist"));
- return AzureStorageConnection.builder()
- .connectionString(encryptionDecryptionService.decrypt(tenant.getAzureStorageConnection().getConnectionString()))
- .containerName(tenant.getAzureStorageConnection().getContainerName())
- .build();
- }
-
-
- @Override
- public S3StorageConnection getS3StorageConnection(String tenantId) {
-
- var tenant = tenantRepository.findById(tenantId).orElseThrow(() -> new NotFoundException("Tenant does not exist"));
- return S3StorageConnection.builder()
- .key(tenant.getS3StorageConnection().getKey())
- .secret(encryptionDecryptionService.decrypt(tenant.getS3StorageConnection().getSecret()))
- .signerType(tenant.getS3StorageConnection().getSignerType())
- .bucketName(tenant.getS3StorageConnection().getBucketName())
- .region(tenant.getS3StorageConnection().getRegion())
- .endpoint(tenant.getS3StorageConnection().getEndpoint())
- .build();
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/TenantAwareTaskDecorator.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/TenantAwareTaskDecorator.java
deleted file mode 100644
index 06af1f7e3..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/TenantAwareTaskDecorator.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy;
-
-import org.springframework.core.task.TaskDecorator;
-import org.springframework.lang.NonNull;
-
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
-
-public class TenantAwareTaskDecorator implements TaskDecorator {
-
- @Override
- @NonNull
- public Runnable decorate(@NonNull Runnable runnable) {
-
- String tenantId = TenantContext.getTenantId();
- return () -> {
- try {
- TenantContext.setTenantId(tenantId);
- runnable.run();
- } finally {
- TenantContext.setTenantId(null);
- }
- };
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/TenantInterceptor.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/TenantInterceptor.java
deleted file mode 100644
index 4072f9c13..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/TenantInterceptor.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy;
-
-import org.springframework.stereotype.Component;
-import org.springframework.ui.ModelMap;
-import org.springframework.web.context.request.WebRequest;
-import org.springframework.web.context.request.WebRequestInterceptor;
-
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
-
-@Component
-public class TenantInterceptor implements WebRequestInterceptor {
-
- public static final String TENANT_HEADER_NAME = "X-TENANT-ID";
-
-
- @Override
- public void preHandle(WebRequest request) {
-
- if (request.getHeader(TENANT_HEADER_NAME) != null) {
- TenantContext.setTenantId(request.getHeader(TENANT_HEADER_NAME));
- } else {
- // Workaround to keep swagger working for now until header is sent somehow.
- var realm = KeycloakSecurity.getRealm();
- if (realm.isPresent()){
- TenantContext.setTenantId(realm.get());
- } else {
- // Can not throw exception here currently because otherwise we can not create tenant.
- TenantContext.clear();
- }
- }
- }
-
-
- @Override
- public void postHandle(WebRequest request, ModelMap model) {
-
- TenantContext.clear();
- }
-
-
- @Override
- public void afterCompletion(WebRequest request, Exception ex) {
-
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/AzureStorageConnectionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/AzureStorageConnectionEntity.java
deleted file mode 100644
index f81b3a3e8..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/AzureStorageConnectionEntity.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity;
-
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@Embeddable
-public class AzureStorageConnectionEntity {
-
- @Column(name = "storage_azure_connection_string")
- private String connectionString;
- @Column(name = "storage_azure_container_name")
- private String containerName;
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/DatabaseConnectionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/DatabaseConnectionEntity.java
deleted file mode 100644
index a5d8c5517..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/DatabaseConnectionEntity.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity;
-
-import java.util.Map;
-
-import javax.persistence.Basic;
-import javax.persistence.Column;
-import javax.persistence.Convert;
-import javax.persistence.Embeddable;
-import javax.persistence.FetchType;
-
-import com.iqser.red.service.persistence.management.v1.processor.utils.JSONMapConverter;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@Embeddable
-public class DatabaseConnectionEntity {
-
- @Column(name = "db_driver")
- private String driver;
- @Column(name = "db_host")
- private String host;
- @Column(name = "db_port")
- private String port;
- @Column(name = "db_database")
- private String database;
- @Column(name = "db_schema")
- private String schema;
- @Column(name = "db_username")
- private String username;
- @Column(name = "db_password")
- private String password;
-
- @Basic(fetch = FetchType.EAGER)
- @Column(columnDefinition = "text", name = "db_params")
- @Convert(converter = JSONMapConverter.class)
- private Map params;
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/S3StorageConnectionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/S3StorageConnectionEntity.java
deleted file mode 100644
index bb95e8aab..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/S3StorageConnectionEntity.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity;
-
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@Embeddable
-public class S3StorageConnectionEntity {
-
- @Column(name = "storage_s3_key")
- private String key;
- @Column(name = "storage_s3_secret")
- private String secret;
- @Column(name = "storage_s3_signer_type")
- private String signerType;
- @Column(name = "storage_s3_bucket_name")
- private String bucketName;
- @Column(name = "storage_s3_region")
- private String region;
- @Column(name = "storage_s3_endpoint")
- private String endpoint;
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/SearchConnectionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/SearchConnectionEntity.java
deleted file mode 100644
index c0fec1181..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/SearchConnectionEntity.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity;
-
-import java.util.Set;
-
-import javax.persistence.Column;
-import javax.persistence.Convert;
-import javax.persistence.Embeddable;
-
-import com.iqser.red.service.persistence.management.v1.processor.utils.JSONStringSetConverter;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@Embeddable
-public class SearchConnectionEntity {
-
- @Column(columnDefinition = "text", name = "search_hosts")
- @Convert(converter = JSONStringSetConverter.class)
- private Set hosts;
- @Column(name = "search_port")
- private int port = 9300;
- @Column(name = "search_scheme")
- private String scheme;
- @Column(name = "search_username")
- private String username;
- @Column(name = "search_password")
- private String password;
- @Column(name = "search_number_of_shards")
- private String numberOfShards;
- @Column(name = "search_number_of_replicas")
- private String numberOfReplicas;
-
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/TenantEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/TenantEntity.java
deleted file mode 100644
index eb48cfc3e..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/TenantEntity.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity;
-
-import javax.persistence.Column;
-import javax.persistence.Embedded;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Entity
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@Table(name = "tenant")
-public class TenantEntity {
-
- @Id
- private String tenantId;
- @Column
- private String displayName;
- @Column
- private String guid;
-
- @Embedded
- private DatabaseConnectionEntity databaseConnection;
-
- @Embedded
- private SearchConnectionEntity searchConnection;
-
- @Embedded
- private AzureStorageConnectionEntity azureStorageConnection;
-
- @Embedded
- private S3StorageConnectionEntity s3StorageConnection;
-
-}
\ No newline at end of file
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/MasterPersistenceConfig.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/MasterPersistenceConfig.java
deleted file mode 100644
index ead431a27..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/MasterPersistenceConfig.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy.persistence;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.persistence.EntityManagerFactory;
-import javax.sql.DataSource;
-
-import org.hibernate.cfg.AvailableSettings;
-import org.springframework.beans.factory.ObjectProvider;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
-import org.springframework.boot.autoconfigure.liquibase.LiquibaseDataSource;
-import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
-import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-import org.springframework.orm.hibernate5.SpringBeanContainer;
-import org.springframework.orm.jpa.JpaTransactionManager;
-import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
-import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
-
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
-import com.zaxxer.hikari.HikariDataSource;
-
-import liquibase.integration.spring.SpringLiquibase;
-import lombok.RequiredArgsConstructor;
-
-@Configuration
-@EnableJpaRepositories(basePackageClasses = TenantRepository.class, entityManagerFactoryRef = "masterEntityManagerFactory", transactionManagerRef = "masterTransactionManager")
-@EnableConfigurationProperties({DataSourceProperties.class, JpaProperties.class})
-@RequiredArgsConstructor
-public class MasterPersistenceConfig {
-
- private static final String entityPackages = "com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity";
- private final ConfigurableListableBeanFactory beanFactory;
- private final JpaProperties jpaProperties;
-
-
- @Bean
- public LocalContainerEntityManagerFactoryBean masterEntityManagerFactory(@Qualifier("masterDataSource") DataSource dataSource) {
-
- LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
-
- em.setPersistenceUnitName("master-persistence-unit");
- em.setPackagesToScan(entityPackages);
- em.setDataSource(dataSource);
- em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
-
- Map properties = new HashMap<>(this.jpaProperties.getProperties());
- properties.put(AvailableSettings.PHYSICAL_NAMING_STRATEGY, "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy");
- properties.put(AvailableSettings.IMPLICIT_NAMING_STRATEGY, "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy");
- properties.put(AvailableSettings.BEAN_CONTAINER, new SpringBeanContainer(this.beanFactory));
- em.setJpaPropertyMap(properties);
-
- return em;
- }
-
-
- @Bean
- public JpaTransactionManager masterTransactionManager(@Qualifier("masterEntityManagerFactory") EntityManagerFactory emf) {
-
- JpaTransactionManager transactionManager = new JpaTransactionManager();
- transactionManager.setEntityManagerFactory(emf);
- return transactionManager;
- }
-
-
- @Bean
- public SpringLiquibase masterLiquibase(@LiquibaseDataSource ObjectProvider liquibaseDataSource) {
-
- LiquibaseProperties liquibaseProperties = masterLiquibaseProperties();
- SpringLiquibase liquibase = new SpringLiquibase();
- liquibase.setDataSource(liquibaseDataSource.getIfAvailable());
- liquibase.setChangeLog(liquibaseProperties.getChangeLog());
- liquibase.setContexts(liquibaseProperties.getContexts());
- return liquibase;
- }
-
-
- @Bean
- @ConfigurationProperties("multitenancy.master.liquibase")
- public LiquibaseProperties masterLiquibaseProperties() {
-
- return new LiquibaseProperties();
- }
-
-
- @Bean
- @LiquibaseDataSource
- @ConfigurationProperties("multitenancy.master.datasource.hikari")
- public DataSource masterDataSource() {
-
- HikariDataSource dataSource = masterDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
- dataSource.setPoolName("masterDataSource");
- return dataSource;
- }
-
-
- @Bean
- @ConfigurationProperties("multitenancy.master.datasource")
- public DataSourceProperties masterDataSourceProperties() {
-
- return new DataSourceProperties();
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantPersistenceConfig.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantPersistenceConfig.java
index 11b0822cb..35ab28f19 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantPersistenceConfig.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantPersistenceConfig.java
@@ -3,16 +3,19 @@ package com.iqser.red.service.persistence.management.v1.processor.multitenancy.p
import java.util.HashMap;
import java.util.Map;
-import javax.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityManagerFactory;
-import org.hibernate.MultiTenancyStrategy;
+//import org.hibernate.MultiTenancyStrategy;
+import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy;
import org.hibernate.cfg.AvailableSettings;
+import org.hibernate.dialect.Dialect;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
@@ -23,12 +26,12 @@ import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
-import com.iqser.red.service.persistence.management.v1.processor.service.EncryptionDecryptionService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.CurrentTenantIdentifierResolverImpl;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.DynamicDataSourceBasedMultiTenantConnectionProvider;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ColorsRepository;
import com.iqser.red.service.persistence.management.v1.processor.settings.TenantHikariSettings;
+import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
+import com.knecon.fforesight.tenantcommons.TenantProvider;
import lombok.RequiredArgsConstructor;
@@ -52,14 +55,15 @@ public class TenantPersistenceConfig {
emfBean.setPersistenceUnitName("tenant-persistence-unit");
emfBean.setPackagesToScan(entityPackages);
emfBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
-
Map properties = new HashMap<>(this.jpaProperties.getProperties());
- properties.put(AvailableSettings.PHYSICAL_NAMING_STRATEGY, "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy");
+ properties.put(AvailableSettings.PHYSICAL_NAMING_STRATEGY, "org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy");
properties.put(AvailableSettings.IMPLICIT_NAMING_STRATEGY, "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy");
properties.put(AvailableSettings.BEAN_CONTAINER, new SpringBeanContainer(this.beanFactory));
- properties.put(AvailableSettings.MULTI_TENANT, MultiTenancyStrategy.DATABASE);
+// properties.put(AvailableSettings.MULTI_TENANT, MultiTenancyStrategy.DATABASE);
properties.put(AvailableSettings.MULTI_TENANT_CONNECTION_PROVIDER, connectionProvider);
properties.put(AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER, tenantResolver);
+ properties.put(AvailableSettings.DIALECT, "org.hibernate.dialect.PostgreSQLDialect");
+ properties.put("hibernate.temp.use_jdbc_metadata_defaults",false);
emfBean.setJpaPropertyMap(properties);
return emfBean;
@@ -85,12 +89,11 @@ public class TenantPersistenceConfig {
@Bean
- @DependsOn("masterLiquibase")
public TenantSpringLiquibaseExecutor tenantLiquibase(EncryptionDecryptionService encryptionService,
- TenantRepository tenantRepository,
+ TenantProvider tenantProvider,
LiquibaseProperties tenantLiquibaseProperties) {
- return new TenantSpringLiquibaseExecutor(encryptionService, tenantRepository, tenantLiquibaseProperties);
+ return new TenantSpringLiquibaseExecutor(encryptionService, tenantProvider, tenantLiquibaseProperties);
}
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantSpringLiquibaseExecutor.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantSpringLiquibaseExecutor.java
index 13cc2faef..63cb712b2 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantSpringLiquibaseExecutor.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantSpringLiquibaseExecutor.java
@@ -13,10 +13,10 @@ import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.ResourceLoader;
import org.springframework.jdbc.datasource.SingleConnectionDataSource;
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.TenantEntity;
-import com.iqser.red.service.persistence.management.v1.processor.service.EncryptionDecryptionService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
import com.iqser.red.service.persistence.management.v1.processor.utils.jdbc.JDBCUtils;
+import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
+import com.knecon.fforesight.tenantcommons.TenantProvider;
+import com.knecon.fforesight.tenantcommons.model.TenantResponse;
import liquibase.integration.spring.SpringLiquibase;
import lombok.RequiredArgsConstructor;
@@ -29,7 +29,7 @@ import lombok.extern.slf4j.Slf4j;
public class TenantSpringLiquibaseExecutor implements InitializingBean, ResourceLoaderAware {
private final EncryptionDecryptionService encryptionService;
- private final TenantRepository tenantRepository;
+ private final TenantProvider tenantProvider;
@Qualifier("tenantLiquibaseProperties")
private final LiquibaseProperties tenantLiquibaseProperties;
@@ -41,22 +41,25 @@ public class TenantSpringLiquibaseExecutor implements InitializingBean, Resource
@Override
public void afterPropertiesSet() {
- log.info("DynamicDataSources based multitenancy enabled");
- this.runOnAllTenants(tenantRepository.findAll());
+ log.info("DynamicDataSources based multi-tenancy enabled");
+ this.runOnAllTenants(tenantProvider.getTenants());
}
@SneakyThrows
- protected void runOnAllTenants(List tenants) {
+ protected void runOnAllTenants(List tenants) {
- for (TenantEntity tenant : tenants) {
+ for (var tenant : tenants) {
- log.info("Initializing Liquibase for tenant " + tenant.getTenantId());
- try (Connection connection = DriverManager.getConnection(JDBCUtils.buildJdbcUrlWithSchema(tenant.getDatabaseConnection()),
+ var jdbcURL = JDBCUtils.buildJdbcUrlWithSchema(tenant.getDatabaseConnection());
+ log.info("Initializing Liquibase for tenant {} / {}", tenant.getTenantId(), jdbcURL);
+ try (Connection connection = DriverManager.getConnection(jdbcURL,
tenant.getDatabaseConnection().getUsername(),
encryptionService.decrypt(tenant.getDatabaseConnection().getPassword()))) {
DataSource tenantDataSource = new SingleConnectionDataSource(connection, false);
SpringLiquibase liquibase = this.getSpringLiquibase(tenantDataSource);
+ liquibase.setDefaultSchema(tenant.getDatabaseConnection().getSchema());
+ liquibase.setLiquibaseSchema(tenant.getDatabaseConnection().getSchema());
liquibase.afterPropertiesSet();
}
log.info("Liquibase ran for tenant " + tenant.getTenantId());
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/roles/ActionRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java
similarity index 99%
rename from persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/roles/ActionRoles.java
rename to persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java
index ed7935b69..6ccc244e2 100644
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/roles/ActionRoles.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java
@@ -1,4 +1,4 @@
-package com.iqser.red.keycloak.commons.roles;
+package com.iqser.red.service.persistence.management.v1.processor.roles;
public final class ActionRoles {
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java
new file mode 100644
index 000000000..ddbc9a8c8
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java
@@ -0,0 +1,257 @@
+package com.iqser.red.service.persistence.management.v1.processor.roles;
+
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ADD_COMMENT;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ADD_DICTIONARY_ENTRY;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ADD_DOSSIER_DICTIONARY_ENTRY;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ADD_UPDATE_DICTIONARY_TYPE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ADD_UPDATE_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ADD_UPDATE_DOSSIER_DICTIONARY_TYPE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ARCHIVE_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.CONVERT_HIGHLIGHTS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.CREATE_TENANT;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_COMMENT;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_DICTIONARY_ENTRY;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_DICTIONARY_TYPE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_DOSSIER_DICTIONARY_ENTRY;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_DOSSIER_DICTIONARY_TYPE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_FILE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_HIGHLIGHTS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_IMPORTED_REDACTIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_MANUAL_REDACTION;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_REPORT_TEMPLATE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DEPLOYMENT_INFO;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DOWNLOAD_ANNOTATED_FILE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DOWNLOAD_ORIGINAL_FILE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DOWNLOAD_REDACTED_FILE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DOWNLOAD_REDACTION_PREVIEW_FILE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DOWNLOAD_REPORT_TEMPLATE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DO_MANUAL_REDACTION;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.EXCLUDE_INCLUDE_FILE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.EXCLUDE_INCLUDE_PAGES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.GET_HIGHLIGHTS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.GET_REPORT_TEMPLATES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.GET_RSS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.GET_TENANTS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.MANAGE_ACL_PERMISSIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.MANAGE_USER_PREFERENCES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.MANAGE_VIEWED_PAGES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.PROCESS_DOWNLOAD;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.PROCESS_MANUAL_REDACTION_REQUEST;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.PROCESS_TEXT_HIGHLIGHTS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_ALL_USERS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_APP_CONFIG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_COLORS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DICTIONARY_TYPES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DIGITAL_SIGNATURE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER_ATTRIBUTES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER_ATTRIBUTES_CONFIG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER_STATUS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER_TEMPLATES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOWNLOAD_STATUS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_FILE_ATTRIBUTES_CONFIG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_FILE_STATUS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_GENERAL_CONFIGURATION;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_LEGAL_BASIS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_LICENSE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_LICENSE_REPORT;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_MANUAL_REDACTIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_NOTIFICATIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_REDACTION_LOG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_RULES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_SMTP_CONFIGURATION;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_USERS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_VERSIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_WATERMARK;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.REANALYZE_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.REANALYZE_FILE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.REINDEX;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.REQUEST_MANUAL_REDACTION;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ROTATE_PAGE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.SEARCH;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.SEARCH_AUDIT_LOG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.SET_REVIEWER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.SET_STATUS_APPROVED;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.SET_STATUS_UNDER_APPROVAL;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UNARCHIVE_DOSSIER;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UPDATE_LICENSE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UPDATE_MY_PROFILE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UPDATE_NOTIFICATIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UPLOAD_FILE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UPLOAD_REPORT_TEMPLATE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_APP_CONFIG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_COLORS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_DIGITAL_SIGNATURE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_DOSSIER_ATTRIBUTES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_DOSSIER_ATTRIBUTES_CONFIG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_DOSSIER_STATUS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_DOSSIER_TEMPLATES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_FILE_ATTRIBUTES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_FILE_ATTRIBUTES_CONFIG;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_GENERAL_CONFIGURATION;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_LEGAL_BASIS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_RULES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_SMTP_CONFIGURATION;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_USERS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_WATERMARK;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import com.google.common.collect.Sets;
+
+public final class ApplicationRoles {
+
+ public static final String RED_USER_ROLE = "RED_USER";
+ public static final String RED_MANAGER_ROLE = "RED_MANAGER";
+ public static final String RED_ADMIN_ROLE = "RED_ADMIN";
+ public static final String RED_USER_ADMIN_ROLE = "RED_USER_ADMIN";
+
+ public static final Set UNMAPPED_ACTION_ROLES = Sets.newHashSet(UNARCHIVE_DOSSIER, UPDATE_LICENSE, GET_RSS);
+
+ public static final Set RED_USER_ACTION_ROLES = Sets.newHashSet(ADD_COMMENT,
+ READ_LICENSE,
+ READ_APP_CONFIG,
+ READ_DOSSIER_STATUS,
+ ADD_DOSSIER_DICTIONARY_ENTRY,
+ DO_MANUAL_REDACTION,
+ ADD_UPDATE_DOSSIER_DICTIONARY_TYPE,
+ DELETE_COMMENT,
+ DELETE_DOSSIER_DICTIONARY_ENTRY,
+ DELETE_DOSSIER_DICTIONARY_TYPE,
+ DELETE_FILE,
+ DELETE_MANUAL_REDACTION,
+ DOWNLOAD_ANNOTATED_FILE,
+ DOWNLOAD_ORIGINAL_FILE,
+ DOWNLOAD_REDACTED_FILE,
+ DOWNLOAD_REDACTION_PREVIEW_FILE,
+ DOWNLOAD_REPORT_TEMPLATE,
+ EXCLUDE_INCLUDE_FILE,
+ EXCLUDE_INCLUDE_PAGES,
+ GET_REPORT_TEMPLATES,
+ MANAGE_USER_PREFERENCES,
+ MANAGE_VIEWED_PAGES,
+ PROCESS_DOWNLOAD,
+ PROCESS_MANUAL_REDACTION_REQUEST,
+ READ_COLORS,
+ READ_DICTIONARY_TYPES,
+ READ_DIGITAL_SIGNATURE,
+ READ_DOSSIER,
+ READ_DOSSIER_ATTRIBUTES,
+ READ_DOSSIER_ATTRIBUTES_CONFIG,
+ READ_DOSSIER_TEMPLATES,
+ READ_DOWNLOAD_STATUS,
+ READ_FILE_ATTRIBUTES_CONFIG,
+ READ_FILE_STATUS,
+ READ_GENERAL_CONFIGURATION,
+ READ_LEGAL_BASIS,
+ READ_MANUAL_REDACTIONS,
+ READ_NOTIFICATIONS,
+ READ_REDACTION_LOG,
+ READ_RULES,
+ READ_USERS,
+ READ_VERSIONS,
+ READ_WATERMARK,
+ REANALYZE_DOSSIER,
+ REANALYZE_FILE,
+ REQUEST_MANUAL_REDACTION,
+ ROTATE_PAGE,
+ SEARCH,
+ SEARCH_AUDIT_LOG,
+ SET_REVIEWER,
+ SET_STATUS_APPROVED,
+ SET_STATUS_UNDER_APPROVAL,
+ UPDATE_MY_PROFILE,
+ UPDATE_NOTIFICATIONS,
+ UPLOAD_FILE,
+ WRITE_FILE_ATTRIBUTES,
+ PROCESS_TEXT_HIGHLIGHTS,
+ GET_HIGHLIGHTS,
+ CONVERT_HIGHLIGHTS,
+ DELETE_HIGHLIGHTS,
+ DELETE_IMPORTED_REDACTIONS);
+
+ public static final Set RED_ADMIN_ACTION_ROLES = Sets.newHashSet(ADD_DICTIONARY_ENTRY,
+ ADD_UPDATE_DICTIONARY_TYPE,
+ WRITE_DOSSIER_STATUS,
+ READ_DOSSIER_STATUS,
+ DELETE_DICTIONARY_ENTRY,
+ DELETE_DICTIONARY_TYPE,
+ DELETE_REPORT_TEMPLATE,
+ DOWNLOAD_REPORT_TEMPLATE,
+ GET_REPORT_TEMPLATES,
+ MANAGE_USER_PREFERENCES,
+ READ_COLORS,
+ READ_DICTIONARY_TYPES,
+ READ_DIGITAL_SIGNATURE,
+ READ_DOSSIER_ATTRIBUTES,
+ READ_DOSSIER_ATTRIBUTES_CONFIG,
+ READ_DOSSIER_TEMPLATES,
+ READ_FILE_ATTRIBUTES_CONFIG,
+ READ_LEGAL_BASIS,
+ READ_LICENSE_REPORT,
+ READ_NOTIFICATIONS,
+ READ_RULES,
+ READ_SMTP_CONFIGURATION,
+ READ_VERSIONS,
+ READ_WATERMARK,
+ REINDEX,
+ SEARCH_AUDIT_LOG,
+ UPDATE_NOTIFICATIONS,
+ UPLOAD_REPORT_TEMPLATE,
+ WRITE_COLORS,
+ WRITE_DIGITAL_SIGNATURE,
+ WRITE_DOSSIER_ATTRIBUTES_CONFIG,
+ WRITE_DOSSIER_TEMPLATES,
+ WRITE_FILE_ATTRIBUTES_CONFIG,
+ WRITE_GENERAL_CONFIGURATION,
+ WRITE_LEGAL_BASIS,
+ WRITE_RULES,
+ WRITE_SMTP_CONFIGURATION,
+ WRITE_WATERMARK,
+ WRITE_APP_CONFIG,
+ MANAGE_ACL_PERMISSIONS,
+ CREATE_TENANT,
+ GET_TENANTS,
+ DEPLOYMENT_INFO);
+
+ public static final Set RED_MANAGER_ACTION_ROLES = Sets.newHashSet(ADD_UPDATE_DOSSIER, ARCHIVE_DOSSIER, DELETE_DOSSIER, WRITE_DOSSIER_ATTRIBUTES);
+
+ public static final Set RED_USER_ADMIN_ACTION_ROLES = Sets.newHashSet(MANAGE_USER_PREFERENCES,
+ READ_ALL_USERS,
+ READ_DOSSIER,
+ READ_APP_CONFIG,
+ READ_GENERAL_CONFIGURATION,
+ READ_GENERAL_CONFIGURATION,
+ READ_NOTIFICATIONS,
+ READ_USERS,
+ UPDATE_MY_PROFILE,
+ UPDATE_NOTIFICATIONS,
+ WRITE_USERS,
+ READ_LICENSE);
+
+ public static final Map> ROLE_DATA = Map.of(RED_USER_ROLE,
+ RED_USER_ACTION_ROLES,
+ RED_MANAGER_ROLE,
+ RED_MANAGER_ACTION_ROLES,
+ RED_ADMIN_ROLE,
+ RED_ADMIN_ACTION_ROLES,
+ RED_USER_ADMIN_ROLE,
+ RED_USER_ADMIN_ACTION_ROLES);
+
+
+ private ApplicationRoles() {}
+
+
+ public static void validateRoles(Collection roles) {
+
+ for (String role : roles) {
+ if (!ROLE_DATA.containsKey(role)) {
+ throw new IllegalArgumentException("Invalid Role: " + role);
+ }
+ }
+ }
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/AccessControlService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/AccessControlService.java
index 4a8e2a394..5a1ff5859 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/AccessControlService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/AccessControlService.java
@@ -4,12 +4,12 @@ import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PostAuthorize;
import org.springframework.stereotype.Service;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.acl.custom.dossier.DossierACLService;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import feign.FeignException;
import lombok.RequiredArgsConstructor;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/CvAnalysisMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/CvAnalysisMessageReceiver.java
index 89eb4edda..0159e5092 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/CvAnalysisMessageReceiver.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/CvAnalysisMessageReceiver.java
@@ -28,9 +28,7 @@ public class CvAnalysisMessageReceiver {
@SneakyThrows
@RabbitListener(queues = MessagingConfiguration.CV_ANALYSIS_RESPONSE_QUEUE)
- public void receive(String in) {
-
- var response = objectMapper.readValue(in, CvAnalysisServiceResponse.class);
+ public void receive(CvAnalysisServiceResponse response) {
fileStatusService.setStatusAnalyse(response.getDossierId(), response.getFileId(), false);
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DeploymentKeyService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DeploymentKeyService.java
deleted file mode 100644
index 9ccbd5ccf..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DeploymentKeyService.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service;
-
-import java.nio.charset.StandardCharsets;
-import java.util.Locale;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-import com.google.common.hash.HashFunction;
-import com.google.common.hash.Hashing;
-
-import lombok.RequiredArgsConstructor;
-
-@Service
-@RequiredArgsConstructor
-public class DeploymentKeyService {
-
- private final TenantManagementService tenantManagementService;
-
- private final HashFunction hashFunction = Hashing.farmHashFingerprint64();
- private final String hardcodedKey = "89274365-160c-49f2-ab8b-ad83fc43c2e1";
- @Value("${redaction.kubernetes.id:someValue}")
- private String redactionKubernetesId;
-
-
- public String getDeploymentKey(String tenantId) {
-
- var tenant = tenantManagementService.getTenant(tenantId);
-
- var deploymentKey = hashFunction.hashString(tenant.getGuid() + redactionKubernetesId + hardcodedKey, StandardCharsets.UTF_8);
-
- return deploymentKey.toString().toUpperCase(Locale.ROOT);
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java
index 1e95ce6b6..5a5405632 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java
@@ -13,7 +13,7 @@ import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java
index fbd09fc11..cc5f7630e 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java
@@ -1,16 +1,16 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ADD_DICTIONARY_ENTRY;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ADD_DOSSIER_DICTIONARY_ENTRY;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ADD_UPDATE_DICTIONARY_TYPE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.ADD_UPDATE_DOSSIER_DICTIONARY_TYPE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_DICTIONARY_ENTRY;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_DICTIONARY_TYPE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_DOSSIER_DICTIONARY_ENTRY;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.DELETE_DOSSIER_DICTIONARY_TYPE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_COLORS;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DICTIONARY_TYPES;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_COLORS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ADD_DICTIONARY_ENTRY;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ADD_DOSSIER_DICTIONARY_ENTRY;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ADD_UPDATE_DICTIONARY_TYPE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.ADD_UPDATE_DOSSIER_DICTIONARY_TYPE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_DICTIONARY_ENTRY;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_DICTIONARY_TYPE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_DOSSIER_DICTIONARY_ENTRY;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DELETE_DOSSIER_DICTIONARY_TYPE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_COLORS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DICTIONARY_TYPES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_COLORS;
import static com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUtils.toTypeId;
import java.util.ArrayList;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureKmsService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureKmsService.java
index be094fed3..4817709e7 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureKmsService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureKmsService.java
@@ -14,6 +14,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DigitalSignatureKmsRepository;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DigitalSignatureKms;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.DigitalSignatureType;
+import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
import feign.FeignException;
import lombok.RequiredArgsConstructor;
@@ -45,7 +46,10 @@ public class DigitalSignatureKmsService {
DigitalSignatureKmsEntity digitalSignature = convert(digitalSignatureKms);
encrypt(digitalSignature);
- var result = digitalSignatureKmsRepository.save(digitalSignature);
+ var saved = digitalSignatureKmsRepository.save(digitalSignature);
+
+ DigitalSignatureKmsEntity result = new DigitalSignatureKmsEntity();
+ BeanUtils.copyProperties(saved, result);
digitalSignatureTypeService.setActiveDigitalSignatureType(DigitalSignatureType.KMS);
decrypt(result);
return result;
@@ -73,6 +77,7 @@ public class DigitalSignatureKmsService {
public DigitalSignatureKmsEntity getDigitalSignature() {
return digitalSignatureKmsRepository.findById(DigitalSignatureKmsEntity.ID).map(digitalSignature -> {
+
DigitalSignatureKmsEntity result = new DigitalSignatureKmsEntity();
BeanUtils.copyProperties(digitalSignature, result);
decrypt(result);
@@ -87,6 +92,7 @@ public class DigitalSignatureKmsService {
digitalSignatureTypeService.deleteDigitalSignatureType();
}
+
private DigitalSignatureKmsEntity convert(DigitalSignatureKms digitalSignatureKms) {
return DigitalSignatureKmsEntity.builder()
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java
index cd087453f..0c69a2c97 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@@ -13,6 +13,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.DigitalSignature;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.DigitalSignatureType;
+import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java
index 07d82a23c..50b5090ea 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java
@@ -8,7 +8,7 @@ import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierService.java
index 03cbb820b..8d3f2fb33 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierService.java
@@ -4,7 +4,6 @@ import java.time.OffsetDateTime;
import java.util.List;
import java.util.Set;
-import javax.validation.ConstraintViolationException;
import org.springframework.stereotype.Service;
@@ -20,6 +19,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierChange;
+import jakarta.validation.ConstraintViolationException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java
index 5f95f385d..28a9058e9 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java
@@ -7,7 +7,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@@ -32,13 +32,13 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.WatermarkModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.CloneDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierTemplateStatus;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.legalbasis.LegalBasis;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java
index ab9e072e6..e4124d763 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java
@@ -55,7 +55,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
import com.iqser.red.service.persistence.management.v1.processor.utils.FileUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.WatermarkModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierAttributeConfig;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierTemplate;
@@ -74,6 +73,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DownloadService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DownloadService.java
index 347d1ac14..04e128c20 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DownloadService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DownloadService.java
@@ -131,14 +131,10 @@ public class DownloadService {
private void addToDownloadQueue(DownloadJob downloadJob, int priority) {
- try {
- rabbitTemplate.convertAndSend(MessagingConfiguration.DOWNLOAD_QUEUE, objectMapper.writeValueAsString(downloadJob), message -> {
+ rabbitTemplate.convertAndSend(MessagingConfiguration.DOWNLOAD_QUEUE, downloadJob, message -> {
message.getMessageProperties().setPriority(priority);
return message;
});
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EmailService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EmailService.java
index 7a130c8db..67b8fcb27 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EmailService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EmailService.java
@@ -4,13 +4,13 @@ import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
-import javax.mail.Address;
-import javax.mail.Message;
-import javax.mail.Multipart;
-import javax.mail.internet.AddressException;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMultipart;
+import jakarta.mail.Address;
+import jakarta.mail.Message;
+import jakarta.mail.Multipart;
+import jakarta.mail.internet.AddressException;
+import jakarta.mail.internet.InternetAddress;
+import jakarta.mail.internet.MimeBodyPart;
+import jakarta.mail.internet.MimeMultipart;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EncryptionDecryptionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EncryptionDecryptionService.java
deleted file mode 100644
index 5dc7052fb..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EncryptionDecryptionService.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service;
-
-import java.nio.ByteBuffer;
-import java.nio.charset.StandardCharsets;
-import java.security.SecureRandom;
-import java.security.spec.KeySpec;
-import java.util.Base64;
-
-import javax.annotation.PostConstruct;
-import javax.crypto.Cipher;
-import javax.crypto.SecretKey;
-import javax.crypto.SecretKeyFactory;
-import javax.crypto.spec.GCMParameterSpec;
-import javax.crypto.spec.PBEKeySpec;
-import javax.crypto.spec.SecretKeySpec;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-import lombok.SneakyThrows;
-
-@Service
-public class EncryptionDecryptionService {
-
- @Value("${persistence-service.crypto.key:redaction}")
- private String key;
-
- private SecretKey secretKey;
- private byte[] iv;
-
-
- @SneakyThrows
- @PostConstruct
- protected void postConstruct() {
-
- SecureRandom secureRandom = new SecureRandom();
- iv = new byte[12];
- secureRandom.nextBytes(iv);
- secretKey = generateSecretKey(key, iv);
- }
-
-
- @SneakyThrows
- public SecretKey generateSecretKey(String password, byte[] iv) {
-
- KeySpec spec = new PBEKeySpec(password.toCharArray(), iv, 65536, 128); // AES-128
- SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
- byte[] key = secretKeyFactory.generateSecret(spec).getEncoded();
- return new SecretKeySpec(key, "AES");
- }
-
-
- @SneakyThrows
- public String encrypt(String strToEncrypt) {
- if(strToEncrypt == null){
- return null;
- }
-
- return Base64.getEncoder().encodeToString(encrypt(strToEncrypt.getBytes()));
- }
-
-
- @SneakyThrows
- public byte[] encrypt(byte[] data) {
-
- Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
- GCMParameterSpec parameterSpec = new GCMParameterSpec(128, iv);
- cipher.init(Cipher.ENCRYPT_MODE, secretKey, parameterSpec);
- byte[] encryptedData = cipher.doFinal(data);
- ByteBuffer byteBuffer = ByteBuffer.allocate(4 + iv.length + encryptedData.length);
- byteBuffer.putInt(iv.length);
- byteBuffer.put(iv);
- byteBuffer.put(encryptedData);
- return byteBuffer.array();
- }
-
-
- @SneakyThrows
- public String decrypt(String strToDecrypt) {
-
- byte[] bytes = Base64.getDecoder().decode(strToDecrypt);
- return new String(decrypt(bytes), StandardCharsets.UTF_8);
- }
-
-
- @SneakyThrows
- public byte[] decrypt(byte[] encryptedData) {
-
- ByteBuffer byteBuffer = ByteBuffer.wrap(encryptedData);
- int noonceSize = byteBuffer.getInt();
- if (noonceSize < 12 || noonceSize >= 16) {
- throw new IllegalArgumentException("Nonce size is incorrect. Make sure that the incoming data is an AES encrypted file.");
- }
- byte[] iv = new byte[noonceSize];
- byteBuffer.get(iv);
-
- SecretKey secretKey = generateSecretKey(key, iv);
-
- byte[] cipherBytes = new byte[byteBuffer.remaining()];
- byteBuffer.get(cipherBytes);
-
- Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
- GCMParameterSpec parameterSpec = new GCMParameterSpec(128, iv);
- cipher.init(Cipher.DECRYPT_MODE, secretKey, parameterSpec);
- return cipher.doFinal(cipherBytes);
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileAttributesManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileAttributesManagementService.java
index cfe0ed5cb..492186678 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileAttributesManagementService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileAttributesManagementService.java
@@ -16,7 +16,7 @@ import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileManagementStorageService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileManagementStorageService.java
index b1a46677a..81ca3f41d 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileManagementStorageService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileManagementStorageService.java
@@ -7,13 +7,13 @@ import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.imported.ImportedRedactions;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.section.SectionGrid;
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileService.java
index 6b9f5368b..d25318f6c 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileService.java
@@ -7,7 +7,7 @@ import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Set;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusProcessingUpdateService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusProcessingUpdateService.java
index 2a037417e..8ff33992d 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusProcessingUpdateService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusProcessingUpdateService.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.retry.support.RetryTemplate;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java
index 7da56b821..546b78131 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java
@@ -6,8 +6,6 @@ import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
-
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
@@ -49,6 +47,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus;
+import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -221,14 +220,10 @@ public class FileStatusService {
setStatusFullProcessing(fileId);
}
- try {
- if (priority) {
- rabbitTemplate.convertAndSend(MessagingConfiguration.REDACTION_PRIORITY_QUEUE, objectMapper.writeValueAsString(analyseRequest));
- } else {
- rabbitTemplate.convertAndSend(MessagingConfiguration.REDACTION_QUEUE, objectMapper.writeValueAsString(analyseRequest));
- }
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
+ if (priority) {
+ rabbitTemplate.convertAndSend(MessagingConfiguration.REDACTION_PRIORITY_QUEUE, analyseRequest);
+ } else {
+ rabbitTemplate.convertAndSend(MessagingConfiguration.REDACTION_QUEUE, analyseRequest);
}
}
@@ -240,7 +235,7 @@ public class FileStatusService {
setStatusPreProcessingQueued(fileId);
- rabbitTemplate.convertAndSend(MessagingConfiguration.PRE_PROCESSING_QUEUE, objectMapper.writeValueAsString(processUntouchedDocumentRequest));
+ rabbitTemplate.convertAndSend(MessagingConfiguration.PRE_PROCESSING_QUEUE, processUntouchedDocumentRequest);
}
@@ -254,22 +249,18 @@ public class FileStatusService {
fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.FIGURE_DETECTION_ANALYZING);
- try {
- rabbitTemplate.convertAndSend(MessagingConfiguration.CV_ANALYSIS_QUEUE,
- objectMapper.writeValueAsString(CvAnalysisServiceRequest.builder()
- .dossierId(dossierId)
- .fileId(fileId)
- .operation(CvAnalysisServiceRequest.OPERATION_FIGURE_DETECTION)
- .targetFileExtension(CvAnalysisServiceRequest.TARGET_FILE_EXTENSION)
- .responseFileExtension(CvAnalysisServiceRequest.FIGURE_DETECTION_FILE_EXTENSION)
- .build()),
- message -> {
- message.getMessageProperties().setPriority(1);
- return message;
- });
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
+ rabbitTemplate.convertAndSend(MessagingConfiguration.CV_ANALYSIS_QUEUE,
+ CvAnalysisServiceRequest.builder()
+ .dossierId(dossierId)
+ .fileId(fileId)
+ .operation(CvAnalysisServiceRequest.OPERATION_FIGURE_DETECTION)
+ .targetFileExtension(CvAnalysisServiceRequest.TARGET_FILE_EXTENSION)
+ .responseFileExtension(CvAnalysisServiceRequest.FIGURE_DETECTION_FILE_EXTENSION)
+ .build(),
+ message -> {
+ message.getMessageProperties().setPriority(1);
+ return message;
+ });
}
@@ -277,44 +268,35 @@ public class FileStatusService {
fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.TABLE_PARSING_ANALYZING);
- try {
- rabbitTemplate.convertAndSend(MessagingConfiguration.CV_ANALYSIS_QUEUE,
- objectMapper.writeValueAsString(CvAnalysisServiceRequest.builder()
- .dossierId(dossierId)
- .fileId(fileId)
- .operation(CvAnalysisServiceRequest.OPERATION_TABLE_PARSING)
- .targetFileExtension(CvAnalysisServiceRequest.TARGET_FILE_EXTENSION)
- .responseFileExtension(CvAnalysisServiceRequest.TABLE_PARSING_FILE_EXTENSION)
- .build()),
- message -> {
- message.getMessageProperties().setPriority(1);
- return message;
- });
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
+ rabbitTemplate.convertAndSend(MessagingConfiguration.CV_ANALYSIS_QUEUE,
+ CvAnalysisServiceRequest.builder()
+ .dossierId(dossierId)
+ .fileId(fileId)
+ .operation(CvAnalysisServiceRequest.OPERATION_TABLE_PARSING)
+ .targetFileExtension(CvAnalysisServiceRequest.TARGET_FILE_EXTENSION)
+ .responseFileExtension(CvAnalysisServiceRequest.TABLE_PARSING_FILE_EXTENSION)
+ .build(),
+ message -> {
+ message.getMessageProperties().setPriority(1);
+ return message;
+ });
}
public void addToImageQueue(String dossierId, String fileId) {
setStatusImageAnalyzing(fileId);
- try {
- rabbitTemplate.convertAndSend(MessagingConfiguration.IMAGE_SERVICE_QUEUE,
- objectMapper.writeValueAsString(ImageServiceRequest.builder()
- .dossierId(dossierId)
- .fileId(fileId)
- .targetFileExtension(ImageServiceRequest.TARGET_FILE_EXTENSION)
- .responseFileExtension(ImageServiceRequest.RESPONSE_FILE_EXTENSION)
- .build()),
- message -> {
- message.getMessageProperties().setPriority(1);
- return message;
- });
- } catch (JsonProcessingException e) {
- log.warn("Error trying to send message to the image queue: {}", e.getMessage());
- throw new RuntimeException(e);
- }
+ rabbitTemplate.convertAndSend(MessagingConfiguration.IMAGE_SERVICE_QUEUE,
+ ImageServiceRequest.builder()
+ .dossierId(dossierId)
+ .fileId(fileId)
+ .targetFileExtension(ImageServiceRequest.TARGET_FILE_EXTENSION)
+ .responseFileExtension(ImageServiceRequest.RESPONSE_FILE_EXTENSION)
+ .build(),
+ message -> {
+ message.getMessageProperties().setPriority(1);
+ return message;
+ });
}
@@ -336,21 +318,17 @@ public class FileStatusService {
protected void addToNerQueue(String dossierId, String fileId) {
setStatusNerAnalyzing(fileId);
- try {
- rabbitTemplate.convertAndSend(MessagingConfiguration.NER_SERVICE_QUEUE,
- objectMapper.writeValueAsString(NerServiceRequest.builder()
- .dossierId(dossierId)
- .fileId(fileId)
- .targetFileExtension(NerServiceRequest.TARGET_FILE_EXTENSION)
- .responseFileExtension(NerServiceRequest.RESPONSE_FILE_EXTENSION)
- .build()),
- message -> {
- message.getMessageProperties().setPriority(1);
- return message;
- });
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
+ rabbitTemplate.convertAndSend(MessagingConfiguration.NER_SERVICE_QUEUE,
+ NerServiceRequest.builder()
+ .dossierId(dossierId)
+ .fileId(fileId)
+ .targetFileExtension(NerServiceRequest.TARGET_FILE_EXTENSION)
+ .responseFileExtension(NerServiceRequest.RESPONSE_FILE_EXTENSION)
+ .build(),
+ message -> {
+ message.getMessageProperties().setPriority(1);
+ return message;
+ });
}
@@ -430,14 +408,10 @@ public class FileStatusService {
private void addToOcrQueue(String dossierId, String fileId, int priority) {
- try {
- rabbitTemplate.convertAndSend(MessagingConfiguration.OCR_QUEUE, objectMapper.writeValueAsString(new DocumentRequest(dossierId, fileId)), message -> {
- message.getMessageProperties().setPriority(priority);
- return message;
- });
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
+ rabbitTemplate.convertAndSend(MessagingConfiguration.OCR_QUEUE, new DocumentRequest(dossierId, fileId), message -> {
+ message.getMessageProperties().setPriority(priority);
+ return message;
+ });
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/GeneralConfigurationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/GeneralConfigurationService.java
deleted file mode 100644
index da2b9c4d5..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/GeneralConfigurationService.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service;
-
-import org.apache.commons.lang3.StringUtils;
-import org.keycloak.representations.idm.RealmRepresentation;
-import org.springframework.stereotype.Service;
-
-import com.iqser.red.keycloak.commons.KeyCloakSettings;
-import com.iqser.red.keycloak.commons.RealmService;
-import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.GeneralConfigurationModel;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class GeneralConfigurationService {
-
- private final RealmService realmService;
- private final FileManagementServiceSettings fileManagementServiceSettings;
- private final KeyCloakSettings keyCloakSettings;
-
- public void initGeneralConfiguration(String tenantId){
- TenantContext.setTenantId(tenantId);
- var generalConfiguration = getGeneralConfigurations();
- log.info("Currently Configured Application Name: {}, default name: {}", generalConfiguration.getDisplayName(), fileManagementServiceSettings.getApplicationName());
- updateGeneralConfigurations(getGeneralConfigurations());
- TenantContext.clear();
- }
-
- public GeneralConfigurationModel getGeneralConfigurations() {
-
- var realm = realmService.realm(TenantContext.getTenantId()).toRepresentation();
- var auxiliaryName = realm.getDisplayNameHtml();
-
- if (!fileManagementServiceSettings.getApplicationName().equals(auxiliaryName)) {
-
- auxiliaryName = StringUtils.replaceOnce(auxiliaryName, fileManagementServiceSettings.getApplicationName(), "");
- auxiliaryName = StringUtils.replaceOnce(auxiliaryName, " (", "");
- auxiliaryName = StringUtils.reverse(StringUtils.replaceOnce(StringUtils.reverse(auxiliaryName), ")", ""));
-
- } else {
- auxiliaryName = null;
- }
-
- return GeneralConfigurationModel.builder()
- .auxiliaryName(auxiliaryName)
- .displayName(realm.getDisplayNameHtml())
- .forgotPasswordFunctionEnabled(realm.isResetPasswordAllowed() != null && realm.isResetPasswordAllowed())
- .build();
- }
-
-
- public void updateGeneralConfigurations(GeneralConfigurationModel generalConfigurationModel) {
-
- var realm = realmService.realm(TenantContext.getTenantId());
-
- var clientRepresentations = realm.clients().findByClientId(keyCloakSettings.getClientId());
- for (var client : clientRepresentations) {
- client.setDirectAccessGrantsEnabled(true);
- var clientResource = realm.clients().get(client.getId());
- clientResource.update(client);
- }
-
- var realmRepresentation = realm.toRepresentation();
- realmRepresentation.setResetPasswordAllowed(generalConfigurationModel.isForgotPasswordFunctionEnabled());
- if (!StringUtils.isEmpty(generalConfigurationModel.getAuxiliaryName())) {
- setDisplayName(realmRepresentation, fileManagementServiceSettings.getApplicationName() + " (" + generalConfigurationModel.getAuxiliaryName() + ")");
- } else {
- setDisplayName(realmRepresentation, fileManagementServiceSettings.getApplicationName());
- }
-
- try {
- realm.update(realmRepresentation);
- } catch (Exception e) {
- throw new RuntimeException("Could not update realm");
- }
- }
-
-
- private void setDisplayName(RealmRepresentation realmRepresentation, String value) {
-
- realmRepresentation.setDisplayName(value);
- realmRepresentation.setDisplayNameHtml(value);
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ImageMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ImageMessageReceiver.java
index 15d0dff7b..a4b573931 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ImageMessageReceiver.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ImageMessageReceiver.java
@@ -33,9 +33,9 @@ public class ImageMessageReceiver {
@SneakyThrows
@RabbitListener(queues = MessagingConfiguration.IMAGE_SERVICE_RESPONSE_QUEUE)
- public void receive(String in) {
+ public void receive(Message message) {
- JsonNode imageResponse = objectMapper.readTree(in);
+ JsonNode imageResponse = objectMapper.readTree(message.getBody());
String dossierId = imageResponse.path("dossierId").asText();
String fileId = imageResponse.path("fileId").asText();
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/IndexingService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/IndexingService.java
index 88f4a55b9..9a975037c 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/IndexingService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/IndexingService.java
@@ -68,36 +68,21 @@ public class IndexingService {
public void addToIndexingQueue(IndexMessageType indexMessageType, String dossierTemplateId, String dossierId, String fileId, int priority) {
- try {
- rabbitTemplate.convertAndSend(MessagingConfiguration.INDEXING_QUEUE,
- objectMapper.writeValueAsString(IndexMessage.builder()
- .messageType(indexMessageType)
- .dossierTemplateId(dossierTemplateId)
- .dossierId(dossierId)
- .fileId(fileId)
- .build()),
- message -> {
- message.getMessageProperties().setPriority(priority);
- return message;
- });
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
+ rabbitTemplate.convertAndSend(MessagingConfiguration.INDEXING_QUEUE,
+ IndexMessage.builder().messageType(indexMessageType).dossierTemplateId(dossierTemplateId).dossierId(dossierId).fileId(fileId).build(),
+ message -> {
+ message.getMessageProperties().setPriority(priority);
+ return message;
+ });
}
public void addToDeleteFromIndexQueue(String dossierId, String fileId, int priority) {
- try {
- rabbitTemplate.convertAndSend(MessagingConfiguration.DELETE_FROM_INDEX_QUEUE,
- objectMapper.writeValueAsString(IndexMessage.builder().dossierId(dossierId).fileId(fileId).build()),
- message -> {
- message.getMessageProperties().setPriority(priority);
- return message;
- });
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
+ rabbitTemplate.convertAndSend(MessagingConfiguration.DELETE_FROM_INDEX_QUEUE, IndexMessage.builder().dossierId(dossierId).fileId(fileId).build(), message -> {
+ message.getMessageProperties().setPriority(priority);
+ return message;
+ });
}
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakRoleManagerApplicationRunner.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakRoleManagerApplicationRunner.java
deleted file mode 100644
index 3643ffbdf..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakRoleManagerApplicationRunner.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service;
-
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.stereotype.Component;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Component
-@RequiredArgsConstructor
-public class KeyCloakRoleManagerApplicationRunner implements ApplicationRunner {
-
- private final TenantManagementService tenantManagementService;
- private final KeyCloakRoleManagerService keyCloakRoleManagerService;
-
-
- @Override
- public void run(ApplicationArguments args) {
-
- tenantManagementService.getTenants().forEach(tenant -> {
-
- keyCloakRoleManagerService.updateRoles(tenant.getTenantId());
-
- });
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakRoleManagerService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakRoleManagerService.java
deleted file mode 100644
index d0c108bcc..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakRoleManagerService.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service;
-
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.GET_RSS;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_ADMIN_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_MANAGER_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_USER_ADMIN_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_USER_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.UNMAPPED_ACTION_ROLES;
-
-import java.util.ArrayList;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.keycloak.representations.idm.ClientRepresentation;
-import org.keycloak.representations.idm.RoleRepresentation;
-import org.springframework.stereotype.Component;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import com.iqser.red.keycloak.commons.KeyCloakSettings;
-import com.iqser.red.keycloak.commons.RealmService;
-import com.iqser.red.keycloak.commons.roles.ApplicationRoles;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Component
-@RequiredArgsConstructor
-public class KeyCloakRoleManagerService {
-
- private final RealmService realmService;
- private final KeyCloakSettings settings;
-
-
- public void updateRoles(String tenantId) {
-
- var realm = realmService.realm(tenantId);
-
- log.info("Running KeyCloak Role Manager, managing client: {} with system client {}", settings.getApplicationClientId(), settings.getClientId());
- var existingRoles = realm.roles().list().stream().map(RoleRepresentation::getName).collect(Collectors.toList());
-
- log.info("Existing KC roles: {}", existingRoles);
-
- var redactionClientRepresentation = getRedactionClientRepresentation(tenantId);
- var redactionClient = realm.clients().get(redactionClientRepresentation.getId());
- var clientRoles = redactionClient.roles().list().stream().map(RoleRepresentation::getName).collect(Collectors.toList());
-
- var allRoles = ApplicationRoles.ROLE_DATA.values().stream().flatMap(Set::stream).collect(Collectors.toSet());
- allRoles.addAll(UNMAPPED_ACTION_ROLES);
- log.info("Existing KC client roles: {}", clientRoles);
- log.info("Current Application KC client roles: {}", allRoles);
- if (!Sets.newHashSet(clientRoles).equals(allRoles)) {
-
- log.info("Role-Sets are different, recreating form scratch ... ");
- // remove all roles from the redaction client
-
- clientRoles.forEach(clientRole -> {
- try {
- redactionClient.roles().deleteRole(clientRole);
- } catch (Exception e) {
- log.warn("Failed to delete client role: {}", clientRole);
- }
- });
-
- // re-create all client-roles
- allRoles.forEach(role -> {
- var roleRepresentation = new RoleRepresentation(role, role, false);
- redactionClient.roles().create(roleRepresentation);
- });
- log.info("Cleaned up KC client roles and written current ones!");
- }
-
- var allClientRoles = redactionClient.roles().list();
-
- if (settings.isScmEnabled()) {
- ApplicationRoles.ROLE_DATA.get(RED_USER_ROLE).add(GET_RSS);
- }
-
- // if an application-role doesn't exist, create it
- for (String applicationRole : ApplicationRoles.ROLE_DATA.keySet()) {
-
- log.info("Running Role Composition for role: {}", applicationRole);
- if (!existingRoles.contains(applicationRole)) {
-
- log.info("Application Role: {} doesn't exist, creating it now", applicationRole);
- var role = new RoleRepresentation(applicationRole, applicationRole, false);
- role.setComposite(true);
- realm.roles().create(role);
-
- }
-
- var applicationRoleResource = realm.roles().get(applicationRole);
- Set composites = realm.rolesById()
- .getClientRoleComposites(applicationRoleResource.toRepresentation().getId(), redactionClient.toRepresentation().getId());
-
- log.info("Deleting previous composites for application role {}", applicationRole);
- realm.rolesById().deleteComposites(applicationRoleResource.toRepresentation().getId(), new ArrayList<>(composites));
- var relevantClientRoles = allClientRoles.stream().filter(role -> ApplicationRoles.ROLE_DATA.get(applicationRole).contains(role.getName())).collect(Collectors.toList());
- log.info("Writing new composites for application role {}", applicationRole);
- realm.rolesById().addComposites(applicationRoleResource.toRepresentation().getId(), relevantClientRoles);
- log.info("Finished application role {}", applicationRole);
- }
-
- // add RED_USER Realm Role to RED_MANAGER
- var redUserRole = realm.roles().get(RED_USER_ROLE);
- var redManagerRole = realm.roles().get(RED_MANAGER_ROLE);
-
- realm.rolesById().addComposites(redManagerRole.toRepresentation().getId(), Lists.newArrayList(redUserRole.toRepresentation()));
-
- // add RED_USER_ADMIN Realm Role to RED_ADMIN
- var redAdminRole = realm.roles().get(RED_ADMIN_ROLE);
- var redUserAdminRole = realm.roles().get(RED_USER_ADMIN_ROLE);
-
- realm.rolesById().addComposites(redAdminRole.toRepresentation().getId(), Lists.newArrayList(redUserAdminRole.toRepresentation()));
-
- log.info("Finished KC Role Manager for tenant {}", tenantId);
-
- }
-
- private ClientRepresentation getRedactionClientRepresentation(String tenantId) {
-
- String applicationClientId = settings.getApplicationClientId();
- var clientRepresentationIterator = realmService.realm(tenantId).clients().findByClientId(applicationClientId).iterator();
-
- if (clientRepresentationIterator.hasNext()) {
- return clientRepresentationIterator.next();
- } else {
- throw new IllegalStateException(String.format("The application client information for the id %s could not be retrieved. " + //
- "Please check the application settings and correct the license-service/userKeycloakSettings/applicationClientId setting.", applicationClientId));
- }
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/job/KeyCloakUserSyncService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakUserSyncService.java
similarity index 77%
rename from persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/job/KeyCloakUserSyncService.java
rename to persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakUserSyncService.java
index de1733562..11e0eb4dc 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/job/KeyCloakUserSyncService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakUserSyncService.java
@@ -1,17 +1,16 @@
-package com.iqser.red.service.persistence.management.v1.processor.job;
+package com.iqser.red.service.persistence.management.v1.processor.service;
import java.util.HashSet;
import java.util.stream.Collectors;
import org.springframework.stereotype.Service;
-import com.iqser.red.keycloak.commons.UserListingService;
-import com.iqser.red.keycloak.commons.model.User;
import com.iqser.red.service.persistence.management.v1.processor.acl.custom.dossier.DossierACLService;
-import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService;
-import com.iqser.red.service.persistence.management.v1.processor.service.TenantManagementService;
-import com.iqser.red.service.persistence.management.v1.processor.service.UserService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
+import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantProvider;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -22,19 +21,18 @@ import lombok.extern.slf4j.Slf4j;
public class KeyCloakUserSyncService {
private final UserService userService;
- private final UserListingService userListingService;
+ private final UsersClient usersClient;
private final DossierManagementService dossierManagementService;
private final DossierACLService dossierACLService;
- private final TenantManagementService tenantManagementService;
+ private final TenantProvider tenantProvider;
public void syncUsersWithKC() {
-
- tenantManagementService.getTenants().forEach(tenant -> {
+ tenantProvider.getTenants().forEach(tenant -> {
TenantContext.setTenantId(tenant.getTenantId());
- var allUsers = userListingService.getAllUsers(tenant.getTenantId());
+ var allUsers = usersClient.getAllUsers(true);
// all userIds from KC
var allUserIds = allUsers.stream().map(User::getUserId).collect(Collectors.toSet());
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionService.java
index df8560a24..135636e72 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionService.java
@@ -247,14 +247,10 @@ public class ManualRedactionService {
var analyseRequest = AnalyzeRequest.builder().messageType(MessageType.SURROUNDING_TEXT).dossierId(dossierId).fileId(fileId).manualRedactions(manualRedactions).build();
- try {
- rabbitTemplate.convertAndSend(MessagingConfiguration.REDACTION_QUEUE, objectMapper.writeValueAsString(analyseRequest), message -> {
- message.getMessageProperties().setPriority(1);
- return message;
- });
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
+ rabbitTemplate.convertAndSend(MessagingConfiguration.REDACTION_QUEUE, analyseRequest, message -> {
+ message.getMessageProperties().setPriority(1);
+ return message;
+ });
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/NerMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/NerMessageReceiver.java
index d2be9847f..e332a5df5 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/NerMessageReceiver.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/NerMessageReceiver.java
@@ -30,9 +30,9 @@ public class NerMessageReceiver {
@SneakyThrows
@RabbitListener(queues = MessagingConfiguration.NER_SERVICE_RESPONSE_QUEUE)
- public void receive(String in) {
+ public void receive(Message message) {
- HashMap entityResponse = objectMapper.readValue(in, new TypeReference<>() {
+ HashMap entityResponse = objectMapper.readValue(message.getBody(), new TypeReference<>() {
});
String dossierId = (String) entityResponse.get("dossierId");
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/OCRProcessingMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/OCRProcessingMessageReceiver.java
index c231b05cd..c9ce0abeb 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/OCRProcessingMessageReceiver.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/OCRProcessingMessageReceiver.java
@@ -23,9 +23,7 @@ public class OCRProcessingMessageReceiver {
@SneakyThrows
@RabbitListener(queues = MessagingConfiguration.OCR_STATUS_UPDATE_RESPONSE_QUEUE)
- public void receive(String in) {
-
- var response = objectMapper.readValue(in, OCRStatusUpdateResponse.class);
+ public void receive(OCRStatusUpdateResponse response) {
fileStatusService.updateOCRStatus(response);
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReportTemplateService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReportTemplateService.java
index 7dddf3fb3..2b7e95dbe 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReportTemplateService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReportTemplateService.java
@@ -11,11 +11,11 @@ import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.ReportTemplateUpdateRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.ReportTemplate;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.ReportTemplateUploadRequest;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/StopwordService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/StopwordService.java
index 287d313e0..775f865b9 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/StopwordService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/StopwordService.java
@@ -4,7 +4,7 @@ import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/TenantManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/TenantManagementService.java
deleted file mode 100644
index 64ed8b1ef..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/TenantManagementService.java
+++ /dev/null
@@ -1,446 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service;
-
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_ADMIN_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_MANAGER_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_USER_ADMIN_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_USER_ROLE;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
-import java.util.stream.Collectors;
-
-import javax.sql.DataSource;
-
-import org.keycloak.representations.idm.ClientRepresentation;
-import org.keycloak.representations.idm.CredentialRepresentation;
-import org.keycloak.representations.idm.RealmRepresentation;
-import org.keycloak.representations.idm.RoleRepresentation;
-import org.keycloak.representations.idm.RolesRepresentation;
-import org.keycloak.representations.idm.UserRepresentation;
-import org.postgresql.util.PSQLException;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.core.io.ResourceLoader;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.StatementCallback;
-import org.springframework.jdbc.datasource.SingleConnectionDataSource;
-import org.springframework.stereotype.Service;
-
-import com.iqser.red.keycloak.commons.KeyCloakAdminClientService;
-import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
-import com.iqser.red.service.persistence.management.v1.processor.exception.InternalServerErrorException;
-import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
-import com.iqser.red.service.persistence.management.v1.processor.migration.AsyncMigrationStarterService;
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.AzureStorageConnectionEntity;
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.DatabaseConnectionEntity;
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.S3StorageConnectionEntity;
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.SearchConnectionEntity;
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.TenantEntity;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
-import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
-import com.iqser.red.service.persistence.management.v1.processor.utils.jdbc.JDBCUtils;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.AzureStorageConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.DatabaseConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.RedUser;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.S3StorageConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.SearchConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantResponse;
-
-import liquibase.exception.LiquibaseException;
-import liquibase.integration.spring.SpringLiquibase;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Service
-@EnableConfigurationProperties(LiquibaseProperties.class)
-public class TenantManagementService {
-
- private static final Long MAX_WAIT_TIME = 60_000L; // 60 seconds
-
- private static final Set SUPPORTED_DATABASES = Set.of("postgresql");
- private static final Set SQL_CONNECTION_ERROR_CODES = Set.of(
- // connection_exception
- "08000",
- // connection_does_not_exist
- "08003",
- // connection_failure
- "08006",
- // invalid_catalog_name
- "3D000");
-
- private final EncryptionDecryptionService encryptionService;
-
- private final LiquibaseProperties liquibaseProperties;
- private final ResourceLoader resourceLoader;
- private final TenantRepository tenantRepository;
- private final AsyncMigrationStarterService asyncMigrationStarterService;
- private final GeneralConfigurationService generalConfigurationService;
- private final KeyCloakRoleManagerService keyCloakRoleManagerService;
- private final KeyCloakAdminClientService keycloak;
-
- private final FileManagementServiceSettings settings;
-
- public TenantManagementService(EncryptionDecryptionService encryptionService,
- @Qualifier("tenantLiquibaseProperties") LiquibaseProperties liquibaseProperties,
- ResourceLoader resourceLoader,
- TenantRepository tenantRepository,
- AsyncMigrationStarterService asyncMigrationStarterService,
- GeneralConfigurationService generalConfigurationService,
- KeyCloakRoleManagerService keyCloakRoleManagerService,
- KeyCloakAdminClientService keycloak, FileManagementServiceSettings settings) {
-
- this.encryptionService = encryptionService;
- this.liquibaseProperties = liquibaseProperties;
- this.resourceLoader = resourceLoader;
- this.tenantRepository = tenantRepository;
- this.asyncMigrationStarterService = asyncMigrationStarterService;
- this.generalConfigurationService = generalConfigurationService;
- this.keyCloakRoleManagerService = keyCloakRoleManagerService;
- this.keycloak = keycloak;
- this.settings = settings;
- }
-
-
- @SneakyThrows
- public void createTenant(TenantRequest tenantRequest) {
-
- if (tenantRepository.findById(tenantRequest.getTenantId()).isEmpty()) {
-
- createSchema(tenantRequest);
-
- var jdbcUrl = JDBCUtils.buildJdbcUrlWithSchema(tenantRequest.getDatabaseConnection());
- validateJdbcUrl(jdbcUrl);
-
- try (Connection connection = DriverManager.getConnection(jdbcUrl,
- tenantRequest.getDatabaseConnection().getUsername(),
- tenantRequest.getDatabaseConnection().getPassword())) {
- DataSource tenantDataSource = new SingleConnectionDataSource(connection, false);
- runLiquibase(tenantDataSource);
- } catch (PSQLException e) {
- handleClientException(e);
- handleInternalException(e);
- }
-
- TenantEntity tenantEntity = TenantEntity.builder()
- .tenantId(tenantRequest.getTenantId())
- .displayName(tenantRequest.getDisplayName())
- .guid(UUID.randomUUID().toString())
- .databaseConnection(DatabaseConnectionEntity.builder()
- .driver(tenantRequest.getDatabaseConnection().getDriver())
- .host(tenantRequest.getDatabaseConnection().getHost())
- .port(tenantRequest.getDatabaseConnection().getPort())
- .database(tenantRequest.getDatabaseConnection().getDatabase())
- .schema(tenantRequest.getDatabaseConnection().getSchema())
- .username(tenantRequest.getDatabaseConnection().getUsername())
- .password(encryptionService.encrypt(tenantRequest.getDatabaseConnection().getPassword()))
- .build())
- .searchConnection(SearchConnectionEntity.builder()
- .hosts(tenantRequest.getSearchConnection().getHosts())
- .port(tenantRequest.getSearchConnection().getPort())
- .scheme(tenantRequest.getSearchConnection().getScheme())
- .username(tenantRequest.getSearchConnection().getUsername())
- .password(encryptionService.encrypt(tenantRequest.getSearchConnection().getPassword()))
- .numberOfShards(tenantRequest.getSearchConnection().getNumberOfShards())
- .numberOfReplicas(tenantRequest.getSearchConnection().getNumberOfReplicas())
- .build())
- .build();
-
- if (tenantRequest.getAzureStorageConnection() != null) {
- tenantEntity.setAzureStorageConnection(AzureStorageConnectionEntity.builder()
- .connectionString(encryptionService.encrypt(tenantRequest.getAzureStorageConnection().getConnectionString()))
- .containerName(tenantRequest.getAzureStorageConnection().getContainerName())
- .build());
- }
-
- if (tenantRequest.getS3StorageConnection() != null) {
- tenantEntity.setS3StorageConnection(S3StorageConnectionEntity.builder()
- .key(tenantRequest.getS3StorageConnection().getKey())
- .secret(encryptionService.encrypt(tenantRequest.getS3StorageConnection().getSecret()))
- .signerType(tenantRequest.getS3StorageConnection().getSignerType())
- .bucketName(tenantRequest.getS3StorageConnection().getBucketName())
- .region(tenantRequest.getS3StorageConnection().getRegion())
- .endpoint(tenantRequest.getS3StorageConnection().getEndpoint())
- .build());
- }
-
- tenantRepository.save(tenantEntity);
-
- createRealm(tenantRequest.getTenantId(), tenantRequest.getRedUsers());
-
- var waitTime = 0;
- boolean realmReady;
- do {
- realmReady = tryToAccessRealm(tenantRequest.getTenantId());
- if (realmReady) {
- break;
- } else {
- Thread.sleep(1_000L);
- waitTime += 1_000L;
- }
-
- } while (waitTime < MAX_WAIT_TIME);
-
- if (!realmReady) {
- throw new InternalServerErrorException("Failed to create KC realm");
- }
-
- generalConfigurationService.initGeneralConfiguration(tenantRequest.getTenantId());
- keyCloakRoleManagerService.updateRoles(tenantRequest.getTenantId());
- asyncMigrationStarterService.runForTenant(tenantRequest.getTenantId());
-
- } else {
- throw ConflictException.withObjectName("tenant");
- }
- }
-
-
- private void createSchema(TenantRequest tenantRequest) {
-
- var jdbcUrl = JDBCUtils.buildJdbcUrl(tenantRequest.getDatabaseConnection());
- try (Connection connection = DriverManager.getConnection(jdbcUrl,
- tenantRequest.getDatabaseConnection().getUsername(),
- tenantRequest.getDatabaseConnection().getPassword())) {
- DataSource tenantDataSource = new SingleConnectionDataSource(connection, false);
- JdbcTemplate jdbcTemplate = new JdbcTemplate(tenantDataSource);
- jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("CREATE SCHEMA " + tenantRequest.getDatabaseConnection().getSchema()));
- jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("GRANT USAGE ON SCHEMA " + tenantRequest.getDatabaseConnection()
- .getSchema() + " TO " + tenantRequest.getDatabaseConnection().getUsername()));
- } catch (Exception e) {
- log.info("Could not create schema, ignoring");
- }
- }
-
-
- private boolean tryToAccessRealm(String tenantId) {
-
- try {
- return keycloak.getAdminClient().realms().findAll().stream().anyMatch(r -> r.getRealm().equals(tenantId));
- } catch (Exception e) {
- return false;
- }
- }
-
-
- private void createRealm(String tenantId, List users) {
-
- var redaction = new RealmRepresentation();
- redaction.setId(tenantId);
- redaction.setRealm(tenantId);
- redaction.setEnabled(true);
- redaction.setLoginTheme("redaction");
- redaction.setEmailTheme("redaction");
- redaction.setAccountTheme("redaction");
- redaction.setAccessTokenLifespan(settings.getTenantAccessTokenLifeSpan());
- redaction.setSsoSessionIdleTimeout(settings.getSsoSessionIdleTimeout());
-
- var redactionClient = new ClientRepresentation();
- redactionClient.setEnabled(true);
- redactionClient.setName("redaction");
- redactionClient.setClientId("redaction");
- redactionClient.setStandardFlowEnabled(true);
- redactionClient.setImplicitFlowEnabled(true);
- redactionClient.setDirectAccessGrantsEnabled(true);
- redactionClient.setRedirectUris(List.of("http://localhost:4200/*","/ui/*"));
- redactionClient.setWebOrigins(List.of("+"));
- redactionClient.setPublicClient(true);
-
- var swaggerClient = new ClientRepresentation();
- swaggerClient.setEnabled(true);
- swaggerClient.setName("swagger-ui-client");
- swaggerClient.setClientId("swagger-ui-client");
- swaggerClient.setStandardFlowEnabled(true);
- swaggerClient.setImplicitFlowEnabled(false);
- swaggerClient.setDirectAccessGrantsEnabled(false);
- swaggerClient.setServiceAccountsEnabled(true);
- swaggerClient.setAuthorizationServicesEnabled(true);
- swaggerClient.setRedirectUris(List.of("/redaction-gateway-v1/*"));
- swaggerClient.setWebOrigins(List.of("+"));
-
- redaction.setClients(List.of(redactionClient, swaggerClient));
- var redUserRole = new RoleRepresentation();
- redUserRole.setComposite(true);
- redUserRole.setName(RED_USER_ROLE);
- redUserRole.setContainerId("redaction");
-
- var redManagerRole = new RoleRepresentation();
- redManagerRole.setComposite(true);
- redManagerRole.setName(RED_MANAGER_ROLE);
- redManagerRole.setContainerId("redaction");
-
- var redAdminRole = new RoleRepresentation();
- redAdminRole.setComposite(true);
- redAdminRole.setName(RED_ADMIN_ROLE);
- redAdminRole.setContainerId("redaction");
-
- var redUserAdminRole = new RoleRepresentation();
- redUserAdminRole.setComposite(true);
- redUserAdminRole.setName(RED_USER_ADMIN_ROLE);
- redUserAdminRole.setContainerId("redaction");
-
- RolesRepresentation rolesRepresentation = new RolesRepresentation();
- rolesRepresentation.setRealm(List.of(redUserRole, redManagerRole, redAdminRole, redUserAdminRole));
- redaction.setRoles(rolesRepresentation);
-
- redaction.setUsers(users.stream().map(this::toUserRepresentation).collect(Collectors.toList()));
-
- keycloak.getAdminClient().realms().create(redaction);
- }
-
-
- private UserRepresentation toUserRepresentation(RedUser redUser) {
-
- var credentialRepresentation = new CredentialRepresentation();
- credentialRepresentation.setType("password");
- credentialRepresentation.setValue(redUser.getPassword());
-
- var user = new UserRepresentation();
- user.setUsername(redUser.getUsername());
- user.setCredentials(List.of(credentialRepresentation));
- user.setEmail(redUser.getEmail());
- user.setFirstName(redUser.getFirstName());
- user.setLastName(redUser.getLastName());
- user.setEmailVerified(true);
-
- var roles = new ArrayList();
- roles.addAll(redUser.getRedRoles());
- roles.add("uma_authorization");
- roles.add("offline_access");
-
- user.setRealmRoles(roles);
-
- var clientRoles = new HashMap>();
- clientRoles.put("account", List.of("manage-account", "view-profile"));
-
- user.setClientRoles(clientRoles);
- user.setEnabled(true);
-
- return user;
- }
-
-
- @SneakyThrows
- private void validateJdbcUrl(String jdbcUrl) {
-
- try {
- // just create a URI object to check if the string is a valid URI
- var uri = new URI(jdbcUrl);
- var subUri = new URI(uri.getSchemeSpecificPart());
-
- if (uri.getScheme() == null || subUri.getScheme() == null || !uri.getScheme().equals("jdbc") || !SUPPORTED_DATABASES.contains(subUri.getScheme())) {
- throw new IllegalArgumentException("Your jdbcUrl is not valid.");
- }
- } catch (URISyntaxException e) {
- throw new IllegalArgumentException("Your jdbcUrl is not valid.", e);
- }
-
- }
-
-
- private void runLiquibase(DataSource dataSource) throws LiquibaseException {
-
- SpringLiquibase liquibase = getSpringLiquibase(dataSource);
- liquibase.afterPropertiesSet();
- }
-
-
- private void handleClientException(PSQLException e) {
-
- if (e.getSQLState().equals("28000") || e.getSQLState().equals("28P01")) {
- throw new IllegalArgumentException("Database credentials are not correct. Please check them.");
- }
- if (SQL_CONNECTION_ERROR_CODES.contains(e.getSQLState())) {
- throw new IllegalArgumentException("Error when connecting to tenant database. Please check the jdbcUrl parameter.");
- }
- }
-
-
- private void handleInternalException(PSQLException e) {
-
- log.error(String.format("Connection to tenant DB failed with SQL state %s. Please check if the tenant DB is still running. " + //
- "If yes please check the connection configuration.", e.getSQLState()), e);
- throw new RuntimeException("Could not connect to the tenant DB. This is an internal error.", e);
- }
-
-
- protected SpringLiquibase getSpringLiquibase(DataSource dataSource) {
-
- SpringLiquibase liquibase = new SpringLiquibase();
- liquibase.setResourceLoader(resourceLoader);
- liquibase.setDataSource(dataSource);
- liquibase.setChangeLog(liquibaseProperties.getChangeLog());
- liquibase.setContexts(liquibaseProperties.getContexts());
- return liquibase;
- }
-
-
- public List getTenants() {
-
- return tenantRepository.findAll().stream().map(this::convert).collect(Collectors.toList());
- }
-
-
- private TenantResponse convert(TenantEntity entity) {
-
- var tenantResponse = TenantResponse.builder()
- .tenantId(entity.getTenantId())
- .displayName(entity.getDisplayName())
- .guid(entity.getGuid())
- .databaseConnection(DatabaseConnection.builder()
- .driver(entity.getDatabaseConnection().getDriver())
- .host(entity.getDatabaseConnection().getHost())
- .port(entity.getDatabaseConnection().getPort())
- .database(entity.getDatabaseConnection().getDatabase())
- .schema(entity.getDatabaseConnection().getSchema())
- .username(entity.getDatabaseConnection().getUsername())
- .password(entity.getDatabaseConnection().getPassword())
- .params(entity.getDatabaseConnection().getParams())
- .build())
- .searchConnection(SearchConnection.builder()
- .hosts(entity.getSearchConnection().getHosts())
- .port(entity.getSearchConnection().getPort())
- .scheme(entity.getSearchConnection().getScheme())
- .username(entity.getSearchConnection().getUsername())
- .password(entity.getSearchConnection().getPassword())
- .numberOfShards(entity.getSearchConnection().getNumberOfShards())
- .numberOfReplicas(entity.getSearchConnection().getNumberOfReplicas())
- .build())
- .build();
-
- if (entity.getAzureStorageConnection() != null) {
- tenantResponse.setAzureStorageConnection(AzureStorageConnection.builder()
- .connectionString(entity.getAzureStorageConnection().getConnectionString())
- .containerName(entity.getAzureStorageConnection().getContainerName())
- .build());
- }
-
- if (entity.getS3StorageConnection() != null) {
- tenantResponse.setS3StorageConnection(S3StorageConnection.builder()
- .key(entity.getS3StorageConnection().getKey())
- .secret(entity.getS3StorageConnection().getSecret())
- .signerType(entity.getS3StorageConnection().getSignerType())
- .bucketName(entity.getS3StorageConnection().getBucketName())
- .region(entity.getS3StorageConnection().getRegion())
- .endpoint(entity.getS3StorageConnection().getEndpoint())
- .build());
- }
-
- return tenantResponse;
- }
-
-
- public TenantResponse getTenant(String tenantId) {
-
- return tenantRepository.findById(tenantId).map(this::convert).orElseThrow(() -> new NotFoundException("Tenant does not exist"));
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UploadService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UploadService.java
index a59965017..7e27fb181 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UploadService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UploadService.java
@@ -1,7 +1,7 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.UPLOAD_FILE;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_FILE_ATTRIBUTES;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UPLOAD_FILE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_FILE_ATTRIBUTES;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
@@ -14,10 +14,8 @@ import org.springframework.stereotype.Service;
import com.google.common.collect.Lists;
import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileUploadResult;
import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AuditRequest;
@@ -26,6 +24,8 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.AddFileRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserCacheBuilder.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserCacheBuilder.java
deleted file mode 100644
index 998d333ec..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserCacheBuilder.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service;
-
-import javax.annotation.PostConstruct;
-
-import org.springframework.stereotype.Service;
-
-import com.iqser.red.keycloak.commons.UserListingService;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class UserCacheBuilder {
-
- private final UserListingService userService;
- private final TenantManagementService tenantManagementService;
-
-
- @PostConstruct
- protected void postConstruct() {
-
- tenantManagementService.getTenants().forEach(tenant -> userService.getAllUsers(tenant.getTenantId()));
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserService.java
deleted file mode 100644
index f993f6c9a..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserService.java
+++ /dev/null
@@ -1,597 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service;
-
-import static com.iqser.red.keycloak.commons.DefaultKeyCloakCommonsConfiguration.USERS_CACHE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_ADMIN_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_MANAGER_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_ROLES;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_USER_ADMIN_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_USER_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.validateRoles;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-
-import javax.validation.constraints.NotNull;
-import javax.ws.rs.ClientErrorException;
-import javax.ws.rs.NotAuthorizedException;
-import javax.ws.rs.NotFoundException;
-import javax.ws.rs.core.Response;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.validator.routines.EmailValidator;
-import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
-import org.jboss.resteasy.client.jaxrs.internal.ResteasyClientBuilderImpl;
-import org.keycloak.OAuth2Constants;
-import org.keycloak.admin.client.KeycloakBuilder;
-import org.keycloak.admin.client.resource.UserResource;
-import org.keycloak.admin.client.resource.UsersResource;
-import org.keycloak.representations.idm.CredentialRepresentation;
-import org.keycloak.representations.idm.RoleRepresentation;
-import org.keycloak.representations.idm.UserRepresentation;
-import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.stereotype.Service;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import com.iqser.red.keycloak.commons.KeyCloakSettings;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
-import com.iqser.red.keycloak.commons.RealmService;
-import com.iqser.red.keycloak.commons.UserListingService;
-import com.iqser.red.keycloak.commons.model.User;
-import com.iqser.red.keycloak.commons.roles.ApplicationRoles;
-import com.iqser.red.service.persistence.management.v1.processor.acl.custom.dossier.DossierACLService;
-import com.iqser.red.service.persistence.management.v1.processor.acl.custom.service.CustomPermissionService;
-import com.iqser.red.service.persistence.management.v1.processor.exception.AuthenticationFailedException;
-import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
-import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
-import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateUserRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.ResetPasswordRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.UpdateMyProfileRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.UpdateProfileRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AddNotificationRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AuditRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.notification.NotificationType;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class UserService {
-
- private final RealmService realmService;
- private final KeyCloakSettings keyCloakSettings;
- private final DossierManagementService dossierManagementService;
- private final FileStatusManagementService fileStatusManagementService;
- private final AuditPersistenceService auditPersistenceService;
- private final NotificationPersistenceService notificationPersistenceService;
- private final DossierACLService dossierACLService;
- private final CustomPermissionService customPermissionService;
- private final UserListingService userListingService;
-
-
- @CacheEvict(value = USERS_CACHE, allEntries = true)
- public void evictUserCache() {
-
- }
-
-
- @CacheEvict(value = USERS_CACHE, allEntries = true, beforeInvocation = true)
- public User createUser(CreateUserRequest user) {
-
- String username = StringUtils.isEmpty(user.getUsername()) ? user.getEmail() : user.getUsername();
- if (!this.getTenantUsersResource().search(username).isEmpty()) {
- throw new ConflictException("User with this username already exists");
- }
-
- if (!EmailValidator.getInstance().isValid(user.getEmail())) {
- throw new BadRequestException("Email address format is not valid");
- }
- // also search by email in case the username was provided at creation
- if (!StringUtils.isEmpty(user.getUsername()) && !this.getTenantUsersResource().searchByEmail(user.getEmail(), true).isEmpty()) {
- throw new ConflictException("User with this email already exists");
- }
-
- validateRoles(user.getRoles());
-
- UserRepresentation userRepresentation = new UserRepresentation();
- userRepresentation.setUsername(username);
- userRepresentation.setEmail(user.getEmail());
- userRepresentation.setEnabled(true);
- userRepresentation.setFirstName(user.getFirstName());
- userRepresentation.setLastName(user.getLastName());
-
- try (var response = this.getTenantUsersResource().create(userRepresentation)) {
-
- if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) {
- if (response.getStatusInfo().getStatusCode() == 409) {
- throw new ConflictException(response.getStatusInfo().getReasonPhrase());
- }
- if (response.getStatusInfo().getStatusCode() == 400) {
- throw new BadRequestException(response.getStatusInfo().getReasonPhrase());
- }
- throw new BadRequestException("Cannot create user ... ");
- }
-
- var createdUser = getUserByUsername(username);
-
- try {
- sendResetPasswordEmail(createdUser.getUserId());
- } catch (Exception e) {
- log.debug("Activation E-mail could not be sent!", e);
- }
-
- auditPersistenceService.audit(AuditRequest.builder()
- .userId(KeycloakSecurity.getUserId())
- .objectId(createdUser.getUserId())
- .category(AuditCategory.USER.name())
- .message("User created")
- .build());
-
- if(!user.getRoles().isEmpty()) {
- setRoles(createdUser.getUserId(), user.getRoles());
- }
-
- customPermissionService.syncAllCustomPermissions();
-
- return getUserByUsername(username);
- }
- }
-
-
- private UsersResource getTenantUsersResource() {
- return realmService.realm(TenantContext.getTenantId()).users();
- }
-
- private User getUserByUsername(String username) {
-
- var userList = this.getTenantUsersResource().search(username);
- if (userList.isEmpty()) {
- throw new NotFoundException("User with this username already exists");
- }
-
- return convert(userList.iterator().next());
- }
-
-
- private void sendResetPasswordEmail(String userId) {
-
- try {
- this.getTenantUsersResource().get(userId).executeActionsEmail(Collections.singletonList("UPDATE_PASSWORD"), 86400);
- } catch (Exception e) {
- throw new BadRequestException("Failed to send email", e);
- }
- }
-
- @CacheEvict(value = USERS_CACHE, allEntries = true, beforeInvocation = true)
- public void setRoles(String userId, List roles, List currentUserRoles) {
-
- roles.forEach(role -> {
- if (!ApplicationRoles.ROLE_DATA.containsKey(role)) {
- throw new BadRequestException("Invalid role: " + role);
- }
- });
-
- var userResource = getUserResource(userId);
- var userRoles = userResource.roles().realmLevel().listEffective().stream().map(RoleRepresentation::getName).collect(Collectors.toList());
-
- var isUser = userRoles.contains(RED_USER_ROLE); // || currentRoles.contains(RED_MANAGER_ROLE);
- var isManager = userRoles.contains(RED_MANAGER_ROLE);
- var isAdmin = currentUserRoles.contains(RED_ADMIN_ROLE);
-
- if (!isAdmin && roles.contains(RED_ADMIN_ROLE)) {
- throw new BadRequestException("Cannot assign admin-role. You're not an admin!");
- }
-
- if (!isAdmin && userRoles.contains(RED_ADMIN_ROLE) && !roles.contains(RED_ADMIN_ROLE)) {
- throw new BadRequestException("Cannot remove admin role of a user");
- }
-
- if (userId.equalsIgnoreCase(KeycloakSecurity.getUserId()) && isAdmin && !roles.contains(RED_ADMIN_ROLE)) {
- log.info("Admin can not remove admin role from himself.");
- throw new ConflictException("Admin could not remove admin role from himself.");
- }
-
- if (!roles.contains(RED_MANAGER_ROLE) && isManager) {
- removeUserFromDossiers(userId, UserRemovalModel.REMOVE_MANAGER);
- }
-
- if (!roles.contains(RED_USER_ROLE) && !roles.contains(RED_MANAGER_ROLE) && isUser) {
- removeUserFromDossiers(userId, UserRemovalModel.REMOVE_USER);
- }
-
- var currentRolesAsRoleRepresentation = ApplicationRoles.ROLE_DATA.keySet().stream().map(this::getRoleRepresentation).collect(Collectors.toList());
- var newRoles = roles.stream().map(this::getRoleRepresentation).collect(Collectors.toList());
-
- userResource.roles().realmLevel().remove(currentRolesAsRoleRepresentation);
- userResource.roles().realmLevel().add(newRoles);
-
- auditPersistenceService.audit(AuditRequest.builder()
- .userId(KeycloakSecurity.getUserId())
- .objectId(userId)
- .category(AuditCategory.USER.name())
- .message("Roles updated for user")
- .details(Map.of("CurrentRoles", roles))
- .build());
- }
-
-
- @CacheEvict(value = USERS_CACHE, allEntries = true, beforeInvocation = true)
- public void setRoles(String userId, List roles) {
-
- var currentUserResource = getUserResource(KeycloakSecurity.getUserId());
- var currentUserRoles = currentUserResource.roles().realmLevel().listEffective().stream().map(RoleRepresentation::getName).collect(Collectors.toList());
-
- setRoles(userId, roles, currentUserRoles);
-
-
- }
-
-
- private User convert(UserRepresentation userRepresentation) {
-
- var user = userListingService.convertBasicUser(userRepresentation);
- user.setRoles(getRoles(user.getUserId()));
- if (user.getRoles().contains(RED_MANAGER_ROLE)) {
- user.getRoles().add(RED_USER_ROLE);
- }
- if (user.getRoles().contains(RED_ADMIN_ROLE)) {
- user.getRoles().add(RED_USER_ADMIN_ROLE);
- }
- return user;
- }
-
-
- public UserResource getUserResource(String userId) {
-
- if (StringUtils.isBlank(userId)) {
- throw new BadRequestException("No id provided.");
- }
- try {
- return this.getTenantUsersResource().get(userId);
- } catch (NotFoundException e) {
- throw new NotFoundException("User with id: " + userId + " does not exist", e);
- }
- }
-
- public boolean checkUserHasAdminRole(String userId) {
- var userResource = this.getUserResource(userId);
- var userRoles = userResource.roles().realmLevel().listEffective().stream().map(RoleRepresentation::getName).collect(Collectors.toSet());
- return userRoles.contains(RED_ADMIN_ROLE);
- }
-
-
- private void removeUserFromDossiers(String userId, UserRemovalModel mode) {
-
- dossierManagementService.getAllDossiers(true, true).forEach(dossier -> {
-
- dossierACLService.enhanceDossierWithACLData(dossier);
-
- updateDossierUsers(userId, mode, dossier);
- });
-
- }
-
-
- private RoleRepresentation getRoleRepresentation(String role) {
-
- RoleRepresentation realmRole;
- try {
- realmRole = realmService.realm(TenantContext.getTenantId()).roles().get(role).toRepresentation();
- } catch (NotFoundException e) {
- log.warn("The realm role {} is not found.", role);
- throw new NotFoundException("The realm role " + role + " is not found.", e);
- }
- return realmRole;
- }
-
-
- private Set getRoles(String id) {
-
- List realmMappings = this.getTenantUsersResource().get(id).roles().getAll().getRealmMappings();
- if (realmMappings == null) {
- log.warn("User with id=" + id + " contains null role mappings.");
- return new TreeSet<>();
- }
- return realmMappings.stream().map(RoleRepresentation::getName).filter(name -> name.startsWith(keyCloakSettings.getRolePrefix())).collect(Collectors.toSet());
- }
-
-
- public void updateDossierUsers(String userId, UserRemovalModel mode, Dossier dossier) {
-
- if (mode == UserRemovalModel.REMOVE_USER || mode == UserRemovalModel.PERMANENT) {
- // remove from members in case we removed the user role or we permanently removed this user
- dossier.getMemberIds().remove(userId);
- dossier.getApproverIds().remove(userId);
- }
- fileStatusManagementService.getAllDossierStatus(dossier.getId()).forEach(fileStatus -> {
- if (userId.equals(fileStatus.getAssignee()) && (mode == UserRemovalModel.REMOVE_USER || mode == UserRemovalModel.PERMANENT)) {
- fileStatusManagementService.setCurrentFileAssignee(dossier.getId(), fileStatus.getId(), null);
- }
- });
-
- if (userId.equals(dossier.getOwnerId()) && (mode == UserRemovalModel.REMOVE_MANAGER || mode == UserRemovalModel.PERMANENT)) {
- dossier.setOwnerId(null);
-
- dossier.getMemberIds()
- .forEach(member -> notificationPersistenceService.insertNotification(AddNotificationRequest.builder()
- .userId(member)
- .issuerId(KeycloakSecurity.getUserId())
- .notificationType(NotificationType.DOSSIER_OWNER_DELETED.name())
- .target(Map.of("dossierId", dossier.getId()))
- .build()));
- }
-
- dossierManagementService.updateDossier(CreateOrUpdateDossierRequest.builder()
- .dossierTemplateId(dossier.getDossierTemplateId())
- .dossierName(dossier.getDossierName())
- .description(dossier.getDescription())
- .dossierTemplateId(dossier.getDossierTemplateId())
- .downloadFileTypes(dossier.getDownloadFileTypes())
- .dueDate(dossier.getDueDate())
- .reportTemplateIds(Lists.newArrayList(dossier.getReportTemplateIds()))
- .watermarkId(dossier.getWatermarkId())
- .previewWatermarkId(dossier.getPreviewWatermarkId())
- .dossierStatusId(dossier.getDossierStatusId())
- .build(), dossier.getId());
-
- dossierACLService.updateDossierACL(dossier.getMemberIds(), dossier.getApproverIds(), dossier.getOwnerId(), dossier.getId());
- }
-
-
- public Optional getUserById(String userId) {
-
- return this.getAllUsers().stream().filter(u -> u.getUserId().equalsIgnoreCase(userId)).findAny();
- }
-
- public Optional getOptionalUserByUsername(String username) {
- return this.getAllUsers().stream().filter(u -> u.getUsername().contains(username)).findFirst();
- }
-
-
- public List getUsersByIds(Collection userIds) {
- return this.getAllUsers().stream().filter(u -> userIds.contains(u.getUserId())).collect(Collectors.toList());
- }
-
-
- @CacheEvict(value = USERS_CACHE, allEntries = true, beforeInvocation = true)
- public void updateMyProfile(UpdateMyProfileRequest updateProfileRequest) {
-
- var user = this.getUserResource(KeycloakSecurity.getUserId());
- var userRepresentation = user.toRepresentation();
-
- if (userRepresentation.getFederatedIdentities() != null && !userRepresentation.getFederatedIdentities().isEmpty() && !updateProfileRequest.getEmail()
- .equals(userRepresentation.getEmail())) {
- throw new NotAllowedException("It is not allowed to change the email from a federated identity");
- }
-
- if (!updateProfileRequest.getEmail().equals(userRepresentation.getEmail())) {
- validatePassword(userRepresentation.getUsername(), updateProfileRequest.getPassword());
- }
-
- userRepresentation.setFirstName(updateProfileRequest.getFirstName());
- userRepresentation.setLastName(updateProfileRequest.getLastName());
- userRepresentation.setEmail(updateProfileRequest.getEmail());
- this.setUsername(userRepresentation, updateProfileRequest.getEmail());
-
- try {
- user.update(userRepresentation);
- } catch (ClientErrorException e) {
- if (e.getResponse().getStatus() == 409) {
- throw new ConflictException("E-mail already in use");
- }
- throw e;
- }
-
- auditPersistenceService.audit(AuditRequest.builder()
- .userId(KeycloakSecurity.getUserId())
- .objectId(KeycloakSecurity.getUserId())
- .category(AuditCategory.USER.name())
- .message("Profile updated for user")
- .details(Map.of("Profile", updateProfileRequest))
- .build());
- }
-
- private void setUsername(UserRepresentation userRepresentation, String emailToSet) {
- // update the username only if none was provided at creation and in this case the email and username are the same
- if (userRepresentation.getUsername().equals(userRepresentation.getEmail())) {
- userRepresentation.setUsername(emailToSet);
- }
- }
-
- private void validatePassword(String username, String password) {
-
- if (password == null || password.isEmpty()) {
- throw new AuthenticationFailedException();
- }
-
- var changeEmailClient = KeycloakBuilder.builder()
-
- .serverUrl(keyCloakSettings.getServerUrl())
- .realm(TenantContext.getTenantId())
- .username(username)
- .password(password)
- .clientId(keyCloakSettings.getClientId())
- .clientSecret(keyCloakSettings.getClientSecret())
- .grantType(OAuth2Constants.PASSWORD)
- .resteasyClient(new ResteasyClientBuilderImpl().connectionTTL(2, TimeUnit.SECONDS)
- .hostnameVerification(ResteasyClientBuilder.HostnameVerificationPolicy.ANY)
- .connectionPoolSize(keyCloakSettings.getConnectionPoolSize())
- .disableTrustManager()
- .build())
- .build();
-
- try {
- changeEmailClient.tokenManager().getAccessTokenString();
- } catch (NotAuthorizedException e) {
- throw new AuthenticationFailedException(e);
- }
-
- changeEmailClient.close();
-
- }
-
-
- @CacheEvict(value = USERS_CACHE, allEntries = true, beforeInvocation = true)
- public void deleteUser(String userId) {
-
- if (KeycloakSecurity.getUserId().equalsIgnoreCase(userId)) {
- throw new ConflictException("Cannot delete self");
- }
-
- var currentUserResource = getUserResource(KeycloakSecurity.getUserId());
- var currentRoles = currentUserResource.roles().realmLevel().listEffective().stream().map(RoleRepresentation::getName).collect(Collectors.toList());
-
- var userResource = getUserResource(userId);
- var userRoles = userResource.roles().realmLevel().listEffective().stream().map(RoleRepresentation::getName).collect(Collectors.toList());
-
- var isCurrentUserOnlyUserAdmin = currentRoles.contains(RED_USER_ADMIN_ROLE) && !currentRoles.contains(RED_ADMIN_ROLE);
- var isUserToBeDeletedAdmin = userRoles.contains(RED_ADMIN_ROLE);
-
- if (isCurrentUserOnlyUserAdmin && isUserToBeDeletedAdmin) {
- throw new NotAllowedException("It is not allowed to delete a user with RED-ADMIN role");
- }
-
- removeUserFromDossiers(userId, UserRemovalModel.PERMANENT);
-
- realmService.realm(TenantContext.getTenantId()).users().get(userId).remove();
- customPermissionService.syncAllCustomPermissions();
-
- auditPersistenceService.audit(AuditRequest.builder()
- .userId(KeycloakSecurity.getUserId())
- .objectId(userId)
- .category(AuditCategory.USER.name())
- .message("User removed")
- .build());
-
- }
-
-
- /*
- * If a user is deleted via Keycloak, the user ist still in the RedactManager database, thus we have to clean this
- */
- public Set removeDeletedUsers(@NotNull Set userIds) {
-
- var users = userListingService.getAllUsers(TenantContext.getTenantId());
- Set deletedUsers = new HashSet<>();
-
- for (String userId : userIds) {
- if (users.stream().filter(u -> u.getUserId().equalsIgnoreCase(userId)).findAny().isEmpty()) {
- log.info("Will delete {} user", userId);
-
- removeUserFromDossiers(userId, UserRemovalModel.PERMANENT);
- realmService.realm(TenantContext.getTenantId()).users().delete(userId);
-
- auditPersistenceService.audit(AuditRequest.builder().objectId(userId).category(AuditCategory.USER.name()).message("User removed automatically").build());
- deletedUsers.add(userId);
- }
- }
-
- customPermissionService.syncAllCustomPermissions();
- return deletedUsers;
- }
-
-
- @CacheEvict(value = USERS_CACHE, allEntries = true, beforeInvocation = true)
- public void updateProfile(String userId, UpdateProfileRequest updateProfileRequest) {
-
- var user = this.getUserResource(userId);
- var userRepresentation = user.toRepresentation();
-
- if (userRepresentation.getFederatedIdentities() != null && !userRepresentation.getFederatedIdentities().isEmpty() && !updateProfileRequest.getEmail()
- .equals(userRepresentation.getEmail())) {
- throw new NotAllowedException("It is not allowed to change the email from a federated identity");
- }
-
- if (!EmailValidator.getInstance().isValid(updateProfileRequest.getEmail())) {
- throw new BadRequestException("Email address format is not valid");
- }
-
- userRepresentation.setFirstName(updateProfileRequest.getFirstName());
- userRepresentation.setLastName(updateProfileRequest.getLastName());
- userRepresentation.setEmail(updateProfileRequest.getEmail());
- this.setUsername(userRepresentation, updateProfileRequest.getEmail());
-
- user.update(userRepresentation);
-
- setRoles(userId, updateProfileRequest.getRoles());
-
- auditPersistenceService.audit(AuditRequest.builder()
- .userId(KeycloakSecurity.getUserId())
- .objectId(KeycloakSecurity.getUserId())
- .category(AuditCategory.USER.name())
- .message("Profile updated for user")
- .details(Map.of("Profile", updateProfileRequest))
- .build());
- }
-
-
- @CacheEvict(value = USERS_CACHE, allEntries = true, beforeInvocation = true)
- public User activateProfile(String userId, boolean isActive) {
-
- var user = this.getUserResource(userId);
- var userRepresentation = user.toRepresentation();
-
- userRepresentation.setEnabled(isActive);
- user.update(userRepresentation);
-
- var currentRoles = getRoles(userId);
- if (isActive && currentRoles.isEmpty()) { // add RED_USER role
- setRoles(userId, List.of(RED_USER_ROLE));
- }
-
- auditPersistenceService.audit(AuditRequest.builder()
- .userId(KeycloakSecurity.getUserId())
- .objectId(KeycloakSecurity.getUserId())
- .category(AuditCategory.USER.name())
- .message("Profile activated/deactivated for user")
- .details(Map.of("Profile activated", isActive))
- .build());
-
- return convert(this.getTenantUsersResource().get(userId).toRepresentation());
- }
-
-
- public void resetPassword(String userId, ResetPasswordRequest resetPasswordRequest) {
-
- try {
- CredentialRepresentation request = new CredentialRepresentation();
- request.setType("password");
- request.setTemporary(resetPasswordRequest.isTemporary());
- request.setValue(resetPasswordRequest.getPassword());
- realmService.realm(TenantContext.getTenantId()).users().get(userId).resetPassword(request);
- } catch (Exception e) {
- throw new BadRequestException("Failed to send email", e);
- }
- }
-
-
- public List getAllUsers() {
-
- return userListingService.getAllUsers(TenantContext.getTenantId());
- }
-
-
- public enum UserRemovalModel {
- PERMANENT,
- REMOVE_MANAGER,
- REMOVE_USER
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java
index fe81cf9fc..9de757b1b 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java
@@ -5,7 +5,7 @@ import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Optional;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadDLQMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadDLQMessageReceiver.java
index 230568c45..df327d458 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadDLQMessageReceiver.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadDLQMessageReceiver.java
@@ -29,9 +29,8 @@ public class DownloadDLQMessageReceiver {
@RabbitListener(queues = MessagingConfiguration.DOWNLOAD_DLQ)
- public void handleDlqMessage(Message failedMessage) throws IOException {
+ public void handleDlqMessage(DownloadJob downloadJob) throws IOException {
- DownloadJob downloadJob = objectMapper.readValue(failedMessage.getBody(), DownloadJob.class);
log.warn("Handling download job in DLQ userId: {} storageId: {} - setting status to error!", downloadJob.getUserId(), downloadJob.getStorageId());
setDownloadFailed(downloadJob.getUserId(), downloadJob.getStorageId());
}
@@ -48,18 +47,16 @@ public class DownloadDLQMessageReceiver {
@RabbitListener(queues = MessagingConfiguration.REPORT_DLQ)
- public void handleReportDlqMessage(Message failedMessage) throws IOException {
+ public void handleReportDlqMessage(ReportRequestMessage reportRequestMessage) {
- ReportRequestMessage reportRequestMessage = objectMapper.readValue(failedMessage.getBody(), ReportRequestMessage.class);
log.warn("Handling report request in DLQ userId: {} storageId: {} - setting status to error!", reportRequestMessage.getUserId(), reportRequestMessage.getDownloadId());
setDownloadFailed(reportRequestMessage.getUserId(), reportRequestMessage.getDownloadId());
}
@RabbitListener(queues = MessagingConfiguration.REPORT_RESULT_DLQ)
- public void handleReportResponseDlqMessage(Message failedMessage) throws IOException {
+ public void handleReportResponseDlqMessage(ReportResultMessage reportResultMessage) {
- ReportResultMessage reportResultMessage = objectMapper.readValue(failedMessage.getBody(), ReportResultMessage.class);
log.warn("Handling report request in DLQ userId: {} storageId: {} - setting status to error!", reportResultMessage.getUserId(), reportResultMessage.getDownloadId());
setDownloadFailed(reportResultMessage.getUserId(), reportResultMessage.getDownloadId());
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadPreparationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadPreparationService.java
index 221ea404c..ef8fe4200 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadPreparationService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadPreparationService.java
@@ -8,7 +8,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
@@ -33,7 +33,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
import com.iqser.red.service.persistence.management.v1.processor.utils.FileSystemBackedArchiver;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AddNotificationRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
@@ -42,6 +41,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.download.Do
import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage;
import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
@@ -104,7 +104,7 @@ public class DownloadPreparationService {
.build();
log.info("Sending redaction request for downloadId:{} to pdftron-redaction-queue", message.getDownloadId());
- rabbitTemplate.convertAndSend(MessagingConfiguration.PDFTRON_QUEUE, objectMapper.writeValueAsString(message));
+ rabbitTemplate.convertAndSend(MessagingConfiguration.PDFTRON_QUEUE, message);
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadProcessorService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadProcessorService.java
index 20d810e22..ae653b5a2 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadProcessorService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadProcessorService.java
@@ -4,7 +4,7 @@ import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
@@ -60,14 +60,10 @@ public class DownloadProcessorService {
private void addReportQueue(ReportRequestMessage reportRequestMessage, int priority) {
- try {
- rabbitTemplate.convertAndSend(MessagingConfiguration.REPORT_QUEUE, objectMapper.writeValueAsString(reportRequestMessage), message -> {
- message.getMessageProperties().setPriority(priority);
- return message;
- });
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
+ rabbitTemplate.convertAndSend(MessagingConfiguration.REPORT_QUEUE, reportRequestMessage, message -> {
+ message.getMessageProperties().setPriority(priority);
+ return message;
+ });
}
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/RedactionDlqMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/RedactionDlqMessageReceiver.java
index 1becab0ec..0636317ae 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/RedactionDlqMessageReceiver.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/RedactionDlqMessageReceiver.java
@@ -1,5 +1,8 @@
package com.iqser.red.service.persistence.management.v1.processor.service.download;
+import java.io.IOException;
+
+import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
@@ -30,11 +33,11 @@ public class RedactionDlqMessageReceiver {
@RabbitHandler
- public void receive(String in) throws JsonProcessingException {
+ public void receive(Message message) throws IOException {
// Since we receive different message types here, we do not convert to an object here;
// We just assume that the message contains a downloadId.
- JsonNode jsonNode = objectMapper.readTree(in);
+ JsonNode jsonNode = objectMapper.readTree(message.getBody());
final String downloadId;
try {
downloadId = jsonNode.findValue("downloadId").asText();
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java
index 6a9c23372..89756d1ff 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java
@@ -9,7 +9,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
@@ -101,14 +101,10 @@ public class DossierTemplateExportService {
private void addToExportDownloadQueue(DownloadJob downloadJob, int priority) {
- try {
- rabbitTemplate.convertAndSend(MessagingConfiguration.EXPORT_DOWNLOAD_QUEUE, objectMapper.writeValueAsString(downloadJob), message -> {
- message.getMessageProperties().setPriority(priority);
- return message;
- });
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
+ rabbitTemplate.convertAndSend(MessagingConfiguration.EXPORT_DOWNLOAD_QUEUE, downloadJob, message -> {
+ message.getMessageProperties().setPriority(priority);
+ return message;
+ });
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/ExportDownloadMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/ExportDownloadMessageReceiver.java
index dc7204a51..85b8af4f6 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/ExportDownloadMessageReceiver.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/ExportDownloadMessageReceiver.java
@@ -19,13 +19,11 @@ import lombok.extern.slf4j.Slf4j;
public class ExportDownloadMessageReceiver {
private final DossierTemplateExportService dossierTemplateService;
- private final ObjectMapper objectMapper;
@RabbitHandler
- public void receive(String in) throws JsonProcessingException {
+ public void receive(DownloadJob downloadJob) throws JsonProcessingException {
- DownloadJob downloadJob = objectMapper.readValue(in, DownloadJob.class);
log.info("Preparing export download for userId: {} and storageId: {}", downloadJob.getUserId(), downloadJob.getStorageId());
dossierTemplateService.createDownloadArchive(downloadJob);
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java
index 624bb17d9..7b54535ad 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java
@@ -10,10 +10,11 @@ import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileModel;
+import com.knecon.fforesight.tenantcommons.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantProvider;
+import com.knecon.fforesight.tenantcommons.model.UpdateDetailsRequest;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
@@ -27,7 +28,7 @@ public class AutomaticAnalysisJob implements Job {
private final AmqpAdmin amqpAdmin;
private final FileManagementServiceSettings fileManagementServiceSettings;
private final FileStatusService fileStatusService;
- private final TenantRepository tenantRepository;
+ private final TenantProvider tenantProvider;
@Setter
private boolean schedulingStopped;
@@ -41,7 +42,8 @@ public class AutomaticAnalysisJob implements Job {
return;
}
- tenantRepository.findAll().forEach(tenant -> {
+ tenantProvider.getTenants().forEach(tenant -> {
+ tenantProvider.updateDetails(tenant.getTenantId(), UpdateDetailsRequest.builder().key("persistence-service-ready").value(true).build());
TenantContext.setTenantId(tenant.getTenantId());
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DeletedFilesCleanupJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DeletedFilesCleanupJob.java
index 03f5d1950..b1cb42dfe 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DeletedFilesCleanupJob.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DeletedFilesCleanupJob.java
@@ -12,8 +12,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.Applica
import com.iqser.red.service.persistence.management.v1.processor.service.DossierService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantProvider;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -27,13 +27,13 @@ public class DeletedFilesCleanupJob implements Job {
private final FileStatusService fileStatusService;
private final FileService fileService;
private final ApplicationConfigService applicationConfigService;
- private final TenantRepository tenantRepository;
+ private final TenantProvider tenantProvider;
@Override
public void execute(JobExecutionContext jobExecutionContext) {
- tenantRepository.findAll().forEach(tenant -> {
+ tenantProvider.getTenants().forEach(tenant -> {
TenantContext.setTenantId(tenant.getTenantId());
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DownloadCleanupJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DownloadCleanupJob.java
index e1a4acd06..866728660 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DownloadCleanupJob.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DownloadCleanupJob.java
@@ -10,11 +10,10 @@ import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.ApplicationConfigService;
-import com.iqser.red.service.persistence.management.v1.processor.service.DossierService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantProvider;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -26,15 +25,14 @@ public class DownloadCleanupJob implements Job {
private final DownloadStatusPersistenceService downloadStatusPersistenceService;
private final StorageService storageService;
- private final DossierService dossierService;
private final ApplicationConfigService applicationConfigService;
- private final TenantRepository tenantRepository;
+ private final TenantProvider tenantProvider;
@Override
public void execute(JobExecutionContext jobExecutionContext) {
- tenantRepository.findAll().forEach(tenant -> {
+ tenantProvider.getTenants().forEach(tenant -> {
TenantContext.setTenantId(tenant.getTenantId());
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/KeyCloakUserSyncJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/KeyCloakUserSyncJob.java
index 183ea3c0d..a1289e7a4 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/KeyCloakUserSyncJob.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/KeyCloakUserSyncJob.java
@@ -3,10 +3,9 @@ package com.iqser.red.service.persistence.management.v1.processor.service.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
-import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
-import com.iqser.red.service.persistence.management.v1.processor.job.KeyCloakUserSyncService;
+import com.iqser.red.service.persistence.management.v1.processor.service.KeyCloakUserSyncService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SendNotificationEmailJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SendNotificationEmailJob.java
index 8f8a681fc..41f8f8219 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SendNotificationEmailJob.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SendNotificationEmailJob.java
@@ -11,9 +11,9 @@ import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationEmailService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPreferencesPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.notification.EmailNotificationType;
+import com.knecon.fforesight.tenantcommons.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantProvider;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -26,13 +26,13 @@ public class SendNotificationEmailJob implements Job {
private final NotificationEmailService notificationEmailService;
private final NotificationPersistenceService notificationPersistenceService;
private final NotificationPreferencesPersistenceService notificationPreferencesPersistenceService;
- private final TenantRepository tenantRepository;
+ private final TenantProvider tenantProvider;
@Override
public void execute(JobExecutionContext jobExecutionContext) {
- tenantRepository.findAll().forEach(tenant -> {
+ tenantProvider.getTenants().forEach(tenant -> {
TenantContext.setTenantId(tenant.getTenantId());
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SyncUserPermissionsJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SyncUserPermissionsJob.java
index 4fb45a2e2..f082ae448 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SyncUserPermissionsJob.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SyncUserPermissionsJob.java
@@ -3,12 +3,11 @@ package com.iqser.red.service.persistence.management.v1.processor.service.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
-import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.acl.custom.service.CustomPermissionService;
-import com.iqser.red.service.persistence.management.v1.processor.service.TenantManagementService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantProvider;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -20,14 +19,14 @@ public class SyncUserPermissionsJob implements Job {
private final CustomPermissionService customPermissionService;
- private final TenantManagementService tenantManagementService;
+ private final TenantProvider tenantProvider;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
var singleTenant = context.getJobDetail().getJobDataMap() != null ? context.getJobDetail().getJobDataMap().get("tenantId") : null;
- tenantManagementService.getTenants().forEach(tenant -> {
+ tenantProvider.getTenants().forEach(tenant -> {
// if it's for a single tenant run only for that one, else run it for all tenants
if (tenant.getTenantId().equals(singleTenant) || singleTenant == null) {
TenantContext.setTenantId(tenant.getTenantId());
@@ -37,4 +36,5 @@ public class SyncUserPermissionsJob implements Job {
});
}
+
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java
index 2d3aa2447..840ff9c6e 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java
@@ -9,7 +9,7 @@ import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.Page;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java
index 4b6d3f5bd..28d6c7904 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java
@@ -7,7 +7,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java
index 9ad086e2a..907b02907 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java
@@ -7,7 +7,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java
index faee140ab..ac2ec9e67 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java
@@ -2,7 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import java.util.List;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java
index c1417d4f4..2ddbff1c7 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java
@@ -5,7 +5,7 @@ import java.util.List;
import java.util.Optional;
import java.util.UUID;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java
index e2d4ffc30..21454b2aa 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java
@@ -6,7 +6,7 @@ import java.util.List;
import java.util.Optional;
import java.util.UUID;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java
index 538960fa3..a32bb81d4 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java
@@ -7,7 +7,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java
index 31b5eee33..278d5e103 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java
@@ -4,7 +4,7 @@ import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java
index 9e7cb4e76..a0f7a0956 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java
@@ -11,7 +11,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java
index 5557c015a..e366f59dd 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java
@@ -8,7 +8,7 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java
index 572199ee9..26616d99c 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java
@@ -7,7 +7,7 @@ import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java
index a6af880e4..e6a4940d8 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java
@@ -4,7 +4,7 @@ import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java
index 0ebf575e6..87233efcb 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java
@@ -7,7 +7,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.beans.BeanUtils;
import org.springframework.dao.DataIntegrityViolationException;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java
index 682cc72b9..e321e9d88 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java
@@ -4,7 +4,7 @@ import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java
index e763dac89..ea6a23836 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/SMTPConfigurationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/SMTPConfigurationService.java
deleted file mode 100644
index 69c3b17a7..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/SMTPConfigurationService.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
-
-import javax.transaction.Transactional;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Service;
-
-import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.SMTPConfigurationEntity;
-import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
-import com.iqser.red.service.persistence.management.v1.processor.service.EmailService;
-import com.iqser.red.service.persistence.management.v1.processor.service.EncryptionDecryptionService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.SMTPRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.SMTPConfiguration;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class SMTPConfigurationService {
-
- private final static String DEFAULT_PASSWORD = "********";
- private final EncryptionDecryptionService encryptionDecryptionService;
- private final SMTPRepository smtpRepository;
- private final EmailService emailService;
-
-
- public void updateSMTPConfiguration(SMTPConfiguration smtpConfiguration) {
-
- updatePassword(smtpConfiguration);
- saveConfiguration(MagicConverter.convert(smtpConfiguration, SMTPConfigurationEntity.class));
- }
-
-
- private void updatePassword(SMTPConfiguration smtpConfiguration) {
-
- if (DEFAULT_PASSWORD.equals(smtpConfiguration.getPassword())) {
- try {
- var currentSMTPConfig = getCurrentSMTPConfiguration(false);
- smtpConfiguration.setPassword(currentSMTPConfig.getPassword());
- } catch (Exception e) {
- log.debug("No current SMTP Config exists", e);
- }
- } else {
- smtpConfiguration.setPassword(encryptionDecryptionService.encrypt(smtpConfiguration.getPassword()));
- }
- }
-
-
- private SMTPConfigurationEntity saveConfiguration(SMTPConfigurationEntity smtpConfiguration) {
-
- return smtpRepository.save(smtpConfiguration);
- }
-
-
- public SMTPConfiguration getCurrentSMTPConfiguration(boolean maskPassword) {
-
- var smtpConfiguration = getConfiguration();
- if (smtpConfiguration.isAuth() && maskPassword) {
- smtpConfiguration.setPassword(DEFAULT_PASSWORD);
- }
- return MagicConverter.convert(smtpConfiguration, SMTPConfiguration.class);
- }
-
-
- private SMTPConfigurationEntity getConfiguration() {
-
- return smtpRepository.findById(SMTPConfigurationEntity.ID).orElseThrow(() -> new NotFoundException("SMTP Configuration not found"));
- }
-
-
- public void testSMTPConfiguration(String testEmail, SMTPConfiguration smtpConfiguration) {
-
- String targetEmail = null;
- if (StringUtils.isBlank(testEmail)) {
- // will send e-mail to self in case testEmail is not set
- targetEmail = smtpConfiguration.getFrom();
- } else {
- targetEmail = testEmail;
- }
-
- updatePassword(smtpConfiguration);
- smtpConfiguration.setPassword(encryptionDecryptionService.decrypt(smtpConfiguration.getPassword()));
- emailService.send(smtpConfiguration, targetEmail, "Redaction Test Message", "This is a test message");
- }
-
-
- @Transactional
- public void deleteConfiguration() {
-
- smtpRepository.deleteById(SMTPConfigurationEntity.ID);
- }
-
-
- @Transactional
- public void encryptPasswordIfNecessary() {
-
- var smtpConfigurationOptional = smtpRepository.findById(SMTPConfigurationEntity.ID);
-
- if (smtpConfigurationOptional.isPresent()) {
- var smtpConfiguration = smtpConfigurationOptional.get();
- try {
- // this makes the migration idempotent, since an exception will be thrown if the password can't be decrypted
- // this prevents double encryption if the migration runs more than once
-
- encryptionDecryptionService.decrypt(smtpConfiguration.getPassword());
- log.info("SMTP Password for id {} is already encrypted", smtpConfiguration.getId());
- } catch (Exception e) {
- log.info("Encrypting SMTP Password for id {}", smtpConfiguration.getId());
- smtpConfiguration.setPassword(encryptionDecryptionService.encrypt(smtpConfiguration.getPassword()));
- }
- } else {
- log.info("NO SMPT Configuration present for migration!");
- }
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ViewedPagesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ViewedPagesPersistenceService.java
index ffaacfc2c..5a52208ca 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ViewedPagesPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ViewedPagesPersistenceService.java
@@ -3,7 +3,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import java.time.OffsetDateTime;
import java.util.List;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/CommentPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/CommentPersistenceService.java
index 350fb885b..0a31941b7 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/CommentPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/CommentPersistenceService.java
@@ -6,7 +6,7 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Service;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/CurrentTenantIdentifierResolverImpl.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/CurrentTenantIdentifierResolverImpl.java
index 5d8fbd475..b06f3222d 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/CurrentTenantIdentifierResolverImpl.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/CurrentTenantIdentifierResolverImpl.java
@@ -3,7 +3,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
import org.springframework.stereotype.Component;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantContext;
@Component("currentTenantIdentifierResolver")
public class CurrentTenantIdentifierResolverImpl implements CurrentTenantIdentifierResolver {
@@ -27,4 +27,4 @@ public class CurrentTenantIdentifierResolverImpl implements CurrentTenantIdentif
return true;
}
-}
\ No newline at end of file
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DevDataProvider.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DevDataProvider.java
new file mode 100644
index 000000000..384567b54
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DevDataProvider.java
@@ -0,0 +1,92 @@
+package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.stream.Stream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Service;
+
+import com.iqser.red.service.persistence.management.v1.processor.migration.AsyncMigrationStarterService;
+import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateImportService;
+import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
+import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.importexport.ImportDossierTemplateRequest;
+import com.knecon.fforesight.tenantcommons.TenantContext;
+
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Service
+@Profile("dev")
+public class DevDataProvider {
+
+ @Autowired
+ private AsyncMigrationStarterService asyncMigrationStarterService;
+
+
+ public void importDossierTemplatesToTenant(String tenantId){
+ TenantContext.setTenantId(tenantId);
+ asyncMigrationStarterService.runForTenant(tenantId);
+ if(dossierTemplateRepository.count() == 0) {
+ executeImport();
+ }
+ TenantContext.clear();
+ }
+
+ @Autowired
+ private DossierTemplateImportService dossierTemplateImportService;
+
+ @Autowired
+ private DossierTemplateRepository dossierTemplateRepository;
+
+ public byte[] pack(String sourceDirPath) throws IOException {
+
+ var bos = new ByteArrayOutputStream();
+ var p = Paths.get(sourceDirPath);
+ try (ZipOutputStream zs = new ZipOutputStream(bos)) {
+ Stream paths = Files.walk(p);
+ {
+ paths.filter(path -> !Files.isDirectory(path)).forEach(path -> {
+ ZipEntry zipEntry = new ZipEntry(p.relativize(path).toString());
+ try {
+ zs.putNextEntry(zipEntry);
+ Files.copy(path, zs);
+ zs.closeEntry();
+ } catch (IOException e) {
+ System.err.println(e);
+ }
+ });
+ }
+ }
+
+ return bos.toByteArray();
+
+ }
+
+ @SneakyThrows
+ private void executeImport() {
+
+ var importDir = new File("/Users/timobejan/work/dossier-templates-v2/dev");
+
+
+ for (var file : importDir.listFiles()) {
+ if(file.isDirectory()){
+ var archive = pack(file.getAbsolutePath());
+ log.info("Importing file: " + file.getName() + " " + " with size: " + archive.length);
+ var request = new ImportDossierTemplateRequest();
+ request.setArchive(archive);
+ request.setUpdateExistingDossierTemplate(false);
+ request.setUserId("system");
+ dossierTemplateImportService.importDossierTemplate(request);
+ }
+ }
+ }
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DynamicDataSourceBasedMultiTenantConnectionProvider.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DynamicDataSourceBasedMultiTenantConnectionProvider.java
index 28d86e9e4..7f7c9ae17 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DynamicDataSourceBasedMultiTenantConnectionProvider.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DynamicDataSourceBasedMultiTenantConnectionProvider.java
@@ -5,24 +5,21 @@ import java.sql.SQLException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import javax.sql.DataSource;
import org.hibernate.engine.jdbc.connections.spi.AbstractDataSourceBasedMultiTenantConnectionProviderImpl;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.stereotype.Component;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.cache.RemovalListener;
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.TenantEntity;
-import com.iqser.red.service.persistence.management.v1.processor.service.EncryptionDecryptionService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.SchemaConnection;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
import com.iqser.red.service.persistence.management.v1.processor.settings.TenantHikariSettings;
import com.iqser.red.service.persistence.management.v1.processor.utils.jdbc.JDBCUtils;
+import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
+import com.knecon.fforesight.tenantcommons.TenantProvider;
import com.zaxxer.hikari.HikariDataSource;
import lombok.RequiredArgsConstructor;
@@ -35,11 +32,9 @@ public class DynamicDataSourceBasedMultiTenantConnectionProvider extends Abstrac
private static final String TENANT_POOL_NAME_SUFFIX = "DataSource";
- private final DataSource masterDataSource;
- private final DataSourceProperties masterDataSourceProperties;
- private final TenantRepository masterTenantRepository;
private final EncryptionDecryptionService encryptionService;
private final TenantHikariSettings tenantHikariSettings;
+ private final TenantProvider tenantProvider;
@Value("${multitenancy.datasource-cache.maximumSize:100}")
private Long maximumSize;
@@ -58,7 +53,7 @@ public class DynamicDataSourceBasedMultiTenantConnectionProvider extends Abstrac
connectionPerTenant = CacheBuilder.newBuilder().maximumSize(maximumSize).expireAfterAccess(expireAfterAccess, TimeUnit.MINUTES).build(new CacheLoader<>() {
public SchemaConnection load(String key) {
- TenantEntity tenant = masterTenantRepository.findByTenantId(key).orElseThrow(() -> new RuntimeException("No such tenant: " + key));
+ var tenant = tenantProvider.getTenant(key);
var jdbcUrl = JDBCUtils.buildJdbcUrl(tenant.getDatabaseConnection());
return SchemaConnection.builder().jdbcUrl(jdbcUrl).databaseConnection(tenant.getDatabaseConnection()).build();
}
@@ -104,7 +99,7 @@ public class DynamicDataSourceBasedMultiTenantConnectionProvider extends Abstrac
@Override
protected DataSource selectAnyDataSource() {
- return masterDataSource;
+ return null;
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSource.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSource.java
index 193ced519..fc96bcbd7 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSource.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSource.java
@@ -12,7 +12,7 @@ import javax.sql.DataSource;
import org.springframework.stereotype.Component;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.RequiredArgsConstructor;
@@ -22,42 +22,51 @@ public class MultiTenantDataSource implements DataSource {
private final DynamicDataSourceBasedMultiTenantConnectionProvider dsd;
- private DataSource getActiveDataSource(){
+
+ private DataSource getActiveDataSource() {
+
return dsd.selectDataSource(TenantContext.getTenantId());
}
+
@Override
public Connection getConnection() throws SQLException {
+
return dsd.getConnection(TenantContext.getTenantId());
}
@Override
public Connection getConnection(String username, String password) throws SQLException {
- return getActiveDataSource().getConnection(username,password);
+
+ return getActiveDataSource().getConnection(username, password);
}
@Override
public PrintWriter getLogWriter() throws SQLException {
+
return getActiveDataSource().getLogWriter();
}
@Override
public void setLogWriter(PrintWriter out) throws SQLException {
+
getActiveDataSource().setLogWriter(out);
}
@Override
public void setLoginTimeout(int seconds) throws SQLException {
+
getActiveDataSource().setLoginTimeout(seconds);
}
@Override
public int getLoginTimeout() throws SQLException {
+
return getActiveDataSource().getLoginTimeout();
}
@@ -71,12 +80,14 @@ public class MultiTenantDataSource implements DataSource {
@Override
public Logger getParentLogger() throws SQLFeatureNotSupportedException {
+
return getActiveDataSource().getParentLogger();
}
@Override
public ShardingKeyBuilder createShardingKeyBuilder() throws SQLException {
+
return DataSource.super.createShardingKeyBuilder();
}
@@ -90,6 +101,7 @@ public class MultiTenantDataSource implements DataSource {
@Override
public boolean isWrapperFor(Class> iface) throws SQLException {
+
return getActiveDataSource().isWrapperFor(iface);
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSourceHealthIndicator.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSourceHealthIndicator.java
new file mode 100644
index 000000000..9a77bed46
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSourceHealthIndicator.java
@@ -0,0 +1,29 @@
+package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.health.Health;
+import org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator;
+import org.springframework.stereotype.Component;
+
+@Component
+public class MultiTenantDataSourceHealthIndicator extends DataSourceHealthIndicator {
+
+ @Autowired
+ private MultiTenantDataSource multiTenantDataSource;
+
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+
+ setDataSource(multiTenantDataSource);
+ super.afterPropertiesSet();
+ }
+
+
+ @Override
+ protected void doHealthCheck(Health.Builder builder) throws Exception {
+
+ builder.up().withDetail("database", "multi-tenant-setup");
+ }
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/repository/SchemaConnection.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/SchemaConnection.java
similarity index 62%
rename from persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/repository/SchemaConnection.java
rename to persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/SchemaConnection.java
index 55a78e508..ac2c1b55b 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/repository/SchemaConnection.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/SchemaConnection.java
@@ -1,6 +1,7 @@
-package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository;
+package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy;
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.DatabaseConnectionEntity;
+
+import com.knecon.fforesight.tenantcommons.model.DatabaseConnection;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -15,6 +16,6 @@ public class SchemaConnection {
@EqualsAndHashCode.Include
private String jdbcUrl;
- private DatabaseConnectionEntity databaseConnection;
+ private DatabaseConnection databaseConnection;
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/TenantManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/TenantManagementService.java
new file mode 100644
index 000000000..245f9f784
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/TenantManagementService.java
@@ -0,0 +1,182 @@
+package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy;
+
+import static com.iqser.red.service.persistence.management.v1.processor.configuration.TenantMessagingConfiguration.PERSISTENCE_SERVICE_TENANT_CREATED_QUEUE;
+import static com.iqser.red.service.persistence.management.v1.processor.configuration.UserMessagingConfiguration.PERSISTENCE_SERVICE_USER_CREATED_QUEUE;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.util.Set;
+
+import javax.sql.DataSource;
+
+import org.postgresql.util.PSQLException;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.StatementCallback;
+import org.springframework.jdbc.datasource.SingleConnectionDataSource;
+import org.springframework.stereotype.Service;
+
+import com.iqser.red.service.persistence.management.v1.processor.migration.AsyncMigrationStarterService;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.events.TenantCreatedEvent;
+import com.iqser.red.service.persistence.management.v1.processor.utils.jdbc.JDBCUtils;
+import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
+import com.knecon.fforesight.tenantcommons.TenantProvider;
+import com.knecon.fforesight.tenantcommons.model.TenantResponse;
+import com.knecon.fforesight.tenantcommons.model.UpdateDetailsRequest;
+
+import jakarta.annotation.PostConstruct;
+import liquibase.exception.LiquibaseException;
+import liquibase.integration.spring.SpringLiquibase;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Service
+@EnableConfigurationProperties(LiquibaseProperties.class)
+public class TenantManagementService {
+
+ private static final Set SUPPORTED_DATABASES = Set.of("postgresql");
+ private static final Set SQL_CONNECTION_ERROR_CODES = Set.of(
+ // connection_exception
+ "08000",
+ // connection_does_not_exist
+ "08003",
+ // connection_failure
+ "08006",
+ // invalid_catalog_name
+ "3D000");
+
+
+ private final LiquibaseProperties liquibaseProperties;
+ private final ResourceLoader resourceLoader;
+ private final AsyncMigrationStarterService asyncMigrationStarterService;
+ private final TenantProvider tenantProvider;
+ private final EncryptionDecryptionService encryptionDecryptionService;
+ private final DevDataProvider devDataProvider;
+
+ public TenantManagementService(@Qualifier("tenantLiquibaseProperties") LiquibaseProperties liquibaseProperties,
+ ResourceLoader resourceLoader,
+ EncryptionDecryptionService encryptionDecryptionService,
+ AsyncMigrationStarterService asyncMigrationStarterService,
+ TenantProvider tenantProvider,
+ @Autowired(required = false) DevDataProvider devDataProvider){
+
+ this.liquibaseProperties = liquibaseProperties;
+ this.resourceLoader = resourceLoader;
+ this.encryptionDecryptionService = encryptionDecryptionService;
+ this.asyncMigrationStarterService = asyncMigrationStarterService;
+ this.tenantProvider = tenantProvider;
+ this.devDataProvider = devDataProvider;
+ }
+
+
+ @SneakyThrows
+ @RabbitListener(queues = PERSISTENCE_SERVICE_TENANT_CREATED_QUEUE)
+ public void createTenant(TenantCreatedEvent tenantRequest) {
+
+ var tenant = tenantProvider.getTenant(tenantRequest.getTenantId());
+
+ createSchema(tenant);
+
+ var jdbcUrl = JDBCUtils.buildJdbcUrlWithSchema(tenant.getDatabaseConnection());
+ validateJdbcUrl(jdbcUrl);
+
+ try (Connection connection = DriverManager.getConnection(jdbcUrl, tenant.getDatabaseConnection().getUsername(), encryptionDecryptionService.decrypt(tenant.getDatabaseConnection().getPassword()))) {
+ DataSource tenantDataSource = new SingleConnectionDataSource(connection, false);
+ runLiquibase(tenantDataSource);
+ } catch (PSQLException e) {
+ handleClientException(e);
+ handleInternalException(e);
+ }
+
+ asyncMigrationStarterService.runForTenant(tenantRequest.getTenantId());
+
+ tenantProvider.updateDetails(tenantRequest.getTenantId(), UpdateDetailsRequest.builder().key("persistence-service-ready").value(true).build());
+
+ if(devDataProvider!=null) {
+ devDataProvider.importDossierTemplatesToTenant(tenantRequest.getTenantId());
+ }
+
+
+ }
+
+
+ private void createSchema(TenantResponse tenantRequest) {
+
+ var jdbcUrl = JDBCUtils.buildJdbcUrl(tenantRequest.getDatabaseConnection());
+ try (Connection connection = DriverManager.getConnection(jdbcUrl,
+ tenantRequest.getDatabaseConnection().getUsername(),
+ encryptionDecryptionService.decrypt(tenantRequest.getDatabaseConnection().getPassword()))) {
+ DataSource tenantDataSource = new SingleConnectionDataSource(connection, false);
+ JdbcTemplate jdbcTemplate = new JdbcTemplate(tenantDataSource);
+ jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("CREATE SCHEMA " + tenantRequest.getDatabaseConnection().getSchema()));
+ jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("GRANT USAGE ON SCHEMA " + tenantRequest.getDatabaseConnection()
+ .getSchema() + " TO " + tenantRequest.getDatabaseConnection().getUsername()));
+ } catch (Exception e) {
+ log.info("Could not create schema, ignoring");
+ }
+ }
+
+
+ @SneakyThrows
+ private void validateJdbcUrl(String jdbcUrl) {
+
+ try {
+ // just create a URI object to check if the string is a valid URI
+ var uri = new URI(jdbcUrl);
+ var subUri = new URI(uri.getSchemeSpecificPart());
+
+ if (uri.getScheme() == null || subUri.getScheme() == null || !uri.getScheme().equals("jdbc") || !SUPPORTED_DATABASES.contains(subUri.getScheme())) {
+ throw new IllegalArgumentException("Your jdbcUrl is not valid.");
+ }
+ } catch (URISyntaxException e) {
+ throw new IllegalArgumentException("Your jdbcUrl is not valid.", e);
+ }
+
+ }
+
+
+ private void runLiquibase(DataSource dataSource) throws LiquibaseException {
+
+ SpringLiquibase liquibase = getSpringLiquibase(dataSource);
+ liquibase.afterPropertiesSet();
+ }
+
+
+ private void handleClientException(PSQLException e) {
+
+ if (e.getSQLState().equals("28000") || e.getSQLState().equals("28P01")) {
+ throw new IllegalArgumentException("Database credentials are not correct. Please check them.");
+ }
+ if (SQL_CONNECTION_ERROR_CODES.contains(e.getSQLState())) {
+ throw new IllegalArgumentException("Error when connecting to tenant database. Please check the jdbcUrl parameter.");
+ }
+ }
+
+
+ private void handleInternalException(PSQLException e) {
+
+ log.error(String.format("Connection to tenant DB failed with SQL state %s. Please check if the tenant DB is still running. " + //
+ "If yes please check the connection configuration.", e.getSQLState()), e);
+ throw new RuntimeException("Could not connect to the tenant DB. This is an internal error.", e);
+ }
+
+
+ protected SpringLiquibase getSpringLiquibase(DataSource dataSource) {
+
+ SpringLiquibase liquibase = new SpringLiquibase();
+ liquibase.setResourceLoader(resourceLoader);
+ liquibase.setDataSource(dataSource);
+ liquibase.setChangeLog(liquibaseProperties.getChangeLog());
+ liquibase.setContexts(liquibaseProperties.getContexts());
+ return liquibase;
+ }
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/repository/TenantRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/repository/TenantRepository.java
deleted file mode 100644
index b1dcf06e9..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/repository/TenantRepository.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository;
-
-import java.util.Optional;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.TenantEntity;
-
-public interface TenantRepository extends JpaRepository {
-
- @Query("select t from TenantEntity t where t.tenantId = :tenantId")
- Optional findByTenantId(@Param("tenantId") String tenantId);
-
-}
\ No newline at end of file
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java
index 8894bbd2c..e67917473 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java
@@ -3,7 +3,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import java.time.OffsetDateTime;
import java.util.List;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
@@ -61,7 +61,7 @@ public interface FileRepository extends JpaRepository {
void updateWorkflowStatus(String fileId, WorkflowStatus workflowStatus, OffsetDateTime lastUpdated, OffsetDateTime approvalDate, boolean excludedFromAutomaticAnalysis);
- @Modifying
+ @Modifying(clearAutomatically = true, flushAutomatically = true)
@Query("update FileEntity f set f.workflowStatus = :workflowStatus, f.lastUpdated = :lastUpdated, f.approvalDate = :approvalDate " + " where f.id = :fileId")
void updateWorkflowStatus(String fileId, WorkflowStatus workflowStatus, OffsetDateTime lastUpdated, OffsetDateTime approvalDate);
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/SMTPRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/SMTPRepository.java
deleted file mode 100644
index 8476d80f1..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/SMTPRepository.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.SMTPConfigurationEntity;
-
-public interface SMTPRepository extends JpaRepository {
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java
index 358c05849..5d4e7c4b6 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java
@@ -61,7 +61,7 @@ public interface TypeRepository extends JpaRepository {
@Modifying(clearAutomatically = true, flushAutomatically = true)
- @Query("Update TypeEntity t set t.softDeletedTime = CURRENT_TIMESTAMP where t.id = :typeId")
+ @Query("Update TypeEntity t set t.softDeletedTime = offset_datetime where t.id = :typeId")
void softDeleteTypeById(String typeId);
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/EntryRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/EntryRepository.java
index 6e2d09f64..9db7f0762 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/EntryRepository.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/EntryRepository.java
@@ -2,7 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import java.util.List;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalsePositiveEntryRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalsePositiveEntryRepository.java
index f510e5cf1..4f1ba0c56 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalsePositiveEntryRepository.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalsePositiveEntryRepository.java
@@ -2,7 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import java.util.List;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalseRecommendationEntryRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalseRecommendationEntryRepository.java
index 6220fb5b8..eed395872 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalseRecommendationEntryRepository.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalseRecommendationEntryRepository.java
@@ -2,7 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import java.util.List;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/QueryExecutor.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/QueryExecutor.java
index 2f4d96f37..3582120cb 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/QueryExecutor.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/QueryExecutor.java
@@ -5,9 +5,9 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Set;
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import javax.transaction.Transactional;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.Query;
+import jakarta.transaction.Transactional;
import org.springframework.stereotype.Component;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/UserService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/UserService.java
new file mode 100644
index 000000000..e69e3d488
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/UserService.java
@@ -0,0 +1,255 @@
+package com.iqser.red.service.persistence.management.v1.processor.service.users;
+
+import static com.iqser.red.service.persistence.management.v1.processor.configuration.UserMessagingConfiguration.PERSISTENCE_SERVICE_USER_CREATED_QUEUE;
+import static com.iqser.red.service.persistence.management.v1.processor.configuration.UserMessagingConfiguration.PERSISTENCE_SERVICE_USER_DELETED_QUEUE;
+import static com.iqser.red.service.persistence.management.v1.processor.configuration.UserMessagingConfiguration.PERSISTENCE_SERVICE_USER_OWN_PROFILE_UPDATED_QUEUE;
+import static com.iqser.red.service.persistence.management.v1.processor.configuration.UserMessagingConfiguration.PERSISTENCE_SERVICE_USER_ROLES_UPDATED_QUEUE;
+import static com.iqser.red.service.persistence.management.v1.processor.configuration.UserMessagingConfiguration.PERSISTENCE_SERVICE_USER_STATUS_CHANGED_QUEUE;
+import static com.iqser.red.service.persistence.management.v1.processor.configuration.UserMessagingConfiguration.PERSISTENCE_SERVICE_USER_UPDATED_QUEUE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles.RED_MANAGER_ROLE;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles.RED_USER_ROLE;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.stereotype.Service;
+
+import com.google.common.collect.Lists;
+import com.iqser.red.service.persistence.management.v1.processor.acl.custom.dossier.DossierACLService;
+import com.iqser.red.service.persistence.management.v1.processor.acl.custom.service.CustomPermissionService;
+import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient;
+import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService;
+import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusManagementService;
+import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
+import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.events.UserCreatedEvent;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.events.UserRemovedEvent;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.events.UserRolesUpdatedEvent;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.events.UserStatusToggleEvent;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.events.UserUpdatedEvent;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.events.UserUpdatedOwnProfileEvent;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
+import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
+import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AddNotificationRequest;
+import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AuditRequest;
+import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
+import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
+import com.iqser.red.service.persistence.service.v1.api.shared.model.notification.NotificationType;
+import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class UserService {
+
+ private final DossierManagementService dossierManagementService;
+ private final FileStatusManagementService fileStatusManagementService;
+ private final AuditPersistenceService auditPersistenceService;
+ private final NotificationPersistenceService notificationPersistenceService;
+ private final DossierACLService dossierACLService;
+ private final CustomPermissionService customPermissionService;
+ private final UsersClient usersClient;
+
+
+
+ @RabbitListener(queues = PERSISTENCE_SERVICE_USER_CREATED_QUEUE)
+ public void userCreated(UserCreatedEvent user) {
+
+ auditPersistenceService.audit(AuditRequest.builder()
+ .userId(user.getCreatingUserId())
+ .objectId(user.getUser().getUserId())
+ .category(AuditCategory.USER.name())
+ .message("User created")
+ .build());
+
+ customPermissionService.syncAllCustomPermissions();
+
+ }
+
+ @RabbitListener(queues = PERSISTENCE_SERVICE_USER_ROLES_UPDATED_QUEUE)
+ public void rolesUpdated(UserRolesUpdatedEvent userRolesUpdatedEvent) {
+
+ var newRoles = userRolesUpdatedEvent.getNewRoles();
+
+ var isUser = userRolesUpdatedEvent.getOldRoles().contains(RED_USER_ROLE); // || currentRoles.contains(RED_MANAGER_ROLE);
+ var isManager = userRolesUpdatedEvent.getOldRoles().contains(RED_MANAGER_ROLE);
+
+ if (!newRoles.contains(RED_MANAGER_ROLE) && isManager) {
+ removeUserFromDossiers(userRolesUpdatedEvent.getUser().getUserId(), UserRemovalModel.REMOVE_MANAGER);
+ }
+
+ if (!newRoles.contains(RED_USER_ROLE) && !newRoles.contains(RED_MANAGER_ROLE) && isUser) {
+ removeUserFromDossiers(userRolesUpdatedEvent.getUser().getUserId(), UserRemovalModel.REMOVE_USER);
+ }
+
+ auditPersistenceService.audit(AuditRequest.builder()
+ .userId(userRolesUpdatedEvent.getModifyingUserId())
+ .objectId(userRolesUpdatedEvent.getUser().getUserId())
+ .category(AuditCategory.USER.name())
+ .message("Roles updated for user")
+ .details(Map.of("CurrentRoles", newRoles))
+ .build());
+ }
+
+
+ private void removeUserFromDossiers(String userId, UserRemovalModel mode) {
+
+ dossierManagementService.getAllDossiers(true, true).forEach(dossier -> {
+
+ dossierACLService.enhanceDossierWithACLData(dossier);
+
+ updateDossierUsers(userId, mode, dossier);
+ });
+
+ }
+
+
+ public void updateDossierUsers(String userId, UserRemovalModel mode, Dossier dossier) {
+
+ if (mode == UserRemovalModel.REMOVE_USER || mode == UserRemovalModel.PERMANENT) {
+ // remove from members in case we removed the user role or we permanently removed this user
+ dossier.getMemberIds().remove(userId);
+ dossier.getApproverIds().remove(userId);
+ }
+ fileStatusManagementService.getAllDossierStatus(dossier.getId()).forEach(fileStatus -> {
+ if (userId.equals(fileStatus.getAssignee()) && (mode == UserRemovalModel.REMOVE_USER || mode == UserRemovalModel.PERMANENT)) {
+ fileStatusManagementService.setCurrentFileAssignee(dossier.getId(), fileStatus.getId(), null);
+ }
+ });
+
+ if (userId.equals(dossier.getOwnerId()) && (mode == UserRemovalModel.REMOVE_MANAGER || mode == UserRemovalModel.PERMANENT)) {
+ dossier.setOwnerId(null);
+
+ dossier.getMemberIds()
+ .forEach(member -> notificationPersistenceService.insertNotification(AddNotificationRequest.builder()
+ .userId(member)
+ .issuerId(KeycloakSecurity.getUserId())
+ .notificationType(NotificationType.DOSSIER_OWNER_DELETED.name())
+ .target(Map.of("dossierId", dossier.getId()))
+ .build()));
+ }
+
+ dossierManagementService.updateDossier(CreateOrUpdateDossierRequest.builder()
+ .dossierTemplateId(dossier.getDossierTemplateId())
+ .dossierName(dossier.getDossierName())
+ .description(dossier.getDescription())
+ .dossierTemplateId(dossier.getDossierTemplateId())
+ .downloadFileTypes(dossier.getDownloadFileTypes())
+ .dueDate(dossier.getDueDate())
+ .reportTemplateIds(Lists.newArrayList(dossier.getReportTemplateIds()))
+ .watermarkId(dossier.getWatermarkId())
+ .previewWatermarkId(dossier.getPreviewWatermarkId())
+ .dossierStatusId(dossier.getDossierStatusId())
+ .build(), dossier.getId());
+
+ dossierACLService.updateDossierACL(dossier.getMemberIds(), dossier.getApproverIds(), dossier.getOwnerId(), dossier.getId());
+ }
+
+
+ @RabbitListener(queues = PERSISTENCE_SERVICE_USER_OWN_PROFILE_UPDATED_QUEUE)
+ public void myProfileUpdated(UserUpdatedOwnProfileEvent userUpdatedOwnProfileEvent) {
+
+ auditPersistenceService.audit(AuditRequest.builder()
+ .userId(userUpdatedOwnProfileEvent.getUser().getUserId())
+ .objectId(userUpdatedOwnProfileEvent.getUser().getUserId())
+ .category(AuditCategory.USER.name())
+ .message("Profile updated for user")
+ .details(Map.of("Profile", userUpdatedOwnProfileEvent.getUser()))
+ .build());
+ }
+
+ @RabbitListener(queues = PERSISTENCE_SERVICE_USER_DELETED_QUEUE)
+ public void userRemoved(UserRemovedEvent userRemovedEvent) {
+
+ removeUserFromDossiers(userRemovedEvent.getUser().getUserId(), UserRemovalModel.PERMANENT);
+
+ customPermissionService.syncAllCustomPermissions();
+
+ auditPersistenceService.audit(AuditRequest.builder()
+ .userId(userRemovedEvent.getDeletingUserId())
+ .objectId(userRemovedEvent.getUser().getUserId())
+ .category(AuditCategory.USER.name())
+ .message("User removed")
+ .build());
+
+ }
+
+
+ /*
+ * If a user is deleted via Keycloak, the user ist still in the RedactManager database, thus we have to clean this
+ */
+ public Set removeDeletedUsers(@NotNull Set userIds) {
+
+ var users = usersClient.getAllUsers(true);
+ Set deletedUsers = new HashSet<>();
+
+ for (String userId : userIds) {
+ if (users.stream().filter(u -> u.getUserId().equalsIgnoreCase(userId)).findAny().isEmpty()) {
+ log.info("Will delete {} user", userId);
+
+ removeUserFromDossiers(userId, UserRemovalModel.PERMANENT);
+
+ auditPersistenceService.audit(AuditRequest.builder().objectId(userId).category(AuditCategory.USER.name()).message("User removed automatically").build());
+ deletedUsers.add(userId);
+ }
+ }
+
+ customPermissionService.syncAllCustomPermissions();
+ return deletedUsers;
+ }
+
+
+ @RabbitListener(queues = PERSISTENCE_SERVICE_USER_UPDATED_QUEUE)
+ public void userUpdated(UserUpdatedEvent userUpdatedEvent) {
+
+ auditPersistenceService.audit(AuditRequest.builder()
+ .userId(userUpdatedEvent.getModifyingUserId())
+ .objectId(userUpdatedEvent.getUser().getUserId())
+ .category(AuditCategory.USER.name())
+ .message("Profile updated for user")
+ .details(Map.of("Profile", userUpdatedEvent.getUser()))
+ .build());
+ }
+
+
+ @RabbitListener(queues = PERSISTENCE_SERVICE_USER_STATUS_CHANGED_QUEUE)
+ public void userStatusToggled(UserStatusToggleEvent userStatusToggleEvent) {
+
+ auditPersistenceService.audit(AuditRequest.builder()
+ .userId(userStatusToggleEvent.getModifyingUserId())
+ .objectId(userStatusToggleEvent.getUser().getUserId())
+ .category(AuditCategory.USER.name())
+ .message("Profile activated/deactivated for user")
+ .details(Map.of("Profile activated", userStatusToggleEvent.getUser().isActive()))
+ .build());
+
+ }
+
+
+ public Optional getUserById(String userId) {
+
+ return usersClient.getAllUsers(false).stream().filter(u -> u.getUserId().equalsIgnoreCase(userId)).findAny();
+ }
+
+
+ public List getUsersByIds(Set actualMemberIds) {
+ return usersClient.getAllUsers(false).stream().filter(u -> actualMemberIds.contains(u.getUserId())).collect(Collectors.toList());
+ }
+
+
+ public enum UserRemovalModel {
+ PERMANENT,
+ REMOVE_MANAGER,
+ REMOVE_USER
+ }
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/TenantCreatedEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/TenantCreatedEvent.java
new file mode 100644
index 000000000..2836ec388
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/TenantCreatedEvent.java
@@ -0,0 +1,14 @@
+package com.iqser.red.service.persistence.management.v1.processor.service.users.events;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class TenantCreatedEvent {
+
+ private String tenantId;
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserCreatedEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserCreatedEvent.java
new file mode 100644
index 000000000..46d913afe
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserCreatedEvent.java
@@ -0,0 +1,18 @@
+package com.iqser.red.service.persistence.management.v1.processor.service.users.events;
+
+
+import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserCreatedEvent {
+
+ private User user;
+ private String creatingUserId;
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserRemovedEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserRemovedEvent.java
new file mode 100644
index 000000000..b934fd839
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserRemovedEvent.java
@@ -0,0 +1,18 @@
+package com.iqser.red.service.persistence.management.v1.processor.service.users.events;
+
+
+import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserRemovedEvent {
+
+ private User user;
+ private String deletingUserId;
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserRolesUpdatedEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserRolesUpdatedEvent.java
new file mode 100644
index 000000000..7cb8d1200
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserRolesUpdatedEvent.java
@@ -0,0 +1,21 @@
+package com.iqser.red.service.persistence.management.v1.processor.service.users.events;
+
+import java.util.Set;
+
+import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserRolesUpdatedEvent {
+
+ private User user;
+ private Set oldRoles;
+ private Set newRoles;
+ private String modifyingUserId;
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserStatusToggleEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserStatusToggleEvent.java
new file mode 100644
index 000000000..dec2cd79c
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserStatusToggleEvent.java
@@ -0,0 +1,18 @@
+package com.iqser.red.service.persistence.management.v1.processor.service.users.events;
+
+
+import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserStatusToggleEvent {
+
+ private User user;
+ private String modifyingUserId;
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedEvent.java
new file mode 100644
index 000000000..2f9e51e7b
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedEvent.java
@@ -0,0 +1,18 @@
+package com.iqser.red.service.persistence.management.v1.processor.service.users.events;
+
+
+import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserUpdatedEvent {
+
+ private User user;
+ private String modifyingUserId;
+
+}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedOwnProfileEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedOwnProfileEvent.java
new file mode 100644
index 000000000..abe09d66d
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedOwnProfileEvent.java
@@ -0,0 +1,17 @@
+package com.iqser.red.service.persistence.management.v1.processor.service.users.events;
+
+
+import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserUpdatedOwnProfileEvent {
+
+ private User user;
+
+}
diff --git a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/model/User.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/model/User.java
similarity index 86%
rename from persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/model/User.java
rename to persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/model/User.java
index 47882f690..40338067e 100644
--- a/persistence-service-v1/keycloak-commons/src/main/java/com/iqser/red/keycloak/commons/model/User.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/model/User.java
@@ -1,4 +1,4 @@
-package com.iqser.red.keycloak.commons.model;
+package com.iqser.red.service.persistence.management.v1.processor.service.users.model;
import java.io.Serializable;
import java.util.Set;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONDownloadFileTypeConverter.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONDownloadFileTypeConverter.java
index 6ac017194..a8a4e1337 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONDownloadFileTypeConverter.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONDownloadFileTypeConverter.java
@@ -3,8 +3,8 @@ package com.iqser.red.service.persistence.management.v1.processor.utils;
import java.util.HashSet;
import java.util.Set;
-import javax.persistence.AttributeConverter;
-import javax.persistence.Converter;
+import jakarta.persistence.AttributeConverter;
+import jakarta.persistence.Converter;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONIntegerSetConverter.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONIntegerSetConverter.java
index 3d251f25e..141ba7abe 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONIntegerSetConverter.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONIntegerSetConverter.java
@@ -3,8 +3,8 @@ package com.iqser.red.service.persistence.management.v1.processor.utils;
import java.util.HashSet;
import java.util.Set;
-import javax.persistence.AttributeConverter;
-import javax.persistence.Converter;
+import jakarta.persistence.AttributeConverter;
+import jakarta.persistence.Converter;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONMapConverter.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONMapConverter.java
index 684702abb..5571bf82b 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONMapConverter.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONMapConverter.java
@@ -3,8 +3,8 @@ package com.iqser.red.service.persistence.management.v1.processor.utils;
import java.util.HashMap;
import java.util.Map;
-import javax.persistence.AttributeConverter;
-import javax.persistence.Converter;
+import jakarta.persistence.AttributeConverter;
+import jakarta.persistence.Converter;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONStoredFileInformationConverter.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONStoredFileInformationConverter.java
index 794a66761..aca69a293 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONStoredFileInformationConverter.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONStoredFileInformationConverter.java
@@ -3,8 +3,8 @@ package com.iqser.red.service.persistence.management.v1.processor.utils;
import java.util.HashSet;
import java.util.Set;
-import javax.persistence.AttributeConverter;
-import javax.persistence.Converter;
+import jakarta.persistence.AttributeConverter;
+import jakarta.persistence.Converter;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONStringSetConverter.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONStringSetConverter.java
index 668f2150f..9d1b8d0f8 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONStringSetConverter.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONStringSetConverter.java
@@ -3,8 +3,8 @@ package com.iqser.red.service.persistence.management.v1.processor.utils;
import java.util.HashSet;
import java.util.Set;
-import javax.persistence.AttributeConverter;
-import javax.persistence.Converter;
+import jakarta.persistence.AttributeConverter;
+import jakarta.persistence.Converter;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/MagicConverter.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/MagicConverter.java
index 98e4b4bca..fd46cade2 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/MagicConverter.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/MagicConverter.java
@@ -7,7 +7,7 @@ import java.util.List;
import java.util.Set;
import java.util.function.BiConsumer;
-import javax.persistence.EmbeddedId;
+import jakarta.persistence.EmbeddedId;
import org.springframework.beans.BeanUtils;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCUtils.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCUtils.java
index 5aecbbbbd..19b95d652 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCUtils.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCUtils.java
@@ -5,39 +5,19 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.DatabaseConnectionEntity;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.DatabaseConnection;
+import com.knecon.fforesight.tenantcommons.model.DatabaseConnection;
import lombok.experimental.UtilityClass;
@UtilityClass
public class JDBCUtils {
- public String buildJdbcUrl(DatabaseConnectionEntity databaseConnectionEntity) {
-
- StringBuilder sb = createJdbcConnectionStringBuilder(databaseConnectionEntity.getDriver(),
- databaseConnectionEntity.getHost(),
- databaseConnectionEntity.getPort(),
- databaseConnectionEntity.getDatabase());
-
- Map params = getConnectionParameters(databaseConnectionEntity);
- appendParams(sb, params);
- return sb.toString();
- }
-
-
private StringBuilder createJdbcConnectionStringBuilder(String driver, String host, String port, String database) {
return new StringBuilder("jdbc:").append(driver).append("://").append(host).append(':').append(port).append('/').append(database);
}
- private Map getConnectionParameters(DatabaseConnectionEntity databaseConnectionEntity) {
-
- return Optional.ofNullable(databaseConnectionEntity.getParams()).orElseGet(HashMap::new);
- }
-
-
public String buildJdbcUrl(DatabaseConnection databaseConnection) {
StringBuilder sb = createJdbcConnectionStringBuilder(databaseConnection.getDriver(),
@@ -86,14 +66,4 @@ public class JDBCUtils {
}
- public String buildJdbcUrlWithSchema(DatabaseConnectionEntity databaseConnection) {
-
- return createJdbcConnectionString(databaseConnection.getDriver(),
- databaseConnection.getHost(),
- databaseConnection.getPort(),
- databaseConnection.getDatabase(),
- databaseConnection.getSchema(),
- getConnectionParameters(databaseConnection));
- }
-
}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCWriteUtils.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCWriteUtils.java
index 7c71a2a32..6439933c2 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCWriteUtils.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCWriteUtils.java
@@ -11,14 +11,14 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-import javax.persistence.Column;
-import javax.persistence.Table;
-import javax.transaction.Transactional;
+import jakarta.persistence.Column;
+import jakarta.persistence.Table;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/multitenancy/TenantContext.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/multitenancy/TenantContext.java
deleted file mode 100644
index b9e04a2b4..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/multitenancy/TenantContext.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public final class TenantContext {
-
- private static final InheritableThreadLocal currentTenant = new InheritableThreadLocal<>();
-
-
- public static String getTenantId() {
-
- return currentTenant.get();
- }
-
-
- public static void setTenantId(String tenantId) {
-
- log.debug("Setting tenantId to " + tenantId);
- currentTenant.set(tenantId);
- }
-
-
- public static void clear() {
-
- currentTenant.remove();
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-master.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-master.yaml
deleted file mode 100644
index d1fa43356..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-master.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-databaseChangeLog:
- - include:
- file: db/changelog/master/1-initial-schema.changelog.yaml
- - include:
- file: db/changelog/master/2-quartz.changelog.yaml
- - include:
- file: db/changelog/master/3-detailed-db-connection.changelog.yaml
- - include:
- file: db/changelog/master/4-add-unique-constraint-for-tenants-table.yaml
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml
index ecd963873..dc73b14ca 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml
@@ -133,6 +133,8 @@ databaseChangeLog:
file: db/changelog/tenant/48-add-watermark-text-alignment.yaml
- include:
file: db/changelog/tenant/sql/49-add-keep_overlapping_objects.sql
+ - include:
+ file: db/changelog/tenant/sql/204-big-int-to-serial-for-remaining-tables.sql
- include:
file: db/changelog/tenant/50-add-file-status-error-info.yaml
- include:
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/master/1-initial-schema.changelog.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/master/1-initial-schema.changelog.yaml
deleted file mode 100644
index 20278bf88..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/master/1-initial-schema.changelog.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
-databaseChangeLog:
- - changeSet:
- id: create-tenants-table
- author: dom
- changes:
- - createTable:
- columns:
- - column:
- constraints:
- nullable: false
- primaryKey: true
- primaryKeyName: tenant_pkey
- name: tenant_id
- type: VARCHAR(255)
- - column:
- name: display_name
- type: VARCHAR(255)
- - column:
- name: guid
- type: VARCHAR(255)
- - column:
- name: username
- type: VARCHAR(255)
- - column:
- name: password
- type: VARCHAR(255)
- - column:
- name: jdbc_url
- type: VARCHAR(255)
- tableName: tenant
\ No newline at end of file
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/master/2-quartz.changelog.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/master/2-quartz.changelog.yaml
deleted file mode 100644
index fe25d36b3..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/master/2-quartz.changelog.yaml
+++ /dev/null
@@ -1,536 +0,0 @@
-databaseChangeLog:
- - changeSet:
- id: 1646818341589-1
- author: timobejan (generated)
- changes:
- - createTable:
- columns:
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: SCHED_NAME
- type: VARCHAR(120)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: TRIGGER_NAME
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: TRIGGER_GROUP
- type: VARCHAR(200)
- - column:
- name: BLOB_DATA
- type: BYTEA
- tableName: QRTZ_BLOB_TRIGGERS
- - changeSet:
- id: 1646818341589-2
- author: timobejan (generated)
- changes:
- - createTable:
- columns:
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: SCHED_NAME
- type: VARCHAR(120)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: CALENDAR_NAME
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- name: CALENDAR
- type: BYTEA
- tableName: QRTZ_CALENDARS
- - changeSet:
- id: 1646818341589-3
- author: timobejan (generated)
- changes:
- - createTable:
- columns:
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: SCHED_NAME
- type: VARCHAR(120)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: TRIGGER_NAME
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: TRIGGER_GROUP
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- name: CRON_EXPRESSION
- type: VARCHAR(200)
- - column:
- name: TIME_ZONE_ID
- type: VARCHAR(80)
- tableName: QRTZ_CRON_TRIGGERS
- - changeSet:
- id: 1646818341589-4
- author: timobejan (generated)
- changes:
- - createTable:
- columns:
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: SCHED_NAME
- type: VARCHAR(120)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: ENTRY_ID
- type: VARCHAR(95)
- - column:
- constraints:
- nullable: false
- name: TRIGGER_NAME
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- name: TRIGGER_GROUP
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- name: INSTANCE_NAME
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- name: FIRED_TIME
- type: BIGINT
- - column:
- constraints:
- nullable: false
- name: SCHED_TIME
- type: BIGINT
- - column:
- constraints:
- nullable: false
- name: PRIORITY
- type: INT
- - column:
- constraints:
- nullable: false
- name: STATE
- type: VARCHAR(16)
- - column:
- name: JOB_NAME
- type: VARCHAR(200)
- - column:
- name: JOB_GROUP
- type: VARCHAR(200)
- - column:
- name: IS_NONCONCURRENT
- type: BOOL
- - column:
- name: REQUESTS_RECOVERY
- type: BOOL
- tableName: QRTZ_FIRED_TRIGGERS
- - changeSet:
- id: 1646818341589-5
- author: timobejan (generated)
- changes:
- - createTable:
- columns:
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: SCHED_NAME
- type: VARCHAR(120)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: JOB_NAME
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: JOB_GROUP
- type: VARCHAR(200)
- - column:
- name: DESCRIPTION
- type: VARCHAR(250)
- - column:
- constraints:
- nullable: false
- name: JOB_CLASS_NAME
- type: VARCHAR(250)
- - column:
- constraints:
- nullable: false
- name: IS_DURABLE
- type: BOOL
- - column:
- constraints:
- nullable: false
- name: IS_NONCONCURRENT
- type: BOOL
- - column:
- constraints:
- nullable: false
- name: IS_UPDATE_DATA
- type: BOOL
- - column:
- constraints:
- nullable: false
- name: REQUESTS_RECOVERY
- type: BOOL
- - column:
- name: JOB_DATA
- type: BYTEA
- tableName: QRTZ_JOB_DETAILS
- - changeSet:
- id: 1646818341589-6
- author: timobejan (generated)
- changes:
- - createTable:
- columns:
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: SCHED_NAME
- type: VARCHAR(120)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: LOCK_NAME
- type: VARCHAR(40)
- tableName: QRTZ_LOCKS
- - changeSet:
- id: 1646818341589-7
- author: timobejan (generated)
- changes:
- - createTable:
- columns:
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: SCHED_NAME
- type: VARCHAR(120)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: TRIGGER_GROUP
- type: VARCHAR(200)
- tableName: QRTZ_PAUSED_TRIGGER_GRPS
- - changeSet:
- id: 1646818341589-8
- author: timobejan (generated)
- changes:
- - createTable:
- columns:
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: SCHED_NAME
- type: VARCHAR(120)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: INSTANCE_NAME
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- name: LAST_CHECKIN_TIME
- type: BIGINT
- - column:
- constraints:
- nullable: false
- name: CHECKIN_INTERVAL
- type: BIGINT
- tableName: QRTZ_SCHEDULER_STATE
- - changeSet:
- id: 1646818341589-9
- author: timobejan (generated)
- changes:
- - createTable:
- columns:
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: SCHED_NAME
- type: VARCHAR(120)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: TRIGGER_NAME
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: TRIGGER_GROUP
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- name: REPEAT_COUNT
- type: BIGINT
- - column:
- constraints:
- nullable: false
- name: REPEAT_INTERVAL
- type: BIGINT
- - column:
- constraints:
- nullable: false
- name: TIMES_TRIGGERED
- type: BIGINT
- tableName: QRTZ_SIMPLE_TRIGGERS
- - changeSet:
- id: 1646818341589-10
- author: timobejan (generated)
- changes:
- - createTable:
- columns:
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: SCHED_NAME
- type: VARCHAR(120)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: TRIGGER_NAME
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: TRIGGER_GROUP
- type: VARCHAR(200)
- - column:
- name: STR_PROP_1
- type: VARCHAR(512)
- - column:
- name: STR_PROP_2
- type: VARCHAR(512)
- - column:
- name: STR_PROP_3
- type: VARCHAR(512)
- - column:
- name: INT_PROP_1
- type: INT
- - column:
- name: INT_PROP_2
- type: INT
- - column:
- name: LONG_PROP_1
- type: BIGINT
- - column:
- name: LONG_PROP_2
- type: BIGINT
- - column:
- name: DEC_PROP_1
- type: DECIMAL(13, 4)
- - column:
- name: DEC_PROP_2
- type: DECIMAL(13, 4)
- - column:
- name: BOOL_PROP_1
- type: BOOL
- - column:
- name: BOOL_PROP_2
- type: BOOL
- tableName: QRTZ_SIMPROP_TRIGGERS
- - changeSet:
- id: 1646818341589-11
- author: timobejan (generated)
- changes:
- - createTable:
- columns:
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: SCHED_NAME
- type: VARCHAR(120)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: TRIGGER_NAME
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- primaryKey: true
- name: TRIGGER_GROUP
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- name: JOB_NAME
- type: VARCHAR(200)
- - column:
- constraints:
- nullable: false
- name: JOB_GROUP
- type: VARCHAR(200)
- - column:
- name: DESCRIPTION
- type: VARCHAR(250)
- - column:
- name: NEXT_FIRE_TIME
- type: BIGINT
- - column:
- name: PREV_FIRE_TIME
- type: BIGINT
- - column:
- name: PRIORITY
- type: INT
- - column:
- constraints:
- nullable: false
- name: TRIGGER_STATE
- type: VARCHAR(16)
- - column:
- constraints:
- nullable: false
- name: TRIGGER_TYPE
- type: VARCHAR(8)
- - column:
- constraints:
- nullable: false
- name: START_TIME
- type: BIGINT
- - column:
- name: END_TIME
- type: BIGINT
- - column:
- name: CALENDAR_NAME
- type: VARCHAR(200)
- - column:
- name: MISFIRE_INSTR
- type: SMALLINT
- - column:
- name: JOB_DATA
- type: BYTEA
- tableName: QRTZ_TRIGGERS
- - changeSet:
- id: 1646818341589-95
- author: timobejan (generated)
- changes:
- - createIndex:
- columns:
- - column:
- name: SCHED_NAME
- - column:
- name: JOB_NAME
- - column:
- name: JOB_GROUP
- indexName: SCHED_NAME
- tableName: QRTZ_TRIGGERS
- - changeSet:
- id: 1646818341589-218
- author: timobejan (generated)
- changes:
- - addForeignKeyConstraint:
- baseColumnNames: SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP
- baseTableName: QRTZ_BLOB_TRIGGERS
- constraintName: QRTZ_BLOB_TRIGGERS_ibfk_1
- deferrable: false
- initiallyDeferred: false
- onDelete: RESTRICT
- onUpdate: RESTRICT
- referencedColumnNames: SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP
- referencedTableName: QRTZ_TRIGGERS
- validate: true
- - changeSet:
- id: 1646818341589-219
- author: timobejan (generated)
- changes:
- - addForeignKeyConstraint:
- baseColumnNames: SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP
- baseTableName: QRTZ_CRON_TRIGGERS
- constraintName: QRTZ_CRON_TRIGGERS_ibfk_1
- deferrable: false
- initiallyDeferred: false
- onDelete: RESTRICT
- onUpdate: RESTRICT
- referencedColumnNames: SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP
- referencedTableName: QRTZ_TRIGGERS
- validate: true
- - changeSet:
- id: 1646818341589-220
- author: timobejan (generated)
- changes:
- - addForeignKeyConstraint:
- baseColumnNames: SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP
- baseTableName: QRTZ_SIMPLE_TRIGGERS
- constraintName: QRTZ_SIMPLE_TRIGGERS_ibfk_1
- deferrable: false
- initiallyDeferred: false
- onDelete: RESTRICT
- onUpdate: RESTRICT
- referencedColumnNames: SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP
- referencedTableName: QRTZ_TRIGGERS
- validate: true
- - changeSet:
- id: 1646818341589-221
- author: timobejan (generated)
- changes:
- - addForeignKeyConstraint:
- baseColumnNames: SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP
- baseTableName: QRTZ_SIMPROP_TRIGGERS
- constraintName: QRTZ_SIMPROP_TRIGGERS_ibfk_1
- deferrable: false
- initiallyDeferred: false
- onDelete: RESTRICT
- onUpdate: RESTRICT
- referencedColumnNames: SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP
- referencedTableName: QRTZ_TRIGGERS
- validate: true
- - changeSet:
- id: 1646818341589-222
- author: timobejan (generated)
- changes:
- - addForeignKeyConstraint:
- baseColumnNames: SCHED_NAME,JOB_NAME,JOB_GROUP
- baseTableName: QRTZ_TRIGGERS
- constraintName: QRTZ_TRIGGERS_ibfk_1
- deferrable: false
- initiallyDeferred: false
- onDelete: RESTRICT
- onUpdate: RESTRICT
- referencedColumnNames: SCHED_NAME,JOB_NAME,JOB_GROUP
- referencedTableName: QRTZ_JOB_DETAILS
- validate: true
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/master/3-detailed-db-connection.changelog.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/master/3-detailed-db-connection.changelog.yaml
deleted file mode 100644
index aa9ff0b46..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/master/3-detailed-db-connection.changelog.yaml
+++ /dev/null
@@ -1,82 +0,0 @@
-databaseChangeLog:
- - changeSet:
- id: detailed-db-connection
- author: dom
- changes:
- - deleteColumn:
- columns:
- - column:
- name: jdbc_url
- tableName: tenant
- - addColumn:
- columns:
- - column:
- name: db_driver
- type: VARCHAR(255)
- - column:
- name: db_host
- type: VARCHAR(255)
- - column:
- name: db_port
- type: VARCHAR(255)
- - column:
- name: db_database
- type: VARCHAR(255)
- - column:
- name: db_schema
- type: VARCHAR(255)
- - column:
- name: db_params
- type: VARCHAR(255)
- - column:
- name: db_username
- type: VARCHAR(255)
- - column:
- name: db_password
- type: VARCHAR(255)
- - column:
- name: search_hosts
- type: VARCHAR(255)
- - column:
- name: search_port
- type: VARCHAR(255)
- - column:
- name: search_scheme
- type: VARCHAR(255)
- - column:
- name: search_username
- type: VARCHAR(255)
- - column:
- name: search_password
- type: VARCHAR(255)
- - column:
- name: search_number_of_shards
- type: VARCHAR(255)
- - column:
- name: search_number_of_replicas
- type: VARCHAR(255)
- - column:
- name: storage_azure_connection_string
- type: VARCHAR(1024)
- - column:
- name: storage_azure_container_name
- type: VARCHAR(255)
- - column:
- name: storage_s3_key
- type: VARCHAR(255)
- - column:
- name: storage_s3_secret
- type: VARCHAR(255)
- - column:
- name: storage_s3_signer_type
- type: VARCHAR(255)
- - column:
- name: storage_s3_bucket_name
- type: VARCHAR(255)
- - column:
- name: storage_s3_region
- type: VARCHAR(255)
- - column:
- name: storage_s3_endpoint
- type: VARCHAR(255)
- tableName: tenant
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/master/4-add-unique-constraint-for-tenants-table.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/master/4-add-unique-constraint-for-tenants-table.yaml
deleted file mode 100644
index 27baab89c..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/master/4-add-unique-constraint-for-tenants-table.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
-databaseChangeLog:
- - changeSet:
- id: add-unique-constraint-for-tenants-table
- author: corinaolariu
- changes:
- - addUniqueConstraint:
- columnNames: db_host, db_schema
- constraintName: unique_constraint_tenant_host_shema
- tableName: tenant
- - addUniqueConstraint:
- columnNames: storage_s3_endpoint, storage_s3_region, storage_s3_bucket_name
- constraintName: unique_constraint_tenant_s3_storage
- tableName: tenant
- - addUniqueConstraint:
- columnNames: storage_azure_connection_string, storage_azure_container_name
- constraintName: unique_constraint_tenant_azure_storage
- tableName: tenant
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/13-file-manual-change-date.changelog.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/13-file-manual-change-date.changelog.yaml
index 1604808f6..aeacd5775 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/13-file-manual-change-date.changelog.yaml
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/13-file-manual-change-date.changelog.yaml
@@ -3,9 +3,10 @@ databaseChangeLog:
id: add-file-manual-change-date-column
author: timo
changes:
- - removeColumn:
+ - dropColumn:
columns:
- - name: last_manual_redaction
+ - column:
+ name: last_manual_redaction
tableName: file
- addColumn:
columns:
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/15-dossier-remove-dossier-state.changelog.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/15-dossier-remove-dossier-state.changelog.yaml
index 9a5896cac..aff74b7c9 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/15-dossier-remove-dossier-state.changelog.yaml
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/15-dossier-remove-dossier-state.changelog.yaml
@@ -3,7 +3,7 @@ databaseChangeLog:
id: dossier-remove-dossier-state-column
author: corina
changes:
- - removeColumn:
+ - dropColumn:
columns:
- name: dossier_status
tableName: dossier
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/36-revert-reports-information-column.changelog.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/36-revert-reports-information-column.changelog.yaml
index b3400dc7c..3cf0e4215 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/36-revert-reports-information-column.changelog.yaml
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/36-revert-reports-information-column.changelog.yaml
@@ -3,7 +3,7 @@ databaseChangeLog:
id: remove-reports-information-column
author: dom
changes:
- - removeColumn:
+ - dropColumn:
columns:
- column:
name: generated_reports_information
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/8-remove-old-dossier-status-column.changelog.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/8-remove-old-dossier-status-column.changelog.yaml
index 16c459e42..a7dd75f92 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/8-remove-old-dossier-status-column.changelog.yaml
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/8-remove-old-dossier-status-column.changelog.yaml
@@ -3,7 +3,7 @@ databaseChangeLog:
id: remove-dossier-status-numeric-column
author: timo
changes:
- - removeColumn:
+ - dropColumn:
columns:
- column:
name: status
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/sql/204-big-int-to-serial-for-remaining-tables.sql b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/sql/204-big-int-to-serial-for-remaining-tables.sql
new file mode 100644
index 000000000..10c8f49f0
--- /dev/null
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/sql/204-big-int-to-serial-for-remaining-tables.sql
@@ -0,0 +1,13 @@
+ALTER TABLE audit
+ ALTER record_id ADD GENERATED ALWAYS AS IDENTITY;
+ALTER TABLE comment
+ ALTER id ADD GENERATED ALWAYS AS IDENTITY;
+ALTER TABLE migration
+ ALTER id ADD GENERATED ALWAYS AS IDENTITY;
+ALTER TABLE notification
+ ALTER id ADD GENERATED ALWAYS AS IDENTITY;
+
+SELECT setval(pg_get_serial_sequence('audit', 'record_id'), (select coalesce(max(record_id) + 1, 1) from audit));
+SELECT setval(pg_get_serial_sequence('comment', 'id'), (select coalesce(max(id) + 1, 1) from comment));
+SELECT setval(pg_get_serial_sequence('migration', 'id'), (select coalesce(max(id) + 1, 1) from migration));
+SELECT setval(pg_get_serial_sequence('notification', 'id'), (select coalesce(max(id) + 1, 1) from notification));
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/test/resources/application.yml b/persistence-service-v1/persistence-service-processor-v1/src/test/resources/application.yml
index e69de29bb..719c2c8ba 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/test/resources/application.yml
+++ b/persistence-service-v1/persistence-service-processor-v1/src/test/resources/application.yml
@@ -0,0 +1,8 @@
+spring:
+ datasource:
+ hikari:
+ validation-timeout:
+springdoc:
+ packages-to-scan:
+
+
diff --git a/persistence-service-v1/persistence-service-server-v1/pom.xml b/persistence-service-v1/persistence-service-server-v1/pom.xml
index 83c7df98c..04f582d7b 100644
--- a/persistence-service-v1/persistence-service-server-v1/pom.xml
+++ b/persistence-service-v1/persistence-service-server-v1/pom.xml
@@ -23,12 +23,7 @@
persistence-service-processor-v1
${project.version}
-
- org.keycloak
- keycloak-admin-client
- ${keycloak.version}
- compile
-
+
org.springframework.amqp
@@ -43,19 +38,6 @@
-
-
- com.github.dasniko
- testcontainers-keycloak
- 2.3.0
- test
-
-
- keycloak-admin-client
- org.keycloak
-
-
-
org.springframework.security
spring-security-test
@@ -78,11 +60,6 @@
log4j-slf4j-impl
test
-
- org.liquibase
- liquibase-core
- 4.3.1
-
com.yannbriancon
spring-hibernate-query-utils
@@ -101,12 +78,6 @@
${project.version}
compile
-
- org.keycloak
- keycloak-common
- ${keycloak.version}
- compile
-
@@ -117,7 +88,6 @@
lombok.launch.AnnotationProcessorHider$AnnotationProcessor
- com.dslplatform.json.processor.CompiledJsonAnnotationProcessor
diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java
index 1cbdfc0f9..63175a881 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java
@@ -1,14 +1,13 @@
package com.iqser.red.service.peristence.v1.server;
-import org.keycloak.adapters.springboot.KeycloakSpringBootProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration;
+import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration;
-import org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cache.annotation.EnableCaching;
@@ -19,22 +18,22 @@ import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-import com.giffing.bucket4j.spring.boot.starter.config.webflux.Bucket4JAutoConfigurationWebfluxFilter;
-import com.iqser.red.keycloak.commons.DefaultKeyCloakCommonsConfiguration;
-import com.iqser.red.keycloak.commons.KeyCloakSettings;
-import com.iqser.red.persistence.service.v1.external.api.impl.PersistenceServiceExternalApiConfiguration;
-import com.iqser.red.persistence.service.v1.external.api.impl.swagger.SwaggerAutoConfiguration;
import com.iqser.red.service.dictionarymerge.commons.DictionaryMergeService;
+
+import com.iqser.red.persistence.service.v1.external.api.impl.PersistenceServiceExternalApiConfiguration;
import com.iqser.red.service.persistence.management.v1.processor.PersistenceServiceProcessorConfiguration;
import com.iqser.red.service.persistence.management.v1.processor.cache.PersistenceServiceExternalApiCacheConfiguration;
-import com.iqser.red.service.persistence.management.v1.processor.configuration.CleanupDownloadSchedulerConfiguration;
import com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration;
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.AsyncConfig;
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.MultiTenancyMessagingConfiguration;
-import com.iqser.red.service.persistence.management.v1.processor.multitenancy.MultiTenancyWebConfiguration;
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
import com.iqser.red.service.persistence.v1.internal.api.PersistenceServiceInternalApiConfiguration;
+import com.iqser.red.storage.commons.StorageAutoConfiguration;
+import com.knecon.fforesight.jobscommons.JobsAutoConfiguration;
+import com.knecon.fforesight.keycloakcommons.DefaultKeyCloakCommonsAutoConfiguration;
+import com.knecon.fforesight.swaggercommons.SpringDocAutoConfiguration;
+import com.knecon.fforesight.tenantcommons.AsyncConfig;
+import com.knecon.fforesight.tenantcommons.MultiTenancyAutoConfiguration;
+import com.knecon.fforesight.tenantcommons.MultiTenancyMessagingConfiguration;
+import com.knecon.fforesight.tenantcommons.MultiTenancyWebConfiguration;
import io.micrometer.core.aop.TimedAspect;
import io.micrometer.core.instrument.MeterRegistry;
@@ -45,9 +44,10 @@ import lombok.extern.slf4j.Slf4j;
@EnableRetry
@EnableScheduling
@EnableCaching
-@EnableConfigurationProperties({KeyCloakSettings.class, KeycloakSpringBootProperties.class, FileManagementServiceSettings.class})
-@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class, CassandraAutoConfiguration.class, DataSourceAutoConfiguration.class, LiquibaseAutoConfiguration.class, QuartzAutoConfiguration.class, Bucket4JAutoConfigurationWebfluxFilter.class,})
-@Import({PersistenceServiceExternalApiConfiguration.class, PersistenceServiceInternalApiConfiguration.class, SwaggerAutoConfiguration.class, DefaultKeyCloakCommonsConfiguration.class, PersistenceServiceExternalApiCacheConfiguration.class, MultiTenancyWebConfiguration.class, PersistenceServiceProcessorConfiguration.class, MessagingConfiguration.class, CleanupDownloadSchedulerConfiguration.class, AsyncConfig.class, MultiTenancyMessagingConfiguration.class})
+@EnableConfigurationProperties({FileManagementServiceSettings.class})
+@ImportAutoConfiguration({StorageAutoConfiguration.class, JobsAutoConfiguration.class, MultiTenancyAutoConfiguration.class, SpringDocAutoConfiguration.class, DefaultKeyCloakCommonsAutoConfiguration.class})
+@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class, CassandraAutoConfiguration.class, DataSourceAutoConfiguration.class, LiquibaseAutoConfiguration.class})
+@Import({PersistenceServiceExternalApiConfiguration.class, PersistenceServiceInternalApiConfiguration.class, PersistenceServiceExternalApiCacheConfiguration.class, MultiTenancyWebConfiguration.class, PersistenceServiceProcessorConfiguration.class, MessagingConfiguration.class, AsyncConfig.class, MultiTenancyMessagingConfiguration.class})
public class Application {
/**
@@ -84,6 +84,7 @@ public class Application {
};
}
+
@Bean
public DictionaryMergeService dictionaryMergeService() {
diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/DevConfiguration.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/DevConfiguration.java
deleted file mode 100644
index 13fee5f79..000000000
--- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/DevConfiguration.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package com.iqser.red.service.peristence.v1.server;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.util.Set;
-import java.util.UUID;
-import java.util.stream.Stream;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import javax.annotation.PostConstruct;
-import javax.sql.DataSource;
-
-import org.junit.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.StatementCallback;
-import org.springframework.jdbc.datasource.SingleConnectionDataSource;
-
-import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateImportService;
-import com.iqser.red.service.persistence.management.v1.processor.service.TenantManagementService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.importexport.ImportDossierTemplateRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.DatabaseConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.S3StorageConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.SearchConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantRequest;
-
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Profile("dev")
-@Configuration
-public class DevConfiguration {
-
- @Autowired
- private TenantManagementService tenantManagementService;
-
- @Autowired
- @Qualifier("masterDataSource")
- private DataSource dataSource;
-
- @Value("${multitenancy.master.datasource.url:}")
- private String masterJDBCURL;
-
-
- @PostConstruct
-
- public void createDefaultTenant() {
-
- log.info("Creating Redaction Tenant");
-
- if (tenantManagementService.getTenants().isEmpty()) {
-
- var jdbcUrl = masterJDBCURL.substring(0, masterJDBCURL.lastIndexOf('/') + 1) + "redaction?currentSchema=myschema";
-
- createDatabase("redaction", "redaction");
- createSchema(jdbcUrl, "redaction", "redaction");
-
-
- var tenantRequest = TenantRequest.builder()
- .tenantId("redaction")
- .displayName("Redaction default")
- .guid(UUID.randomUUID().toString())
- .databaseConnection(DatabaseConnection.builder()
- .driver("postgresql")
- .host("localhost")
- .port("5432")
- .database("redaction")
- .schema("myschema")
- .username("redaction")
- .password("redaction")
- .build())
- .searchConnection(SearchConnection.builder()
- .hosts(Set.of("localhost"))
- .port(9200)
- .scheme("http")
- .username("elastic")
- .numberOfShards("1")
- .numberOfReplicas("5")
- .build())
- .s3StorageConnection(S3StorageConnection.builder()
- .key("minioadmin")
- .secret("minioadmin")
- .bucketName("redaction")
- .endpoint("http://localhost:9000")
- .build())
- .build();
-
- tenantManagementService.createTenant(tenantRequest);
-
- }
-
- TenantContext.setTenantId("redaction");
- if(dossierTemplateRepository.count() == 0) {
- testDossierTemplateImport();
- }
- }
-
-
- @Autowired
- private DossierTemplateImportService dossierTemplateImportService;
-
- @Autowired
- private DossierTemplateRepository dossierTemplateRepository;
-
- public byte[] pack(String sourceDirPath) throws IOException {
-
- var bos = new ByteArrayOutputStream();
- var p = Paths.get(sourceDirPath);
- try (ZipOutputStream zs = new ZipOutputStream(bos)) {
- Stream paths = Files.walk(p);
- {
- paths.filter(path -> !Files.isDirectory(path)).forEach(path -> {
- ZipEntry zipEntry = new ZipEntry(p.relativize(path).toString());
- try {
- zs.putNextEntry(zipEntry);
- Files.copy(path, zs);
- zs.closeEntry();
- } catch (IOException e) {
- System.err.println(e);
- }
- });
- }
- }
-
- return bos.toByteArray();
-
- }
-
- @SneakyThrows
- public void testDossierTemplateImport() {
-
- var importDir = new File("/Users/timobejan/work/dossier-templates-v2/dev");
-
- TenantContext.setTenantId("redaction");
- for (var file : importDir.listFiles()) {
- if(file.isDirectory()){
- var archive = pack(file.getAbsolutePath());
- log.info("Importing file: " + file.getName() + " " + " with size: " + archive.length);
- var request = new ImportDossierTemplateRequest();
- request.setArchive(archive);
- request.setUpdateExistingDossierTemplate(false);
- request.setUserId("system");
- dossierTemplateImportService.importDossierTemplate(request);
- }
- }
- }
-
- @SneakyThrows
- public void createSchema(String jdbcUrl, String username, String password) {
-
- try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password)) {
- DataSource tenantDataSource = new SingleConnectionDataSource(connection, false);
- JdbcTemplate insert = new JdbcTemplate(tenantDataSource);
- try {
- insert.execute((StatementCallback) stmt -> stmt.execute("CREATE SCHEMA myschema"));
- } catch (Exception e) {
- log.warn("schema already exists");
- }
- try {
- insert.execute((StatementCallback) stmt -> stmt.execute("GRANT USAGE ON SCHEMA myschema TO " + username));
- } catch (Exception e) {
- log.warn("grant invalid");
- }
- }
- }
-
-
- private void createDatabase(String db, String password) {
-
- var jdbcTemplate = new JdbcTemplate(dataSource);
- try {
- jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("CREATE DATABASE " + db));
- } catch (Exception e) {
- log.warn("DB already exists");
- }
- try {
- jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("CREATE USER " + db + " WITH ENCRYPTED PASSWORD '" + password + "'"));
- } catch (Exception e) {
- log.warn("user already exists");
- }
- try {
- jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("GRANT ALL PRIVILEGES ON DATABASE " + db + " TO " + db));
- } catch (Exception e) {
- log.warn("grant invalid");
- }
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application-dev.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application-dev.yaml
new file mode 100644
index 000000000..c49a6fac7
--- /dev/null
+++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application-dev.yaml
@@ -0,0 +1,37 @@
+server:
+ port: 8085
+
+redaction-service.url: "http://localhost:8083"
+pdftron-redaction-service.url: "http://localhost:8086"
+redaction-report-service.url: "http://localhost:8084"
+search-service.url: "http://localhost:8088"
+tenant-user-management-service.url: "http://localhost:8091/internal"
+
+
+multitenancy:
+ datasource-cache:
+ maximumSize: 100
+ expireAfterAccess: 1
+ tenant:
+ datasource:
+ driverClassName: org.postgresql.Driver
+ hikari:
+ data-source-properties:
+ cachePrepStmts: true
+ prepStmtCacheSize: 1000
+ prepStmtCacheSqlLimit: 2048
+ liquibase:
+ changeLog: classpath:db/changelog/db.changelog-tenant.yaml
+
+monitoring:enabled: true
+cors.enabled: true
+
+
+persistence-service:
+ imageServiceEnabled: false
+ nerServiceEnabled: false
+ storeImageFile: false
+ applicationName: RedactManager
+fforesight:
+ springdoc:
+ auth-server-url: 'http://localhost:8080/auth'
diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application-dev.yml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application-dev.yml
deleted file mode 100644
index 6132a6dda..000000000
--- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application-dev.yml
+++ /dev/null
@@ -1,79 +0,0 @@
-server:
- port: 8085
-
-redaction-service.url: "http://localhost:8083"
-pdftron-redaction-service.url: "http://localhost:8086"
-redaction-report-service.url: "http://localhost:8084"
-search-service.url: "http://localhost:8088"
-
-storage:
- bucket-name: 'redaction'
- endpoint: 'http://localhost:9000'
- key: minioadmin
- secret: minioadmin
-
-multitenancy:
- datasource-cache:
- maximumSize: 100
- expireAfterAccess: 1
- master:
- datasource:
- url: jdbc:postgresql://${PSQL_HOST:localhost}:${PSQL_PORT:5432}/${PSQL_DATABASE:master}?currentSchema=${PSQL_SCHEMA:public}&cachePrepStmts=true&useServerPrepStmts=true&rewriteBatchedStatements=true
- driverClassName: org.postgresql.Driver
- username: ${PSQL_USERNAME:redaction}
- password: ${PSQL_PASSWORD:redaction}
- platform: org.hibernate.dialect.PostgreSQL95Dialect
- hikari:
- data-source-properties:
- cachePrepStmts: true
- prepStmtCacheSize: 1000
- prepStmtCacheSqlLimit: 2048
- liquibase:
- changeLog: classpath:db/changelog/db.changelog-master.yaml
- tenant:
- datasource:
- driverClassName: org.postgresql.Driver
- hikari:
- data-source-properties:
- cachePrepStmts: true
- prepStmtCacheSize: 1000
- prepStmtCacheSqlLimit: 2048
- liquibase:
- changeLog: classpath:db/changelog/db.changelog-tenant.yaml
-
-monitoring:enabled: true
-
-token.issuer: ''
-
-keycloak:
- enabled: true
- sslRequired: none
- auth-server-url: http://localhost:8080
- realm: redaction
- resource: redaction
- disableTrustManager: true
- useResourceRoleMappings: true
-
-
-
-
-commons:
- keycloak:
- applicationClientId: redaction
- clientId: redaction
- clientSecret: G5E1qLU8ZNdDv7HY5BNLPdt5nXdeF7cU
- realm: redaction
- serverUrl: http://localhost:8080
- issuer: ''
-
-
-cors.enabled: true
-
-
-persistence-service:
- imageServiceEnabled: false
- nerServiceEnabled: false
- storeImageFile: false
- applicationName: RedactManager
-swagger:
- enabled: true
diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yaml
similarity index 57%
rename from persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yml
rename to persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yaml
index fc2e39edd..4dd7d3dd1 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yml
+++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yaml
@@ -5,6 +5,7 @@ redaction-service.url: "http://redaction-service-v1:8080"
pdftron-redaction-service.url: "http://pdftron-redaction-service-v1:8080"
redaction-report-service.url: "http://redaction-report-service-v1:8080"
search-service.url: "http://search-service-v1:8080"
+tenant-user-management-service.url: "http://tenant-user-management-service:8080/internal"
server:
port: 8080
@@ -51,24 +52,13 @@ spring:
max-attempts: 3
max-interval: 15000
prefetch: 1
-
- liquibase:
- change-log: classpath:/db/changelog/db.changelog-master.yaml
- quartz:
- overwrite-existing-jobs: true
- jdbc:
- initialize-schema: never
- properties:
- org:
- quartz:
- jobStore:
- class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
- clusterCheckinInterval: 1000
- isClustered: true
- driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
- scheduler:
- instanceId: AUTO
- job-store-type: JDBC
+ application:
+ name: persistence-service
+ data:
+ redis:
+ host: ${REDIS_HOST:localhost}
+ port: ${REDIS_PORT:6379}
+ password: ${REDIS_PASSWORD:}
management:
endpoint:
@@ -77,6 +67,9 @@ management:
health.enabled: true
endpoints.web.exposure.include: prometheus, health, metrics
metrics.export.prometheus.enabled: ${monitoring.enabled:false}
+ health:
+ db:
+ enabled: false
metrics:
persistence:
@@ -89,22 +82,6 @@ multitenancy:
datasource-cache:
maximumSize: 100
expireAfterAccess: 1
- master:
- datasource:
- url: jdbc:postgresql://${PSQL_HOST:localhost}:${PSQL_PORT:5432}/${PSQL_DATABASE:master}?currentSchema=${PSQL_SCHEMA:external}&cachePrepStmts=true&useServerPrepStmts=true&rewriteBatchedStatements=true
- driverClassName: org.postgresql.Driver
- username: ${PSQL_USERNAME:redaction}
- password: ${PSQL_PASSWORD:redaction}
- platform: org.hibernate.dialect.PostgreSQL95Dialect
- hikari:
- maximumPoolSize: 2
- minimum-idle: 2
- data-source-properties:
- cachePrepStmts: true
- prepStmtCacheSize: 1000
- prepStmtCacheSqlLimit: 2048
- liquibase:
- changeLog: classpath:db/changelog/db.changelog-master.yaml
tenant:
datasource:
driverClassName: org.postgresql.Driver
@@ -132,41 +109,31 @@ bucket4j:
unit: seconds
-keycloak:
- sslRequired: none
- auth-server-url: https://red-staging.iqser.cloud/auth
- realm: master
- resource: redaction
- disableTrustManager: true
- useResourceRoleMappings: true
- enabled: true
+springdoc.packages-to-scan: [ 'com.iqser.red.persistence.service.v1.external.api' ]
-commons:
+fforesight:
keycloak:
- applicationClientId: ${keycloak.resource:redaction}
- clientId: ${keycloak.client.id}
- clientSecret: ${keycloak.client.secret}
- realm: ${keycloak.realm}
- serverUrl: ${keycloak.auth-server-url}
- issuer: ${token.issuer}
+ ignored-endpoints: [ '/redaction-gateway-v1','/actuator/health/**', '/redaction-gateway-v1/async/download/with-ott/**',
+ '/internal-api/**',
+ '/redaction-gateway-v1/docs/**','/redaction-gateway-v1/docs','/redaction-gateway-v1/tenants/simple' ]
+ enabled: true
+ springdoc:
+ base-path: '/redaction-gateway-v1'
+ auth-server-url: ${keycloak.auth-server-url}
+ enabled: true
+ default-client-id: 'swagger-ui-client'
+ tenant-exchange:
+ name: 'tenants-exchange'
+ user-exchange:
+ name: 'users-exchange'
+ jobs:
+ datasource:
+ url: jdbc:postgresql://${PSQL_HOST:localhost}:${PSQL_PORT:5432}/${PSQL_DATABASE:master}?cachePrepStmts=true&useServerPrepStmts=true&rewriteBatchedStatements=true
+ driverClassName: org.postgresql.Driver
+ username: ${PSQL_USERNAME:fforesight}
+ password: ${PSQL_PASSWORD:fforesight}
+ platform: org.hibernate.dialect.PostgreSQL95Dialect
+ enabled: true
+ tenants:
+ remote: true
-
-
-springdoc:
- swagger-ui:
- path: /redaction-gateway-v1/docs/swagger-ui
- operations-sorter: alpha
- tags-sorter: alpha
- oauth:
- client-id: swagger-ui-client
- doc-expansion: none
- enabled: ${swagger.enabled}
- config-url: /redaction-gateway-v1/docs/swagger-config
- api-docs:
- path: /redaction-gateway-v1/docs?tenantId=redaction
- enabled: ${swagger.enabled}
- pre-loading-enabled: true
- packages-to-scan: [ 'com.iqser.red.persistence.service.v1.external.api' ]
-
-swagger:
- enabled: true
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/SMTPClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/SMTPClient.java
deleted file mode 100644
index 5d4a85e46..000000000
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/SMTPClient.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.iqser.red.service.peristence.v1.server.integration.client;
-
-import org.springframework.cloud.openfeign.FeignClient;
-
-import com.iqser.red.service.persistence.service.v1.api.external.resource.SMTPConfigurationResource;
-
-@FeignClient(name = "SMTPClient", url = "http://localhost:${server.port}")
-public interface SMTPClient extends SMTPConfigurationResource {
-
-}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/TenantsClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/TenantsClient.java
deleted file mode 100644
index e55cfbb3d..000000000
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/TenantsClient.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.iqser.red.service.peristence.v1.server.integration.client;
-
-import org.springframework.cloud.openfeign.FeignClient;
-
-import com.iqser.red.service.persistence.service.v1.api.external.resource.TenantsResource;
-
-@FeignClient(name = "TenantsClient", url = "http://localhost:${server.port}")
-public interface TenantsClient extends TenantsResource {
-
-}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java
index e3f4b3c02..a0ef0809a 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java
@@ -11,12 +11,12 @@ import org.springframework.stereotype.Service;
import com.google.common.collect.Sets;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierStatusInfo;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/UserProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/UserProvider.java
index 9408b1b32..5f86ad90a 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/UserProvider.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/UserProvider.java
@@ -3,7 +3,7 @@ package com.iqser.red.service.peristence.v1.server.integration.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import com.iqser.red.service.persistence.management.v1.processor.service.UserService;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
@Service
public class UserProvider {
@@ -12,24 +12,15 @@ public class UserProvider {
private UserService userService;
public String getUserId(){
- return this.getUserIdByUsername("manageradmin1");
+ return "manageradmin1@test.com";
}
public String getAltUserId(){
- return this.getUserIdByUsername("manageradmin2");
+ return "manageradmin2@test.com";
}
-
public String getMemberUserId(){
- return this.getUserIdByUsername("user");
+ return "manageradmin3@test.com";
}
- private String getUserIdByUsername(String username) {
- var userOptional = userService.getOptionalUserByUsername(username);
- if(userOptional.isPresent()){
- return userOptional.get().getUserId();
- }
- throw new RuntimeException("user " + username + " not created");
-
- }
}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/CustomPermissionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/CustomPermissionTest.java
index af6060b22..7fa88c206 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/CustomPermissionTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/CustomPermissionTest.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
-import static com.iqser.red.keycloak.commons.roles.ActionRoles.MANAGE_ACL_PERMISSIONS;
+import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.MANAGE_ACL_PERMISSIONS;
import static com.iqser.red.service.persistence.service.v1.api.external.resource.CustomPermissionMappingResource.PERMISSION_REST_PATH;
import static com.iqser.red.service.persistence.service.v1.api.external.resource.CustomPermissionMappingResource.TARGET_OBJECT_VARIABLE;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DeploymentKeyTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DeploymentKeyTest.java
deleted file mode 100644
index 89942b391..000000000
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DeploymentKeyTest.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.iqser.red.service.peristence.v1.server.integration.tests;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import com.iqser.red.service.peristence.v1.server.integration.client.TenantsClient;
-import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
-
-public class DeploymentKeyTest extends AbstractPersistenceServerServiceTest {
-
- @Autowired
- private TenantsClient tenantsClient;
-
-
- @Test
- public void testGetDeploymentKey() {
-
- String deploymentKey = tenantsClient.getDeploymentKey("redaction").getValue();
- assertThat(deploymentKey.length()).isEqualTo(16);
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java
index 5c071ff97..9dbd8d921 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java
@@ -18,12 +18,12 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTem
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateTypeValue;
import com.iqser.red.service.persistence.service.v1.api.shared.model.Dictionary;
import com.iqser.red.service.persistence.service.v1.api.shared.model.TypeValue;
import com.iqser.red.service.persistence.service.v1.api.shared.model.UpdateTypeValue;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import feign.FeignException;
@@ -461,7 +461,7 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest {
var createdType = dictionaryClient.addType(type);
- var entries = createDummyEntries(40_000);
+ var entries = createDummyEntries(10_000);
dictionaryClient.addEntry(createdType.getType(), createdType.getDossierTemplateId(), entries, false, null, DictionaryEntryType.ENTRY);
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java
index 7410c4447..ff12f12d2 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java
@@ -2,6 +2,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests;
import static org.assertj.core.api.Assertions.assertThat;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import org.junit.jupiter.api.Test;
@@ -14,6 +15,7 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers
import com.iqser.red.service.persistence.service.v1.api.shared.model.DigitalSignatureKms;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DigitalSignatureViewModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.DigitalSignature;
+import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
import feign.FeignException;
import lombok.SneakyThrows;
@@ -63,6 +65,9 @@ public class DigitalSignatureTest extends AbstractPersistenceServerServiceTest {
}
+ @Autowired
+ private EncryptionDecryptionService encryptionDecryptionService;
+
@Test
@SneakyThrows
public void testDigitalSignatureKms() {
@@ -76,6 +81,9 @@ public class DigitalSignatureTest extends AbstractPersistenceServerServiceTest {
final String kmsServiceEndpoint = "kmsServiceEndpoint";
final byte[] certificate = Files.readAllBytes(new ClassPathResource("files/TestCert.cer").getFile().toPath());
+ var data =encryptionDecryptionService.encrypt(new String(certificate));
+ var res = encryptionDecryptionService.decrypt(data);
+
DigitalSignatureKms digitalSignature = DigitalSignatureKms.builder()
.certificateName(certificateName)
.kmsKeyId(kmsKeyId)
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java
index a40362aa4..bd3af379b 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java
@@ -19,11 +19,11 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTem
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierStats;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus;
+import com.knecon.fforesight.tenantcommons.TenantContext;
public class DossierStatsTest extends AbstractPersistenceServerServiceTest {
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java
index 23a530bde..d35a78cff 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java
@@ -22,10 +22,10 @@ import org.springframework.mock.web.MockMultipartFile;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateManagementService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierTemplate;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.importexport.ImportDossierTemplateRequest;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java
index e0dbd4afc..108ffb89e 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java
@@ -28,7 +28,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.FileTester
import com.iqser.red.service.peristence.v1.server.integration.service.UserProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateTypeValue;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierStatusRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel;
@@ -38,6 +37,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionarySummary;
+import com.knecon.fforesight.tenantcommons.TenantContext;
public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTest {
@@ -279,38 +279,38 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe
.color("#cccccc")
.rank(100)
.build());
- for (int j = 0; j < 8; j++) {
+ for (int j = 0; j < 4; j++) {
var dossier = dossierTesterAndProvider.provideTestDossierQuick(template, "test dossier: " + j + " - " + i, j % 2 == 0 ? status : null);
- for (int k = 0; k < 12; k++) {
+ for (int k = 0; k < 6; k++) {
var fileId = fileTesterAndProvider.testAndProvideFileQuick(dossier, "file: " + k);
- if (k % 2 == 0) {
+ if (k == 1){
fileStatusPersistenceService.updateProcessingStatus(fileId, k, 0L, 0L, 0L, 0L, 0L, 1, 1);
reanalysisClient.excludePages(dossier.getId(), fileId, new PageExclusionRequest(List.of(new PageRange(k, k))));
}
- if (k % 3 == 0) {
+ if (k ==2) {
fileManagementClient.deleteFile(dossier.getId(), fileId);
}
- if (j % 5 == 0) {
+ if (k == 3){
fileManagementClient.hardDeleteFiles(dossier.getId(), Set.of(fileId));
}
- if (j % 7 == 0) {
+ if (k == 4){
fileClient.setStatusUnderReview(dossier.getId(), fileId, userId);
}
- if (j % 11 == 0) {
+ if (k == 5){
fileClient.setStatusUnderApproval(dossier.getId(), fileId, userId);
}
}
- if (j % 3 == 0) {
+ if (j == 1) {
dossierClient.archiveDossiers(Set.of(dossier.getId()));
}
- if (j % 5 == 0) {
+ if (j == 2) {
dossierClient.deleteDossier(dossier.getId());
}
- if (j % 7 == 0) {
+ if (j == 3) {
dossierClient.hardDeleteDossiers(Set.of(dossier.getId()));
}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java
index 200baec4e..3da16c986 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java
@@ -1,9 +1,5 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_MANAGER_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_ROLES;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_USER_ADMIN_ROLE;
-import static com.iqser.red.keycloak.commons.roles.ApplicationRoles.RED_USER_ROLE;
import static org.assertj.core.api.Assertions.assertThat;
import java.io.InputStream;
@@ -20,9 +16,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockMultipartFile;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.iqser.red.keycloak.commons.KeycloakSecurity;
-import com.iqser.red.keycloak.commons.model.User;
-import com.iqser.red.persistence.service.v1.external.api.impl.controller.UserController;
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierAttributeConfigClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
@@ -38,7 +31,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTes
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.management.v1.processor.model.DownloadJob;
import com.iqser.red.service.persistence.management.v1.processor.service.export.ExportDownloadMessageReceiver;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateTypeValue;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierAttributesConfig;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierStatusRequest;
@@ -58,6 +50,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.legalbasis.LegalBasis;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import feign.FeignException;
import lombok.SneakyThrows;
@@ -510,7 +503,7 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
assertThat(statuses.getDownloadStatus()).isNotEmpty();
var status = statuses.getDownloadStatus().iterator().next();
- exportDownloadReportMessageReceiver.receive(objectMapper.writeValueAsString(new DownloadJob(status.getUserId(), status.getStorageId())));
+ exportDownloadReportMessageReceiver.receive(new DownloadJob(status.getUserId(), status.getStorageId()));
// add new justifications
legalBasisClient.setLegalBasisMapping(List.of(new LegalBasis("nameAgain", "description", "reason")), dossierTemplate.getId());
@@ -539,36 +532,6 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
assertThat(existingLegalBasis.isEmpty()).isTrue();
}
- @Test
- public void testDeleteDossierTemplate() {
-
- var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
-
- var allTemplates = dossierTemplateClient.getAllDossierTemplates();
- assertThat(allTemplates.size()).isEqualTo(1);
- assertThat(allTemplates.get(0)).isEqualTo(dossierTemplate);
- Optional optionalUser = userService.getOptionalUserByUsername(USERNAME);
- if(optionalUser.isPresent()) {
- String userId = optionalUser.get().getUserId();
-
- userService.setRoles(userId, List.of(RED_USER_ROLE), RED_ROLES.stream().toList());
- Assertions.assertThrows(FeignException.BadRequest.class, () -> dossierTemplateClient.deleteDossierTemplate(dossierTemplate.getId()));
-
- userService.setRoles(userId, List.of(RED_MANAGER_ROLE), RED_ROLES.stream().toList());
- Assertions.assertThrows(FeignException.BadRequest.class, () -> dossierTemplateClient.deleteDossierTemplate(dossierTemplate.getId()));
-
- userService.setRoles(userId, List.of(RED_USER_ADMIN_ROLE), RED_ROLES.stream().toList());
- Assertions.assertThrows(FeignException.Forbidden.class, () -> dossierTemplateClient.deleteDossierTemplate(dossierTemplate.getId()));
-
- userService.setRoles(userId, List.of(RED_USER_ADMIN_ROLE, RED_USER_ROLE), RED_ROLES.stream().toList());
- Assertions.assertThrows(FeignException.BadRequest.class, () -> dossierTemplateClient.deleteDossierTemplate(dossierTemplate.getId()));
-
- userService.setRoles(userId, RED_ROLES.stream().toList(), RED_ROLES.stream().toList());
- dossierTemplateClient.deleteDossierTemplate(dossierTemplate.getId());
- allTemplates = dossierTemplateClient.getAllDossierTemplates();
- assertThat(allTemplates.size()).isZero();
- }
- }
@Test
@SneakyThrows
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java
index 55c723d09..c709e6f16 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java
@@ -26,7 +26,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.FileTester
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadReportMessageReceiver;
import com.iqser.red.service.persistence.management.v1.processor.service.download.RedactionResultMessageReceiver;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileStatus;
@@ -40,6 +39,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.download.Do
import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage;
import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.AccessLevel;
import lombok.SneakyThrows;
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java
index 691b2f14a..3c8fbca2d 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java
@@ -20,12 +20,12 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers
import com.iqser.red.service.persistence.management.v1.processor.model.DownloadJob;
import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadMessageReceiver;
import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadPreparationService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.RemoveDownloadRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import feign.FeignException;
import lombok.SneakyThrows;
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EncryptSMTPPasswordsMigrationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EncryptSMTPPasswordsMigrationTest.java
deleted file mode 100644
index 47a6ebde7..000000000
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EncryptSMTPPasswordsMigrationTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.iqser.red.service.peristence.v1.server.integration.tests;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
-import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.SMTPConfigurationEntity;
-import com.iqser.red.service.persistence.management.v1.processor.migration.migrations.EncryptSMTPPasswordsMigration11;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.MigrationPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.SMTPRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
-
-public class EncryptSMTPPasswordsMigrationTest extends AbstractPersistenceServerServiceTest {
-
- @Autowired
- private EncryptSMTPPasswordsMigration11 encryptSMTPPasswordsMigration11;
-
- @Autowired
- private SMTPRepository smtpRepository;
- @Autowired
- private MigrationPersistenceService migrationPersistenceService;
-
-
- @Test
- public void testMigration() {
-
- TenantContext.setTenantId("redaction");
- migrationPersistenceService.insertMigration("test", 10);
- smtpRepository.save(SMTPConfigurationEntity.builder().password("asd").build());
- encryptSMTPPasswordsMigration11.run(true);
- var config1 = smtpRepository.findAll().iterator().next();
- assertThat(config1.getPassword()).isNotEqualTo("asd");
- encryptSMTPPasswordsMigration11.run(true);
- var config2 = smtpRepository.findAll().iterator().next();
- assertThat(config1.getPassword()).isEqualTo(config2.getPassword());
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java
index 72a81316a..62fd76586 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java
@@ -27,7 +27,8 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers
import com.iqser.red.service.peristence.v1.server.integration.utils.MetricValidationUtils;
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
+import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateTypeValue;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle;
@@ -47,6 +48,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlo
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.ManualRedactionType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import feign.FeignException;
import lombok.SneakyThrows;
@@ -394,6 +396,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
@Test
@SneakyThrows
public void testAddToDictionaryRequiresReanalysis() {
+
TenantContext.setTenantId("redaction");
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationPreferencesServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationPreferencesServiceTest.java
index 02132b5a9..44ad766ba 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationPreferencesServiceTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationPreferencesServiceTest.java
@@ -9,7 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.peristence.v1.server.integration.utils.MultithreadedTestRunner;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPreferencesPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.AccessLevel;
import lombok.SneakyThrows;
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java
index 0c1fc5b1e..69f35d58f 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java
@@ -15,11 +15,11 @@ import com.iqser.red.service.peristence.v1.server.integration.service.UserProvid
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.peristence.v1.server.integration.utils.MultithreadedTestRunner;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AddNotificationRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.shared.model.notification.Notification;
import com.iqser.red.service.persistence.service.v1.api.shared.model.notification.NotificationType;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -40,7 +40,7 @@ public class NotificationTest extends AbstractPersistenceServerServiceTest {
@Autowired
private UserProvider userProvider;
- private final MultithreadedTestRunner multithreadedTestRunner = new MultithreadedTestRunner(2, 100);
+ private final MultithreadedTestRunner multithreadedTestRunner = new MultithreadedTestRunner(2, 10);
@Test
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java
index ad05756d0..eba7943b2 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java
@@ -14,9 +14,9 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTes
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileStatus;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus;
+import com.knecon.fforesight.tenantcommons.TenantContext;
public class ReanalysisTest extends AbstractPersistenceServerServiceTest {
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReduceFileSizeMigrationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReduceFileSizeMigrationTest.java
index 1db7c6598..ec4261f6a 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReduceFileSizeMigrationTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReduceFileSizeMigrationTest.java
@@ -11,8 +11,8 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers
import com.iqser.red.service.persistence.management.v1.processor.migration.migrations.ReduceTextFileSizeMigration10;
import com.iqser.red.service.persistence.management.v1.processor.utils.FileUtils;
import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.SneakyThrows;
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/SMTPTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/SMTPTest.java
deleted file mode 100644
index 34322e823..000000000
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/SMTPTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.iqser.red.service.peristence.v1.server.integration.tests;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import com.iqser.red.service.peristence.v1.server.integration.client.SMTPClient;
-import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.SMTPConfiguration;
-
-import feign.FeignException;
-
-public class SMTPTest extends AbstractPersistenceServerServiceTest {
-
- @Autowired
- private SMTPClient smtpClient;
-
-
- @Test
- public void testSMTP() {
-
- SMTPConfiguration configuration = new SMTPConfiguration();
- configuration.setUser("test");
- configuration.setPassword("test");
- configuration.setAuth(true);
- configuration.setFrom("from");
- configuration.setEnvelopeFrom("from");
- configuration.setHost("host");
- configuration.setPort(123);
- configuration.setReplyTo("reply");
- configuration.setStarttls(true);
- smtpClient.updateSMTPConfiguration(configuration);
-
- assertThat(smtpClient.getCurrentSMTPConfiguration()).isNotNull();
-
- try {
- smtpClient.testSMTPConfiguration(configuration);
- } catch (FeignException.FeignClientException e) {
- assertThat(e.status()).isEqualTo(400);
- }
-
- smtpClient.clearSMTPConfiguration();
-
- try {
- smtpClient.getCurrentSMTPConfiguration();
- } catch (FeignException.FeignClientException e) {
- assertThat(e.status()).isEqualTo(404);
- }
-
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TenantsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TenantsTest.java
deleted file mode 100644
index 229f1bba1..000000000
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TenantsTest.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package com.iqser.red.service.peristence.v1.server.integration.tests;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import com.iqser.red.keycloak.commons.roles.ApplicationRoles;
-import com.iqser.red.service.peristence.v1.server.integration.client.TenantsClient;
-import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.AzureStorageConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.DatabaseConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.RedUser;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.S3StorageConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.SearchConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantRequest;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantResponse;
-
-import feign.FeignException;
-
-public class TenantsTest extends AbstractPersistenceServerServiceTest {
-
- @Autowired
- private TenantsClient tenantsClient;
-
- @Test
- public void testCreateTenantWithSameHostAndSchema() {
-
- TenantResponse firstTenant = tenantsClient.getTenants().get(0);
-
- var tenantRequest = TenantRequest.builder()
- .tenantId("redaction2")
- .displayName("Redaction default2")
- .guid(UUID.randomUUID().toString())
- .databaseConnection(DatabaseConnection.builder()
- .driver("postgresql")
- .host("localhost")
- .port(firstTenant.getDatabaseConnection().getPort())
- .database("redaction")
- .schema("myschema")
- .username("redaction")
- .password("redaction")
- .build())
- .searchConnection(SearchConnection.builder()
- .hosts(Set.of("elasticsearchHost2"))
- .port(9200)
- .scheme("https2")
- .username("elastic")
- .numberOfShards("1")
- .numberOfReplicas("5")
- .build())
- .s3StorageConnection(S3StorageConnection.builder()
- .key("key")
- .secret("secret")
- .signerType("signerType")
- .bucketName("bucketName2")
- .region("eu")
- .endpoint("endpoint2")
- .build())
- .redUsers(List.of(RedUser.builder().username("user").password("password").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build(),
- RedUser.builder().username("manageradmin1@test.com").password("secret").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build(),
- RedUser.builder().username("manageradmin2@test.com").password("secret").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build()))
- .build();
-
- Exception exception = Assertions.assertThrows(FeignException.Conflict.class, () -> {
- tenantsClient.createTenant(tenantRequest);
- });
-
- String expectedMessage = "An object of type tenant already exists";
- String actualMessage = exception.getMessage();
-
- assertThat(actualMessage).contains(expectedMessage);
-
- }
-
- @Test
- public void testCreateTenantWithDuplicateStorageS3() {
-
- TenantResponse firstTenant = tenantsClient.getTenants().get(0);
-
- var tenantRequest = TenantRequest.builder()
- .tenantId("redaction2")
- .displayName("Redaction default2")
- .guid(UUID.randomUUID().toString())
- .databaseConnection(DatabaseConnection.builder()
- .driver("postgresql")
- .host("localhost")
- .port(firstTenant.getDatabaseConnection().getPort())
- .database("redaction")
- .schema("myschema2")
- .username("redaction")
- .password("redaction")
- .build())
- .searchConnection(SearchConnection.builder()
- .hosts(Set.of("elasticsearchHost2"))
- .port(9200)
- .scheme("https2")
- .username("elastic")
- .numberOfShards("1")
- .numberOfReplicas("5")
- .build())
- .s3StorageConnection(S3StorageConnection.builder()
- .key("key")
- .secret("secret")
- .signerType("signerType")
- .bucketName("bucketName")
- .region("eu")
- .endpoint("endpoint")
- .build())
- .redUsers(List.of(RedUser.builder().username("user").password("password").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build(),
- RedUser.builder().username("manageradmin1@test.com").password("secret").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build(),
- RedUser.builder().username("manageradmin2@test.com").password("secret").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build()))
- .build();
-
- Exception exception = Assertions.assertThrows(FeignException.Conflict.class, () -> {
- tenantsClient.createTenant(tenantRequest);
- });
-
- String expectedMessage = "An object of type tenant already exists";
- String actualMessage = exception.getMessage();
-
- assertThat(actualMessage).contains(expectedMessage);
- }
-
- @Test
- public void testCreateTenantWithDuplicateAzure() {
-
- TenantResponse firstTenant = tenantsClient.getTenants().get(0);
-
- var tenantRequest = TenantRequest.builder()
- .tenantId("redaction2")
- .displayName("Redaction default2")
- .guid(UUID.randomUUID().toString())
- .databaseConnection(DatabaseConnection.builder()
- .driver("postgresql")
- .host("localhost")
- .port(firstTenant.getDatabaseConnection().getPort())
- .database("redaction")
- .schema("myschema2")
- .username("redaction")
- .password("redaction")
- .build())
- .searchConnection(SearchConnection.builder()
- .hosts(Set.of("elasticsearchHost2"))
- .port(9200)
- .scheme("https2")
- .username("elastic")
- .numberOfShards("1")
- .numberOfReplicas("5")
- .build())
- .azureStorageConnection(AzureStorageConnection.builder()
- .connectionString("connection")
- .containerName("container")
- .build())
- .redUsers(List.of(RedUser.builder().username("user").password("password").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build(),
- RedUser.builder().username("manageradmin1@test.com").password("secret").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build(),
- RedUser.builder().username("manageradmin2@test.com").password("secret").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build()))
- .build();
-
- tenantsClient.createTenant(tenantRequest);
- assertThat(tenantsClient.getTenants().size()).isEqualTo(2);
-
- var tenantRequest2 = TenantRequest.builder()
- .tenantId("redaction2")
- .displayName("Redaction default2")
- .guid(UUID.randomUUID().toString())
- .databaseConnection(DatabaseConnection.builder()
- .driver("postgresql")
- .host("localhost")
- .port(firstTenant.getDatabaseConnection().getPort())
- .database("redaction")
- .schema("myschema3")
- .username("redaction")
- .password("redaction")
- .build())
- .searchConnection(SearchConnection.builder()
- .hosts(Set.of("elasticsearchHost2"))
- .port(9200)
- .scheme("https2")
- .username("elastic")
- .numberOfShards("1")
- .numberOfReplicas("5")
- .build())
- .azureStorageConnection(AzureStorageConnection.builder()
- .connectionString("connection")
- .containerName("container")
- .build())
- .redUsers(List.of(RedUser.builder().username("user").password("password").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build(),
- RedUser.builder().username("manageradmin1@test.com").password("secret").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build(),
- RedUser.builder().username("manageradmin2@test.com").password("secret").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build()))
- .build();
-
- Exception exception = Assertions.assertThrows(FeignException.Conflict.class, () -> {
- tenantsClient.createTenant(tenantRequest);
- });
-
- String expectedMessage = "An object of type tenant already exists";
- String actualMessage = exception.getMessage();
-
- assertThat(actualMessage).contains(expectedMessage);
- }
-}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java
index c80ec4019..279428af1 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java
@@ -17,9 +17,9 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DictionaryEntryEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.EntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.utils.jdbc.JDBCWriteUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.CloneDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/FilePerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/FilePerformanceTest.java
index 56d9638a8..951ac17a1 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/FilePerformanceTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/FilePerformanceTest.java
@@ -2,15 +2,8 @@ package com.iqser.red.service.peristence.v1.server.integration.tests.performance
import static org.assertj.core.api.Assertions.assertThat;
-import java.time.OffsetDateTime;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
import java.util.stream.Collectors;
-import org.assertj.core.util.Sets;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -18,23 +11,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierStatsClient;
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
-import com.iqser.red.service.peristence.v1.server.integration.client.WatermarkClient;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
-import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DictionaryEntryEntity;
-import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
-import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
-import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
-import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
-import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeEntity;
-import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.WatermarkModel;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.WatermarkOrientation;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileAttributeType;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus;
+import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.extern.slf4j.Slf4j;
@@ -59,6 +38,7 @@ public class FilePerformanceTest extends AbstractPersistenceServerServiceTest {
@BeforeEach
public void setupTest() {
+
TenantContext.setTenantId("redaction");
performanceTestService.doSetup();
}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/PerformanceTestService.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/PerformanceTestService.java
index cb6b4765e..9fd81b952 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/PerformanceTestService.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/PerformanceTestService.java
@@ -7,7 +7,7 @@ import java.util.List;
import java.util.Set;
import java.util.UUID;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.assertj.core.util.Sets;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java
index 4db784c4e..b1e8c377e 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java
@@ -2,24 +2,22 @@ package com.iqser.red.service.peristence.v1.server.integration.utils;
import static org.mockito.Mockito.when;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
-import java.util.UUID;
-
-import javax.annotation.PostConstruct;
-import javax.sql.DataSource;
+import java.util.stream.Collectors;
import org.assertj.core.util.Lists;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.keycloak.adapters.springboot.KeycloakSpringBootProperties;
-import org.keycloak.representations.idm.ClientRepresentation;
import org.mockito.Mockito;
+import org.quartz.Scheduler;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
@@ -35,25 +33,32 @@ import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.StatementCallback;
+import org.springframework.jdbc.datasource.SingleConnectionDataSource;
+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.core.userdetails.User;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.provisioning.InMemoryUserDetailsManager;
+import org.springframework.security.web.SecurityFilterChain;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
-import com.iqser.red.keycloak.commons.KeyCloakAdminClientService;
-import com.iqser.red.keycloak.commons.KeyCloakSettings;
-import com.iqser.red.keycloak.commons.roles.ApplicationRoles;
import com.iqser.red.service.peristence.v1.server.Application;
import com.iqser.red.service.peristence.v1.server.integration.client.ApplicationConfigClient;
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
-import com.iqser.red.service.peristence.v1.server.integration.client.TenantsClient;
import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService;
import com.iqser.red.service.persistence.management.v1.processor.client.pdftronredactionservice.PDFTronClient;
import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RedactionClient;
import com.iqser.red.service.persistence.management.v1.processor.client.searchservice.SearchClient;
+import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ApplicationConfigurationEntity;
+import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles;
import com.iqser.red.service.persistence.management.v1.processor.service.ApplicationConfigService;
-import com.iqser.red.service.persistence.management.v1.processor.service.TenantManagementService;
-import com.iqser.red.service.persistence.management.v1.processor.service.UserService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.repository.TenantRepository;
+import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.TenantManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ApplicationConfigRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.AuditRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DigitalSignatureRepository;
@@ -73,7 +78,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.NotificationRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.RuleSetRepository;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.SMTPRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.TypeRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ViewedPagesRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.WatermarkRepository;
@@ -86,18 +90,23 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalsePositiveEntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalseRecommendationEntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.redactionlog.RedactionLogMergeService;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
+import com.iqser.red.service.persistence.management.v1.processor.service.users.events.TenantCreatedEvent;
import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.DatabaseConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.RedUser;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.S3StorageConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.SearchConnection;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog;
-import com.iqser.red.storage.commons.StorageAutoConfiguration;
import com.iqser.red.storage.commons.service.StorageService;
+import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
+import com.knecon.fforesight.tenantcommons.TenantContext;
+import com.knecon.fforesight.tenantcommons.TenantProvider;
+import com.knecon.fforesight.tenantcommons.TenantsClient;
+import com.knecon.fforesight.tenantcommons.model.AuthDetails;
+import com.knecon.fforesight.tenantcommons.model.DatabaseConnection;
+import com.knecon.fforesight.tenantcommons.model.S3StorageConnection;
+import com.knecon.fforesight.tenantcommons.model.SearchConnection;
+import com.knecon.fforesight.tenantcommons.model.TenantResponse;
+import io.lettuce.core.RedisClient;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import lombok.extern.slf4j.Slf4j;
@@ -108,8 +117,9 @@ import lombok.extern.slf4j.Slf4j;
@ContextConfiguration(initializers = {AbstractPersistenceServerServiceTest.Initializer.class})
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, properties = "spring-hibernate-query-utils.n-plus-one-queries-detection.error-level=INFO")
public abstract class AbstractPersistenceServerServiceTest {
- protected final String USERNAME = "manageradmin1@test.com";
+ @MockBean
+ protected Scheduler scheduler;
@MockBean
protected RabbitTemplate rabbitTemplate;
@MockBean
@@ -149,8 +159,6 @@ public abstract class AbstractPersistenceServerServiceTest {
@Autowired
protected WatermarkRepository watermarkRepository;
@Autowired
- protected SMTPRepository smtpRepository;
- @Autowired
protected RuleSetRepository ruleSetRepository;
@Autowired
protected LegalBasisMappingRepository legalBasisMappingRepository;
@@ -184,31 +192,38 @@ public abstract class AbstractPersistenceServerServiceTest {
protected FalseRecommendationEntryRepository falseRecommendationEntryRepository;
@Autowired
protected ApplicationConfigRepository applicationConfigRepository;
- @Autowired
- protected TenantsClient tenantsClient;
- @Autowired
- protected TenantRepository tenantRepository;
@MockBean
private RedactionClient redactionClient;
@Autowired
- @Qualifier("masterDataSource")
- private DataSource masterDataSource;
- @Autowired
protected PrometheusMeterRegistry prometheusMeterRegistry;
@MockBean
private AmqpAdmin amqpAdmin;
@Autowired
private DossierStatusRepository dossierStatusRepository;
@Autowired
- private TenantManagementService tenantManagementService;
- @Autowired
private ApplicationConfigService applicationConfigService;
@Autowired
protected UserService userService;
@Autowired
private TokenService tokenService;
+ @MockBean
+ private TenantsClient tenantsClient;
+ @MockBean
+ private UsersClient usersClient;
@Autowired
- private KeyCloakSettings keyCloakSettings;
+ private EncryptionDecryptionService encryptionDecryptionService;
+ @Autowired
+ private TenantManagementService tenantManagementService;
+
+
+ private static String[] getAllRoles() {
+
+ var allRoles = ApplicationRoles.ROLE_DATA.entrySet().stream().flatMap(entry -> entry.getValue().stream()).collect(Collectors.toSet());
+ allRoles.addAll(ApplicationRoles.UNMAPPED_ACTION_ROLES);
+ allRoles.addAll(ApplicationRoles.ROLE_DATA.keySet());
+ var rolesArray = allRoles.toArray(new String[0]);
+ return rolesArray;
+ }
@BeforeEach
@@ -225,29 +240,6 @@ public abstract class AbstractPersistenceServerServiceTest {
}
- public void createUsers() {
-
- TenantContext.setTenantId("redaction");
-
- userService.evictUserCache();
-
- var redactionSystemClient = new ClientRepresentation();
- redactionSystemClient.setEnabled(true);
- redactionSystemClient.setName(keyCloakSettings.getClientId());
- redactionSystemClient.setClientId(keyCloakSettings.getClientId());
- redactionSystemClient.setSecret(keyCloakSettings.getClientSecret());
- redactionSystemClient.setDirectAccessGrantsEnabled(true);
- redactionSystemClient.setServiceAccountsEnabled(true);
-
- KeyCloakTestContainer.getInstance().getKeycloakAdminClient().realm("redaction").clients().create(redactionSystemClient);
-
- tokenService.setUser(USERNAME, "secret");
-
- TenantContext.clear();
-
- }
-
-
@BeforeEach
public void setupOptimize() {
@@ -258,76 +250,97 @@ public abstract class AbstractPersistenceServerServiceTest {
ApplicationConfig appConfig = ApplicationConfig.builder().downloadCleanupDownloadFilesHours(8).downloadCleanupNotDownloadFilesHours(72).softDeleteCleanupTime(96).build();
applicationConfigService.saveApplicationConfiguration(MagicConverter.convert(appConfig, ApplicationConfigurationEntity.class));
- TenantContext.clear();
-
- createUsers();
-
-// when(appConfigClient.getCurrentApplicationConfig()).thenReturn(ApplicationConfig.builder()
-// .downloadCleanupDownloadFilesHours(8)
-// .downloadCleanupNotDownloadFilesHours(72)
-// .softDeleteCleanupTime(96)
+ tokenService.setUser("manageradmin1@test.com", "secret");
+ var allUsers = new ArrayList();
+ allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder()
+ .userId("manageradmin1@test.com")
+ .email("manageradmin1@test.com")
+ .isActive(true)
+ .roles(Set.of(getAllRoles()))
+ .build());
+ allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder()
+ .userId("manageradmin2@test.com")
+ .email("manageradmin2@test.com")
+ .isActive(true)
+ .roles(Set.of(getAllRoles()))
+ .build());
+ allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder()
+ .userId("manageradmin3@test.com")
+ .email("manageradmin3@test.com")
+ .isActive(true)
+ .roles(Set.of(getAllRoles()))
+ .build());
+ when(usersClient.getAllUsers(false)).thenReturn(allUsers);
+ when(usersClient.getAllUsers(true)).thenReturn(allUsers);
// doNothing().when(pdfTronRedactionClient).testDigitalCurrentSignature(Mockito.any());
when(amqpAdmin.getQueueInfo(Mockito.any())).thenReturn(null);
-
when(redactionLogMergeService.provideRedactionLog(Mockito.any())).thenReturn(new RedactionLog(1, 1, Lists.newArrayList(), null, 0, 0, 0, 0));
}
private void createDefaultTenant() {
- if (tenantRepository.findById("redaction").isEmpty()) {
- var postgreSQLContainerMaster = SpringPostgreSQLTestContainer.getInstance().withDatabaseName("integration-tests-db-master").withUsername("sa").withPassword("sa");
+ var postgreSQLContainerMaster = SpringPostgreSQLTestContainer.getInstance().withDatabaseName("integration-tests-db-master").withUsername("sa").withPassword("sa");
- String jdbcUrl = postgreSQLContainerMaster.getJdbcUrl().substring(0, postgreSQLContainerMaster.getJdbcUrl().lastIndexOf('/') + 1) + "redaction?currentSchema=myschema";
- var port = postgreSQLContainerMaster.getJdbcUrl().substring(0, postgreSQLContainerMaster.getJdbcUrl().lastIndexOf('/')).split(":")[3];
+ var port = postgreSQLContainerMaster.getJdbcUrl().substring(0, postgreSQLContainerMaster.getJdbcUrl().lastIndexOf('/')).split(":")[3];
- createDatabase("redaction", "redaction");
+ if (tenantsClient.getTenants() == null || tenantsClient.getTenants().isEmpty()) {
- var tenantRequest = TenantRequest.builder()
- .tenantId("redaction")
- .displayName("Redaction default")
- .guid(UUID.randomUUID().toString())
- .databaseConnection(DatabaseConnection.builder()
- .driver("postgresql")
- .host("localhost")
- .port(port)
- .database("redaction")
- .schema("myschema")
- .username("redaction")
- .password("redaction")
- .build())
- .searchConnection(SearchConnection.builder()
- .hosts(Set.of("elasticsearchHost"))
- .port(9200)
- .scheme("https")
- .username("elastic")
- .numberOfShards("1")
- .numberOfReplicas("5")
- .build())
- .s3StorageConnection(S3StorageConnection.builder()
- .key("key")
- .secret("secret")
- .signerType("signerType")
- .bucketName("bucketName")
- .region("eu")
- .endpoint("endpoint")
- .build())
- .redUsers(List.of(RedUser.builder().username("user").password("password").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build(),
- RedUser.builder().username("manageradmin1@test.com").password("secret").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build(),
- RedUser.builder().username("manageradmin2@test.com").password("secret").redRoles(ApplicationRoles.ROLE_DATA.keySet()).build()))
- .build();
+ var redactionTenant = new TenantResponse();
+ redactionTenant.setTenantId("redaction");
+ redactionTenant.setGuid("redaction");
+ redactionTenant.setDisplayName("redaction");
+ redactionTenant.setAuthDetails(new AuthDetails());
+ redactionTenant.setDatabaseConnection(DatabaseConnection.builder()
+ .driver("postgresql")
+ .host(postgreSQLContainerMaster.getHost())
+ .port(port)
+ .database("integration-tests-db-master")
+ .schema("public")
+ .username("sa")
+ .password(encryptionDecryptionService.encrypt("sa"))
+ .build());
- tenantManagementService.createTenant(tenantRequest);
+ redactionTenant.setSearchConnection(SearchConnection.builder()
+ .hosts(Set.of("elasticsearchHost"))
+ .port(9200)
+ .scheme("https")
+ .username("elastic")
+ .numberOfShards("1")
+ .numberOfReplicas("5")
+ .build());
+ redactionTenant.setS3StorageConnection(S3StorageConnection.builder()
+ .key("key")
+ .secret("secret")
+ .signerType("signerType")
+ .bucketName("bucketName")
+ .region("eu")
+ .endpoint("endpoint")
+ .build());
+ when(tenantsClient.getTenant("redaction")).thenReturn(redactionTenant);
+ when(tenantsClient.getTenants()).thenReturn(List.of(redactionTenant));
+ try {
+ tenantManagementService.createTenant(new TenantCreatedEvent("redaction"));
+ } catch (Exception e) {
+
+ e.printStackTrace();
+ }
}
+
}
- private void createDatabase(String db, String password) {
+ private void createDatabase(String db, String jdbcUrl, String password) {
- var jdbcTemplate = new JdbcTemplate(masterDataSource);
+ var ds = new SingleConnectionDataSource();
+ ds.setUsername("sa");
+ ds.setPassword("sa");
+ ds.setUrl(jdbcUrl);
+ ds.setDriverClassName("org.postgresql.Driver");
+ var jdbcTemplate = new JdbcTemplate(ds);
jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("CREATE DATABASE " + db));
jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("CREATE USER " + db + " WITH ENCRYPTED PASSWORD '" + password + "'"));
jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("GRANT ALL PRIVILEGES ON DATABASE " + db + " TO " + db));
@@ -351,7 +364,7 @@ public abstract class AbstractPersistenceServerServiceTest {
@AfterEach
public void afterTests() {
- tenantRepository.findAll().forEach(tenant -> {
+ tenantsClient.getTenants().forEach(tenant -> {
TenantContext.setTenantId(tenant.getTenantId());
@@ -362,7 +375,6 @@ public abstract class AbstractPersistenceServerServiceTest {
dossierAttributeConfigRepository.deleteAll();
downloadStatusRepository.deleteAll();
fileAttributesRepository.deleteAll();
- smtpRepository.deleteAll();
digitalSignatureRepository.deleteAll();
fileAttributesGeneralConfigurationRepository.deleteAll();
fileAttributeConfigRepository.deleteAll();
@@ -378,7 +390,6 @@ public abstract class AbstractPersistenceServerServiceTest {
imageRecategorizationRepository.deleteAll();
legalBasisMappingRepository.deleteAll();
ruleSetRepository.deleteAll();
- smtpRepository.deleteAll();
fileRepository.deleteAll();
dossierRepository.deleteAll();
dossierStatusRepository.deleteAll();
@@ -392,6 +403,7 @@ public abstract class AbstractPersistenceServerServiceTest {
}
+ @Slf4j
static class Initializer implements ApplicationContextInitializer {
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
@@ -403,45 +415,49 @@ public abstract class AbstractPersistenceServerServiceTest {
var redisContainer = RedisTestContainer.getInstance();
redisContainer.start();
- var connectionStringDetails = "?serverTimezone=UTC&cachePrepStmts=true&useServerPrepStmts=true&rewriteBatchedStatements=true";
-
- var kcInstance = KeyCloakTestContainer.getInstance();
+ log.info("Hosts are - Redis: {}, Postgres: {}", redisContainer.getHost(), postgreSQLContainerMaster.getHost());
TestPropertyValues.of("spring.redis.port=" + redisContainer.getFirstMappedPort(),
- "multitenancy.master.datasource.url=" + postgreSQLContainerMaster.getJdbcUrl() + connectionStringDetails,
- "multitenancy.master.datasource.username=" + postgreSQLContainerMaster.getUsername(),
- "multitenancy.master.datasource.password=" + postgreSQLContainerMaster.getPassword(),
- "keycloak.auth-server-url=" + kcInstance.getAuthServerUrl(),
- "commons.keycloak.serverUrl=" + kcInstance.getAuthServerUrl()).applyTo(configurableApplicationContext.getEnvironment());
+ "spring.redis.host=" + redisContainer.getHost(),
+ "spring.data.redis.port=" + redisContainer.getFirstMappedPort(),
+ "spring.data.redis.host=" + redisContainer.getHost(),
+ "fforesight.jobs.enabled=false",
+ "fforesight.keycloak.enabled=false").applyTo(configurableApplicationContext.getEnvironment());
}
}
@Configuration
- @EnableAutoConfiguration(exclude = {StorageAutoConfiguration.class, RabbitAutoConfiguration.class})
+ @EnableWebSecurity
+ @EnableMethodSecurity
+ @EnableAutoConfiguration(exclude = {RabbitAutoConfiguration.class})
@ComponentScan("com.iqser.red.service.persistence")
public static class TestConfiguration {
- @Autowired
- private KeyCloakAdminClientService cloakAdminClientService;
+ @Bean
+ public InMemoryUserDetailsManager userDetailsService(PasswordEncoder passwordEncoder) {
- @Autowired
- private KeycloakSpringBootProperties keycloakSpringBootProperties;
-
- @Autowired
- private KeyCloakSettings keyCloakSettings;
+ UserDetails user = User.withUsername("manageradmin1@test.com").password(passwordEncoder.encode("secret")).roles(getAllRoles()).authorities(getAllRoles()).build();
+ return new InMemoryUserDetailsManager(user);
+ }
- @PostConstruct
- protected void pc() {
+ @Bean
+ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
- var instance = KeyCloakTestContainer.getInstance();
+ http.authorizeHttpRequests().anyRequest().authenticated();
+ http.httpBasic();
+ http.csrf().disable();
+ http.cors();
+ return http.build();
+ }
-// when(cloakAdminClientService.getAdminClient()).thenReturn(instance.getKeycloakAdminClient());
- keycloakSpringBootProperties.setAuthServerUrl(instance.getAuthServerUrl());
- keyCloakSettings.setServerUrl(instance.getAuthServerUrl());
+ @Bean
+ public BCryptPasswordEncoder passwordEncoder() {
+
+ return new BCryptPasswordEncoder();
}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/FeignRequestInterceptor.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/FeignRequestInterceptor.java
index 185ba16b0..2a1c258d5 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/FeignRequestInterceptor.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/FeignRequestInterceptor.java
@@ -12,12 +12,15 @@ public class FeignRequestInterceptor implements RequestInterceptor {
private final TokenService tokenService;
+ public static final String TENANT_HEADER_NAME = "X-TENANT-ID";
+
@Override
public void apply(RequestTemplate requestTemplate) {
var token = tokenService.getToken();
- requestTemplate.header("Authorization", "bearer " + token);
+ requestTemplate.header("Authorization", "basic " + token);
+ requestTemplate.header(TENANT_HEADER_NAME, "redaction");
}
}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KeyCloakTestContainer.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KeyCloakTestContainer.java
deleted file mode 100644
index 844214775..000000000
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KeyCloakTestContainer.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.iqser.red.service.peristence.v1.server.integration.utils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.keycloak.admin.client.resource.RealmResource;
-import org.keycloak.admin.client.resource.UserResource;
-import org.keycloak.representations.idm.ClientRepresentation;
-import org.keycloak.representations.idm.RoleRepresentation;
-
-import dasniko.testcontainers.keycloak.KeycloakContainer;
-
-public class KeyCloakTestContainer {
-
- private static final String IMAGE_VERSION = "quay.io/keycloak/keycloak:20.0.0";
- private static KeycloakContainer keycloak = null;
-
-
- private KeyCloakTestContainer() {
-
- }
-
-
- public static KeycloakContainer getInstance() {
-
- if (keycloak == null) {
- keycloak = new KeycloakContainer(IMAGE_VERSION).withAdminUsername("admin").withAdminPassword("admin");
-
- keycloak.start();
-
- var adminClient = keycloak.getKeycloakAdminClient();
- var redaction = adminClient.realm("master");
-
- var redactionClient = new ClientRepresentation();
-
- redactionClient.setId("redaction");
- redactionClient.setEnabled(true);
- redactionClient.setName("redaction");
- redactionClient.setSecret("redaction");
- redactionClient.setServiceAccountsEnabled(true);
- redactionClient.setDirectAccessGrantsEnabled(true);
- redactionClient.setStandardFlowEnabled(true);
- redactionClient.setImplicitFlowEnabled(true);
- redactionClient.setDirectAccessGrantsEnabled(true);
- redaction.clients().create(redactionClient);
- redaction.clients().create(redactionClient);
-
- RealmResource myRealm = adminClient.realm("master");
- String userId = myRealm.clients().get("redaction").getServiceAccountUser().getId();
- UserResource serviceAccountUser = myRealm.users().get(userId);
-
- ClientRepresentation clientThatOwnsRole = myRealm.clients().findByClientId("master-realm").get(0);
-
- String clientIdOfRoleOwner = clientThatOwnsRole.getId();
-
- List roles = new ArrayList<>();
- roles.addAll(myRealm.clients().get(clientIdOfRoleOwner).roles().list());
- serviceAccountUser.roles().clientLevel(clientIdOfRoleOwner).add(roles);
- serviceAccountUser.roles().realmLevel().add(List.of(myRealm.roles().get("create-realm").toRepresentation()));
-
- }
-
- return keycloak;
-
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KneconRedisTestContainer.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KneconRedisTestContainer.java
new file mode 100644
index 000000000..e654f05d4
--- /dev/null
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KneconRedisTestContainer.java
@@ -0,0 +1,26 @@
+package com.iqser.red.service.peristence.v1.server.integration.utils;
+
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.utility.DockerImageName;
+
+public class KneconRedisTestContainer extends GenericContainer {
+
+ private static final String IMAGE_VERSION = "nexus.knecon.com:5001/bitnami/redis:7.0.5-debian-11-r7";
+ private static KneconRedisTestContainer container;
+
+
+ private KneconRedisTestContainer() {
+
+ super(DockerImageName.parse(IMAGE_VERSION));
+ }
+
+
+ public static KneconRedisTestContainer getInstance() {
+
+ if (container == null) {
+ container = new KneconRedisTestContainer().withExposedPorts(6379);
+ }
+ return container;
+ }
+
+}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KneconSpringPostgreSQLTestContainer.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KneconSpringPostgreSQLTestContainer.java
new file mode 100644
index 000000000..f4809b532
--- /dev/null
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KneconSpringPostgreSQLTestContainer.java
@@ -0,0 +1,132 @@
+package com.iqser.red.service.peristence.v1.server.integration.utils;
+
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
+import java.util.Collections;
+import java.util.Set;
+
+import org.jetbrains.annotations.NotNull;
+import org.testcontainers.containers.JdbcDatabaseContainer;
+import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
+import org.testcontainers.utility.DockerImageName;
+
+public class KneconSpringPostgreSQLTestContainer extends JdbcDatabaseContainer {
+
+ private static final String IMAGE_VERSION = "nexus.knecon.com:5001/bitnami/postgresql:14.5.0-debian-11-r31";
+ private static KneconSpringPostgreSQLTestContainer container;
+
+
+ private KneconSpringPostgreSQLTestContainer() {
+
+ super(IMAGE_VERSION);
+ }
+
+
+ public static KneconSpringPostgreSQLTestContainer getInstance() {
+
+ if (container == null) {
+ container = new KneconSpringPostgreSQLTestContainer(DockerImageName.parse(IMAGE_VERSION));
+ }
+ return container;
+ }
+
+
+ public static final Integer POSTGRESQL_PORT = 5432;
+ private String databaseName;
+ private String username;
+ private String password;
+
+
+ public KneconSpringPostgreSQLTestContainer(DockerImageName dockerImageName) {
+
+ super(dockerImageName);
+ this.databaseName = "test";
+ this.username = "test";
+ this.password = "test";
+ this.waitStrategy = (new LogMessageWaitStrategy()).withRegEx(".*database system is ready to accept connections.*")
+ .withTimes(1)
+ .withStartupTimeout(Duration.of(60L, ChronoUnit.SECONDS));
+ this.addExposedPort(POSTGRESQL_PORT);
+ configure();
+ }
+
+
+
+ protected @NotNull Set getLivenessCheckPorts() {
+
+ return Collections.singleton(this.getMappedPort(POSTGRESQL_PORT));
+ }
+
+
+ protected void configure() {
+
+ this.addEnv("POSTGRESQL_DATABASE", this.databaseName);
+ this.addEnv("POSTGRESQL_USERNAME", this.username);
+ this.addEnv("POSTGRESQL_PASSWORD", this.password);
+ }
+
+
+ public String getDriverClassName() {
+
+ return "org.postgresql.Driver";
+ }
+
+
+ public String getJdbcUrl() {
+
+ String additionalUrlParams = this.constructUrlParameters("?", "&");
+ return "jdbc:postgresql://" + this.getContainerIpAddress() + ":" + this.getMappedPort(POSTGRESQL_PORT) + "/" + this.databaseName + additionalUrlParams;
+ }
+
+
+ public String getDatabaseName() {
+
+ return this.databaseName;
+ }
+
+
+ public String getUsername() {
+
+ return this.username;
+ }
+
+
+ public String getPassword() {
+
+ return this.password;
+ }
+
+
+ public String getTestQueryString() {
+
+ return "SELECT 1";
+ }
+
+
+ public KneconSpringPostgreSQLTestContainer withDatabaseName(String databaseName) {
+
+ this.databaseName = databaseName;
+ return this.self();
+ }
+
+
+ public KneconSpringPostgreSQLTestContainer withUsername(String username) {
+
+ this.username = username;
+ return this.self();
+ }
+
+
+ public KneconSpringPostgreSQLTestContainer withPassword(String password) {
+
+ this.password = password;
+ return this.self();
+ }
+
+
+ protected void waitUntilContainerStarted() {
+
+ this.getWaitStrategy().waitUntilReady(this);
+ }
+
+}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/TokenService.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/TokenService.java
index 5596c1912..01a0ccfea 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/TokenService.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/TokenService.java
@@ -1,64 +1,25 @@
package com.iqser.red.service.peristence.v1.server.integration.utils;
-import java.util.concurrent.TimeUnit;
-
-import javax.ws.rs.BadRequestException;
-import javax.ws.rs.NotAuthorizedException;
-
-import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
-import org.jboss.resteasy.client.jaxrs.internal.ResteasyClientBuilderImpl;
-import org.keycloak.OAuth2Constants;
-import org.keycloak.admin.client.KeycloakBuilder;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.codec.binary.Base64;
import org.springframework.stereotype.Service;
-import com.iqser.red.keycloak.commons.KeyCloakSettings;
-import com.iqser.red.service.persistence.management.v1.processor.exception.AuthenticationFailedException;
-import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
-
@Service
public class TokenService {
- @Autowired
- private KeyCloakSettings keyCloakSettings;
private String username;
private String password;
- public void setUser(String username, String password){
+
+ public void setUser(String username, String password) {
+
this.username = username;
this.password = password;
}
+
public String getToken() {
- var tokenClient = KeycloakBuilder.builder()
-
- .serverUrl(keyCloakSettings.getServerUrl())
- .realm(TenantContext.getTenantId())
- .username(username)
- .password(password)
- .clientId(keyCloakSettings.getClientId())
- .clientSecret(keyCloakSettings.getClientSecret())
- .grantType(OAuth2Constants.PASSWORD)
- .resteasyClient(new ResteasyClientBuilderImpl().connectionTTL(2, TimeUnit.SECONDS)
- .hostnameVerification(ResteasyClientBuilder.HostnameVerificationPolicy.ANY)
- .connectionPoolSize(keyCloakSettings.getConnectionPoolSize())
- .disableTrustManager()
- .build())
- .build();
-
- try {
- return tokenClient.tokenManager().getAccessTokenString();
- } catch (BadRequestException e) {
- var response = e.getResponse().getEntity();
- System.out.println(response);
- return null;
- } catch (NotAuthorizedException e) {
- throw new AuthenticationFailedException(e);
- } finally {
- tokenClient.close();
- }
-
+ return Base64.encodeBase64String((this.username+":"+this.password).getBytes());
}
}
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yml b/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yaml
similarity index 63%
rename from persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yml
rename to persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yaml
index d61dfe710..29a77796b 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yml
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yaml
@@ -1,21 +1,6 @@
monitoring.enabled: true
spring:
- quartz:
- overwrite-existing-jobs: true
- jdbc:
- initialize-schema: never
- properties:
- org:
- quartz:
- jobStore:
- class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
- clusterCheckinInterval: 1000
- isClustered: true
- driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
- scheduler:
- instanceId: AUTO
- job-store-type: JDBC
main:
allow-circular-references: true # FIXME
jpa:
@@ -59,7 +44,7 @@ configuration-service.url: "http://configuration-service-v1:8080"
pdftron-redaction-service.url: "http://pdftron-redaction-service-v1:8080"
redaction-report-service.url: "http://redaction-report-service-v1:8080"
search-service.url: "http://search-service-v1:8080"
-
+tenant-user-management-service.url: "http://tenant-user-management-service:8080"
storage:
backend: 's3'
@@ -79,10 +64,16 @@ metrics:
management:
endpoint:
metrics.enabled: true
- prometheus.enabled: true
health.enabled: true
+ prometheus:
+ enabled: true
endpoints.web.exposure.include: prometheus, health, metrics
- metrics.export.prometheus.enabled: true
+ prometheus:
+ metrics:
+ export:
+ enabled: true
+
+
logging.level.root: info
@@ -90,19 +81,6 @@ multitenancy:
datasource-cache:
maximumSize: 100
expireAfterAccess: 1
- master:
- datasource:
- driverClassName: org.postgresql.Driver
- platform: org.hibernate.dialect.PostgreSQL95Dialect
- hikari:
- maximumPoolSize: 5
- minimum-idle: 5
- data-source-properties:
- cachePrepStmts: true
- prepStmtCacheSize: 1000
- prepStmtCacheSqlLimit: 2048
- liquibase:
- changeLog: classpath:db/changelog/db.changelog-master.yaml
tenant:
datasource:
driverClassName: org.postgresql.Driver
@@ -118,24 +96,20 @@ multitenancy:
changeLog: classpath:db/changelog/db.changelog-tenant.yaml
-keycloak:
- enabled: true
- sslRequired: none
- realm: master
- resource: redaction
- disableTrustManager: true
- useResourceRoleMappings: true
-commons:
- keycloak:
- application-client-id: redaction
- realm: master
- client-id: redaction
- client-secret: redaction
feign:
client:
config:
DossierTemplateClient:
connectTimeout: 10000
- readTimeout: 200000
\ No newline at end of file
+ readTimeout: 200000
+fforesight:
+ jobs:
+ enabled: false
+ tenant-exchange:
+ name: 'tenants-exchange'
+ user-exchange:
+ name: 'users-exchange'
+ keycloak:
+ enabled: false
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/pom.xml b/persistence-service-v1/persistence-service-shared-api-v1/pom.xml
index c1e2a6a03..767f4a0c7 100644
--- a/persistence-service-v1/persistence-service-shared-api-v1/pom.xml
+++ b/persistence-service-v1/persistence-service-shared-api-v1/pom.xml
@@ -12,20 +12,9 @@
4.0.0
persistence-service-shared-api-v1
-
- 1.9.9
-
-
-
- com.dslplatform
- dsl-json-java8
- ${dsljson.version}
-
-
-
org.springdoc
springdoc-openapi-ui
@@ -57,11 +46,6 @@
provided
-
- org.springframework.boot
- spring-boot-starter-security
-
-
org.springframework.boot
spring-boot-starter-validation
@@ -87,19 +71,4 @@
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- lombok.launch.AnnotationProcessorHider$AnnotationProcessor
- com.dslplatform.json.processor.CompiledJsonAnnotationProcessor
-
-
-
-
-
-
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/AuditResponse.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/AuditResponse.java
index d97a514cb..3a0020845 100644
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/AuditResponse.java
+++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/AuditResponse.java
@@ -6,10 +6,12 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.Audit
import com.iqser.red.service.persistence.service.v1.api.shared.model.common.Page;
import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
public class AuditResponse extends Page {
public AuditResponse(List elements, long totalHits, int page, int pageSize) {
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/CreateTypeValue.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/CreateTypeValue.java
index 988440e74..cc173b71a 100644
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/CreateTypeValue.java
+++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/CreateTypeValue.java
@@ -1,9 +1,9 @@
package com.iqser.red.service.persistence.service.v1.api.shared.model;
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.Pattern;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.Pattern;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/PrepareDownloadWithOptionRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/PrepareDownloadWithOptionRequest.java
index 811139038..24206d209 100644
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/PrepareDownloadWithOptionRequest.java
+++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/PrepareDownloadWithOptionRequest.java
@@ -5,12 +5,11 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import javax.validation.constraints.NotNull;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.AccessLevel;
+import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/UpdateMyProfileRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/UpdateMyProfileRequest.java
index 74f0d1fd4..53c4da6c0 100644
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/UpdateMyProfileRequest.java
+++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/UpdateMyProfileRequest.java
@@ -1,9 +1,9 @@
package com.iqser.red.service.persistence.service.v1.api.shared.model;
-import javax.validation.constraints.Email;
-import javax.validation.constraints.NotEmpty;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Email;
+import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
@Data
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/configuration/ApplicationConfig.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/configuration/ApplicationConfig.java
index 413669721..6aa2ae3d0 100644
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/configuration/ApplicationConfig.java
+++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/configuration/ApplicationConfig.java
@@ -1,7 +1,7 @@
package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration;
-import javax.validation.constraints.Min;
+import jakarta.validation.constraints.Min;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/AzureStorageConnection.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/AzureStorageConnection.java
deleted file mode 100644
index 04bc8caad..000000000
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/AzureStorageConnection.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class AzureStorageConnection {
-
- private String connectionString;
- private String containerName;
-
-}
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/DatabaseConnection.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/DatabaseConnection.java
deleted file mode 100644
index 5f8a84b48..000000000
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/DatabaseConnection.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class DatabaseConnection {
-
- private String driver;
- private String host;
- private String port;
- private String database;
- private String schema;
- private String username;
- private String password;
-
- @Builder.Default
- private Map params = new HashMap<>();
-
-}
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/RedUser.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/RedUser.java
deleted file mode 100644
index e84ee9957..000000000
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/RedUser.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import lombok.Builder;
-import lombok.Data;
-
-@Data
-@Builder
-public class RedUser {
-
- private String username;
- private String password;
- private String email;
- private String firstName;
- private String lastName;
-
- @Builder.Default
- private Set redRoles = new HashSet<>();
-
-}
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/S3StorageConnection.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/S3StorageConnection.java
deleted file mode 100644
index 6a8d6f4f5..000000000
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/S3StorageConnection.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-public class S3StorageConnection {
-
- private String key;
- private String secret;
- private String signerType;
- private String bucketName;
- private String region;
- private String endpoint;
-
-}
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/SearchConnection.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/SearchConnection.java
deleted file mode 100644
index 8c7448fdd..000000000
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/SearchConnection.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy;
-
-import java.util.Set;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class SearchConnection {
-
- private Set hosts;
- private int port = 9300;
- private String scheme;
- private String username;
- private String password;
- private String numberOfShards;
- private String numberOfReplicas;
-
-}
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/SimpleTenantResponse.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/SimpleTenantResponse.java
deleted file mode 100644
index b90dfe359..000000000
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/SimpleTenantResponse.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-public class SimpleTenantResponse {
-
- private String tenantId;
- private String displayName;
- private String guid;
-
-}
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/TenantRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/TenantRequest.java
deleted file mode 100644
index 373683519..000000000
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/TenantRequest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.validation.constraints.NotBlank;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-public class TenantRequest {
-
- @NotBlank
- private String tenantId;
- @NotBlank
- private String displayName;
- private String guid;
-
- private DatabaseConnection databaseConnection;
- private SearchConnection searchConnection;
- private AzureStorageConnection azureStorageConnection;
- private S3StorageConnection s3StorageConnection;
-
- @Builder.Default
- private List redUsers = new ArrayList<>();
-
-}
diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/TenantResponse.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/TenantResponse.java
deleted file mode 100644
index 8f75511fa..000000000
--- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/multitenancy/TenantResponse.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-public class TenantResponse {
-
- private String tenantId;
- private String displayName;
- private String guid;
-
- private DatabaseConnection databaseConnection;
- private SearchConnection searchConnection;
- private AzureStorageConnection azureStorageConnection;
- private S3StorageConnection s3StorageConnection;
-
-}
diff --git a/persistence-service-v1/pom.xml b/persistence-service-v1/pom.xml
index 2f36fe125..928813a33 100755
--- a/persistence-service-v1/pom.xml
+++ b/persistence-service-v1/pom.xml
@@ -6,7 +6,7 @@
com.iqser.red
platform-dependency
- 1.17.0
+ 2.2.0
@@ -19,7 +19,6 @@
pom
- keycloak-commons
persistence-service-shared-api-v1
persistence-service-internal-api-v1
persistence-service-external-api-v1
@@ -30,11 +29,10 @@
- 4.0.0
- 4.0.0
- 4.11.0
- 4.0.0
- 20.0.1
+ 4.30.0
+ 2.71.0
+ 4.18.0
+ 4.13.0
@@ -42,7 +40,7 @@
com.iqser.red
platform-commons-dependency
- 1.22.0
+ 2.1.0
import
pom