From a5a68488456b03cd01501f00d10b9d43fd67a07f Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 21 Jan 2025 18:57:22 +0100 Subject: [PATCH 1/2] [Dynamic Security Analysis] Expose dynamic security analysis server Signed-off-by: Thang PHAM --- .../org/gridsuite/gateway/GatewayConfig.java | 1 + .../gridsuite/gateway/ServiceURIsConfig.java | 3 ++ .../DynamicSecurityAnalysisServer.java | 36 +++++++++++++++++++ .../gateway/endpoints/StudyServer.java | 2 +- src/main/resources/application-local.yml | 2 ++ .../gateway/ElementAccessControlTest.java | 6 ++++ 6 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/gridsuite/gateway/endpoints/DynamicSecurityAnalysisServer.java diff --git a/src/main/java/org/gridsuite/gateway/GatewayConfig.java b/src/main/java/org/gridsuite/gateway/GatewayConfig.java index f971aa9..9e3d53f 100644 --- a/src/main/java/org/gridsuite/gateway/GatewayConfig.java +++ b/src/main/java/org/gridsuite/gateway/GatewayConfig.java @@ -50,6 +50,7 @@ public RouteLocator myRoutes(RouteLocatorBuilder builder, ApplicationContext con .route(p -> context.getBean(LoadFlowServer.class).getRoute(p)) .route(p -> context.getBean(SecurityAnalysisServer.class).getRoute(p)) .route(p -> context.getBean(DynamicSimulationServer.class).getRoute(p)) + .route(p -> context.getBean(DynamicSecurityAnalysisServer.class).getRoute(p)) .route(p -> context.getBean(VoltageInitServer.class).getRoute(p)) .route(p -> context.getBean(ShortCircuitServer.class).getRoute(p)) .route(p -> context.getBean(StateEstimationOrchestratorServer.class).getRoute(p)) diff --git a/src/main/java/org/gridsuite/gateway/ServiceURIsConfig.java b/src/main/java/org/gridsuite/gateway/ServiceURIsConfig.java index 6ef0dfe..5affddd 100644 --- a/src/main/java/org/gridsuite/gateway/ServiceURIsConfig.java +++ b/src/main/java/org/gridsuite/gateway/ServiceURIsConfig.java @@ -96,6 +96,9 @@ public class ServiceURIsConfig { @Value("${gridsuite.services.dynamic-simulation-server.base-uri:http://dynamic-simulation-server/}") String dynamicSimulationServerBaseUri; + @Value("${gridsuite.services.dynamic-security-analysis-server.base-uri:http://dynamic-security-analysis-server/}") + String dynamicSecurityAnalysisServerBaseUri; + @Value("${gridsuite.services.case-import-server.base-uri:http://case-import-server/}") String caseImportServerBaseUri; diff --git a/src/main/java/org/gridsuite/gateway/endpoints/DynamicSecurityAnalysisServer.java b/src/main/java/org/gridsuite/gateway/endpoints/DynamicSecurityAnalysisServer.java new file mode 100644 index 0000000..4fd09c5 --- /dev/null +++ b/src/main/java/org/gridsuite/gateway/endpoints/DynamicSecurityAnalysisServer.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.gateway.endpoints; + +import org.gridsuite.gateway.ServiceURIsConfig; +import org.springframework.stereotype.Component; + +/** + * @author Thang PHAM + */ +@Component(value = DynamicSecurityAnalysisServer.ENDPOINT_NAME) +public class DynamicSecurityAnalysisServer implements EndPointServer { + + public static final String ENDPOINT_NAME = "dynamic-security-analysis"; + + private final ServiceURIsConfig servicesURIsConfig; + + public DynamicSecurityAnalysisServer(ServiceURIsConfig servicesURIsConfig) { + this.servicesURIsConfig = servicesURIsConfig; + } + + @Override + public String getEndpointBaseUri() { + return servicesURIsConfig.getDynamicSecurityAnalysisServerBaseUri(); + } + + @Override + public String getEndpointName() { + return ENDPOINT_NAME; + } +} diff --git a/src/main/java/org/gridsuite/gateway/endpoints/StudyServer.java b/src/main/java/org/gridsuite/gateway/endpoints/StudyServer.java index 2d0ec2d..0bd0c04 100644 --- a/src/main/java/org/gridsuite/gateway/endpoints/StudyServer.java +++ b/src/main/java/org/gridsuite/gateway/endpoints/StudyServer.java @@ -39,6 +39,6 @@ public String getEndpointName() { public Set getUncontrolledRootPaths() { return Set.of("search", "svg-component-libraries", "export-network-formats", "loadflow-default-provider", "security-analysis-default-provider", "sensitivity-analysis-default-provider", "non-evacuated-energy-default-provider", - "dynamic-simulation-default-provider", "optional-services", "servers"); + "dynamic-simulation-default-provider", "dynamic-security-analysis-default-provider", "optional-services", "servers"); } } diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 3707f37..2cbeeb5 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -56,6 +56,8 @@ gridsuite: base-uri: http://localhost:5023 dynamic-simulation-server: base-uri: http://localhost:5032 + dynamic-security-analysis-server: + base-uri: http://localhost:5040 case-import-server: base-uri: http://localhost:5039 voltage-init-server: diff --git a/src/test/java/org/gridsuite/gateway/ElementAccessControlTest.java b/src/test/java/org/gridsuite/gateway/ElementAccessControlTest.java index 9b0511f..63d8421 100644 --- a/src/test/java/org/gridsuite/gateway/ElementAccessControlTest.java +++ b/src/test/java/org/gridsuite/gateway/ElementAccessControlTest.java @@ -130,6 +130,7 @@ void testWithNoControl() { stubFor(get(urlEqualTo("/v1/sensitivity-analysis-default-provider")).withHeader("userId", equalTo("user1")).willReturn(aResponse())); stubFor(get(urlEqualTo("/v1/non-evacuated-energy-default-provider")).withHeader("userId", equalTo("user1")).willReturn(aResponse())); stubFor(get(urlEqualTo("/v1/dynamic-simulation-default-provider")).withHeader("userId", equalTo("user1")).willReturn(aResponse())); + stubFor(get(urlEqualTo("/v1/dynamic-security-analysis-default-provider")).withHeader("userId", equalTo("user1")).willReturn(aResponse())); webClient .get().uri("study/v1/search") .header(HttpHeaders.AUTHORIZATION, "Bearer " + tokenUser1) @@ -170,6 +171,11 @@ void testWithNoControl() { .header(HttpHeaders.AUTHORIZATION, "Bearer " + tokenUser1) .exchange() .expectStatus().isOk(); + webClient + .get().uri("study/v1/dynamic-security-analysis-default-provider") + .header(HttpHeaders.AUTHORIZATION, "Bearer " + tokenUser1) + .exchange() + .expectStatus().isOk(); } @Test From a5e91add0f1d58a8cd045212591515823f94767a Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Fri, 31 Jan 2025 09:22:58 +0100 Subject: [PATCH 2/2] copyright Signed-off-by: Thang PHAM --- .../gateway/endpoints/DynamicSecurityAnalysisServer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/gridsuite/gateway/endpoints/DynamicSecurityAnalysisServer.java b/src/main/java/org/gridsuite/gateway/endpoints/DynamicSecurityAnalysisServer.java index 4fd09c5..3257125 100644 --- a/src/main/java/org/gridsuite/gateway/endpoints/DynamicSecurityAnalysisServer.java +++ b/src/main/java/org/gridsuite/gateway/endpoints/DynamicSecurityAnalysisServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, RTE (http://www.rte-france.com) + * Copyright (c) 2025, RTE (http://www.rte-france.com) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/.