aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-fe/src
diff options
context:
space:
mode:
authorilanap <ilanap@amdocs.com>2019-11-28 11:13:24 +0200
committerOren Kleks <oren.kleks@amdocs.com>2019-12-05 09:19:40 +0000
commitee4c4d72ed2118ea44dd5d83e1cf1677b6ebb03c (patch)
treea1558696a8576d1e1d1e0665ebefec81398e3be5 /catalog-fe/src
parentcc8f8c056b99d530d48190b67846be3705a4225f (diff)
Add Option to proxy to plugins
Added option to proxy the plugins throught the catalog proxy. Remove hardcoded redirect to workflow and added to the plugin configuration. Issue-ID: SDC-2691 Signed-off-by: ilanap <ilanap@amdocs.com> Change-Id: Ica479ff00e1a8c281b9280b5495ac022172775c4 Signed-off-by: ilanap <ilanap@amdocs.com>
Diffstat (limited to 'catalog-fe/src')
-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
2 files changed, 102 insertions, 39 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);
+
}
/**