allow publishing to a remote archive automatically when posting (optionally) with 0 additional clicks

allow transparently attaching any 'public' pet names in your addressbook to a blog post (with a checkbox)
This commit is contained in:
jrandom
2005-09-06 03:03:55 +00:00
committed by zzz
parent f958342704
commit e6b145716f
10 changed files with 229 additions and 105 deletions

View File

@ -241,8 +241,8 @@ public class BlogManager {
return (cfg.exists());
}
public String getDefaultProxyHost() { return _context.getProperty("syndie.defaultProxyHost", "localhost"); }
public String getDefaultProxyPort() { return _context.getProperty("syndie.defaultProxyPort", "4444"); }
public String getDefaultProxyHost() { return _context.getProperty("syndie.defaultProxyHost", ""); }
public String getDefaultProxyPort() { return _context.getProperty("syndie.defaultProxyPort", ""); }
public boolean authorizeAdmin(String pass) {
String admin = getAdminPasswordHash();
@ -275,8 +275,6 @@ public class BlogManager {
out.write("syndie.defaultSelector="+defaultSelector.trim() + "\n");
if (defaultProxyHost != null)
out.write("syndie.defaultProxyHost="+defaultProxyHost.trim() + "\n");
if (defaultProxyHost != null)
out.write("syndie.defaultProxyHost="+defaultProxyHost.trim() + "\n");
if (defaultProxyPort > 0)
out.write("syndie.defaultProxyPort="+defaultProxyPort + "\n");
if (opts != null) {
@ -527,8 +525,7 @@ public class BlogManager {
return false;
}
}
public String addAddress(User user, String name, String protocol, String location, String schema) {
if (!user.getAuthenticated()) return "Not logged in";
boolean ok = validateAddressName(name);
@ -572,7 +569,7 @@ public class BlogManager {
}
private boolean validateAddressName(String name) {
if ( (name == null) || (name.trim().length() <= 0) || (!name.endsWith(".i2p")) ) return false;
if ( (name == null) || (name.trim().length() <= 0) ) return false;
for (int i = 0; i < name.length(); i++) {
char c = name.charAt(i);
if (!Character.isLetterOrDigit(c) && ('.' != c) && ('-' != c) && ('_' != c) )
@ -599,7 +596,11 @@ public class BlogManager {
private boolean validateAddressSchema(String schema) {
if ( (schema == null) || (schema.trim().length() <= 0) ) return false;
return "eep".equals(schema) || "i2p".equals(schema);
if (true) {
return true;
} else {
return "eep".equals(schema) || "i2p".equals(schema);
}
}
private final SimpleDateFormat _dateFormat = new SimpleDateFormat("yyyy/MM/dd", Locale.UK);

View File

@ -101,12 +101,12 @@ public class HTMLPreviewRenderer extends HTMLRenderer {
if (knownName != null) {
_postBodyBuffer.append(' ').append(sanitizeString(knownName));
} else {
_postBodyBuffer.append(" <a href=\"addaddress.jsp?schema=");
_postBodyBuffer.append(sanitizeURL(a.schema)).append("&location=");
_postBodyBuffer.append(sanitizeURL(a.location)).append("&name=");
_postBodyBuffer.append(sanitizeURL(a.protocol)).append("&protocol=");
_postBodyBuffer.append(sanitizeURL(a.name));
_postBodyBuffer.append("\">").append(sanitizeString(a.name));
_postBodyBuffer.append(" <a href=\"addresses.jsp?network=");
_postBodyBuffer.append(sanitizeTagParam(a.schema)).append("&location=");
_postBodyBuffer.append(sanitizeTagParam(a.location)).append("&name=");
_postBodyBuffer.append(sanitizeTagParam(a.protocol)).append("&protocol=");
_postBodyBuffer.append(sanitizeTagParam(a.name));
_postBodyBuffer.append("\">").append(sanitizeString(a.name)).append("</a>");
}
}
_postBodyBuffer.append("<br />\n");

View File

@ -416,11 +416,11 @@ public class HTMLRenderer extends EventReceiverImpl {
_bodyBuffer.append(" <i>(").append(sanitizeString(knownName)).append(")</i>");
} else {
System.err.println("Receiving address [" + location + "]");
_bodyBuffer.append("<a href=\"addaddress.jsp?schema=");
_bodyBuffer.append(sanitizeURL(schema)).append("&name=");
_bodyBuffer.append(sanitizeURL(name)).append("&protocol=");
_bodyBuffer.append(sanitizeURL(protocol)).append("&location=");
_bodyBuffer.append(sanitizeURL(location)).append("\">").append(sanitizeString(anchorText)).append("</a>");
_bodyBuffer.append("<a href=\"addresses.jsp?network=");
_bodyBuffer.append(sanitizeTagParam(schema)).append("&name=");
_bodyBuffer.append(sanitizeTagParam(name)).append("&protocol=");
_bodyBuffer.append(sanitizeTagParam(protocol)).append("&location=");
_bodyBuffer.append(sanitizeTagParam(location)).append("\">").append(sanitizeString(anchorText)).append("</a>");
}
}
@ -563,12 +563,12 @@ public class HTMLRenderer extends EventReceiverImpl {
if (knownName != null) {
_postBodyBuffer.append(' ').append(sanitizeString(knownName));
} else {
_postBodyBuffer.append(" <a href=\"addaddress.jsp?schema=");
_postBodyBuffer.append(sanitizeURL(a.schema)).append("&location=");
_postBodyBuffer.append(sanitizeURL(a.location)).append("&name=");
_postBodyBuffer.append(sanitizeURL(a.name)).append("&protocol=");
_postBodyBuffer.append(sanitizeURL(a.protocol));
_postBodyBuffer.append("\">").append(sanitizeString(a.name));
_postBodyBuffer.append(" <a href=\"addresses.jsp?network=");
_postBodyBuffer.append(sanitizeTagParam(a.schema)).append("&location=");
_postBodyBuffer.append(sanitizeTagParam(a.location)).append("&name=");
_postBodyBuffer.append(sanitizeTagParam(a.name)).append("&protocol=");
_postBodyBuffer.append(sanitizeTagParam(a.protocol));
_postBodyBuffer.append("\">").append(sanitizeString(a.name)).append("</a>");
}
}
_postBodyBuffer.append("<br />\n");
@ -624,7 +624,23 @@ public class HTMLRenderer extends EventReceiverImpl {
public void receiveHeader(String header, String value) {
//System.err.println("Receive header [" + header + "] = [" + value + "]");
_headers.put(header, value);
if (HEADER_PETNAME.equals(header)) {
StringTokenizer tok = new StringTokenizer(value, "\t\n");
if (tok.countTokens() != 4)
return;
String name = tok.nextToken();
String net = tok.nextToken();
String proto = tok.nextToken();
String loc = tok.nextToken();
Address a = new Address();
a.name = sanitizeString(name, false);
a.schema = sanitizeString(net, false);
a.protocol = sanitizeString(proto, false);
a.location = sanitizeString(loc, false);
_addresses.add(a);
} else {
_headers.put(header, value);
}
}
public void receiveHeaderEnd() {
@ -637,6 +653,8 @@ public class HTMLRenderer extends EventReceiverImpl {
public static final String HEADER_SUBJECT = "Subject";
public static final String HEADER_BGCOLOR = "bgcolor";
public static final String HEADER_IN_REPLY_TO = "InReplyTo";
public static final String HEADER_STYLE = "Style";
public static final String HEADER_PETNAME = "PetName";
private void renderSubjectCell() {
_preBodyBuffer.append("<tr class=\"syndieEntrySubjectCell\"><td align=\"left\" valign=\"top\" class=\"syndieEntrySubjectCell\" width=\"400\"> ");

View File

@ -250,11 +250,11 @@ public class RSSRenderer extends HTMLRenderer {
knownName = _user.getPetNameDB().getNameByLocation(a.location);
if (knownName == null) {
StringBuffer url = new StringBuffer(128);
url.append("addaddress.jsp?schema=");
url.append(sanitizeURL(a.schema)).append("&location=");
url.append(sanitizeURL(a.location)).append("&name=");
url.append(sanitizeURL(a.name)).append("&protocol=");
url.append(sanitizeURL(a.protocol));
url.append("addresses.jsp?network=");
url.append(sanitizeTagParam(a.schema)).append("&location=");
url.append(sanitizeTagParam(a.location)).append("&name=");
url.append(sanitizeTagParam(a.name)).append("&protocol=");
url.append(sanitizeTagParam(a.protocol));
out.write(" <enclosure url=\"" + urlPrefix + sanitizeXML(url) + "\" length=\"1\" type=\"text/html\" syndietype=\"address\" />\n");
}
}

View File

@ -15,6 +15,7 @@ public class PostBean {
private String _tags;
private String _headers;
private String _text;
private String _archive;
private List _filenames;
private List _fileStreams;
private List _localFiles;
@ -30,6 +31,7 @@ public class PostBean {
_tags = null;
_text = null;
_headers = null;
_archive = null;
_filenames = new ArrayList();
_fileStreams = new ArrayList();
_fileTypes = new ArrayList();
@ -51,6 +53,7 @@ public class PostBean {
public void setTags(String tags) { _tags = tags; }
public void setText(String text) { _text = text; }
public void setHeaders(String headers) { _headers = headers; }
public void setArchive(String archive) { _archive = archive; }
public String getContentType(int id) {
if ( (id >= 0) && (id < _fileTypes.size()) )
@ -81,8 +84,26 @@ public class PostBean {
File f = (File)_localFiles.get(i);
localStreams.add(new FileInputStream(f));
}
return BlogManager.instance().createBlogEntry(_user, _subject, _tags, _headers, _text,
_filenames, localStreams, _fileTypes);
BlogURI uri = BlogManager.instance().createBlogEntry(_user, _subject, _tags, _headers, _text,
_filenames, localStreams, _fileTypes);
System.err.println("Posted the entry " + uri.toString() + " (archive = " + _archive + ")");
if ( (uri != null) && (_user.getAllowAccessRemote()) ) {
PetName pn = _user.getPetNameDB().get(_archive);
System.err.println("Archive to petname? " + pn + " (protocol: " + (pn != null ? pn.getProtocol() : "") + ")");
if ( (pn != null) && ("syndiearchive".equals(pn.getProtocol())) ) {
RemoteArchiveBean r = new RemoteArchiveBean();
Map params = new HashMap();
params.put("localentry", new String[] { uri.toString() });
String proxyHost = BlogManager.instance().getDefaultProxyHost();
String port = BlogManager.instance().getDefaultProxyPort();
int proxyPort = 4444;
try { proxyPort = Integer.parseInt(port); } catch (NumberFormatException nfe) {}
System.err.println("Posting the entry " + uri.toString() + " to " + pn.getLocation());
r.postSelectedEntries(_user, params, proxyHost, proxyPort, pn.getLocation());
System.err.println("Post status: " + r.getStatus());
}
}
return uri;
}
public void renderPreview(Writer out) throws IOException {

View File

@ -264,7 +264,7 @@ public class RemoteArchiveBean {
_exportCapable = false;
if ( (schema == null) || (schema.trim().length() <= 0) ||
(location == null) || (location.trim().length() <= 0) ) {
(location == null) || (location.trim().length() <= 0) ) {
_statusMessages.add("Location must be specified");
_fetchIndexInProgress = false;
return;
@ -289,11 +289,11 @@ public class RemoteArchiveBean {
}
_statusMessages.add("Fetching index from " + HTMLRenderer.sanitizeString(_remoteLocation) +
(_proxyHost != null ? " via " + HTMLRenderer.sanitizeString(_proxyHost) + ":" + _proxyPort : ""));
(_proxyHost != null ? " via " + HTMLRenderer.sanitizeString(_proxyHost) + ":" + _proxyPort : ""));
File archiveFile = new File(BlogManager.instance().getTempDir(), user.getBlog().toBase64() + "_remoteArchive.txt");
archiveFile.delete();
EepGet eep = new EepGet(I2PAppContext.getGlobalContext(), ((_proxyHost != null) && (_proxyPort > 0)),
_proxyHost, _proxyPort, 0, archiveFile.getAbsolutePath(), location);
_proxyHost, _proxyPort, 0, archiveFile.getAbsolutePath(), location);
eep.addStatusListener(new IndexFetcherStatusListener(archiveFile));
eep.fetch();
}
@ -506,12 +506,22 @@ public class RemoteArchiveBean {
}
public void postSelectedEntries(User user, Map parameters) {
postSelectedEntries(user, parameters, _proxyHost, _proxyPort, _remoteLocation);
}
public void postSelectedEntries(User user, Map parameters, String proxyHost, int proxyPort, String location) {
String entries[] = ArchiveViewerBean.getStrings(parameters, "localentry");
if ( (entries == null) || (entries.length <= 0) ) return;
List uris = new ArrayList(entries.length);
for (int i = 0; i < entries.length; i++)
uris.add(new BlogURI(entries[i]));
if ( (proxyPort > 0) && (proxyHost != null) && (proxyHost.trim().length() > 0) ) {
_proxyPort = proxyPort;
_proxyHost = proxyHost;
} else {
_proxyPort = -1;
_proxyHost = null;
}
_remoteLocation = location;
post(uris, user);
}

View File

@ -1,51 +0,0 @@
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="net.i2p.data.*, net.i2p.syndie.web.*, net.i2p.syndie.sml.*, net.i2p.syndie.*" %>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean scope="session" class="net.i2p.syndie.User" id="user" />
<html>
<head>
<title>SyndieMedia</title>
<link href="style.jsp" rel="stylesheet" type="text/css" />
</head>
<body>
<table border="1" cellpadding="0" cellspacing="0" width="100%">
<tr><td colspan="5" valign="top" align="left"><jsp:include page="_toplogo.jsp" /></td></tr>
<tr><td valign="top" align="left" rowspan="2"><jsp:include page="_leftnav.jsp" /></td>
<jsp:include page="_topnav.jsp" />
<td valign="top" align="left" rowspan="2"><jsp:include page="_rightnav.jsp" /></td></tr>
<tr><td valign="top" align="left" colspan="3"><%
String nameStr = request.getParameter("name");
String protoStr = request.getParameter("proto");
String locStr = request.getParameter("location");
String schemaStr = request.getParameter("schema");
String name = null;
String proto = null;
String location = null;
String schema = null;
try {
name = DataHelper.getUTF8(Base64.decode(nameStr));
if ( (protoStr != null) && (protoStr.trim().length() > 0) )
proto = DataHelper.getUTF8(Base64.decode(protoStr));
location = DataHelper.getUTF8(Base64.decode(locStr));
schema = DataHelper.getUTF8(Base64.decode(schemaStr));
} catch (NullPointerException npe) {
// ignore
}
if ( (name == null) || (location == null) || (schema == null) ) {
out.write("<b>No location specified</b>");
} else if (user.getAuthenticated() && ("Add".equals(request.getParameter("action"))) ) {
out.write("<b>" + BlogManager.instance().addAddress(user, name, proto, location, schema) + "</b>");
} else { %>Are you sure you really want to add the
addressbook mapping of <%=HTMLRenderer.sanitizeString(name)%> to
<input type="text" size="20" value="<%=HTMLRenderer.sanitizeString(location)%>" />, applicable within the
schema <%=HTMLRenderer.sanitizeString(schema)%>?
<% if (!user.getAuthenticated()) { %>
<p />If so, add the line
<input type="text" size="20" value="<%=HTMLRenderer.sanitizeString(name)%>=<%=HTMLRenderer.sanitizeString(location)%>" />
to your <code>userhosts.txt</code>.
<% } else { %><br />
<a href="addaddress.jsp?name=<%=HTMLRenderer.sanitizeURL(name)%>&location=<%=HTMLRenderer.sanitizeURL(location)%>&schema=<%=HTMLRenderer.sanitizeURL(schema)%>&action=Add">Yes, add it</a>.
<% }
} %></td></tr>
</table>
</body>

View File

@ -158,17 +158,17 @@ if (!user.getAuthenticated()) {
%>
<tr><form action="addresses.jsp" method="POST"><td><input type="text" name="name" size="20" value="<%=name%>" /></td>
<td><select name="network">
<option value="i2p" <%="i2p".equals(net) ? " selected=\"true\" " : ""%>>I2P</option>
<option value="syndie" <%="syndie".equals(net) ? " selected=\"true\" " : ""%>>Syndie</option>
<option value="tor" <%="tor".equals(net) ? " selected=\"true\" " : ""%>>Tor</option>
<option value="freenet" <%="freenet".equals(net) ? " selected=\"true\" " : ""%>>Freenet</option>
<option value="internet" <%="internet".equals(net) ? " selected=\"true\" " : ""%>>Internet</option></select></td>
<option value="i2p" <%="i2p".equalsIgnoreCase(net) ? " selected=\"true\" " : ""%>>I2P</option>
<option value="syndie" <%="syndie".equalsIgnoreCase(net) ? " selected=\"true\" " : ""%>>Syndie</option>
<option value="tor" <%="tor".equalsIgnoreCase(net) ? " selected=\"true\" " : ""%>>Tor</option>
<option value="freenet" <%="freenet".equalsIgnoreCase(net) ? " selected=\"true\" " : ""%>>Freenet</option>
<option value="internet" <%="internet".equalsIgnoreCase(net) ? " selected=\"true\" " : ""%>>Internet</option></select></td>
<td><select name="protocol">
<option value="http" <%="http".equals(proto) ? " selected=\"true\" " : ""%>>HTTP</option>
<option value="irc" <%="irc".equals(proto) ? " selected=\"true\" " : ""%>>IRC</option>
<option value="i2phex" <%="i2phex".equals(proto) ? " selected=\"true\" " : ""%>>I2Phex</option>
<option value="syndiearchive" <%="syndiearchive".equals(proto) ? " selected=\"true\" " : ""%>>Syndie archive</option>
<option value="syndieblog" <%="syndieblog".equals(proto) ? " selected=\"true\" " : ""%>>Syndie blog</option></select></td>
<option value="http" <%="http".equalsIgnoreCase(proto) ? " selected=\"true\" " : ""%>>HTTP</option>
<option value="irc" <%="irc".equalsIgnoreCase(proto) ? " selected=\"true\" " : ""%>>IRC</option>
<option value="i2phex" <%="i2phex".equalsIgnoreCase(proto) ? " selected=\"true\" " : ""%>>I2Phex</option>
<option value="syndiearchive" <%="syndiearchive".equalsIgnoreCase(proto) ? " selected=\"true\" " : ""%>>Syndie archive</option>
<option value="syndieblog" <%="syndieblog".equalsIgnoreCase(proto) ? " selected=\"true\" " : ""%>>Syndie blog</option></select></td>
<td><input type="text" size="50" name="location" value="<%=loc%>" /></td>
<td><input type="checkbox" name="isPublic" /></td>
<td><input type="text" name="groups" size="10" /></td>

81
apps/syndie/jsp/admin.jsp Normal file
View File

@ -0,0 +1,81 @@
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="net.i2p.data.Base64, net.i2p.syndie.web.*, net.i2p.syndie.sml.*, net.i2p.syndie.data.*, net.i2p.syndie.*, org.mortbay.servlet.MultiPartRequest, java.util.*, java.io.*" %>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean scope="session" class="net.i2p.syndie.User" id="user" />
<html>
<head>
<title>SyndieMedia admin</title>
<link href="style.jsp" rel="stylesheet" type="text/css" />
</head>
<body>
<table border="1" cellpadding="0" cellspacing="0" width="100%">
<tr><td colspan="5" valign="top" align="left"><jsp:include page="_toplogo.jsp" /></td></tr>
<tr><td valign="top" align="left" rowspan="2"><jsp:include page="_leftnav.jsp" /></td>
<jsp:include page="_topnav.jsp" />
<td valign="top" align="left" rowspan="2"><jsp:include page="_rightnav.jsp" /></td></tr>
<tr><td valign="top" align="left" colspan="3"><%
if (!user.getAuthenticated()) {
%>You must be logged in to configure your Syndie instance!<%
} else {
String action = request.getParameter("action");
if ( (action != null) && ("Save".equals(action)) ) {
boolean configured = BlogManager.instance().isConfigured();
String adminPass = request.getParameter("adminpass");
String regPass = request.getParameter("regpass");
String remotePass = request.getParameter("remotepass");
String proxyHost = request.getParameter("proxyhost");
String proxyPort = request.getParameter("proxyport");
String selector = request.getParameter("selector");
if (configured) {
if ( (adminPass != null) && (BlogManager.instance().authorizeAdmin(adminPass)) ) {
int port = -1;
try { port = Integer.parseInt(proxyPort); } catch (NumberFormatException nfe) { port = 4444; }
BlogManager.instance().configure(regPass, remotePass, adminPass, selector, proxyHost, port, null);
%>Configuration updated<%
} else {
%>Invalid admin password. If you lost it, please update your syndie.config.<%
}
} else {
int port = -1;
try { port = Integer.parseInt(proxyPort); } catch (NumberFormatException nfe) { port = 4444; }
BlogManager.instance().configure(regPass, remotePass, adminPass, selector, proxyHost, port, null);
%>Configuration saved<%
}
} else {
%><form action="admin.jsp" method="POST">
<b>Registration password:</b> <input type="text" name="regpass" size="10" /><br />
Users must specify this password on the registration form to proceed. If this is
blank, anyone can register.<br />
<b>Remote password:</b> <input type="text" name="remotepass" size="10" /><br />
To access remote archives, users must first provide this password on their
metadata page. Remote access is 'dangerous', as it allows the user to instruct
this Syndie instance to establish HTTP connections with arbitrary locations. If
this field is not specified, no one can use remote archives.<br />
<b>Default remote proxy host:</b> <input type="text" name="proxyhost" size="20" value="localhost" /><br />
<b>Default remote proxy port:</b> <input type="text" name="proxyport" size="5" value="4444" /><br />
This is the default HTTP proxy shown on the remote archive page.<br />
<b>Default blog selector:</b> <input type="text" name="selector" size="40" value="ALL" /><br />
The selector lets you choose what blog (or blogs) are shown on the front page for
new, unregistered users. Valid values include:<ul>
<li><code>ALL<code>: all blogs</li>
<li><code>blog://$blogHash</code>: all posts in the blog identified by $blogHash</li>
<li><code>blogtag://$blogHash/$tagBase64</code>: all posts in the blog identified by $blogHash
tagged by the tag whose modified base64 encoding is $tagBase64</li>
<li><code>tag://$tagBase64</code>: all posts in any blog tagged by the tag whose
modified base64 encoding is $tagBase64</li>
</ul>
<hr />
<% if (!BlogManager.instance().isConfigured()) {
long passNum = new Random().nextLong(); %>
<b>Administrative password:</b> <input type="password" name="adminpass" size="10" value="<%=passNum%>" /> <br />
Since this Syndie instance is not already configured, you can specify a new
administrative password which must be presented whenever you update this configuration.
The default value filled in there is <code><%=passNum%></code><br />
<% } else { %>
<b>Administrative password:</b> <input type="password" name="adminpass" size="10" value="" /> <br />
<% } %>
<input type="submit" name="action" value="Save" />
<% }
} %>
</td></tr>
</table>
</body>

View File

@ -18,8 +18,10 @@
if (!user.getAuthenticated()) {
%>You must be logged in to post<%
} else {
String confirm = request.getParameter("confirm");
if ( (confirm != null) && (confirm.equalsIgnoreCase("true")) ) {
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) {
%>Blog entry <a href="<%=HTMLRenderer.getPageURL(user.getBlog(), null, uri.getEntryId(), -1, -1,
@ -43,17 +45,34 @@ if (!user.getAuthenticated()) {
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);
else entryHeaders = entryHeaders + '\n' + HTMLRenderer.HEADER_IN_REPLY_TO + ": " + new String(r);
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.get((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);
@ -76,13 +95,39 @@ if (!user.getAuthenticated()) {
}
post.renderPreview(out);
%><hr />Please <a href="post.jsp?confirm=true">confirm</a> that this is ok. Otherwise, just go back and make changes.<%
%><hr /><form action="post.jsp" method="POST">
Please confirm that the above is ok<% if (user.getAllowAccessRemote()) { %>, and select what additional archives you
want the post transmitted to. Otherwise, just hit your browser's back arrow and
make changes.
<select 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.get(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 /><% } %>
<input type="submit" name="action" value="Confirm" /><%
} else {
// logged in and not confirmed because they didn't send us anything!
// give 'em a new form
%><form action="post.jsp" method="POST" enctype="multipart/form-data">
Post subject: <input type="text" size="80" name="entrysubject" value="<%=post.getSubject()%>" /><br />
Post tags: <input type="text" size="20" name="entrytags" value="<%=post.getTags()%>" /><br />
Post style: <select name="style">
<option value="default" selected="true">Default</option>
<option value="meta">Meta (hide everything but the metadata)</option>
</select><br />
Include public names? <input type="checkbox" name="includenames" value="true" /><br />
Post content (in raw SML, no headers):<br />
<textarea rows="6" cols="80" name="entrytext"><%=post.getText()%></textarea><br />
<b>SML cheatsheet:</b><br /><textarea rows="6" cols="80" readonly="true">
@ -111,7 +156,6 @@ 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)%>" />
<% } %>
Attachment 0: <input type="file" name="entryfile0" /><br />
Attachment 1: <input type="file" name="entryfile1" /><br />
Attachment 2: <input type="file" name="entryfile2" /><br />