You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ag...@apache.org on 2006/07/12 03:14:11 UTC
svn commit: r421067 - in
/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering:
WeblogRequestMapper.java servlets/TrackbackServlet.java
util/WeblogTrackbackRequest.java
Author: agilliland
Date: Tue Jul 11 18:14:10 2006
New Revision: 421067
URL: http://svn.apache.org/viewvc?rev=421067&view=rev
Log:
adding trackback support under new url structure.
- added parsed WeblogTrackbackRequest object.
- updated TrackbackServlet to use new parsed trackback request class and rip out RollerRequest.
- updated weblog request mapper to map requests to trackbacks.
Added:
incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogTrackbackRequest.java
Modified:
incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/WeblogRequestMapper.java
incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/TrackbackServlet.java
Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/WeblogRequestMapper.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/WeblogRequestMapper.java?rev=421067&r1=421066&r2=421067&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/WeblogRequestMapper.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/WeblogRequestMapper.java Tue Jul 11 18:14:10 2006
@@ -155,8 +155,8 @@
}
// calculate forward url
- String forwardUrl = calculateForwardUrl(weblogHandle, weblogLocale,
- weblogRequestContext, weblogRequestData, request.getMethod());
+ String forwardUrl = calculateForwardUrl(request, weblogHandle, weblogLocale,
+ weblogRequestContext, weblogRequestData);
// if we don't have a forward url then the request was invalid somehow
if(forwardUrl == null) {
@@ -179,27 +179,45 @@
*
* handle is always assumed valid, all other params may be null.
*/
- private String calculateForwardUrl(String handle, String locale,
- String context, String data,
- String method) {
+ private String calculateForwardUrl(HttpServletRequest request,
+ String handle, String locale,
+ String context, String data) {
- log.debug(handle+","+locale+","+context+","+data+","+method);
+ log.debug(handle+","+locale+","+context+","+data);
StringBuffer forwardUrl = new StringBuffer();
// POST urls, like comment and trackback servlets
- if("POST".equals(method)) {
+ if("POST".equals(request.getMethod())) {
+ // posting to permalink, this means comment or trackback
if(context.equals("entry")) {
- // TODO 3.0: need to figure out how to route requests to trackback servlet
- forwardUrl.append(COMMENT_SERVLET);
- forwardUrl.append("/");
- forwardUrl.append(handle);
- forwardUrl.append("/");
- forwardUrl.append(context);
- if(data != null) {
+ // trackback requests are required to have an "excerpt" param
+ if(request.getParameter("excerpt") != null) {
+
+ forwardUrl.append(TRACKBACK_SERVLET);
forwardUrl.append("/");
- forwardUrl.append(data);
+ forwardUrl.append(handle);
+ forwardUrl.append("/");
+ forwardUrl.append(context);
+ if(data != null) {
+ forwardUrl.append("/");
+ forwardUrl.append(data);
+ }
+
+ // comment requests are required to have a "content" param
+ } else if(request.getParameter("content") != null) {
+
+ forwardUrl.append(COMMENT_SERVLET);
+ forwardUrl.append("/");
+ forwardUrl.append(handle);
+ forwardUrl.append("/");
+ forwardUrl.append(context);
+ if(data != null) {
+ forwardUrl.append("/");
+ forwardUrl.append(data);
+ }
}
+
} else {
// someone posting data where they aren't supposed to
return null;
Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/TrackbackServlet.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/TrackbackServlet.java?rev=421067&r1=421066&r2=421067&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/TrackbackServlet.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/TrackbackServlet.java Tue Jul 11 18:14:10 2006
@@ -20,7 +20,6 @@
import java.io.IOException;
import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;
import java.util.Date;
import javax.servlet.ServletException;
@@ -29,14 +28,16 @@
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.roller.RollerException;
import org.apache.roller.config.RollerRuntimeConfig;
import org.apache.roller.model.RollerFactory;
+import org.apache.roller.model.UserManager;
import org.apache.roller.model.WeblogManager;
import org.apache.roller.pojos.CommentData;
import org.apache.roller.pojos.WeblogEntryData;
import org.apache.roller.pojos.WebsiteData;
import org.apache.roller.ui.core.RollerContext;
-import org.apache.roller.ui.core.RollerRequest;
+import org.apache.roller.ui.rendering.util.WeblogTrackbackRequest;
import org.apache.roller.util.LinkbackExtractor;
import org.apache.roller.util.SpamChecker;
import org.apache.roller.util.cache.CacheManager;
@@ -45,7 +46,7 @@
/**
* Roller's Trackback server implementation. POSTing to this Servlet will add a
- * Trackback to a Weblog Entrty. For more info on Trackback, read the spec:
+ * Trackback to a Weblog Entry. For more info on Trackback, read the spec:
* <a href="http://www.movabletype.org/docs/mttrackback.html>MT Trackback</a>.
*
* @web.servlet name="TrackbackServlet"
@@ -55,18 +56,6 @@
private static Log logger = LogFactory.getLog(TrackbackServlet.class);
- /** Request parameter for the trackback "title" */
- private static final String TRACKBACK_TITLE_PARAM = "title";
-
- /** Request parameter for the trackback "excerpt" */
- private static final String TRACKBACK_EXCERPT_PARAM = "excerpt";
-
- /** Request parameter for the trackback "url" */
- private static final String TRACKBACK_URL_PARAM = "url";
-
- /** Request parameter for the trackback "blog_name" */
- private static final String TRACKBACK_BLOG_NAME_PARAM = "blog_name";
-
/**
* Handle incoming http GET requests.
@@ -91,29 +80,51 @@
String error = null;
PrintWriter pw = response.getWriter();
- String url = request.getParameter(TRACKBACK_URL_PARAM);
- String title = request.getParameter(TRACKBACK_TITLE_PARAM);
- String excerpt = request.getParameter(TRACKBACK_EXCERPT_PARAM);
- String blogName = request.getParameter(TRACKBACK_BLOG_NAME_PARAM);
-
- if ((title == null) || "".equals(title)) {
- title = url;
- }
-
- if (excerpt == null) {
- excerpt = "";
- } else {
- if (excerpt.length() >= 255) {
- excerpt = excerpt.substring(0, 252);
- excerpt += "...";
- }
- }
-
+ WebsiteData weblog = null;
+ WeblogEntryData entry = null;
+ WeblogTrackbackRequest trackbackRequest = null;
if(!RollerRuntimeConfig.getBooleanProperty("users.trackbacks.enabled")) {
error = "Trackbacks are disabled for this site";
- } else if (title==null || url==null || excerpt==null || blogName==null) {
- error = "title, url, excerpt, and blog_name not specified.";
+ } else {
+
+ try {
+ trackbackRequest = new WeblogTrackbackRequest(request);
+
+ if((trackbackRequest.getTitle() == null) ||
+ "".equals(trackbackRequest.getTitle())) {
+ trackbackRequest.setTitle(trackbackRequest.getUrl());
+ }
+
+ if(trackbackRequest.getExcerpt() == null) {
+ trackbackRequest.setExcerpt("");
+ } else if(trackbackRequest.getExcerpt().length() >= 255) {
+ trackbackRequest.setExcerpt(trackbackRequest.getExcerpt().substring(0, 252)+"...");
+ }
+
+ // lookup weblog specified by comment request
+ UserManager uMgr = RollerFactory.getRoller().getUserManager();
+ weblog = uMgr.getWebsiteByHandle(trackbackRequest.getWeblogHandle());
+
+ if(weblog == null) {
+ throw new RollerException("unable to lookup weblog: "+
+ trackbackRequest.getWeblogHandle());
+ }
+
+ // lookup entry specified by comment request
+ WeblogManager weblogMgr = RollerFactory.getRoller().getWeblogManager();
+ entry = weblogMgr.getWeblogEntryByAnchor(weblog, trackbackRequest.getWeblogAnchor());
+
+ if(entry == null) {
+ throw new RollerException("unable to lookup entry: "+
+ trackbackRequest.getWeblogAnchor());
+ }
+
+ } catch (Exception e) {
+ // some kind of error parsing the request or looking up weblog
+ logger.debug("error creating page request", e);
+ error = e.getMessage();
+ }
}
if(error != null) {
@@ -121,20 +132,17 @@
return;
}
- boolean verified = true;
try {
- RollerRequest rreq = RollerRequest.getRollerRequest(request);
- WeblogEntryData entry = rreq.getWeblogEntry();
- WebsiteData website = entry.getWebsite();
- boolean siteAllows = website.getAllowComments().booleanValue();
+ boolean siteAllows = weblog.getAllowComments().booleanValue();
+ boolean verified = true;
if (entry!=null && siteAllows && entry.getCommentsStillAllowed()) {
// Track trackbacks as comments
CommentData comment = new CommentData();
- comment.setContent("[Trackback] "+excerpt);
- comment.setName(blogName);
- comment.setUrl(url);
+ comment.setContent("[Trackback] "+trackbackRequest.getExcerpt());
+ comment.setName(trackbackRequest.getBlogName());
+ comment.setUrl(trackbackRequest.getUrl());
comment.setWeblogEntry(entry);
comment.setNotify(Boolean.FALSE);
comment.setPostTime(new Timestamp(new Date().getTime()));
@@ -167,7 +175,7 @@
if (error == null) {
// If comment moderation is on, set comment as pending
- if (verified && website.getCommentModerationRequired()) {
+ if (verified && weblog.getCommentModerationRequired()) {
comment.setPending(Boolean.TRUE);
comment.setApproved(Boolean.FALSE);
} else if (verified) {
Added: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogTrackbackRequest.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogTrackbackRequest.java?rev=421067&view=auto
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogTrackbackRequest.java (added)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogTrackbackRequest.java Tue Jul 11 18:14:10 2006
@@ -0,0 +1,186 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.rendering.util;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+/**
+ * Represents a request to post a weblog entry trackback.
+ */
+public class WeblogTrackbackRequest extends WeblogRequest {
+
+ private static Log log = LogFactory.getLog(WeblogTrackbackRequest.class);
+
+ private static final String TRACKBACK_SERVLET = "/roller-ui/rendering/trackback";
+
+ private String blogName = null;
+ private String url = null;
+ private String excerpt = null;
+ private String title = null;
+ private String weblogAnchor = null;
+
+
+ public WeblogTrackbackRequest() {}
+
+
+ public WeblogTrackbackRequest(HttpServletRequest request)
+ throws InvalidRequestException {
+
+ // let our parent take care of their business first
+ // parent determines weblog handle and locale if specified
+ super(request);
+
+ String servlet = request.getServletPath();
+
+ // we only want the path info left over from after our parents parsing
+ String pathInfo = this.getPathInfo();
+
+ // was this request bound for the comment servlet?
+ if(servlet == null || !TRACKBACK_SERVLET.equals(servlet)) {
+ throw new InvalidRequestException("not a weblog trackback request, "+
+ request.getRequestURL());
+ }
+
+
+ /*
+ * parse path info. we expect ...
+ *
+ * /entry/<anchor> - permalink
+ */
+ if(pathInfo != null && pathInfo.trim().length() > 0) {
+
+ // we should only ever get 2 path elements
+ String[] pathElements = pathInfo.split("/");
+ if(pathElements.length == 2) {
+
+ String context = pathElements[0];
+ if("entry".equals(context)) {
+ try {
+ this.weblogAnchor =
+ URLDecoder.decode(pathElements[1], "UTF-8");
+ } catch (UnsupportedEncodingException ex) {
+ // should never happen
+ log.error(ex);
+ }
+
+ } else {
+ throw new InvalidRequestException("bad path info, "+
+ request.getRequestURL());
+ }
+
+ } else {
+ throw new InvalidRequestException("bad path info, "+
+ request.getRequestURL());
+ }
+
+ } else {
+ // bad request
+ throw new InvalidRequestException("bad path info, "+
+ request.getRequestURL());
+ }
+
+
+ /*
+ * parse request parameters
+ *
+ * the only params we currently care about are:
+ * blog_name - comment author
+ * url - comment referring url
+ * excerpt - comment contents
+ * title - comment title
+ */
+ if(request.getParameter("blog_name") != null) {
+ this.blogName = request.getParameter("blog_name");
+ }
+
+ if(request.getParameter("url") != null) {
+ this.url = request.getParameter("url");
+ }
+
+ if(request.getParameter("excerpt") != null) {
+ this.excerpt = request.getParameter("excerpt");
+ }
+
+ if(request.getParameter("title") != null) {
+ this.title = request.getParameter("title");
+ }
+
+ // a little bit of validation, trackbacks enforce that all params
+ // must have a value, so any nulls equals a bad request
+ if(this.blogName == null || this.url == null ||
+ this.excerpt == null || this.title == null) {
+ throw new InvalidRequestException("bad request data. did not "+
+ "receive values for all trackback params (blog_name, url, excerpt, title)");
+ }
+
+ if(log.isDebugEnabled()) {
+ log.debug("name = "+this.blogName);
+ log.debug("url = "+this.url);
+ log.debug("excerpt = "+this.excerpt);
+ log.debug("title = "+this.title);
+ log.debug("weblogAnchor = "+this.weblogAnchor);
+ }
+ }
+
+ public String getBlogName() {
+ return blogName;
+ }
+
+ public void setBlogName(String blogName) {
+ this.blogName = blogName;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getExcerpt() {
+ return excerpt;
+ }
+
+ public void setExcerpt(String excerpt) {
+ this.excerpt = excerpt;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getWeblogAnchor() {
+ return weblogAnchor;
+ }
+
+ public void setWeblogAnchor(String weblogAnchor) {
+ this.weblogAnchor = weblogAnchor;
+ }
+
+}