From 979a4cfb69a3ce77d6dcf22060aa5928e3001b3b Mon Sep 17 00:00:00 2001
From: jrandom <jrandom>
Date: Sat, 12 Nov 2005 13:01:32 +0000
Subject: [PATCH] migrate the switchuser and register

---
 .../java/src/net/i2p/syndie/BlogManager.java  | 10 ++++
 .../i2p/syndie/sml/ThreadedHTMLRenderer.java  |  7 ++-
 .../src/net/i2p/syndie/web/BaseServlet.java   | 26 ++++++++--
 .../src/net/i2p/syndie/web/SwitchServlet.java | 48 +++++++++++++++++++
 apps/syndie/jsp/switchuser.jsp                | 17 -------
 5 files changed, 86 insertions(+), 22 deletions(-)
 create mode 100644 apps/syndie/java/src/net/i2p/syndie/web/SwitchServlet.java
 delete mode 100644 apps/syndie/jsp/switchuser.jsp

diff --git a/apps/syndie/java/src/net/i2p/syndie/BlogManager.java b/apps/syndie/java/src/net/i2p/syndie/BlogManager.java
index 63028668d1..f3fd0fb1c2 100644
--- a/apps/syndie/java/src/net/i2p/syndie/BlogManager.java
+++ b/apps/syndie/java/src/net/i2p/syndie/BlogManager.java
@@ -145,9 +145,12 @@ public class BlogManager {
     public BlogInfo createInfo(SigningPublicKey pub, SigningPrivateKey priv, String name, SigningPublicKey posters[], 
                                String description, String contactURL, String archives[], int edition) {
         Properties opts = new Properties();
+        if (name == null) name = "";
         opts.setProperty("Name", name);
+        if (description == null) description = "";
         opts.setProperty("Description", description);
         opts.setProperty("Edition", Integer.toString(edition));
+        if (contactURL == null) contactURL = "";
         opts.setProperty("ContactURL", contactURL);
         for (int i = 0; archives != null && i < archives.length; i++) 
             opts.setProperty("Archive." + i, archives[i]);
@@ -609,6 +612,13 @@ public class BlogManager {
         if (!user.getAuthenticated()) return;
         storeUser(user);
     }
+    public User register(String login, String password, String registrationPassword, String blogName, String blogDescription, String contactURL) {
+        User user = new User(_context);
+        if (User.LOGIN_OK.equals(register(user, login, password, registrationPassword, blogName, blogDescription, contactURL)))
+            return user;
+        else
+            return null;
+    }
     public String register(User user, String login, String password, String registrationPassword, String blogName, String blogDescription, String contactURL) {
         System.err.println("Register [" + login + "] pass [" + password + "] name [" + blogName + "] descr [" + blogDescription + "] contact [" + contactURL + "] regPass [" + registrationPassword + "]");
         String hashedRegistrationPassword = getRegistrationPasswordHash();
diff --git a/apps/syndie/java/src/net/i2p/syndie/sml/ThreadedHTMLRenderer.java b/apps/syndie/java/src/net/i2p/syndie/sml/ThreadedHTMLRenderer.java
index 77edf48f90..38da0529f9 100644
--- a/apps/syndie/java/src/net/i2p/syndie/sml/ThreadedHTMLRenderer.java
+++ b/apps/syndie/java/src/net/i2p/syndie/sml/ThreadedHTMLRenderer.java
@@ -412,8 +412,11 @@ public class ThreadedHTMLRenderer extends HTMLRenderer {
         return buildProfileURL(blog);
     }
     public static String buildProfileURL(Hash blog) {
-        return "profile.jsp?" + ThreadedHTMLRenderer.PARAM_AUTHOR + "=" +
-               Base64.encode(blog.getData());
+        if ( (blog != null) && (blog.getData() != null) )
+            return "profile.jsp?" + ThreadedHTMLRenderer.PARAM_AUTHOR + "=" +
+                   Base64.encode(blog.getData());
+        else
+            return "profile.jsp";
     }
     protected String getEntryURL() { return getEntryURL(_user != null ? _user.getShowImages() : false); }
     protected String getEntryURL(boolean showImages) {
diff --git a/apps/syndie/java/src/net/i2p/syndie/web/BaseServlet.java b/apps/syndie/java/src/net/i2p/syndie/web/BaseServlet.java
index 29bde6acdb..f9d069ecd6 100644
--- a/apps/syndie/java/src/net/i2p/syndie/web/BaseServlet.java
+++ b/apps/syndie/java/src/net/i2p/syndie/web/BaseServlet.java
@@ -33,6 +33,11 @@ public abstract class BaseServlet extends HttpServlet {
         
         if (req.getParameter("regenerateIndex") != null)
             forceNewIndex = true;
+
+        User oldUser = user;
+        user = handleRegister(user, req);
+        if (oldUser != user)
+            forceNewIndex = true;
         
         if (user == null) {
             if ("Login".equals(action)) {
@@ -199,6 +204,22 @@ public abstract class BaseServlet extends HttpServlet {
         boolean updated = BlogManager.instance().updateMetadata(user, user.getBlog(), opts);
     }
     
+    private User handleRegister(User user, HttpServletRequest req) {
+        String l = req.getParameter("login");
+        String p = req.getParameter("password");
+        String name = req.getParameter("accountName");
+        String desc = req.getParameter("description");
+        String contactURL = req.getParameter("url");
+        String regPass = req.getParameter("registrationPass");
+        String action = req.getParameter("action");
+        
+        if ( (action != null) && ("Register".equals(action)) && !empty(l) ) {
+            return BlogManager.instance().register(l, p, regPass, name, desc, contactURL);
+        } else {
+            return user;
+        }
+    }
+    
     protected void render(User user, HttpServletRequest req, PrintWriter out, ThreadIndex index) throws ServletException, IOException {
         Archive archive = BlogManager.instance().getArchive();
         int numThreads = 10;
@@ -248,7 +269,7 @@ public abstract class BaseServlet extends HttpServlet {
         }
         //out.write("</td><td class=\"topNav_admin\">\n");
         out.write("</span><span class=\"topNav_admin\">\n");
-        if (user.getAuthenticated() && user.getAllowAccessRemote()) {
+        if (BlogManager.instance().authorizeRemote(user)) {
             out.write("<a href=\"syndicate.jsp\" title=\"Syndicate data between other Syndie nodes\">Syndicate</a>\n");
             out.write("<a href=\"importfeed.jsp\" title=\"Import RSS/Atom data\">Import RSS/Atom</a>\n");
             out.write("<a href=\"admin.jsp\" title=\"Configure this Syndie node\">Admin</a>\n");
@@ -629,13 +650,12 @@ public abstract class BaseServlet extends HttpServlet {
 ".topNav_user {\n" +
 "	text-align: left;\n" +
 "	float: left;\n" +
-"	align: left;\n" +
 "	display: inline;\n" +
 "}\n" +
 ".topNav_admin {\n" +
 "	text-align: right;\n" +
 "	float: right;\n" +
-"	align: right;\n" +
+"	margin: 0 5px 0 0;\n" +
 "	display: inline;\n" +
 "}\n" +
 ".controlBar {\n" +
diff --git a/apps/syndie/java/src/net/i2p/syndie/web/SwitchServlet.java b/apps/syndie/java/src/net/i2p/syndie/web/SwitchServlet.java
new file mode 100644
index 0000000000..153c820f16
--- /dev/null
+++ b/apps/syndie/java/src/net/i2p/syndie/web/SwitchServlet.java
@@ -0,0 +1,48 @@
+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 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.*;
+
+/**
+ * Login/register form
+ *
+ */
+public class SwitchServlet extends BaseServlet {   
+    private final String FORM = "<form action=\"" + getControlTarget() + "\" method=\"POST\">\n" +
+                                "<tr><td colspan=\"3\"><b>Log in to an existing account</b></td></tr>\n" +
+                                "<tr><td colspan=\"3\">Login: <input type=\"text\" name=\"login\" /></td></tr>\n" +
+                                "<tr><td colspan=\"3\">Password: <input type=\"password\" name=\"password\" /></td></tr>\n" +
+                                "<tr><td colspan=\"3\"><input type=\"submit\" name=\"action\" value=\"Login\" />\n" +
+                                "<input type=\"submit\" name=\"action\" value=\"Cancel\" />\n" +
+                                "<input type=\"submit\" name=\"action\" value=\"Logout\" /></td></tr>\n" +
+                                "</form>\n" +
+                                "<tr><td colspan=\"3\"><hr /></td></tr>\n" +
+                                "<form action=\"" + ThreadedHTMLRenderer.buildProfileURL(null) + "\" method=\"POST\">\n" +
+                                "<tr><td colspan=\"3\"><b>Register a new account</b></td></tr>\n" +
+                                "<tr><td colspan=\"3\">Login: <input type=\"text\" name=\"login\" /> (only known locally)</td></tr>\n" +
+                                "<tr><td colspan=\"3\">Password: <input type=\"password\" name=\"password\" /></td></tr>\n" +
+                                "<tr><td colspan=\"3\">Public name: <input type=\"text\" name=\"accountName\" /></td></tr>\n" +
+                                "<tr><td colspan=\"3\">Description: <input type=\"text\" name=\"description\" /></td></tr>\n" +
+                                "<tr><td colspan=\"3\">Contact URL: <input type=\"text\" name=\"contactURL\" /></td></tr>\n" +
+                                "<tr><td colspan=\"3\">Registration password: <input type=\"password\" name=\"registrationPass\" />" +
+                                " (only necessary if the Syndie administrator requires it)</td></tr>\n" +
+                                "<tr><td colspan=\"3\"><input type=\"submit\" name=\"action\" value=\"Register\" /></td></tr>\n" +
+                                "</form>\n";
+    
+    protected void renderServletDetails(User user, HttpServletRequest req, PrintWriter out, ThreadIndex index, 
+                                        int threadOffset, BlogURI visibleEntry, Archive archive) throws IOException {
+        out.write(FORM);
+    }
+}
diff --git a/apps/syndie/jsp/switchuser.jsp b/apps/syndie/jsp/switchuser.jsp
deleted file mode 100644
index b5d21ac773..0000000000
--- a/apps/syndie/jsp/switchuser.jsp
+++ /dev/null
@@ -1,17 +0,0 @@
-<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="net.i2p.syndie.web.*" %><% 
-request.setCharacterEncoding("UTF-8"); 
-%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 TRANSITIONAL//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
-<html>
-<head>
-<title>Syndie</title>
-<link href="style.jsp" rel="stylesheet" type="text/css" >
-</head>
-<body>
-<form action="threads.jsp" method="GET">
-Syndie login: <input type="text" name="login" /><br />
-Password: <input type="password" name="password" /><br />
-<input type="submit" name="action" value="Login" />
-<input type="submit" name="action" value="Cancel" />
-<input type="submit" name="action" value="Logout" />
-</form>
-</body>
\ No newline at end of file
-- 
GitLab