diff --git a/nbactions.xml b/nbactions.xml new file mode 100644 index 0000000..8190b10 --- /dev/null +++ b/nbactions.xml @@ -0,0 +1,14 @@ + + + + CUSTOM-install skip tests + install skip tests + + clean + install + + + true + + + diff --git a/pom.xml b/pom.xml index 01017d3..e90d7d8 100644 --- a/pom.xml +++ b/pom.xml @@ -1,9 +1,9 @@ 4.0.0 - com.github.greengerong + com.github.greengerong.wesbank prerender-java - 1.6.5-SNAPSHOT + 1.6.5 jar prerender-java @@ -75,6 +75,11 @@ ${servlet-api.version} provided + + za.wesbank + wol-properties + 1.0.9 + org.apache.httpcomponents httpclient diff --git a/src/main/java/com/github/greengerong/PrerenderSeoService.java b/src/main/java/com/github/greengerong/PrerenderSeoService.java index 043a4a9..3cdeea7 100644 --- a/src/main/java/com/github/greengerong/PrerenderSeoService.java +++ b/src/main/java/com/github/greengerong/PrerenderSeoService.java @@ -28,9 +28,11 @@ import java.util.regex.Pattern; import static com.google.common.collect.FluentIterable.from; +import java.util.concurrent.ExecutionException; import static org.apache.commons.lang.StringUtils.isNotBlank; import static org.apache.http.HttpHeaders.CONTENT_LENGTH; import static org.apache.http.HttpHeaders.HOST; +import za.wesbank.wbo.service.properties.PropertiesLoader; public class PrerenderSeoService { private final static Logger log = LoggerFactory.getLogger(PrerenderSeoService.class); @@ -69,6 +71,7 @@ public void destroy() { } public boolean prerenderIfEligible(HttpServletRequest servletRequest, HttpServletResponse servletResponse) { + log.debug("PrerendderSEO: In prerender if eligible"); try { if (handlePrerender(servletRequest, servletResponse)) { return true; @@ -80,13 +83,15 @@ public boolean prerenderIfEligible(HttpServletRequest servletRequest, HttpServle } private boolean handlePrerender(HttpServletRequest servletRequest, HttpServletResponse servletResponse) - throws URISyntaxException, IOException { + throws URISyntaxException, IOException, ExecutionException, Exception { if (shouldShowPrerenderedPage(servletRequest)) { + log.debug("PrerendderSEO: In should show prerendered page = true"); this.preRenderEventHandler = prerenderConfig.getEventHandler(); if (beforeRender(servletRequest, servletResponse) || proxyPrerenderedPageResponse(servletRequest, servletResponse)) { return true; } } + log.debug("PrerendderSEO: In prerender if eligible = false"); return false; } @@ -95,15 +100,15 @@ private boolean shouldShowPrerenderedPage(HttpServletRequest request) throws URI final String url = getRequestURL(request); final String referer = request.getHeader("Referer"); - log.trace(String.format("checking request for %s from User-Agent %s and referer %s", url, userAgent, referer)); + log.debug(String.format("checking request for %s from User-Agent %s and referer %s", url, userAgent, referer)); if (!HttpGet.METHOD_NAME.equals(request.getMethod())) { - log.trace("Request is not HTTP GET; intercept: no"); + log.debug("Request is not HTTP GET; intercept: no"); return false; } if (isInResources(url)) { - log.trace("request is for a (static) resource; intercept: no"); + log.debug("request is for a (static) resource; intercept: no"); return false; } @@ -114,32 +119,33 @@ private boolean shouldShowPrerenderedPage(HttpServletRequest request) throws URI final List whiteList = prerenderConfig.getWhitelist(); if (whiteList != null && !isInWhiteList(url, whiteList)) { - log.trace("Whitelist is enabled, but this request is not listed; intercept: no"); + log.debug("Whitelist is enabled, but this request is not listed; intercept: no"); return false; } final List blacklist = prerenderConfig.getBlacklist(); if (blacklist != null && isInBlackList(url, referer, blacklist)) { - log.trace("Blacklist is enabled, and this request is listed; intercept: no"); + log.debug("Blacklist is enabled, and this request is listed; intercept: no"); return false; } if (hasEscapedFragment(request)) { - log.trace("Request Has _escaped_fragment_; intercept: yes"); + log.debug("Request Has _escaped_fragment_; intercept: yes"); return true; } if (StringUtils.isBlank(userAgent)) { - log.trace("Request has blank userAgent; intercept: no"); + log.debug("Request has blank userAgent; intercept: no"); return false; } if (!isInSearchUserAgent(userAgent)) { - log.trace("Request User-Agent is not a search bot; intercept: no"); + log.debug("Request User-Agent is not a search bot; intercept: no"); return false; } - log.trace(String.format("Defaulting to request intercept(user-agent=%s): yes", userAgent)); + log.debug(String.format("Defaulting to request intercept(user-agent=%s): yes", userAgent)); + log.debug("returning true for prerender for request: " + url); return true; } @@ -197,13 +203,16 @@ private String getRequestURL(HttpServletRequest request) { return request.getRequestURL().toString(); } - private String getApiUrl(String url) { - String prerenderServiceUrl = prerenderConfig.getPrerenderServiceUrl(); + private String getApiUrl(String url) throws ExecutionException { + //String prerenderServiceUrl = prerenderConfig.getPrerenderServiceUrl(); + String prerenderServiceUrl = PropertiesLoader.CONFIG_PARAMS_MAP.get("PRERENDERURL"); if (!prerenderServiceUrl.endsWith("/")) { prerenderServiceUrl += "/"; } - return prerenderServiceUrl + url; + return prerenderServiceUrl + url.replaceFirst("http", "https").replaceFirst(":80", ""); } + + /** * Copy proxied response headers back to the servlet client. @@ -320,7 +329,9 @@ public boolean apply(String regex) { } private boolean beforeRender(HttpServletRequest request, HttpServletResponse response) throws IOException { + log.debug("PrerendderSEO: In before render"); if (preRenderEventHandler != null) { + log.debug("PrerendderSEO: In before render prerendereventhandler is not null"); final String html = preRenderEventHandler.beforeRender(request); if (isNotBlank(html)) { final PrintWriter writer = response.getWriter(); @@ -330,12 +341,14 @@ private boolean beforeRender(HttpServletRequest request, HttpServletResponse res return true; } } + log.debug("PrerendderSEO: In before render prerendereventhandler is null"); return false; } private boolean proxyPrerenderedPageResponse(HttpServletRequest request, HttpServletResponse response) - throws IOException, URISyntaxException { + throws IOException, URISyntaxException, ExecutionException, Exception { final String apiUrl = getApiUrl(getFullUrl(request)); + log.debug("Full API URL : " + apiUrl); log.trace(String.format("Prerender proxy will send request to:%s", apiUrl)); final HttpGet getMethod = getHttpGet(apiUrl); copyRequestHeaders(request, getMethod); @@ -350,7 +363,12 @@ private boolean proxyPrerenderedPageResponse(HttpServletRequest request, HttpSer html = afterRender(request, response, prerenderServerResponse, html); responseEntity(html, response); return true; - } finally { + } + catch(Exception e) { + log.debug("Prerender : Error occured during prefetch " ,e); + throw e; + } + finally { closeQuietly(prerenderServerResponse); } }