From 45f202ce88474922e72cb2e70b97e7860f4eb379 Mon Sep 17 00:00:00 2001 From: juarez Date: Fri, 23 Feb 2024 17:49:13 +0100 Subject: [PATCH] Added: Flag ENABLE_TOKEN_MANAGER --- CHANGELOG.md | 1 + .../java/de/samply/app/ProjectManagerConst.java | 3 ++- .../samply/token/DataShieldTokenManagerJob.java | 15 +++++++++++---- .../token/DataShieldTokenManagerService.java | 15 +++++++++++---- .../samply/token/dto/DataShieldProjectStatus.java | 3 ++- .../samply/token/dto/DataShieldTokenStatus.java | 3 ++- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91861d6..616c533 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -103,3 +103,4 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Fetch project users - rejectProject state constraints - Filter output formats for DataSHIELD +- Flag ENABLE_TOKEN_MANAGER diff --git a/src/main/java/de/samply/app/ProjectManagerConst.java b/src/main/java/de/samply/app/ProjectManagerConst.java index 5edc663..8cf4e37 100644 --- a/src/main/java/de/samply/app/ProjectManagerConst.java +++ b/src/main/java/de/samply/app/ProjectManagerConst.java @@ -252,6 +252,7 @@ public class ProjectManagerConst { public final static String MANAGE_TOKENS_CRON_EXPRESSION = "MANAGE_TOKENS_CRON_EXPRESSION"; public final static String CHECK_EXPIRED_ACTIVE_PROJECTS_CRON_EXPRESSION = "CHECK_EXPIRED_ACTIVE_PROJECTS_CRON_EXPRESSION"; public final static String EXPLORER_URL = "EXPLORER_URL"; + public final static String ENABLE_TOKEN_MANAGER = "ENABLE_TOKEN_MANAGER"; // Spring Values (SV) public final static String HEAD_SV = "${"; @@ -303,13 +304,13 @@ public class ProjectManagerConst { public final static String FOCUS_URL_SV = HEAD_SV + FOCUS_URL + BOTTOM_SV; public final static String FOCUS_API_KEY_SV = HEAD_SV + FOCUS_API_KEY + BOTTOM_SV; public final static String ENABLE_EMAILS_SV = HEAD_SV + ENABLE_EMAILS + ":true" + BOTTOM_SV; + public final static String ENABLE_TOKEN_MANAGER_SV = HEAD_SV + ENABLE_TOKEN_MANAGER + ":true" + BOTTOM_SV; public final static String MANAGE_TOKENS_CRON_EXPRESSION_SV = HEAD_SV + MANAGE_TOKENS_CRON_EXPRESSION + ":#{'0 0 * * * *'}" + BOTTOM_SV; public final static String CHECK_EXPIRED_ACTIVE_PROJECTS_CRON_EXPRESSION_SV = HEAD_SV + CHECK_EXPIRED_ACTIVE_PROJECTS_CRON_EXPRESSION + ":#{'0 0 1,13 * * *'}" + BOTTOM_SV; public final static String EXPLORER_URL_SV = HEAD_SV + EXPLORER_URL + BOTTOM_SV; - // Others public final static String TEST_EMAIL = "test@project-manager.com"; public final static String TEST_BRIDGEHEAD = "bridgehead-test"; diff --git a/src/main/java/de/samply/token/DataShieldTokenManagerJob.java b/src/main/java/de/samply/token/DataShieldTokenManagerJob.java index 51713b3..6b6a5d6 100644 --- a/src/main/java/de/samply/token/DataShieldTokenManagerJob.java +++ b/src/main/java/de/samply/token/DataShieldTokenManagerJob.java @@ -13,6 +13,7 @@ import de.samply.token.dto.DataShieldTokenManagerTokenStatus; import de.samply.token.dto.DataShieldTokenStatus; import de.samply.user.roles.ProjectRole; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -27,20 +28,26 @@ public class DataShieldTokenManagerJob { private final DataShieldTokenManagerService tokenManagerService; private final ProjectBridgeheadUserRepository projectBridgeheadUserRepository; private final EmailService emailService; + private final boolean isTokenManagerActive; public DataShieldTokenManagerJob(DataShieldTokenManagerService tokenManagerService, ProjectBridgeheadUserRepository projectBridgeheadUserRepository, - EmailService emailService) { + EmailService emailService, + @Value(ProjectManagerConst.ENABLE_TOKEN_MANAGER_SV) boolean isTokenManagerActive + ) { this.tokenManagerService = tokenManagerService; this.projectBridgeheadUserRepository = projectBridgeheadUserRepository; this.emailService = emailService; + this.isTokenManagerActive = isTokenManagerActive; } @Scheduled(cron = ProjectManagerConst.MANAGE_TOKENS_CRON_EXPRESSION_SV) public void manageTokens() { - manageActiveUsers(); - manageInactiveUsers(); - manageInactiveProjects(); + if (isTokenManagerActive){ + manageActiveUsers(); + manageInactiveUsers(); + manageInactiveProjects(); + } } private void manageActiveUsers() { diff --git a/src/main/java/de/samply/token/DataShieldTokenManagerService.java b/src/main/java/de/samply/token/DataShieldTokenManagerService.java index 74535a6..4896720 100644 --- a/src/main/java/de/samply/token/DataShieldTokenManagerService.java +++ b/src/main/java/de/samply/token/DataShieldTokenManagerService.java @@ -10,9 +10,7 @@ import de.samply.notification.NotificationService; import de.samply.notification.OperationType; import de.samply.security.SessionUser; -import de.samply.token.dto.DataShieldTokenManagerProjectStatus; -import de.samply.token.dto.DataShieldTokenManagerTokenStatus; -import de.samply.token.dto.TokenParams; +import de.samply.token.dto.*; import de.samply.user.roles.ProjectRole; import de.samply.utils.WebClientFactory; import jakarta.validation.constraints.NotNull; @@ -50,6 +48,7 @@ public class DataShieldTokenManagerService { private final ProjectBridgeheadUserRepository projectBridgeheadUserRepository; private final NotificationService notificationService; private final BridgeheadConfiguration bridgeheadConfiguration; + private final boolean isTokenManagerActive; public DataShieldTokenManagerService(SessionUser sessionUser, WebClientFactory webClientFactory, @@ -58,7 +57,8 @@ public DataShieldTokenManagerService(SessionUser sessionUser, ProjectBridgeheadRepository projectBridgeheadRepository, ProjectBridgeheadUserRepository projectBridgeheadUserRepository, NotificationService notificationService, - BridgeheadConfiguration bridgeheadConfiguration) { + BridgeheadConfiguration bridgeheadConfiguration, + @Value(ProjectManagerConst.ENABLE_TOKEN_MANAGER_SV) boolean isTokenManagerActive) { this.sessionUser = sessionUser; this.webClientFactory = webClientFactory; this.projectRepository = projectRepository; @@ -66,6 +66,7 @@ public DataShieldTokenManagerService(SessionUser sessionUser, this.projectBridgeheadUserRepository = projectBridgeheadUserRepository; this.notificationService = notificationService; this.bridgeheadConfiguration = bridgeheadConfiguration; + this.isTokenManagerActive = isTokenManagerActive; this.webClient = webClientFactory.createWebClient(tokenManagerUrl); } @@ -145,6 +146,9 @@ public DataShieldTokenManagerTokenStatus fetchTokenStatus(@NotNull String projec } public DataShieldTokenManagerProjectStatus fetchProjectStatus(@NotNull String projectCode, @NotNull String bridgehead) { + if (!isTokenManagerActive) { + return new DataShieldTokenManagerProjectStatus(projectCode, bridgehead, DataShieldProjectStatus.INACTIVE); + } String uri = UriComponentsBuilder.fromPath(ProjectManagerConst.TOKEN_MANAGER_ROOT + ProjectManagerConst.TOKEN_MANAGER_PROJECT_STATUS) .queryParam(ProjectManagerConst.TOKEN_MANAGER_PARAMETER_BRIDGEHEAD, fetchTokenManagerId(bridgehead)) .queryParam(ProjectManagerConst.TOKEN_MANAGER_PARAMETER_PROJECT_CODE, projectCode) @@ -158,6 +162,9 @@ public DataShieldTokenManagerProjectStatus fetchProjectStatus(@NotNull String pr } public Resource fetchAuthenticationScript(String projectCode, String bridgehead) throws DataShieldTokenManagerServiceException { + if (!isTokenManagerActive) { + return new ByteArrayResource("Token Manager inactive".getBytes()); + } List tokenManagerIds = fetchTokenManagerIds(fetchProjectBridgeheads(projectCode, bridgehead, sessionUser.getEmail())); String authenticationScript = webClient.post().uri(uriBuilder -> uriBuilder.path(ProjectManagerConst.TOKEN_MANAGER_ROOT + ProjectManagerConst.TOKEN_MANAGER_SCRIPTS).build()) diff --git a/src/main/java/de/samply/token/dto/DataShieldProjectStatus.java b/src/main/java/de/samply/token/dto/DataShieldProjectStatus.java index 89aef4d..ba4ed88 100644 --- a/src/main/java/de/samply/token/dto/DataShieldProjectStatus.java +++ b/src/main/java/de/samply/token/dto/DataShieldProjectStatus.java @@ -3,5 +3,6 @@ public enum DataShieldProjectStatus { CREATED, WITH_DATA, - NOT_FOUND + NOT_FOUND, + INACTIVE } diff --git a/src/main/java/de/samply/token/dto/DataShieldTokenStatus.java b/src/main/java/de/samply/token/dto/DataShieldTokenStatus.java index 5f79d85..c9dd7cd 100644 --- a/src/main/java/de/samply/token/dto/DataShieldTokenStatus.java +++ b/src/main/java/de/samply/token/dto/DataShieldTokenStatus.java @@ -3,5 +3,6 @@ public enum DataShieldTokenStatus { CREATED, EXPIRED, - NOT_FOUND + NOT_FOUND, + INACTIVE }