commit d62310388e98a99aed5c22aa3299b846ceddf559 from: leo date: Fri Apr 15 10:09:15 2005 UTC fixed santizing code commit - 2ce6b28b221bde671d1b0e3fa38206b5236dba70 commit + d62310388e98a99aed5c22aa3299b846ceddf559 blob - dd2bef600f4c05da08c6afa9fff7c21240ed815e blob + 6171455cc05eefce4e5f3eb6bdf5012cc4582b09 --- src/org/snipsnap/net/CommentStoreServlet.java +++ src/org/snipsnap/net/CommentStoreServlet.java @@ -100,6 +100,9 @@ public class CommentStoreServlet extends HttpServlet { } private String sanitize(String parameter) { - return parameter.split("[\r\n]")[0]; + if(parameter != null) { + return parameter.split("[\r\n]")[0]; + } + return parameter; } } blob - 252e4c2e2683dc139feb79112e0636ed1302ed48 blob + c00c0a82f7c408644783f1da0699f8331cf940da --- src/org/snipsnap/net/LoginServlet.java +++ src/org/snipsnap/net/LoginServlet.java @@ -95,7 +95,10 @@ public class LoginServlet extends HttpServlet { } private String sanitize(String parameter) { - return parameter.split("[\r\n]")[0]; + if(parameter != null) { + return parameter.split("[\r\n]")[0]; + } + return parameter; } protected void doGet(HttpServletRequest request, HttpServletResponse response) blob - cfddca598f3dbee5d31ec023db4c6a485c66a2fd blob + 4919d42a1ff71b796379ee57aeb708361755bf54 --- src/org/snipsnap/net/NewUserServlet.java +++ src/org/snipsnap/net/NewUserServlet.java @@ -148,6 +148,9 @@ public class NewUserServlet extends HttpServlet { } private String sanitize(String parameter) { - return parameter.split("[\r\n]")[0]; + if(parameter != null) { + return parameter.split("[\r\n]")[0]; + } + return parameter; } } blob - 6a77592a4284ad8a3b3d9c1ff50a98f9531ea313 blob + cd7665ca1cf187acd6b0d93afa804cd9b1f131d5 --- src/org/snipsnap/net/RenderServlet.java +++ src/org/snipsnap/net/RenderServlet.java @@ -27,16 +27,24 @@ package org.snipsnap.net; import org.radeox.util.Service; import org.snipsnap.graph.ContentRenderer; import org.snipsnap.graph.HorizontalContentRenderer; +import org.snipsnap.graph.builder.StringTreeBuilder; +import org.snipsnap.graph.builder.TreeBuilder; +import org.snipsnap.graph.context.UrlContext; +import org.snipsnap.graph.renderer.HtmlMapRenderer; +import org.snipsnap.graph.renderer.Renderer; +import snipsnap.api.app.Application; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.util.Collections; -import java.util.Map; import java.util.HashMap; import java.util.Iterator; -import java.io.IOException; +import java.util.Map; /** * Render special content added to a temporary store. This is used for the @@ -47,14 +55,30 @@ import java.io.IOException; * @version $Id$ */ public class RenderServlet extends HttpServlet { + private final static String RENDER_ID = "__render_id"; + private static Map contentMap = Collections.synchronizedMap(new HashMap()); - private Map handlers = new HashMap(); + private static Map handlers = new HashMap(); private final static ContentRenderer DEFAULT_HANDLER = new HorizontalContentRenderer(); /** + * Initialize the render servlet by loading the content handlers. + */ + static { + Iterator contentRenderer = + Service.providers(org.snipsnap.graph.ContentRenderer.class); + while (contentRenderer.hasNext()) { + ContentRenderer renderer = (ContentRenderer) contentRenderer.next(); + handlers.put(renderer.getName(), renderer); + } + } + + + /** * Add content to the temporary store and return an id that can be used to select * the content later. The graph macro uses this to store the graph description * here which is then handed over to the rendering handler to translate to an image. + * The id will persist until content for the same name is added. *

* Example: * <img src="/exec/render?id=XXXX&handler=YYYY"/> @@ -62,40 +86,59 @@ public class RenderServlet extends HttpServlet { * @param content the textual content to be rendered * @return an it to add to the url for retrieving the rendered content */ - public static String addContent(String content) { - String key = null; + public static String addContent(String name, String content) { + Application app = Application.get(); + String baseId = RENDER_ID + name; + String renderId = null; synchronized (contentMap) { + String key = null; int add = 0; - int hashCode = content.hashCode(); do { - key = String.valueOf(hashCode + add++); - } while (contentMap.containsKey(key)); - contentMap.put(key, content); + key = String.valueOf(baseId + add++); + } while (app.getObject(key) != null); + // store a dummy to ensure the id is taken + app.storeObject(key, ""); + // store content with corresponding id + renderId = Integer.toHexString(key.hashCode()); + contentMap.put(renderId, content); } - return key; + return renderId; } - /** - * Initialize the render servlet by loading the content handlers. - * - * @throws ServletException - */ - public void init() throws ServletException { - Iterator contentRenderer = - Service.providers(org.snipsnap.graph.ContentRenderer.class); - while (contentRenderer.hasNext()) { - ContentRenderer renderer = (ContentRenderer) contentRenderer.next(); - handlers.put(renderer.getName(), renderer); + public static String getImageMap(String renderId, String handler) { + HtmlMapRenderer mapRenderer = new HtmlMapRenderer(); + TreeBuilder builder = new StringTreeBuilder((String) contentMap.get(renderId)); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + Renderer renderer = ((ContentRenderer) handlers.get(handler)).getRenderer(); + if (null != renderer) { + UrlContext context = new UrlContext(renderId, renderer); + mapRenderer.render(builder.build(), out, context); + try { + out.flush(); + out.close(); + } catch (IOException e) { + // ignore as this is unlikely to happen + e.printStackTrace(); + } + try { + return out.toString(Application.get().getConfiguration().getEncoding()); + } catch (UnsupportedEncodingException e) { + return out.toString(); + } + } else { + // we can't render the image map, so return comment + return ""; } } + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String handler = request.getParameter("handler"); String id = request.getParameter("id"); String content = (String) contentMap.get(id); - contentMap.remove(id); ContentRenderer renderer = (ContentRenderer) handlers.get(handler); if (null == renderer) { blob - ccda977a3cdadfd903feedc6a7a00fc43b69d367 blob + 1b3faeea18196d44917f6f498b87830c665d161e --- src/org/snipsnap/net/SnipEditServlet.java +++ src/org/snipsnap/net/SnipEditServlet.java @@ -26,17 +26,15 @@ package org.snipsnap.net; import org.radeox.util.Encoder; import org.radeox.util.logging.Logger; -import snipsnap.api.app.Application; -import snipsnap.api.container.Components; import org.snipsnap.security.AccessController; -import snipsnap.api.snip.Snip; -import snipsnap.api.snip.SnipSpace; -import snipsnap.api.label.Label; -import snipsnap.api.label.Labels; import org.snipsnap.snip.label.TypeLabel; -import org.snipsnap.user.Permissions; import org.snipsnap.user.Roles; import org.snipsnap.user.Security; +import snipsnap.api.app.Application; +import snipsnap.api.container.Components; +import snipsnap.api.label.Label; +import snipsnap.api.label.Labels; +import snipsnap.api.snip.Snip; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; @@ -182,6 +180,9 @@ public class SnipEditServlet extends HttpServlet { } private String sanitize(String parameter) { - return parameter.split("[\r\n]")[0]; + if (parameter != null) { + return parameter.split("[\r\n]")[0]; + } + return parameter; } } blob - f2f7b94c1adb26059ae36ae8f78dbf6ea5b823c2 blob + 98681ba8a7d60edabf3b3c90ca8404eef28263f3 --- src/org/snipsnap/net/SnipStoreServlet.java +++ src/org/snipsnap/net/SnipStoreServlet.java @@ -25,19 +25,13 @@ package org.snipsnap.net; import org.radeox.util.logging.Logger; -import snipsnap.api.app.Application; -import snipsnap.api.config.Configuration; -import snipsnap.api.container.Components; import org.snipsnap.net.filter.MultipartWrapper; import org.snipsnap.security.AccessController; -import snipsnap.api.snip.Snip; import org.snipsnap.snip.SnipFormatter; +import org.snipsnap.user.AuthenticationService; import snipsnap.api.snip.SnipLink; import snipsnap.api.snip.SnipSpace; import snipsnap.api.snip.SnipSpaceFactory; -import org.snipsnap.user.AuthenticationService; -import org.snipsnap.user.Permissions; -import org.snipsnap.user.Security; import snipsnap.api.user.User; import javax.servlet.RequestDispatcher; @@ -160,6 +154,9 @@ public class SnipStoreServlet extends HttpServlet { } private String sanitize(String parameter) { - return parameter.split("[\r\n]")[0]; + if (parameter != null) { + return parameter.split("[\r\n]")[0]; + } + return parameter; } }