From 3308ca9554a53ccfdb112ce3a15957005a42021c Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 12 May 2016 18:31:05 +0000 Subject: [PATCH] Fix NodeHttp initialization git-svn-id: https://svn.argeo.org/commons/trunk@8912 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../org/argeo/cms/internal/kernel/Kernel.java | 13 +++++----- .../argeo/cms/internal/kernel/NodeHttp.java | 25 ++++++++++--------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/Kernel.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/Kernel.java index 5ad8da65a..c6c31ea13 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/Kernel.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/Kernel.java @@ -188,11 +188,12 @@ final class Kernel implements KernelHeader, KernelConstants, ServiceListener { // HTTP initWebServer(conf); -// ServiceReference sr = bc.getServiceReference(ExtendedHttpService.class); -// if (sr != null) -// addHttpService(sr); -// else -// log.warn("No http service found"); + // ServiceReference sr = + // bc.getServiceReference(ExtendedHttpService.class); + // if (sr != null) + // addHttpService(sr); + // else + // log.warn("No http service found"); // Initialise services initTransactionManager(); @@ -496,7 +497,7 @@ final class Kernel implements KernelHeader, KernelConstants, ServiceListener { Object httpPort = sr.getProperty("http.port"); Object httpsPort = sr.getProperty("https.port"); dataHttp = new DataHttp(httpService); - nodeHttp = new NodeHttp(httpService, repository); + nodeHttp = new NodeHttp(httpService, bc); if (log.isDebugEnabled()) log.debug(httpPortsMsg(httpPort, httpsPort)); } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java index de6359839..201f765ca 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java @@ -10,6 +10,7 @@ import java.io.PrintWriter; import java.security.PrivilegedExceptionAction; import java.security.cert.X509Certificate; import java.util.Calendar; +import java.util.Collection; import java.util.Enumeration; import javax.jcr.Node; @@ -32,6 +33,8 @@ import org.argeo.cms.util.CmsUtils; import org.argeo.jcr.ArgeoJcrConstants; import org.argeo.jcr.JcrUtils; import org.eclipse.equinox.http.servlet.ExtendedHttpService; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; /** * Intercepts and enriches http access, mainly focusing on security and @@ -46,16 +49,16 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { // private final DoSFilter dosFilter; // private final QoSFilter qosFilter; - private Repository repository; + private BundleContext bc; - NodeHttp(ExtendedHttpService httpService, Repository node) { - this.repository = node; + NodeHttp(ExtendedHttpService httpService, BundleContext bc) { + this.bc = bc; // rootFilter = new RootFilter(); // dosFilter = new CustomDosFilter(); // qosFilter = new QoSFilter(); try { - httpService.registerServlet("/!", new LinkServlet(repository), null, null); + httpService.registerServlet("/!", new LinkServlet(), null, null); httpService.registerServlet("/robots.txt", new RobotServlet(), null, null); } catch (Exception e) { throw new CmsException("Cannot register filters", e); @@ -65,20 +68,15 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { public void destroy() { } - static class LinkServlet extends HttpServlet { + class LinkServlet extends HttpServlet { private static final long serialVersionUID = 3749990143146845708L; - private final Repository repository; - - public LinkServlet(Repository repository) { - this.repository = repository; - } @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getPathInfo(); String userAgent = request.getHeader("User-Agent").toLowerCase(); - boolean isBot = false; + boolean isBot = true; boolean isCompatibleBrowser = false; if (userAgent.contains("bot") || userAgent.contains("facebook") || userAgent.contains("twitter")) { isBot = true; @@ -118,6 +116,9 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { @Override public Session run() throws Exception { + Collection> srs = bc.getServiceReferences(Repository.class, "(" + + ArgeoJcrConstants.JCR_REPOSITORY_ALIAS + "=" + ArgeoJcrConstants.ALIAS_NODE + ")"); + Repository repository = bc.getService(srs.iterator().next()); return repository.login(); } @@ -176,7 +177,7 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { * escaping-html-in-java (+ escaping '). TODO Use * org.apache.commons.lang.StringEscapeUtils */ - private static String escapeHTML(String s) { + private String escapeHTML(String s) { StringBuilder out = new StringBuilder(Math.max(16, s.length())); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); -- 2.30.2