summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/FeProxyServlet.java116
-rw-r--r--catalog-fe/src/test/java/org/openecomp/sdc/servlets/FeProxyServletTest.java25
-rw-r--r--catalog-ui/configurations/dev.js2
-rw-r--r--catalog-ui/configurations/prod.js2
-rw-r--r--common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java108
-rw-r--r--docs/configuration.rst6
-rw-r--r--sdc-os-chef/environments/plugins-configuration.yaml2
-rw-r--r--sdc-os-chef/kubernetes/sdc/templates/configmaps/sdc-environment-configmap.yaml4
8 files changed, 128 insertions, 137 deletions
diff --git a/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/FeProxyServlet.java b/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/FeProxyServlet.java
index 1c7b174c57..1d7643fe40 100644
--- a/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/FeProxyServlet.java
+++ b/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/FeProxyServlet.java
@@ -46,9 +46,8 @@ public class FeProxyServlet extends SSLProxyServlet {
private static final String URL = "%s://%s%s%s";
private static final String ONBOARDING_CONTEXT = "/onboarding-api";
private static final String DCAED_CONTEXT = "/dcae-api";
- private static final String WORKFLOW_CONTEXT = "/wf";
private static final String SDC1_FE_PROXY = "/sdc1/feProxy";
- private static final String PLUGIN_ID_WORKFLOW = "WORKFLOW";
+ private static final String SDC1_PLUGIN_REDIRECT = SDC1_FE_PROXY + "/plugin";
private static final Logger LOGGER = Logger.getLogger(FeProxyServlet.class);
private static final int EXPIRE_DURATION = 10;
@@ -154,6 +153,24 @@ public class FeProxyServlet extends SSLProxyServlet {
}
+ /****
+ * scan all the plugins from the configuration against the URL and the redicert path
+ * @param request
+ * @return
+ */
+ private Plugin getPluginProxyForRequest(HttpServletRequest request) {
+ return getPluginConfiguration(request).getPluginsList()
+ .stream()
+ .filter(plugin -> {
+ if (plugin.getPluginProxyRedirectPath() != null && !plugin.getPluginProxyRedirectPath().isEmpty()) {
+ return request.getRequestURI().contains(SDC1_PLUGIN_REDIRECT + plugin.getPluginProxyRedirectPath());
+ } else {
+ return false;
+ }
+ })
+ .findFirst().orElse(null);
+ }
+
private String getModifiedUrl(HttpServletRequest request) throws MalformedURLException {
Configuration config = getConfiguration(request);
if (config == null) {
@@ -161,50 +178,77 @@ public class FeProxyServlet extends SSLProxyServlet {
throw new RuntimeException("failed to read FE configuration");
}
String uri = request.getRequestURI();
- String protocol;
- String host;
- String port;
+
+ // the modify logic is as follows:
+ // - proxy ONBOARDING to the onboarding context. this is not a plugin and hardcoded
+ // - proxy DCAE to the correct context. also - not a plugin but hardcoded
+ // - proxy to the plugin according to configuration if the path is found in the plugin patterns
+ // - proxy to the catalog backend if no other proxy was found
+
if (uri.contains(ONBOARDING_CONTEXT)) {
uri = uri.replace(SDC1_FE_PROXY + ONBOARDING_CONTEXT, ONBOARDING_CONTEXT);
- protocol = config.getOnboarding().getProtocolBe();
- host = config.getOnboarding().getHostBe();
- port = config.getOnboarding().getPortBe().toString();
- } else if (uri.contains(DCAED_CONTEXT)) {
+ return getModifiedUrlString(
+ request,
+ uri,
+ config.getOnboarding().getHostBe(),
+ config.getOnboarding().getPortBe().toString(),
+ config.getOnboarding().getProtocolBe());
+ }
+ if (uri.contains(DCAED_CONTEXT)) {
uri = uri.replace(SDC1_FE_PROXY + DCAED_CONTEXT, DCAED_CONTEXT);
- protocol = config.getBeProtocol();
- host = config.getBeHost();
- if (config.getBeProtocol().equals(BeProtocol.HTTP.getProtocolName())) {
- port = config.getBeHttpPort().toString();
- } else {
- port = config.getBeSslPort().toString();
+ return getModifiedUrlString(
+ request,
+ uri,
+ config.getBeHost(),
+ getCatalogBePort(config),
+ config.getBeProtocol());
+ }
+
+ if (uri.contains(SDC1_PLUGIN_REDIRECT)) {
+ Plugin proxyPlugin = getPluginProxyForRequest(request);
+ if (proxyPlugin != null) {
+ String proxyUrlStr = (proxyPlugin.getPluginFeProxyUrl() != null) ? proxyPlugin.getPluginFeProxyUrl() : proxyPlugin.getPluginSourceUrl();
+ URL proxyUrl = new URL(proxyUrlStr);
+ uri = uri.replace(SDC1_PLUGIN_REDIRECT + proxyPlugin.getPluginProxyRedirectPath(), proxyUrl.getPath());
+ return getModifiedUrlString(request, uri, proxyUrl);
}
- } else if (uri.contains(WORKFLOW_CONTEXT)) {
- String workflowPluginURL = getPluginConfiguration(request).getPluginsList()
- .stream()
- .filter(plugin -> plugin.getPluginId().equalsIgnoreCase(PLUGIN_ID_WORKFLOW))
- .map(Plugin::getPluginDiscoveryUrl)
- .findFirst().orElse(null);
-
- java.net.URL workflowURL = new URL(workflowPluginURL);
- protocol = workflowURL.getProtocol();
- host = workflowURL.getHost();
- port = String.valueOf(workflowURL.getPort());
- uri = uri.replace(SDC1_FE_PROXY + WORKFLOW_CONTEXT, workflowURL.getPath() + WORKFLOW_CONTEXT);
+ }
+
+ Plugin proxyPlugin = getPluginProxyForRequest(request);
+ if (proxyPlugin != null) {
+ String proxyUrlStr = (proxyPlugin.getPluginFeProxyUrl() != null) ? proxyPlugin.getPluginFeProxyUrl() : proxyPlugin.getPluginSourceUrl();
+ URL proxyUrl = new URL(proxyUrlStr);
+ uri = uri.replace(SDC1_FE_PROXY + proxyPlugin.getPluginProxyRedirectPath(), proxyUrl.getPath());
+ return getModifiedUrlString(request, uri, proxyUrl);
+ }
+
+ uri = uri.replace(SDC1_FE_PROXY, "/sdc2");
+ return getModifiedUrlString(
+ request,
+ uri,
+ config.getBeHost(),
+ getCatalogBePort(config),
+ config.getBeProtocol());
+ }
+
+
+ private String getCatalogBePort(Configuration config) {
+ if (config.getBeProtocol().equals(BeProtocol.HTTP.getProtocolName())) {
+ return config.getBeHttpPort().toString();
} else {
- uri = uri.replace(SDC1_FE_PROXY, "/sdc2");
- protocol = config.getBeProtocol();
- host = config.getBeHost();
- if (config.getBeProtocol().equals(BeProtocol.HTTP.getProtocolName())) {
- port = config.getBeHttpPort().toString();
- } else {
- port = config.getBeSslPort().toString();
- }
+ return config.getBeSslPort().toString();
}
+ }
+ private String getModifiedUrlString(HttpServletRequest request, String uri, URL url) {
+ String queryString = getQueryString(request);
+ return String.format(URL, url.getProtocol(), url.getAuthority(), uri, queryString);
+ }
+
+ private String getModifiedUrlString(HttpServletRequest request, String uri, String host, String port, String protocol) {
String authority = getAuthority(host, port);
String queryString = getQueryString(request);
return String.format(URL, protocol, authority, uri, queryString);
-
}
private PluginsConfiguration getPluginConfiguration(HttpServletRequest request) {
diff --git a/catalog-fe/src/test/java/org/openecomp/sdc/servlets/FeProxyServletTest.java b/catalog-fe/src/test/java/org/openecomp/sdc/servlets/FeProxyServletTest.java
index 4915936b1d..81e939b929 100644
--- a/catalog-fe/src/test/java/org/openecomp/sdc/servlets/FeProxyServletTest.java
+++ b/catalog-fe/src/test/java/org/openecomp/sdc/servlets/FeProxyServletTest.java
@@ -113,7 +113,12 @@ public class FeProxyServletTest {
when(plugin.getPluginId()).thenReturn("WORKFLOW");
when(plugin.getPluginSourceUrl()).thenReturn(WF_PROTOCOL + "://" + WF_HOST + ":" + WF_PORT);
when(plugin.getPluginDiscoveryUrl()).thenReturn(WF_PROTOCOL + "://" + WF_HOST + ":" + WF_PORT + "/workflows");
+ when(plugin.getPluginFeProxyUrl()).thenReturn(WF_PROTOCOL + "://" + WF_HOST + ":" + WF_PORT + "/workflows/wf/");
+ when(plugin.getPluginProxyRedirectPath()).thenReturn("/wf/");
pluginList.add(plugin);
+ PluginsConfiguration.Plugin noConfigPlugin = new PluginsConfiguration.Plugin();
+ noConfigPlugin.setPluginId("NO_CONFIG");
+ pluginList.add(noConfigPlugin);
when(configurationManager.getPluginsConfiguration()).thenReturn(pluginsConfiguration);
when(pluginsConfiguration.getPluginsList()).thenReturn(pluginList);
@@ -182,17 +187,31 @@ public class FeProxyServletTest {
@Test
public void testRewriteURIWithWFAPIRequest() {
- when(servletRequest.getRequestURI()).thenReturn("/sdc1/feProxy/wf/workflows");
- String requestResourceUrl = "http://localhost:8080/sdc1/feProxy/wf/workflows";
+ when(servletRequest.getRequestURI()).thenReturn("/sdc1/feProxy/plugin/wf/workflows");
+ String requestResourceUrl = "http://localhost:8080/sdc1/feProxy/plugin/wf/workflows";
String expectedChangedUrl = WF_PROTOCOL + "://" + WF_HOST + ":" + WF_PORT + "/workflows/wf/workflows";
when(servletRequest.getRequestURL()).thenReturn(new StringBuffer(requestResourceUrl));
when(servletRequest.getContextPath()).thenReturn("/sdc1");
- when(servletRequest.getServletPath()).thenReturn("/feProxy/wf/workflows");
+ when(servletRequest.getServletPath()).thenReturn("/feProxy/plugin/wf/workflows");
String rewriteURI = feProxy.rewriteTarget(servletRequest);
assertEquals(expectedChangedUrl, rewriteURI);
+
+ // now test in case it did not go through the plugin
+ when(servletRequest.getRequestURI()).thenReturn("/sdc1/feProxy/wf/workflows");
+ requestResourceUrl = "http://localhost:8080/sdc1/feProxy/wf/workflows";
+ expectedChangedUrl = BE_PROTOCOL + "://" + BE_HOST + ":" + BE_PORT + "/sdc2/wf/workflows";
+ when(servletRequest.getRequestURL()).thenReturn(new StringBuffer(requestResourceUrl));
+
+ when(servletRequest.getContextPath()).thenReturn("/sdc1");
+ when(servletRequest.getServletPath()).thenReturn("/feProxy/wf/workflows");
+
+ rewriteURI = feProxy.rewriteTarget(servletRequest);
+
+ assertEquals(expectedChangedUrl, rewriteURI);
+
}
/**
diff --git a/catalog-ui/configurations/dev.js b/catalog-ui/configurations/dev.js
index bca591296a..be1f52a787 100644
--- a/catalog-ui/configurations/dev.js
+++ b/catalog-ui/configurations/dev.js
@@ -49,7 +49,7 @@ const SDC_CONFIG = {
"GET_lifecycle_state_UNDOCHECKOUT":"lifecycleState/UNDOCHECKOUT",
"root": "/sdc1/feProxy/rest",
"no_proxy_root": "/sdc1/rest",
- "workflow_root": "/sdc1/feProxy/wf",
+ "workflow_root": "/sdc1/feProxy/plugin/wf",
"POST_workflow_artifact": "sdc/v1/catalog",
"PUT_service": "/v1/catalog/services/:id/metadata",
"GET_download_artifact": "/v1/catalog/",
diff --git a/catalog-ui/configurations/prod.js b/catalog-ui/configurations/prod.js
index 496c5760a6..32c9ae2a2b 100644
--- a/catalog-ui/configurations/prod.js
+++ b/catalog-ui/configurations/prod.js
@@ -49,7 +49,7 @@ const SDC_CONFIG = {
"GET_lifecycle_state_UNDOCHECKOUT":"lifecycleState/UNDOCHECKOUT",
"root": "/sdc1/feProxy/rest",
"no_proxy_root": "/sdc1/rest",
- "workflow_root": "/sdc1/feProxy/wf",
+ "workflow_root": "/sdc1/feProxy/plugin/wf",
"POST_workflow_artifact": "sdc/v1/catalog",
"PUT_service": "/v1/catalog/services/:id/metadata",
"GET_download_artifact": "/v1/catalog/",
diff --git a/common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java b/common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java
index 449c9eaccc..55b0ea0db9 100644
--- a/common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java
+++ b/common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java
@@ -20,132 +20,50 @@
package org.openecomp.sdc.fe.config;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
import org.openecomp.sdc.common.api.BasicConfiguration;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+@Getter
+@Setter
+@ToString
public class PluginsConfiguration extends BasicConfiguration {
private List<Plugin> pluginsList;
private Integer connectionTimeout;
- public List<Plugin> getPluginsList() {
- return pluginsList;
- }
-
- public void setPluginsList(List<Plugin> pluginsList) {
- this.pluginsList = pluginsList;
- }
-
- public Integer getConnectionTimeout() {
- return connectionTimeout;
- }
-
- public void setConnectionTimeout(Integer connectionTimeout) {
- this.connectionTimeout = connectionTimeout;
- }
-
public PluginsConfiguration() {
this.pluginsList = new ArrayList<>();
}
+ @Getter
+ @Setter
public static class Plugin {
-
private String pluginId;
private String pluginDiscoveryUrl;
private String pluginSourceUrl;
private String pluginStateUrl;
+ private String pluginFeProxyUrl; // this is optional in case it is different from the source url.
+ private String pluginProxyRedirectPath;
private Map<String, PluginDisplayOptions> pluginDisplayOptions;
private boolean isOnline;
- public String getPluginId() {
- return pluginId;
- }
-
- public void setPluginId(String pluginId) {
- this.pluginId = pluginId;
- }
-
- public String getPluginDiscoveryUrl() {
- return pluginDiscoveryUrl;
- }
-
- public void setPluginDiscoveryUrl(String pluginDiscoveryUrl) {
- this.pluginDiscoveryUrl = pluginDiscoveryUrl;
- }
-
- public String getPluginSourceUrl() {
- return pluginSourceUrl;
- }
-
- public void setPluginSourceUrl(String pluginSourceUrl) {
- this.pluginSourceUrl = pluginSourceUrl;
- }
-
- public String getPluginStateUrl() {
- return pluginStateUrl;
- }
-
- public void setPluginStateUrl(String pluginStateUrl) {
- this.pluginStateUrl = pluginStateUrl;
- }
-
- public Map<String, PluginDisplayOptions> getPluginDisplayOptions() {
- return pluginDisplayOptions;
- }
-
- public void setPluginDisplayOptions(Map<String, PluginDisplayOptions> pluginDisplayOptions) {
- this.pluginDisplayOptions = pluginDisplayOptions;
- }
-
}
+ @Getter
+ @Setter
+ @ToString
public static class PluginDisplayOptions {
-
private String displayName;
private List<String> displayContext;
private List<String> displayRoles;
-
- public String getDisplayName() {
- return displayName;
- }
-
- public void setDisplayName(String displayName) {
- this.displayName = displayName;
- }
-
- public List<String> getDisplayContext() {
- return displayContext;
- }
-
- public void setDisplayContext(List<String> displayContext) {
- this.displayContext = displayContext;
- }
-
- public List<String> getDisplayRoles() {
- return displayRoles;
- }
-
- public void setDisplayRoles(List<String> displayRoles) {
- this.displayRoles = displayRoles;
- }
-
- @Override
- public String toString() {
- return "PluginDisplayOptions["
- + "displayName='" + displayName
- + ", displayContext=" + displayContext
- + ", displayRoles=" + displayRoles
- + ']';
- }
}
- @Override
- public String toString() {
- return "PluginsConfiguration[" + "pluginsList=" + pluginsList + ", connectionTimeout=" + connectionTimeout + ']';
- }
}
diff --git a/docs/configuration.rst b/docs/configuration.rst
index 59f571d6ca..5156f6ee95 100644
--- a/docs/configuration.rst
+++ b/docs/configuration.rst
@@ -1382,6 +1382,10 @@ FE-plugins-configuration.yaml
# definition of the plugins that exist in sdc
# we have a pre-defined list of plugins that are connected to the system.
# the plugins define where they are shown, to whom and on what elements
+ # in addition, the catalog can proxy to the plugin as well if the following 2 keys are set:
+ # pluginFeProxyUrl - the pattern of the url that should be proxied after the sdc1/feProxy/plugin prefix
+ # pluginProxyRedirectPath - the redirect path to the plugin (full url including protool/host and port)
+
pluginsList:
# the DCAE-DS is the SDC monitoring design studio this entry defines there use as part of the service level context
- pluginId: DCAED
@@ -1414,6 +1418,8 @@ FE-plugins-configuration.yaml
- pluginId: WORKFLOW
pluginDiscoveryUrl: <%= @workflow_discovery_url %>
pluginSourceUrl: <%= @workflow_source_url %>
+ pluginFeProxyUrl: <%= @workflow_fe_proxy_url %>
+ pluginProxyRedirectPath: <%= @workflow_redirect_path %>
pluginStateUrl: "workflowDesigner"
pluginDisplayOptions:
tab:
diff --git a/sdc-os-chef/environments/plugins-configuration.yaml b/sdc-os-chef/environments/plugins-configuration.yaml
index 21de74636f..1135cbb54e 100644
--- a/sdc-os-chef/environments/plugins-configuration.yaml
+++ b/sdc-os-chef/environments/plugins-configuration.yaml
@@ -19,6 +19,8 @@ pluginsList:
- pluginId: WORKFLOW
pluginDiscoveryUrl: <%= @workflow_discovery_url %>
pluginSourceUrl: <%= @workflow_source_url %>
+ pluginFeProxyUrl: <%= @workflow_fe_proxy_url %>
+ pluginProxyRedirectPath: <%= @workflow_redirect_path %>
pluginStateUrl: "workflowDesigner"
pluginDisplayOptions:
tab:
diff --git a/sdc-os-chef/kubernetes/sdc/templates/configmaps/sdc-environment-configmap.yaml b/sdc-os-chef/kubernetes/sdc/templates/configmaps/sdc-environment-configmap.yaml
index 0eb5289c64..e332729526 100644
--- a/sdc-os-chef/kubernetes/sdc/templates/configmaps/sdc-environment-configmap.yaml
+++ b/sdc-os-chef/kubernetes/sdc/templates/configmaps/sdc-environment-configmap.yaml
@@ -57,7 +57,9 @@ data:
},
"WORKFLOW": {
"workflow_discovery_url": "10.0.2.15",
- "workflow_source_url": "10.0.2.15"
+ "workflow_source_url": "10.0.2.15",
+ "workflow_fe_proxy_url": "10.0.2.15",
+ "workflow_redirect_path": "/wf"
}
},
"VnfRepo": {