aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-fe
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
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')
-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);
+
}
/**