X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FNodeHttp.java;h=bfa1f2f0aebb3235493ae7f2bbd41340e9a5232e;hb=b155c2b5a08499dcb6860769ac9521224fbf4d5d;hp=6e3ef32462b234c3abaedde5ae6ebfc0a9414311;hpb=56db62a204d7c371f4e496f9cbe45efe1d9a563a;p=lgpl%2Fargeo-commons.git 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 6e3ef3246..bfa1f2f0a 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 @@ -1,6 +1,7 @@ package org.argeo.cms.internal.kernel; import static javax.jcr.Property.JCR_DESCRIPTION; +import static javax.jcr.Property.JCR_LAST_MODIFIED; import static javax.jcr.Property.JCR_TITLE; import static org.argeo.cms.CmsTypes.CMS_IMAGE; @@ -8,6 +9,7 @@ import java.io.IOException; import java.io.PrintWriter; import java.security.PrivilegedExceptionAction; import java.security.cert.X509Certificate; +import java.util.Calendar; import java.util.Enumeration; import javax.jcr.Node; @@ -55,6 +57,8 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { try { httpService.registerServlet("/!", new LinkServlet(repository), null, null); + httpService.registerServlet("/robots.txt", new RobotServlet(), + null, null); } catch (Exception e) { throw new CmsException("Cannot register filters", e); } @@ -134,6 +138,8 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { JCR_TITLE).getString() : node.getName(); String desc = node.hasProperty(JCR_DESCRIPTION) ? node .getProperty(JCR_DESCRIPTION).getString() : null; + Calendar lastUpdate = node.hasProperty(JCR_LAST_MODIFIED) ? node + .getProperty(JCR_LAST_MODIFIED).getDate() : null; String url = CmsUtils.getCanonicalUrl(node, request); String imgUrl = null; for (NodeIterator it = node.getNodes(); it.hasNext();) { @@ -146,11 +152,16 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { buf.append(""); writeMeta(buf, "og:title", title); writeMeta(buf, "og:type", "website"); + buf.append(""); + buf.append(""); writeMeta(buf, "og:url", url); if (desc != null) writeMeta(buf, "og:description", desc); if (imgUrl != null) writeMeta(buf, "og:image", imgUrl); + if (lastUpdate != null) + writeMeta(buf, "og:updated_time", + Long.toString(lastUpdate.getTime().getTime())); buf.append(""); buf.append(""); buf.append( @@ -162,6 +173,8 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { buf.append(""); buf.append(""); writer.print(buf.toString()); + + response.setHeader("Content-Type", "text/html"); writer.flush(); } catch (Exception e) { throw new CmsException("Cannot write canonical answer", e); @@ -194,6 +207,22 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { } } + class RobotServlet extends HttpServlet { + private static final long serialVersionUID = 7935661175336419089L; + + @Override + protected void service(HttpServletRequest request, + HttpServletResponse response) throws ServletException, + IOException { + PrintWriter writer = response.getWriter(); + writer.append("User-agent: *\n"); + writer.append("Disallow:\n"); + response.setHeader("Content-Type", "text/plain"); + writer.flush(); + } + + } + /** Intercepts all requests. Authenticates. */ class RootFilter extends HttpFilter {