* migrate the post/preview over to the new system
* honor the "force new thread" and "refuse replies (from everyone but me)" functionality
This commit is contained in:
@ -1017,7 +1017,7 @@ public class HTMLRenderer extends EventReceiverImpl {
|
||||
if (asReply && _entry != null) {
|
||||
StringBuffer rv = new StringBuffer(128);
|
||||
rv.append("post.jsp?").append(ArchiveViewerBean.PARAM_BLOG).append("=").append(Base64.encode(blog.getData()));
|
||||
rv.append('&').append(ArchiveViewerBean.PARAM_IN_REPLY_TO).append('=');
|
||||
rv.append('&').append(PostServlet.PARAM_PARENT).append('=');
|
||||
rv.append(Base64.encode("entry://" + _entry.getURI().getKeyHash().toBase64() + "/" + _entry.getURI().getEntryId()));
|
||||
if (subject != null)
|
||||
rv.append('&').append(ArchiveViewerBean.PARAM_SUBJECT).append('=').append(Base64.encode(subject));
|
||||
|
@ -229,23 +229,25 @@ public class ThreadedHTMLRenderer extends HTMLRenderer {
|
||||
(refuseReplies == null) || (!Boolean.valueOf(refuseReplies).booleanValue()) ) {
|
||||
out.write("<!-- body reply begin -->\n");
|
||||
out.write("<form action=\"post.jsp\" method=\"POST\" enctype=\"multipart/form-data\">\n");
|
||||
out.write("<input type=\"hidden\" name=\"inReplyTo\" value=\"");
|
||||
out.write("<input type=\"hidden\" name=\"" + PostServlet.PARAM_PARENT + "\" value=\"");
|
||||
out.write(Base64.encode(post.toString()));
|
||||
out.write("\" />");
|
||||
out.write("<input type=\"hidden\" name=\"entrysubject\" value=\"re: ");
|
||||
out.write("<input type=\"hidden\" name=\"" + PostServlet.PARAM_SUBJECT + "\" value=\"");
|
||||
if (subject.indexOf("re: ") == -1)
|
||||
out.write("re: ");
|
||||
out.write(HTMLRenderer.sanitizeTagParam(subject));
|
||||
out.write("\" />");
|
||||
out.write("<tr class=\"postReply\">\n");
|
||||
out.write("<td colspan=\"3\">Reply: (<a href=\"smlref.jsp\" title=\"SML cheatsheet\">SML reference</a>)</td>\n</tr>\n");
|
||||
out.write("<td colspan=\"3\">Reply: (<a href=\"smlref.jsp\" title=\"SML cheatsheet\" target=\"_blank\">SML reference</a>)</td>\n</tr>\n");
|
||||
out.write("<tr class=\"postReplyText\">\n");
|
||||
out.write("<td colspan=\"3\"><textarea name=\"entrytext\" rows=\"2\" cols=\"100\"></textarea></td>\n");
|
||||
out.write("<td colspan=\"3\"><textarea name=\"" + PostServlet.PARAM_TEXT + "\" rows=\"2\" cols=\"100\"></textarea></td>\n");
|
||||
out.write("</tr>\n");
|
||||
out.write("<tr class=\"postReplyOptions\">\n");
|
||||
out.write(" <td colspan=\"3\">\n");
|
||||
out.write(" <input type=\"submit\" value=\"Preview...\" name=\"Post\" />\n");
|
||||
out.write(" Tags: <input type=\"text\" size=\"10\" name=\"entrytags\" />\n");
|
||||
out.write(" in a new thread? <input type=\"checkbox\" name=\"replyInNewThread\" />\n");
|
||||
out.write(" allow replies? <input type=\"checkbox\" name=\"allowReplies\" checked=\"true\" />\n");
|
||||
out.write(" Tags: <input type=\"text\" size=\"10\" name=\"" + PostServlet.PARAM_TAGS + "\" />\n");
|
||||
out.write(" in a new thread? <input type=\"checkbox\" name=\"" + PostServlet.PARAM_IN_NEW_THREAD + "\" value=\"true\" />\n");
|
||||
out.write(" refuse replies? <input type=\"checkbox\" name=\"" + PostServlet.PARAM_REFUSE_REPLIES + "\" value=\"true\" />\n");
|
||||
out.write(" attachment: <input type=\"file\" name=\"entryfile0\" />\n");
|
||||
out.write(" </td>\n</tr>\n</form>\n");
|
||||
out.write("<!-- body reply end -->\n");
|
||||
|
@ -386,7 +386,7 @@ public abstract class BaseServlet extends HttpServlet {
|
||||
out.write(user.getUsername());
|
||||
out.write("</a>\n");
|
||||
out.write("(<a href=\"switchuser.jsp\" title=\"Log in as another user\">switch</a>)\n");
|
||||
out.write("<a href=\"post.jsp\" title=\"Post a new thread\">Post a new thread</a>\n");
|
||||
out.write("<a href=\"" + getPostURI() + "\" title=\"Post a new thread\">Post a new thread</a>\n");
|
||||
out.write("<a href=\"addresses.jsp\" title=\"View your addressbook\">Addressbook</a>\n");
|
||||
} else {
|
||||
out.write("<form action=\"" + req.getRequestURI() + "\" method=\"GET\">\n");
|
||||
@ -429,6 +429,7 @@ public abstract class BaseServlet extends HttpServlet {
|
||||
|
||||
private static final String CONTROL_TARGET = "threads.jsp";
|
||||
protected String getControlTarget() { return CONTROL_TARGET; }
|
||||
protected String getPostURI() { return "post.jsp"; }
|
||||
|
||||
protected void renderControlBar(User user, HttpServletRequest req, PrintWriter out, ThreadIndex index) throws IOException {
|
||||
out.write("<form action=\"");
|
||||
|
276
apps/syndie/java/src/net/i2p/syndie/web/PostServlet.java
Normal file
276
apps/syndie/java/src/net/i2p/syndie/web/PostServlet.java
Normal file
@ -0,0 +1,276 @@
|
||||
package net.i2p.syndie.web;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.ServletException;
|
||||
|
||||
import org.mortbay.servlet.MultiPartRequest;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.client.naming.*;
|
||||
import net.i2p.data.*;
|
||||
import net.i2p.syndie.*;
|
||||
import net.i2p.syndie.data.*;
|
||||
import net.i2p.syndie.sml.*;
|
||||
|
||||
/**
|
||||
* Post and preview form
|
||||
*
|
||||
*/
|
||||
public class PostServlet extends BaseServlet {
|
||||
public static final String PARAM_ACTION = "action";
|
||||
public static final String ACTION_CONFIRM = "confirm";
|
||||
|
||||
public static final String PARAM_SUBJECT = "entrysubject";
|
||||
public static final String PARAM_TAGS = "entrytags";
|
||||
public static final String PARAM_INCLUDENAMES = "includenames";
|
||||
public static final String PARAM_TEXT = "entrytext";
|
||||
public static final String PARAM_HEADERS = "entryheaders";
|
||||
|
||||
public static final String PARAM_PARENT = "parentURI";
|
||||
public static final String PARAM_IN_NEW_THREAD = "replyInNewThread";
|
||||
public static final String PARAM_REFUSE_REPLIES = "refuseReplies";
|
||||
|
||||
public static final String PARAM_REMOTE_ARCHIVE = "archive";
|
||||
|
||||
private static final String ATTR_POST_BEAN = "post";
|
||||
|
||||
protected void renderServletDetails(User user, HttpServletRequest req, PrintWriter out, ThreadIndex index,
|
||||
int threadOffset, BlogURI visibleEntry, Archive archive) throws IOException {
|
||||
if (!user.getAuthenticated()) {
|
||||
out.write("<tr><td colspan=\"3\">You must be logged in to post</td></tr>\n");
|
||||
} else {
|
||||
PostBean post = getPostBean(user, req);
|
||||
String action = req.getParameter(PARAM_ACTION);
|
||||
if (!empty(action) && ACTION_CONFIRM.equals(action)) {
|
||||
postEntry(user, req, archive, post, out);
|
||||
} else {
|
||||
String contentType = req.getContentType();
|
||||
if (!empty(contentType) && (contentType.indexOf("boundary=") != -1)) {
|
||||
previewPostedData(user, req, archive, contentType, post, out);
|
||||
} else {
|
||||
displayNewForm(user, req, post, out);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void previewPostedData(User user, HttpServletRequest rawRequest, Archive archive, String contentType, PostBean post, PrintWriter out) throws IOException {
|
||||
// not confirmed but they posted stuff... gobble up what they give
|
||||
// and display it as a prview (then we show the confirm form
|
||||
|
||||
out.write("<tr><td colspan=\"3\">");
|
||||
|
||||
post.reinitialize();
|
||||
post.setUser(user);
|
||||
|
||||
MultiPartRequest req = new MultiPartRequest(rawRequest);
|
||||
|
||||
boolean inNewThread = getInNewThread(req.getString(PARAM_IN_NEW_THREAD));
|
||||
boolean refuseReplies = getRefuseReplies(req.getString(PARAM_REFUSE_REPLIES));
|
||||
|
||||
String entrySubject = req.getString(PARAM_SUBJECT);
|
||||
String entryTags = req.getString(PARAM_TAGS);
|
||||
String entryText = req.getString(PARAM_TEXT);
|
||||
String entryHeaders = req.getString(PARAM_HEADERS);
|
||||
String style = ""; //req.getString("style");
|
||||
if ( (style != null) && (style.trim().length() > 0) ) {
|
||||
if (entryHeaders == null) entryHeaders = HTMLRenderer.HEADER_STYLE + ": " + style;
|
||||
else entryHeaders = entryHeaders + '\n' + HTMLRenderer.HEADER_STYLE + ": " + style;
|
||||
}
|
||||
String replyTo = req.getString(PARAM_PARENT);
|
||||
if ( (replyTo != null) && (replyTo.trim().length() > 0) ) {
|
||||
byte r[] = Base64.decode(replyTo);
|
||||
if (r != null) {
|
||||
if (entryHeaders == null) entryHeaders = HTMLRenderer.HEADER_IN_REPLY_TO + ": " + new String(r, "UTF-8");
|
||||
else entryHeaders = entryHeaders + '\n' + HTMLRenderer.HEADER_IN_REPLY_TO + ": " + new String(r, "UTF-8");
|
||||
} else {
|
||||
replyTo = null;
|
||||
}
|
||||
}
|
||||
|
||||
if ( (entryHeaders == null) || (entryHeaders.trim().length() <= 0) )
|
||||
entryHeaders = ThreadedHTMLRenderer.HEADER_FORCE_NEW_THREAD + ": " + inNewThread + '\n' +
|
||||
ThreadedHTMLRenderer.HEADER_REFUSE_REPLIES + ": " + refuseReplies;
|
||||
else
|
||||
entryHeaders = entryHeaders.trim() + '\n' +
|
||||
ThreadedHTMLRenderer.HEADER_FORCE_NEW_THREAD + ": " + inNewThread + '\n' +
|
||||
ThreadedHTMLRenderer.HEADER_REFUSE_REPLIES + ": " + refuseReplies;
|
||||
|
||||
String includeNames = req.getString(PARAM_INCLUDENAMES);
|
||||
if ( (includeNames != null) && (includeNames.trim().length() > 0) ) {
|
||||
PetNameDB db = user.getPetNameDB();
|
||||
if (entryHeaders == null) entryHeaders = "";
|
||||
for (Iterator iter = db.getNames().iterator(); iter.hasNext(); ) {
|
||||
PetName pn = db.getByName((String)iter.next());
|
||||
if ( (pn != null) && (pn.getIsPublic()) ) {
|
||||
entryHeaders = entryHeaders.trim() + '\n' + HTMLRenderer.HEADER_PETNAME + ": " +
|
||||
pn.getName() + "\t" + pn.getNetwork() + "\t" + pn.getProtocol() + "\t" + pn.getLocation();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
post.setSubject(entrySubject);
|
||||
post.setTags(entryTags);
|
||||
post.setText(entryText);
|
||||
post.setHeaders(entryHeaders);
|
||||
|
||||
for (int i = 0; i < 32; i++) {
|
||||
String filename = req.getFilename("entryfile" + i);
|
||||
if ( (filename != null) && (filename.trim().length() > 0) ) {
|
||||
Hashtable params = req.getParams("entryfile" + i);
|
||||
String type = "application/octet-stream";
|
||||
for (Iterator iter = params.keySet().iterator(); iter.hasNext(); ) {
|
||||
String cur = (String)iter.next();
|
||||
if ("content-type".equalsIgnoreCase(cur)) {
|
||||
type = (String)params.get(cur);
|
||||
break;
|
||||
}
|
||||
}
|
||||
post.addAttachment(filename.trim(), req.getInputStream("entryfile" + i), type);
|
||||
}
|
||||
}
|
||||
|
||||
post.renderPreview(out);
|
||||
out.write("<hr /><span class=\"b_postConfirm\"><form action=\"" + getPostURI() + "\" method=\"POST\">\n");
|
||||
out.write("Please confirm that the above is ok");
|
||||
if (BlogManager.instance().authorizeRemote(user)) {
|
||||
out.write(", and select what additional archives you want the post transmitted to.");
|
||||
out.write("Otherwise, just hit your browser's back arrow and make changes.\n");
|
||||
out.write("<select class=\"b_postConfirm\" name=\"" + PARAM_REMOTE_ARCHIVE + "\">\n");
|
||||
out.write("<option name=\"\">-None-</option>\n");
|
||||
PetNameDB db = user.getPetNameDB();
|
||||
TreeSet names = new TreeSet();
|
||||
for (Iterator iter = db.getNames().iterator(); iter.hasNext(); ) {
|
||||
String name = (String)iter.next();
|
||||
PetName pn = db.getByName(name);
|
||||
if ("syndiearchive".equals(pn.getProtocol()))
|
||||
names.add(pn.getName());
|
||||
}
|
||||
for (Iterator iter = names.iterator(); iter.hasNext(); ) {
|
||||
String name = (String)iter.next();
|
||||
out.write("<option value=\"" + HTMLRenderer.sanitizeTagParam(name) + "\">"
|
||||
+ HTMLRenderer.sanitizeString(name) + "</option>\n");
|
||||
}
|
||||
|
||||
out.write("</select><br />\n");
|
||||
}
|
||||
out.write("</span><input class=\"b_postConfirm\" type=\"submit\" name=\"" + PARAM_ACTION
|
||||
+ "\" value=\"" + ACTION_CONFIRM + "\" />\n");
|
||||
|
||||
out.write("</td></tr>\n");
|
||||
}
|
||||
|
||||
private void postEntry(User user, HttpServletRequest req, Archive archive, PostBean post, PrintWriter out) throws IOException {
|
||||
String remArchive = req.getParameter(PARAM_REMOTE_ARCHIVE);
|
||||
post.setArchive(remArchive);
|
||||
BlogURI uri = post.postEntry();
|
||||
if (uri != null) {
|
||||
out.write("<tr><td colspan=\"3\"><span class=\"b_postMsgOk\">Entry <a class=\"b_postOkLink\" href=\"threads.jsp?regenerateIndex=true&post=" +
|
||||
uri.getKeyHash().toBase64() + "/" + uri.getEntryId() + "\">posted</a>!</span></td></tr>");
|
||||
} else {
|
||||
out.write("<tr><td colspan=\"3\"><span class=\"b_postMsgErro\">There was an unknown error posting the entry...</span></td></tr>");
|
||||
}
|
||||
}
|
||||
|
||||
private void displayNewForm(User user, HttpServletRequest req, PostBean post, PrintWriter out) throws IOException {
|
||||
// logged in and not confirmed because they didn't send us anything!
|
||||
// give 'em a new form
|
||||
|
||||
post.reinitialize();
|
||||
post.setUser(user);
|
||||
|
||||
out.write("<form action=\"" + getPostURI() + "\" method=\"POST\" enctype=\"multipart/form-data\">\n");
|
||||
out.write("<tr><td colspan=\"3\">\n");
|
||||
out.write("<span class=\"b_postField\">Post subject:</span> ");
|
||||
out.write("<input type=\"text\" class=\"b_postSubject\" size=\"80\" name=\"" + PARAM_SUBJECT
|
||||
+ "\" value=\"" + getParam(req,PARAM_SUBJECT) + "\" /><br />\n");
|
||||
out.write("<span class=\"b_postField\">Post tags:</span> ");
|
||||
out.write("<input type=\"text\" class=\"b_postTags\" size=\"20\" name=\"" + PARAM_TAGS
|
||||
+ "\" value=\"" + getParam(req, PARAM_TAGS) + "\" /><br />\n");
|
||||
out.write("<span class=\"b_postField\">Include public names?</span> ");
|
||||
out.write("<input class=\"b_postNames\" type=\"checkbox\" name=\"" + PARAM_INCLUDENAMES
|
||||
+ "\" value=\"true\" /><br />\n");
|
||||
out.write("<span class=\"b_postField\">Post content (in raw <a href=\"smlref.jsp\" target=\"_blank\">SML</a>, no headers):</span><br />\n");
|
||||
out.write("<textarea class=\"b_postText\" rows=\"6\" cols=\"80\" name=\"" + PARAM_TEXT + "\">" + getParam(req, PARAM_TEXT) + "</textarea><br />\n");
|
||||
out.write("<span class=\"b_postField\">SML post headers:</span><br />\n");
|
||||
out.write("<textarea class=\"b_postHeaders\" rows=\"3\" cols=\"80\" name=\"" + PARAM_HEADERS + "\">" + getParam(req, PARAM_HEADERS) + "</textarea><br />\n");
|
||||
|
||||
|
||||
String parentURI = req.getParameter(PARAM_PARENT);
|
||||
if ( (parentURI != null) && (parentURI.trim().length() > 0) )
|
||||
out.write("<input type=\"hidden\" name=\"" + PARAM_PARENT + " value=\"" + parentURI + "\" />\n");
|
||||
|
||||
out.write(" Tags: <input type=\"text\" size=\"10\" name=\"" + PARAM_TAGS + "\" value=\"" + getParam(req, PARAM_TAGS) + "\" />\n");
|
||||
|
||||
boolean inNewThread = getInNewThread(req);
|
||||
boolean refuseReplies = getRefuseReplies(req);
|
||||
|
||||
out.write(" in a new thread? <input type=\"checkbox\" value=\"true\" name=\"" + PARAM_IN_NEW_THREAD +
|
||||
(inNewThread ? "\" checked=\"true\" " : "\" " ) + " />\n");
|
||||
out.write(" refuse replies? <input type=\"checkbox\" value=\"true\" name=\"" + PARAM_REFUSE_REPLIES +
|
||||
(refuseReplies ? "\" checked=\"true\" " : "\" " ) + " />\n");
|
||||
|
||||
out.write(ATTACHMENT_FIELDS);
|
||||
|
||||
out.write("<hr />\n");
|
||||
out.write("<input class=\"b_postPreview\" type=\"submit\" name=\"Post\" value=\"Preview...\" /> ");
|
||||
out.write("<input class=\"b_postReset\" type=\"reset\" value=\"Cancel\" />\n");
|
||||
|
||||
if (parentURI != null) {
|
||||
out.write("<hr /><span id=\"parentText\" class=\"b_postParent\">");
|
||||
post.renderReplyPreview(out, DataHelper.getUTF8(Base64.decode(parentURI)));
|
||||
out.write("</span><hr/>\n");
|
||||
}
|
||||
|
||||
out.write("</td></tr>\n");
|
||||
out.write("</form>\n");
|
||||
}
|
||||
|
||||
private boolean getInNewThread(HttpServletRequest req) {
|
||||
return getInNewThread(req.getParameter(PARAM_IN_NEW_THREAD));
|
||||
}
|
||||
private boolean getInNewThread(String val) {
|
||||
boolean rv = false;
|
||||
String inNewThread = val;
|
||||
if ( (inNewThread != null) && (Boolean.valueOf(inNewThread).booleanValue()) )
|
||||
rv = true;
|
||||
return rv;
|
||||
}
|
||||
private boolean getRefuseReplies(HttpServletRequest req) {
|
||||
return getRefuseReplies(req.getParameter(PARAM_REFUSE_REPLIES));
|
||||
}
|
||||
private boolean getRefuseReplies(String val) {
|
||||
boolean rv = false;
|
||||
String refuseReplies = val;
|
||||
if ( (refuseReplies != null) && (Boolean.valueOf(refuseReplies).booleanValue()) )
|
||||
rv = true;
|
||||
return rv;
|
||||
}
|
||||
|
||||
private PostBean getPostBean(User user, HttpServletRequest req) {
|
||||
PostBean bean = (PostBean)req.getSession().getAttribute(ATTR_POST_BEAN);
|
||||
if (bean == null) {
|
||||
bean = new PostBean();
|
||||
req.getSession().setAttribute(ATTR_POST_BEAN, bean);
|
||||
}
|
||||
return bean;
|
||||
}
|
||||
|
||||
private String getParam(HttpServletRequest req, String param) {
|
||||
String val = req.getParameter(param);
|
||||
if (val == null) val = "";
|
||||
return val;
|
||||
}
|
||||
|
||||
private static final String ATTACHMENT_FIELDS = ""
|
||||
+ "<span class=\"b_postField\">Attachment 0:</span> <input class=\"b_postField\" type=\"file\" name=\"entryfile0\" /><br />"
|
||||
+ "<span class=\"b_postField\">Attachment 1:</span> <input class=\"b_postField\" type=\"file\" name=\"entryfile1\" /><br />"
|
||||
+ "<span class=\"b_postField\">Attachment 2:</span> <input class=\"b_postField\" type=\"file\" name=\"entryfile2\" /><br />"
|
||||
+ "<span class=\"b_postField\">Attachment 3:</span> <input class=\"b_postField\" type=\"file\" name=\"entryfile3\" /><br />\n";
|
||||
|
||||
}
|
@ -1,181 +0,0 @@
|
||||
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="net.i2p.data.Base64, net.i2p.client.naming.PetName, net.i2p.client.naming.PetNameDB, net.i2p.syndie.web.*, net.i2p.syndie.sml.*, net.i2p.syndie.data.*, net.i2p.syndie.*, org.mortbay.servlet.MultiPartRequest, java.util.*" %><%
|
||||
request.setCharacterEncoding("UTF-8");
|
||||
%><jsp:useBean scope="session" class="net.i2p.syndie.User" id="user"
|
||||
/><jsp:useBean scope="session" class="net.i2p.syndie.web.PostBean" id="post"
|
||||
/><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 TRANSITIONAL//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>SyndieMedia post</title>
|
||||
<link href="style.jsp" rel="stylesheet" type="text/css" >
|
||||
</head>
|
||||
<body>
|
||||
<table border="1" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr class="b_toplogo"><td colspan="5" valign="top" align="left" class="b_toplogo"><jsp:include page="_toplogo.jsp" /></td></tr>
|
||||
<tr><td valign="top" align="left" rowspan="2" class="b_leftnav"><jsp:include page="_leftnav.jsp" /></td>
|
||||
<jsp:include page="_topnav.jsp" />
|
||||
<td valign="top" align="left" rowspan="2" class="b_rightnav"><jsp:include page="_rightnav.jsp" /></td></tr>
|
||||
<tr class="b_content"><td valign="top" align="left" colspan="3" class="b_content"><%
|
||||
|
||||
if (!user.getAuthenticated()) {
|
||||
%><span class="b_postMsgErr">You must be logged in to post</span><%
|
||||
} else {
|
||||
String confirm = request.getParameter("action");
|
||||
if ( (confirm != null) && (confirm.equalsIgnoreCase("confirm")) ) {
|
||||
String archive = request.getParameter("archive");
|
||||
post.setArchive(archive);
|
||||
BlogURI uri = post.postEntry();
|
||||
if (uri != null) {
|
||||
%><span class="b_postMsgOk">Blog entry <a class="b_postOkLink" href="threads.jsp?regenerateIndex=true&post=<%=user.getBlog().toBase64() + '/' + uri.getEntryId()%>">posted</a>!</span><%
|
||||
} else {
|
||||
%><span class="b_postMsgErro">There was an unknown error posting the entry...</span><%
|
||||
}
|
||||
post.reinitialize();
|
||||
post.setUser(user);
|
||||
} else {
|
||||
// logged in but not confirmed...
|
||||
String contentType = request.getContentType();
|
||||
if ((contentType != null) && (contentType.indexOf("boundary=") != -1) ) {
|
||||
// not confirmed but they posted stuff... gobble up what they give
|
||||
// and display it as a preview (then we show the confirm form)
|
||||
post.reinitialize();
|
||||
post.setUser(user);
|
||||
|
||||
MultiPartRequest req = new MultiPartRequest(request);
|
||||
String entrySubject = req.getString("entrysubject");
|
||||
String entryTags = req.getString("entrytags");
|
||||
String entryText = req.getString("entrytext");
|
||||
String entryHeaders = req.getString("entryheaders");
|
||||
String style = req.getString("style");
|
||||
if ( (style != null) && (style.trim().length() > 0) ) {
|
||||
if (entryHeaders == null) entryHeaders = HTMLRenderer.HEADER_STYLE + ": " + style;
|
||||
else entryHeaders = entryHeaders + '\n' + HTMLRenderer.HEADER_STYLE + ": " + style;
|
||||
}
|
||||
String replyTo = req.getString(ArchiveViewerBean.PARAM_IN_REPLY_TO);
|
||||
if ( (replyTo != null) && (replyTo.trim().length() > 0) ) {
|
||||
byte r[] = Base64.decode(replyTo);
|
||||
if (r != null) {
|
||||
if (entryHeaders == null) entryHeaders = HTMLRenderer.HEADER_IN_REPLY_TO + ": " + new String(r, "UTF-8");
|
||||
else entryHeaders = entryHeaders + '\n' + HTMLRenderer.HEADER_IN_REPLY_TO + ": " + new String(r, "UTF-8");
|
||||
} else {
|
||||
replyTo = null;
|
||||
}
|
||||
}
|
||||
String includeNames = req.getString("includenames");
|
||||
if ( (includeNames != null) && (includeNames.trim().length() > 0) ) {
|
||||
PetNameDB db = user.getPetNameDB();
|
||||
if (entryHeaders == null) entryHeaders = "";
|
||||
for (Iterator iter = db.getNames().iterator(); iter.hasNext(); ) {
|
||||
PetName pn = db.getByName((String)iter.next());
|
||||
if ( (pn != null) && (pn.getIsPublic()) ) {
|
||||
entryHeaders = entryHeaders + '\n' + HTMLRenderer.HEADER_PETNAME + ": " +
|
||||
pn.getName() + "\t" + pn.getNetwork() + "\t" + pn.getProtocol() + "\t" + pn.getLocation();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
post.setSubject(entrySubject);
|
||||
post.setTags(entryTags);
|
||||
post.setText(entryText);
|
||||
post.setHeaders(entryHeaders);
|
||||
|
||||
for (int i = 0; i < 32; i++) {
|
||||
String filename = req.getFilename("entryfile" + i);
|
||||
if ( (filename != null) && (filename.trim().length() > 0) ) {
|
||||
Hashtable params = req.getParams("entryfile" + i);
|
||||
String type = "application/octet-stream";
|
||||
for (Iterator iter = params.keySet().iterator(); iter.hasNext(); ) {
|
||||
String cur = (String)iter.next();
|
||||
if ("content-type".equalsIgnoreCase(cur)) {
|
||||
type = (String)params.get(cur);
|
||||
break;
|
||||
}
|
||||
}
|
||||
post.addAttachment(filename.trim(), req.getInputStream("entryfile" + i), type);
|
||||
}
|
||||
}
|
||||
|
||||
post.renderPreview(out);
|
||||
%><hr /><span class="b_postConfirm"><form action="post.jsp" method="POST">
|
||||
Please confirm that the above is ok<% if (BlogManager.instance().authorizeRemote(user)) { %>, and select what additional archives you
|
||||
want the post transmitted to. Otherwise, just hit your browser's back arrow and
|
||||
make changes.
|
||||
<select class="b_postConfirm" name="archive">
|
||||
<option name="">-None-</option>
|
||||
<%
|
||||
PetNameDB db = user.getPetNameDB();
|
||||
TreeSet names = new TreeSet();
|
||||
for (Iterator iter = db.getNames().iterator(); iter.hasNext(); ) {
|
||||
String name = (String)iter.next();
|
||||
PetName pn = db.getByName(name);
|
||||
if ("syndiearchive".equals(pn.getProtocol()))
|
||||
names.add(pn.getName());
|
||||
}
|
||||
for (Iterator iter = names.iterator(); iter.hasNext(); ) {
|
||||
String name = (String)iter.next();
|
||||
out.write("<option value=\"" + HTMLRenderer.sanitizeTagParam(name) + "\">" + HTMLRenderer.sanitizeString(name) + "</option>\n");
|
||||
}
|
||||
%>
|
||||
</select><br /><% } %></span>
|
||||
<input class="b_postConfirm" type="submit" name="action" value="Confirm" /><%
|
||||
} else {
|
||||
// logged in and not confirmed because they didn't send us anything!
|
||||
// give 'em a new form
|
||||
|
||||
post.reinitialize();
|
||||
post.setUser(user);
|
||||
|
||||
String entrySubject = request.getParameter("replySubject");
|
||||
String entryTags = request.getParameter("replyTags");
|
||||
String parentURI = request.getParameter("parentURI");
|
||||
if (entrySubject != null)
|
||||
post.setSubject(new String(Base64.decode(entrySubject), "UTF-8"));
|
||||
if (entryTags != null)
|
||||
post.setTags(new String(Base64.decode(entryTags), "UTF-8"));
|
||||
|
||||
if (parentURI != null) {
|
||||
parentURI = new String(Base64.decode(parentURI), "UTF-8");
|
||||
BlogURI parent = null;
|
||||
try {
|
||||
parent = new BlogURI(parentURI);
|
||||
%><span class="b_postField">Replying to
|
||||
<a href="thread.jsp?post=<%=parent.getKeyHash().toBase64() + '/' + parent.getEntryId()%>">parent</a>
|
||||
(text <a href="#parentText">below</a>).</span><br />
|
||||
<%
|
||||
} catch (Exception e) {}
|
||||
|
||||
}
|
||||
%><form action="post.jsp" method="POST" enctype="multipart/form-data">
|
||||
<span class="b_postField">Post subject:</span> <input class="b_postSubject" type="text" size="80" name="entrysubject" value="<%=post.getSubject()%>" /><br />
|
||||
<span class="b_postField">Post tags:</span> <input class="b_postTags" type="text" size="20" name="entrytags" value="<%=post.getTags()%>" /><br />
|
||||
<span class="b_postField">Post style:</span> <select class="b_postStyle" name="style">
|
||||
<option value="default" selected="true">Default</option>
|
||||
<option value="meta">Meta (hide everything but the metadata)</option>
|
||||
</select><br />
|
||||
<span class="b_postField">Include public names?</span> <input class="b_postNames" type="checkbox" name="includenames" value="true" /><br />
|
||||
<span class="b_postField">Post content (in raw <a href="smlref.jsp" target="_blank">SML</a>, no headers):</span><br />
|
||||
<textarea class="b_postText" rows="6" cols="80" name="entrytext"><%=post.getText()%></textarea><br />
|
||||
<span class="b_postField">SML post headers:</span><br />
|
||||
<textarea class="b_postHeaders" rows="3" cols="80" name="entryheaders"><%=post.getHeaders()%></textarea><br /><%
|
||||
String s = request.getParameter(ArchiveViewerBean.PARAM_IN_REPLY_TO);
|
||||
if ( (s != null) && (s.trim().length() > 0) ) {%>
|
||||
<input type="hidden" name="<%=ArchiveViewerBean.PARAM_IN_REPLY_TO%>" value="<%=request.getParameter(ArchiveViewerBean.PARAM_IN_REPLY_TO)%>" />
|
||||
<% } %>
|
||||
<span class="b_postField">Attachment 0:</span> <input class="b_postField" type="file" name="entryfile0" /><br />
|
||||
<span class="b_postField">Attachment 1:</span> <input class="b_postField" type="file" name="entryfile1" /><br />
|
||||
<span class="b_postField">Attachment 2:</span> <input class="b_postField" type="file" name="entryfile2" /><br />
|
||||
<span class="b_postField">Attachment 3:</span> <input class="b_postField" type="file" name="entryfile3" /><br />
|
||||
<hr />
|
||||
<input class="b_postPreview" type="submit" name="Post" value="Preview..." /> <input class="b_postReset" type="reset" value="Cancel" />
|
||||
<%
|
||||
if (parentURI != null) {
|
||||
%><hr /><span id="parentText" class="b_postParent"><%
|
||||
post.renderReplyPreview(out, parentURI);
|
||||
%></span><hr /><%
|
||||
}
|
||||
|
||||
} // end of the 'logged in, not confirmed, nothing posted' section
|
||||
} // end of the 'logged in, not confirmed' section
|
||||
} // end of the 'logged in' section
|
||||
%></td></tr>
|
||||
</table>
|
||||
</body>
|
@ -34,6 +34,11 @@
|
||||
<servlet-class>net.i2p.syndie.web.AddressesServlet</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>net.i2p.syndie.web.PostServlet</servlet-name>
|
||||
<servlet-class>net.i2p.syndie.web.PostServlet</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>net.i2p.syndie.UpdaterServlet</servlet-name>
|
||||
<servlet-class>net.i2p.syndie.UpdaterServlet</servlet-class>
|
||||
@ -72,6 +77,10 @@
|
||||
<servlet-name>net.i2p.syndie.web.AddressesServlet</servlet-name>
|
||||
<url-pattern>/addresses.jsp</url-pattern>
|
||||
</servlet-mapping>
|
||||
<servlet-mapping>
|
||||
<servlet-name>net.i2p.syndie.web.PostServlet</servlet-name>
|
||||
<url-pattern>/post.jsp</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<session-config>
|
||||
<session-timeout>
|
||||
|
Reference in New Issue
Block a user