Fix NodeHttp initialization
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 12 May 2016 18:31:05 +0000 (18:31 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 12 May 2016 18:31:05 +0000 (18:31 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@8912 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.cms/src/org/argeo/cms/internal/kernel/Kernel.java
org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java

index 5ad8da65a8baec4bcac9bf2292866765212a8f4b..c6c31ea13a14015dacaea1987828df34561d8127 100644 (file)
@@ -188,11 +188,12 @@ final class Kernel implements KernelHeader, KernelConstants, ServiceListener {
 
                // HTTP
                initWebServer(conf);
-//             ServiceReference<ExtendedHttpService> sr = bc.getServiceReference(ExtendedHttpService.class);
-//             if (sr != null)
-//                     addHttpService(sr);
-//             else
-//                     log.warn("No http service found");
+               // ServiceReference<ExtendedHttpService> 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));
        }
index de635983999998a5bcb2e6ad02d7ebad0f259d8b..201f765ca6ec78e6d38be35ce13af3901fab0304 100644 (file)
@@ -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<ServiceReference<Repository>> 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);