From ee8e45ecf7d3e883a98e130eec6c44a12d21d1c0 Mon Sep 17 00:00:00 2001 From: jrandom <jrandom> Date: Sun, 4 Sep 2005 21:51:17 +0000 Subject: [PATCH] allow web based control of who gets to access remote repositories. if the prop "syndie.remotePassword" is set, users can enter it while viewing their metadata --- .../java/src/net/i2p/syndie/BlogManager.java | 27 +++++++++++++++++++ apps/syndie/jsp/viewmetadata.jsp | 17 +++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/apps/syndie/java/src/net/i2p/syndie/BlogManager.java b/apps/syndie/java/src/net/i2p/syndie/BlogManager.java index c0c2d13b45..708e3996be 100644 --- a/apps/syndie/java/src/net/i2p/syndie/BlogManager.java +++ b/apps/syndie/java/src/net/i2p/syndie/BlogManager.java @@ -72,10 +72,13 @@ public class BlogManager { for (Iterator iter = p.keySet().iterator(); iter.hasNext(); ) { String key = (String)iter.next(); System.setProperty(key, p.getProperty(key)); + System.out.println("Read config prop [" + key + "] = [" + p.getProperty(key) + "]"); } } catch (IOException ioe) { ioe.printStackTrace(); } + } else { + System.out.println("Config doesn't exist: " + config.getPath()); } } @@ -217,6 +220,30 @@ public class BlogManager { return pass; } + /** Password required to access the remote syndication functinoality (null means no password required) */ + public String getRemotePassword() { + String pass = _context.getProperty("syndie.remotePassword"); + + System.out.println("Remote password? [" + pass + "]"); + if ( (pass == null) || (pass.trim().length() <= 0) ) return null; + return pass; + } + + public String authorizeRemoteAccess(User user, String password) { + if (!user.getAuthenticated()) return "Not logged in"; + String remPass = getRemotePassword(); + if (remPass == null) + return "Remote access password not configured - please specify 'syndie.remotePassword' in your syndie.config"; + + if (remPass.equals(password)) { + user.setAllowAccessRemote(true); + saveUser(user); + return "Remote access authorized"; + } else { + return "Remote access denied"; + } + } + public void saveUser(User user) { if (!user.getAuthenticated()) return; String userHash = Base64.encode(_context.sha().calculateHash(DataHelper.getUTF8(user.getUsername())).getData()); diff --git a/apps/syndie/jsp/viewmetadata.jsp b/apps/syndie/jsp/viewmetadata.jsp index 0734eeba0b..750b46ff81 100644 --- a/apps/syndie/jsp/viewmetadata.jsp +++ b/apps/syndie/jsp/viewmetadata.jsp @@ -1,5 +1,6 @@ -<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="net.i2p.syndie.web.*" %> +<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="net.i2p.syndie.web.*, net.i2p.syndie.*" %> <% request.setCharacterEncoding("UTF-8"); %> +<jsp:useBean scope="session" class="net.i2p.syndie.User" id="user" /> <html> <head> <title>SyndieMedia</title> @@ -13,6 +14,20 @@ <td valign="top" align="left" rowspan="2"><jsp:include page="_rightnav.jsp" /></td></tr> <tr><td valign="top" align="left" colspan="3"><% ArchiveViewerBean.renderMetadata(request.getParameterMap(), out); +if (user.getAuthenticated()) { + if ("Authorize".equals(request.getParameter("action"))) { + %><b><%=BlogManager.instance().authorizeRemoteAccess(user, request.getParameter("password"))%></b><% + } + if (!user.getAllowAccessRemote()) { + if (user.getBlog().toBase64().equals(request.getParameter("blog"))) { + %><hr /><form action="viewmetadata.jsp" method="POST"> +<input type="hidden" name="blog" value="<%=request.getParameter("blog")%>" /> +To access remote instances from this instance, please supply the Syndie administration password: <input type="password" name="password" /> +<input type="submit" name="action" value="Authorize" /> +</form><% + } + } +} %></td></tr> </table> </body> \ No newline at end of file -- GitLab