X-Git-Url: https://gerrit.onap.org/r/gitweb?p=dmaap%2Fdatarouter.git;a=blobdiff_plain;f=datarouter-prov%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fdmaap%2Fdatarouter%2Fprovisioning%2FProxyServlet.java;h=d84e4925356fc02637d9c938281952175e0c18df;hp=8d6bfcf02adab62e74d68cda7ee556cb89325b0f;hb=68a9ca240970fceaf12bbe91b7bad8e1d98ecd93;hpb=ce73ff52ce9aafb07d1aa4c28405328d83c816b9 diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProxyServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProxyServlet.java index 8d6bfcf0..d84e4925 100755 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProxyServlet.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProxyServlet.java @@ -24,6 +24,8 @@ package org.onap.dmaap.datarouter.provisioning; +import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.sendResponseError; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -34,7 +36,6 @@ import java.security.KeyStore; import java.security.KeyStoreException; import java.util.Collections; import java.util.List; -import java.util.Properties; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -51,7 +52,8 @@ import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.entity.BasicHttpEntity; import org.apache.http.impl.client.AbstractHttpClient; import org.apache.http.impl.client.DefaultHttpClient; -import org.onap.dmaap.datarouter.provisioning.utils.DB; +import org.onap.dmaap.datarouter.provisioning.utils.AafPropsUtils; +import org.onap.dmaap.datarouter.provisioning.utils.SynchronizerTask; import org.onap.dmaap.datarouter.provisioning.utils.URLUtilities; /** @@ -63,6 +65,7 @@ import org.onap.dmaap.datarouter.provisioning.utils.URLUtilities; * @version $Id: ProxyServlet.java,v 1.3 2014/03/24 18:47:10 eby Exp $ */ @SuppressWarnings("serial") + public class ProxyServlet extends BaseServlet { private boolean inited = false; @@ -77,29 +80,28 @@ public class ProxyServlet extends BaseServlet { super.init(config); try { // Set up keystore - Properties props = (new DB()).getProperties(); - String type = props.getProperty(Main.KEYSTORE_TYPE_PROPERTY, "jks"); - String store = props.getProperty(Main.KEYSTORE_PATH_PROPERTY); - String pass = props.getProperty(Main.KEYSTORE_PASSWORD_PROPERTY); + String type = AafPropsUtils.KEYSTORE_TYPE_PROPERTY; + String store = ProvRunner.getAafPropsUtils().getKeystorePathProperty(); + String pass = ProvRunner.getAafPropsUtils().getKeystorePassProperty(); KeyStore keyStore = readStore(store, pass, type); - - store = props.getProperty(Main.TRUSTSTORE_PATH_PROPERTY); - pass = props.getProperty(Main.TRUSTSTORE_PASSWORD_PROPERTY); + // Set up truststore + store = ProvRunner.getAafPropsUtils().getTruststorePathProperty(); + pass = ProvRunner.getAafPropsUtils().getTruststorePassProperty(); if (store == null || store.length() == 0) { - store = Main.DEFAULT_TRUSTSTORE; + store = AafPropsUtils.DEFAULT_TRUSTSTORE; pass = "changeit"; } - KeyStore trustStore = readStore(store, pass, KeyStore.getDefaultType()); + KeyStore trustStore = readStore(store, pass, AafPropsUtils.TRUESTSTORE_TYPE_PROPERTY); // We are connecting with the node name, but the certificate will have the CNAME // So we need to accept a non-matching certificate name SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore, - props.getProperty(Main.KEYSTORE_PASSWORD_PROPERTY), trustStore); + ProvRunner.getAafPropsUtils().getKeystorePassProperty(), trustStore); socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); sch = new Scheme("https", 443, socketFactory); inited = true; } catch (Exception e) { - e.printStackTrace(); + intlogger.error("ProxyServlet.init: " + e.getMessage(), e); } intlogger.info("ProxyServlet: inited = " + inited); } @@ -109,10 +111,9 @@ public class ProxyServlet extends BaseServlet { try (FileInputStream instream = new FileInputStream(new File(store))) { ks.load(instream, pass.toCharArray()); } catch (FileNotFoundException fileNotFoundException) { - System.err.println("ProxyServlet: " + fileNotFoundException); - fileNotFoundException.printStackTrace(); + intlogger.error("ProxyServlet.readStore: " + fileNotFoundException.getMessage(), fileNotFoundException); } catch (Exception x) { - System.err.println("READING TRUSTSTORE: " + x); + intlogger.error("READING TRUSTSTORE: " + x); } return ks; } @@ -124,12 +125,12 @@ public class ProxyServlet extends BaseServlet { * @param req the HTTP request * @return true or false */ - protected boolean isProxyOK(final HttpServletRequest req) { - String t = req.getQueryString(); - if (t != null) { - t = t.replaceAll("&", "&"); - for (String s : t.split("&")) { - if (s.equals("noproxy") || s.startsWith("noproxy=")) { + boolean isProxyOK(final HttpServletRequest req) { + String str = req.getQueryString(); + if (str != null) { + str = str.replaceAll("&", "&"); + for (String s : str.split("&")) { + if ("noproxy".equals(s) || s.startsWith("noproxy=")) { return false; } } @@ -143,16 +144,16 @@ public class ProxyServlet extends BaseServlet { * * @return true if this server is the standby (and hence a proxy server). */ - public boolean isProxyServer() { + boolean isProxyServer() { SynchronizerTask st = SynchronizerTask.getSynchronizer(); - return st.getState() == SynchronizerTask.STANDBY; + return st.getPodState() == SynchronizerTask.STANDBY_POD; } /** * Issue a proxy DELETE to the active provisioning server. */ @Override - public void doDelete(HttpServletRequest req, HttpServletResponse resp) throws IOException { + public void doDelete(HttpServletRequest req, HttpServletResponse resp) { doProxy(req, resp, "DELETE"); } @@ -160,7 +161,7 @@ public class ProxyServlet extends BaseServlet { * Issue a proxy GET to the active provisioning server. */ @Override - public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + public void doGet(HttpServletRequest req, HttpServletResponse resp) { doProxy(req, resp, "GET"); } @@ -168,7 +169,7 @@ public class ProxyServlet extends BaseServlet { * Issue a proxy PUT to the active provisioning server. */ @Override - public void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException { + public void doPut(HttpServletRequest req, HttpServletResponse resp) { doProxy(req, resp, "PUT"); } @@ -176,7 +177,7 @@ public class ProxyServlet extends BaseServlet { * Issue a proxy POST to the active provisioning server. */ @Override - public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { + public void doPost(HttpServletRequest req, HttpServletResponse resp) { doProxy(req, resp, "POST"); } @@ -186,7 +187,7 @@ public class ProxyServlet extends BaseServlet { * * @return true if the proxy succeeded */ - public boolean doGetWithFallback(HttpServletRequest req, HttpServletResponse resp) throws IOException { + boolean doGetWithFallback(HttpServletRequest req, HttpServletResponse resp) { boolean rv = false; if (inited) { String url = buildUrl(req); @@ -200,24 +201,17 @@ public class ProxyServlet extends BaseServlet { copyRequestHeaders(req, proxy); // Execute the request - HttpResponse pxy_response = httpclient.execute(proxy); + HttpResponse pxyResponse = httpclient.execute(proxy); // Get response headers and body - int code = pxy_response.getStatusLine().getStatusCode(); + int code = pxyResponse.getStatusLine().getStatusCode(); resp.setStatus(code); - copyResponseHeaders(pxy_response, resp); - - HttpEntity entity = pxy_response.getEntity(); - if (entity != null) { - InputStream in = entity.getContent(); - IOUtils.copy(in, resp.getOutputStream()); - in.close(); - } + copyResponseHeaders(pxyResponse, resp); + copyEntityContent(pxyResponse, resp); rv = true; } catch (IOException e) { - System.err.println("ProxyServlet: " + e); - e.printStackTrace(); + intlogger.error("ProxyServlet.doGetWithFallback: " + e.getMessage(), e); } finally { proxy.releaseConnection(); httpclient.getConnectionManager().shutdown(); @@ -229,7 +223,7 @@ public class ProxyServlet extends BaseServlet { return rv; } - private void doProxy(HttpServletRequest req, HttpServletResponse resp, final String method) throws IOException { + private void doProxy(HttpServletRequest req, HttpServletResponse resp, final String method) { if (inited && isProxyServer()) { String url = buildUrl(req); intlogger.info("ProxyServlet: proxying " + method + " " + url); @@ -240,31 +234,20 @@ public class ProxyServlet extends BaseServlet { // Copy request headers and request body copyRequestHeaders(req, proxy); - if (method.equals("POST") || method.equals("PUT")) { - BasicHttpEntity body = new BasicHttpEntity(); - body.setContent(req.getInputStream()); - body.setContentLength(-1); // -1 = unknown - proxy.setEntity(body); - } + + handlePutOrPost(req, method, proxy); // Execute the request - HttpResponse pxy_response = httpclient.execute(proxy); + HttpResponse pxyResponse = httpclient.execute(proxy); // Get response headers and body - int code = pxy_response.getStatusLine().getStatusCode(); + int code = pxyResponse.getStatusLine().getStatusCode(); resp.setStatus(code); - copyResponseHeaders(pxy_response, resp); - - HttpEntity entity = pxy_response.getEntity(); - if (entity != null) { - InputStream in = entity.getContent(); - IOUtils.copy(in, resp.getOutputStream()); - in.close(); - } + copyResponseHeaders(pxyResponse, resp); + copyEntityContent(pxyResponse, resp); } catch (IOException e) { - intlogger.warn("ProxyServlet: " + e); - resp.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); - e.printStackTrace(); + intlogger.warn("ProxyServlet.doProxy: " + e.getMessage(), e); + sendResponseError(resp, HttpServletResponse.SC_SERVICE_UNAVAILABLE, "", intlogger); } finally { proxy.releaseConnection(); httpclient.getConnectionManager().shutdown(); @@ -272,7 +255,16 @@ public class ProxyServlet extends BaseServlet { } } else { intlogger.warn("ProxyServlet: proxy disabled"); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + sendResponseError(resp, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, DB_PROBLEM_MSG, intlogger); + } + } + + private void handlePutOrPost(HttpServletRequest req, String method, ProxyHttpRequest proxy) throws IOException { + if ("POST".equals(method) || "PUT".equals(method)) { + BasicHttpEntity body = new BasicHttpEntity(); + body.setContent(req.getInputStream()); + body.setContentLength(-1); // -1 = unknown + proxy.setEntity(body); } } @@ -280,38 +272,48 @@ public class ProxyServlet extends BaseServlet { StringBuilder sb = new StringBuilder("https://"); sb.append(URLUtilities.getPeerPodName()); sb.append(req.getRequestURI()); - String q = req.getQueryString(); - if (q != null) { - sb.append("?").append(q); + String query = req.getQueryString(); + if (query != null) { + sb.append("?").append(query); } return sb.toString(); } private void copyRequestHeaders(HttpServletRequest from, HttpRequestBase to) { - @SuppressWarnings("unchecked") List list = Collections.list(from.getHeaderNames()); for (String name : list) { // Proxy code will add this one - if (!name.equalsIgnoreCase("Content-Length")) { + if (!"Content-Length".equalsIgnoreCase(name)) { to.addHeader(name, from.getHeader(name)); } } } - private void copyResponseHeaders(HttpResponse from, HttpServletResponse to) { + void copyResponseHeaders(HttpResponse from, HttpServletResponse to) { for (Header hdr : from.getAllHeaders()) { // Don't copy Date: our Jetty will add another Date header - if (!hdr.getName().equals("Date")) { + if (!"Date".equals(hdr.getName())) { to.addHeader(hdr.getName(), hdr.getValue()); } } } - public class ProxyHttpRequest extends HttpEntityEnclosingRequestBase { + void copyEntityContent(HttpResponse pxyResponse, HttpServletResponse resp) { + HttpEntity entity = pxyResponse.getEntity(); + if (entity != null) { + try (InputStream in = entity.getContent()) { + IOUtils.copy(in, resp.getOutputStream()); + } catch (Exception e) { + intlogger.error("ProxyServlet.copyEntityContent: " + e.getMessage(), e); + } + } + } + + public static class ProxyHttpRequest extends HttpEntityEnclosingRequestBase { private final String method; - public ProxyHttpRequest(final String method, final String uri) { + ProxyHttpRequest(final String method, final String uri) { super(); this.method = method; setURI(URI.create(uri));