commit b6c2287f5b3ca967208eed57480d56a7a852ba57 from: leo date: Wed Feb 1 19:37:10 2006 UTC fixed guest login commit - 6678ad177ad1fe96b0e65b8b7ab79839a5548938 commit + b6c2287f5b3ca967208eed57480d56a7a852ba57 blob - 04346d23d3002f0a477019d4b8a83bba02869deb blob + e18fd28ce14d3a2be37d715ceb339c75cac22e24 --- build.xml +++ build.xml @@ -15,8 +15,12 @@ - + + + + + @@ -45,7 +49,9 @@ - + + + @@ -141,7 +147,11 @@ - + + + + + @@ -266,7 +276,10 @@ - + + + + @@ -486,7 +499,9 @@ - + + + blob - 792e560ca4e5f576250af71ea2351cd29fa61b40 blob + d804467c53879df3e9b40117622be32351a5fc55 --- conf/copyright.txt +++ conf/copyright.txt @@ -1,4 +1,4 @@ -Copyright (c) 2000-2004 Fraunhofer Gesellschaft +Copyright (c) 2000-2006 Fraunhofer Gesellschaft Fraunhofer Institute for Computer Architecture and Software Technology All Rights Reserved. See License Agreement for terms and conditions of use. Responsible Authors: Stephan J. Schmidt, Matthias L. Jugel. blob - 8b1176f163576baabbff32014ebc00c79f21d95f blob + 62699272e91cf7064df19b168d471df9bc1be766 --- conf/gabriel/access.acl +++ conf/gabriel/access.acl @@ -26,6 +26,6 @@ User { Owner { } Guest { + VIEW_SNIP VIEW_LOGIN - VIEW_SNIP } blob - d91d1988fb4e0f7c73cbaec0c4ff54a0bcb26f7f blob + 6c5644c76ed8673b57755346e1b8da389ef2a51c --- conf/manifest +++ conf/manifest @@ -1,4 +1,4 @@ Manifest-Version: 1.0 Created-By: SnipSnap Project (http://snipsnap.org) Main-Class: org.snipsnap.server.AppServer -Class-Path: org.mortbay.jetty.jar javax.servlet.jar org.apache.jasper.jar org.apache.crimson.jar xmlrpc-1.2-b1.jar mckoidb.jar mysql-connector.jar postgres-jdbc.jar jdic.jar +Class-Path: org.mortbay.jetty.jar javax.servlet.jar org.apache.jasper.jar org.apache.crimson.jar xmlrpc-2.0.jar mckoidb.jar mysql-connector.jar postgres-jdbc.jar jdic.jar commons-codec-1.3.jar commons-httpclient-3.0-rc3.jar commons-logging.jar blob - 52c6575eee48f316e0e79f3f85fd76662e552241 blob + 9e243ddf3d7203295f39319251d60cfb79e92cc7 --- conf/snipsnap.conf +++ conf/snipsnap.conf @@ -2,7 +2,7 @@ # $Id$ # # current version and encoding -snipsnap.server.version=1.0b1-uttoxeter +snipsnap.server.version=1.0 snipsnap.server.encoding=UTF-8 # # administration server port blob - /dev/null blob + 957b6752af9a60c1bb2a4f65db0e90e5ce00f521 (mode 644) Binary files /dev/null and lib/commons-codec-1.3.jar differ blob - b99c9375a488e556208556e44230d7983d0fac50 blob + b73a80fab641131e6fbe3ae833549efb3c540d17 Binary files lib/commons-logging.jar and lib/commons-logging.jar differ blob - /dev/null blob + c17584060df58c5f0ccac0f7938e2928df5add81 (mode 644) Binary files /dev/null and lib/commons-httpclient-3.0-rc3.jar differ blob - 553917b027fa1ca401842827892a84813e4092cf blob + 521f2e062918f91e1e4ee0a8a08c06e1a4ef2151 Binary files lib/jdbcstorage-1.0-alpha-1.jar and lib/jdbcstorage-1.0-alpha-1.jar differ blob - f940d4a143148a0edd9dd30e89be7b2dee193e64 blob + 953778698ed7efa704837db72fd9c530d1fb089b Binary files lib/radeox.jar and lib/radeox.jar differ blob - 5459ca4c450957b1021dfd2a2f8e738cda25f47c blob + 18b3993ab8f60ac03052c82cacfe3a73b3c427c5 Binary files lib/search-ng-1.0-alpha-1.jar and lib/search-ng-1.0-alpha-1.jar differ blob - c8b027725ff6702acd3e09539ca4fdedff29e22d (mode 644) blob + /dev/null Binary files lib/xmlrpc-1.2-b1.jar and /dev/null differ blob - /dev/null blob + 991edc29a25590de80fa91a382bdc7348134bf62 (mode 644) Binary files /dev/null and lib/xmlrpc-2.0.jar differ blob - bcbe440644e174cd1c2e7e0bf24afd6cf44648e7 blob + 1e90fb26ce9271e8a5e76720599a1322545747ff --- src/META-INF/services/org.snipsnap.container.Component +++ src/META-INF/services/org.snipsnap.container.Component @@ -1,3 +1,3 @@ org.snipsnap.container.MessageLogService org.snipsnap.net.handler.TestStoreHandler -org.snipsnap.net.RssServlet +#org.snipsnap.net.RssServlet blob - 75a43947539a817855fbb4760100530cea5ec153 blob + 40c6992c7bb85960a40e92b30ef8e29b7ba2a438 --- src/apps/default/main.jsp +++ src/apps/default/main.jsp @@ -30,7 +30,14 @@ - + + + + + + + + blob - e0101596b2a49f08877dc3e90517abecc937884a blob + 3e830688035e675aeabdb558e885bfb60b38c2c4 --- src/org/snipsnap/graph/ExplorerContentRenderer.java +++ src/org/snipsnap/graph/ExplorerContentRenderer.java @@ -36,7 +36,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class ExplorerContentRenderer implements ContentRenderer { - Renderer renderer = new ExplorerRenderer(); + private Renderer renderer = new ExplorerRenderer(); public String getName() { return "explorer"; blob - 5d4d89cd8ba22530adebe19ed7a2b7e61bb4e108 blob + 6be09845542a67633c4108c1222d70f6e58808f0 --- src/org/snipsnap/graph/HorizontalContentRenderer.java +++ src/org/snipsnap/graph/HorizontalContentRenderer.java @@ -36,7 +36,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HorizontalContentRenderer implements ContentRenderer { - Renderer renderer = new HorizontalRenderer(); + private Renderer renderer = new HorizontalRenderer();; public String getName() { return "horizontal"; blob - bf6e962d3f4bb8799117b1d5006f6f90dd78c715 blob + ec3d35466a1034f08c4a6536b39e72d0e1ede8d5 --- src/org/snipsnap/graph/PSPContentRenderer.java +++ src/org/snipsnap/graph/PSPContentRenderer.java @@ -35,7 +35,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class PSPContentRenderer implements ContentRenderer { - Renderer renderer = new DirectedAcyclicGraphRenderer(); + private Renderer renderer = new DirectedAcyclicGraphRenderer(); public String getName() { return "psp"; blob - 18afed005be30722656203a24bf17d66a43f8c6d blob + 17f48d6cab1ae4387b677486ba52a4eba6b3ef19 --- src/org/snipsnap/graph/UMLContentRenderer.java +++ src/org/snipsnap/graph/UMLContentRenderer.java @@ -27,8 +27,8 @@ package org.snipsnap.graph; import org.snipsnap.graph.builder.StringUMLBuilder; import org.snipsnap.graph.builder.UMLBuilder; import org.snipsnap.graph.context.UMLRendererContext; -import org.snipsnap.graph.renderer.UMLGraphRenderer; import org.snipsnap.graph.renderer.Renderer; +import org.snipsnap.graph.renderer.UMLGraphRenderer; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; @@ -36,6 +36,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class UMLContentRenderer implements ContentRenderer { + private UMLGraphRenderer renderer = new UMLGraphRenderer(); public String getName() { return "uml"; @@ -49,9 +50,7 @@ public class UMLContentRenderer implements ContentRend response.setContentType("image/png"); ServletOutputStream out = response.getOutputStream(); - UMLBuilder builder = new StringUMLBuilder(content); - UMLGraphRenderer renderer = new UMLGraphRenderer(); try { renderer.render(builder.build(), out, new UMLRendererContext()); } catch (Exception e) { blob - 9f2be8fd49a5a5cdb9abcad2d57a237017eb85da blob + d49484281533f2dc090e6630c3a4d8fdab0aba38 --- src/org/snipsnap/graph/VerticalContentRenderer.java +++ src/org/snipsnap/graph/VerticalContentRenderer.java @@ -50,7 +50,6 @@ public class VerticalContentRenderer implements Conten response.setContentType("image/png"); ServletOutputStream out = response.getOutputStream(); - TreeBuilder builder = new StringTreeBuilder(content); renderer.render(builder.build(), out, new GraphRendererContext()); } blob - 2b0a5939dce89b8a7540336e1a2a933a96367343 blob + 670c25bf65a9078f372f90fc94242476a772a570 --- src/org/snipsnap/net/NameSpaceServlet.java +++ src/org/snipsnap/net/NameSpaceServlet.java @@ -44,9 +44,6 @@ import java.io.IOException; */ public class NameSpaceServlet extends HttpServlet { - public void init() throws ServletException { - } - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { blob - 4919d42a1ff71b796379ee57aeb708361755bf54 blob + 1ecd23cd7c906544358a48a1ef1f393de915021f --- src/org/snipsnap/net/NewUserServlet.java +++ src/org/snipsnap/net/NewUserServlet.java @@ -25,16 +25,15 @@ 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.container.SessionService; import org.snipsnap.net.filter.MultipartWrapper; import org.snipsnap.snip.HomePage; -import snipsnap.api.snip.SnipLink; -import snipsnap.api.user.User; import org.snipsnap.user.UserManager; import org.snipsnap.user.UserManagerFactory; +import snipsnap.api.app.Application; +import snipsnap.api.container.Components; +import snipsnap.api.snip.SnipLink; +import snipsnap.api.user.User; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; @@ -148,7 +147,7 @@ public class NewUserServlet extends HttpServlet { } private String sanitize(String parameter) { - if(parameter != null) { + if (parameter != null) { return parameter.split("[\r\n]")[0]; } return parameter; blob - a8ddba7bb0e4c90b24d862b513f97381bfddbbe0 blob + c3c1b622b58be40dd44a0de4921960b9d4d3bb8d --- src/org/snipsnap/net/PluginServlet.java +++ src/org/snipsnap/net/PluginServlet.java @@ -27,17 +27,11 @@ package org.snipsnap.net; import groovy.text.SimpleTemplateEngine; import groovy.text.Template; import org.radeox.util.logging.Logger; -import snipsnap.api.app.Application; -import snipsnap.api.container.Components; -import snipsnap.api.snip.Snip; -import snipsnap.api.snip.SnipSpace; -import snipsnap.api.plugin.ServletPlugin; +import org.snipsnap.container.Components; import org.snipsnap.snip.label.TypeLabel; import org.snipsnap.user.Permissions; import org.snipsnap.user.Roles; import org.snipsnap.user.Security; -import org.snipsnap.xmlrpc.XmlRpcHandler; -import org.picocontainer.PicoContainer; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; @@ -56,6 +50,11 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import snipsnap.api.snip.SnipSpace; +import snipsnap.api.snip.Snip; +import snipsnap.api.plugin.ServletPlugin; +import snipsnap.api.app.Application; + public class PluginServlet extends HttpServlet { private Map extTypeMap = new HashMap(); private Map servletCache = new HashMap(); @@ -70,7 +69,6 @@ public class PluginServlet extends HttpServlet { // currently supported script types (with extensions) extTypeMap.put(".gsp", "text/gsp"); extTypeMap.put(".groovy", "text/groovy"); - } protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { @@ -87,7 +85,7 @@ public class PluginServlet extends HttpServlet { // check for the plugin in the snip space which overrides other plugins SnipSpace space = (SnipSpace) Components.getComponent(SnipSpace.class); if (space.exists(pluginName)) { - snipsnap.api.snip.Snip snip = space.load(pluginName); + Snip snip = space.load(pluginName); // only execute plugins who are locked by an Admin if (Security.existsPermission(Permissions.EDIT_SNIP, snip, EXEC_ROLES)) { String mimeType = getMIMEType(snip); @@ -111,28 +109,67 @@ public class PluginServlet extends HttpServlet { // check for registered plugins Map plugins = ServletPluginLoader.getPlugins(); if (plugins.containsKey(pluginName)) { - // a non-script plugin (i.e. servlet or simply a file) - ServletPlugin servletPlugin = (ServletPlugin) plugins.get(pluginName); - if (null == servletPlugin) { - try { - servletPlugin = getServletPlugin(pluginName); - servletCache.put(pluginName, servletPlugin); - } catch (Exception e) { - // ignore plugins not found ... + String handlerMIMEType = (String) plugins.get(pluginName); + + // try to find a mime type for the requested plugin + if (null == handlerMIMEType) { + int extIndex = pluginName.indexOf("."); + if (extIndex != -1) { + handlerMIMEType = (String) extTypeMap.get(pluginName.substring(extIndex)); } } - // a servlet plugin is executed, everything else is included into the response - if (null != servletPlugin) { + if ("text/gsp".equalsIgnoreCase(handlerMIMEType)) { + BufferedWriter writer = new BufferedWriter(response.getWriter()); try { - servletPlugin.service(request, response); + handleGroovyTemplate(getTemplateSource(pluginName), writer); } catch (Exception e) { - Logger.warn("error while executing servlet plugin", e); - throw new ServletException("error while executing servlet plugin", e); + e.printStackTrace(); + writer.write("" + e.getLocalizedMessage() + ""); } + writer.flush(); + return; + } else { + // a non-script plugin (i.e. servlet or simply a file) + ServletPlugin servletPlugin = (ServletPlugin) servletCache.get(pluginName); + if (null == servletPlugin) { + try { + servletPlugin = getServletPlugin(pluginName); + servletCache.put(pluginName, servletPlugin); + } catch (Exception e) { + // ignore plugins not found ... + } + } + + // a servlet plugin is executed, everything else is included into the response + if (null != servletPlugin) { + try { + servletPlugin.service(request, response); + } catch (Exception e) { + Logger.warn("error while executing servlet plugin", e); + throw new ServletException("error while executing servlet plugin", e); + } + } else { + if (null != handlerMIMEType) { + response.setContentType(handlerMIMEType); + } + OutputStream out = response.getOutputStream(); + InputStream fileIs = PluginServlet.class.getResourceAsStream("/" + pluginName); + if (null != fileIs) { + byte[] buffer = new byte[1024]; + int bytes = 0; + while ((bytes = fileIs.read(buffer)) != -1) { + out.write(buffer, 0, bytes); + } + out.flush(); + } else { + throw new ServletException("unable to load servlet plugin: not found"); + } + } + return; } - return; } + response.sendError(HttpServletResponse.SC_FORBIDDEN); } @@ -141,7 +178,7 @@ public class PluginServlet extends HttpServlet { return (ServletPlugin) pluginClass.newInstance(); } - private String getMIMEType(snipsnap.api.snip.Snip snip) { + private String getMIMEType(Snip snip) { Collection mimeTypes = snip.getLabels().getLabels("TypeLabel"); if (!mimeTypes.isEmpty()) { Iterator handlerIt = mimeTypes.iterator(); @@ -156,7 +193,7 @@ public class PluginServlet extends HttpServlet { private void handleGroovyTemplate(String source, Writer out) throws Exception { try { Template groovyTemplate = templateEngine.createTemplate(source); - groovyTemplate.make(snipsnap.api.app.Application.get().getParameters()).writeTo(out); + groovyTemplate.make(Application.get().getParameters()).writeTo(out); } catch (Error e) { e.printStackTrace(); throw new ServletException("groovy error", e); blob - cd7665ca1cf187acd6b0d93afa804cd9b1f131d5 blob + 370523530c4164b35db00ec21f66a9ce97f8f712 --- src/org/snipsnap/net/RenderServlet.java +++ src/org/snipsnap/net/RenderServlet.java @@ -61,6 +61,7 @@ public class RenderServlet extends HttpServlet { private static Map handlers = new HashMap(); private final static ContentRenderer DEFAULT_HANDLER = new HorizontalContentRenderer(); + private final static Map CTOR = new HashMap(); /** * Initialize the render servlet by loading the content handlers. */ blob - ca7cf6a75b50d4c07ac6312f0d0a0d938c5c4d9f blob + 16e6578001e4aef00d744e25b6d97167d53fa58d --- src/org/snipsnap/net/ServletPluginLoader.java +++ src/org/snipsnap/net/ServletPluginLoader.java @@ -29,6 +29,8 @@ import snipsnap.api.container.Components; import snipsnap.api.snip.Snip; import snipsnap.api.plugin.ServletPlugin; import org.snipsnap.snip.label.TypeLabel; +import org.radeox.util.Service; +import org.radeox.util.logging.Logger; import java.util.HashMap; import java.util.Iterator; @@ -88,13 +90,20 @@ public class ServletPluginLoader { if (null == pluginServlets) { pluginServlets = new HashMap(); - Collection components = snipsnap.api.container.Components.findComponents(ServletPlugin.class); - - Iterator iterator = components.iterator(); - while (iterator.hasNext()) { - ServletPlugin plugin = (ServletPlugin) iterator.next(); - pluginServlets.put(plugin.getPath(), plugin); - } - } + // load plugins from services api + Iterator pluginServletNames = Service.providerNames(ServletPlugin.class); + while (pluginServletNames.hasNext()) { + String pluginLine = (String) pluginServletNames.next(); + if (!pluginLine.startsWith("#")) { + String[] pluginInfo = pluginLine.split("\\p{Space}+"); + if (pluginInfo.length > 0) { + pluginServlets.put(pluginInfo[0], pluginInfo.length > 1 ? pluginInfo[1] : null); + Logger.log("found plugin: " + pluginInfo[0]); + } else { + Logger.warn("ignoring servlet plugin '" + pluginLine + "': missing type or servlet"); + } + } + } + } } } blob - eeb220632d9c030f83c1805a077298e0d37b4db1 blob + cbf0dc275a76bc769bb4fef859f0988684029764 --- src/org/snipsnap/net/SnipCopyServlet.java +++ src/org/snipsnap/net/SnipCopyServlet.java @@ -25,10 +25,10 @@ package org.snipsnap.net; import org.radeox.util.logging.Logger; +import org.snipsnap.net.filter.MultipartWrapper; import snipsnap.api.app.Application; import snipsnap.api.config.Configuration; import snipsnap.api.container.Components; -import org.snipsnap.net.filter.MultipartWrapper; import snipsnap.api.snip.Snip; import snipsnap.api.snip.SnipLink; import snipsnap.api.snip.SnipSpace; @@ -110,11 +110,18 @@ public class SnipCopyServlet extends HttpServlet { return; } - String referer = request.getHeader("REFERER"); + String referer = sanitize(request.getHeader("REFERER")); if (referer == null || referer.length() == 0) { referer = config.getSnipUrl(config.getStartSnip()); } response.sendRedirect(referer); } + private String sanitize(String parameter) { + if (null != parameter) { + return parameter.split("[\r\n]")[0]; + } + return parameter; + } + } blob - 616f82db82c29ff897be1d5081f25902975a0f1e blob + 2a066251bfee1943b0acdbb86ab03ca8b63a8376 --- src/org/snipsnap/net/admin/Maintenance.java +++ src/org/snipsnap/net/admin/Maintenance.java @@ -26,11 +26,11 @@ package org.snipsnap.net.admin; import org.radeox.util.logging.Logger; +import org.snipsnap.snip.Access; +import org.snipsnap.snip.Links; import snipsnap.api.app.Application; import snipsnap.api.config.Configuration; import snipsnap.api.container.Components; -import org.snipsnap.snip.Access; -import org.snipsnap.snip.Links; import snipsnap.api.snip.Snip; import snipsnap.api.snip.SnipSpace; blob - 3d22fdd36e320cc2f51023250b7fd2e66411c546 blob + 472183e93ff24b6bd391975d35869000c066e827 --- src/org/snipsnap/net/admin/ThemeImageServlet.java +++ src/org/snipsnap/net/admin/ThemeImageServlet.java @@ -25,7 +25,6 @@ */ package org.snipsnap.net.admin; -import org.apache.xmlrpc.Base64; import org.dom4j.Document; import org.dom4j.Element; import org.radeox.util.logging.Logger; @@ -35,6 +34,8 @@ import snipsnap.api.snip.Snip; import org.snipsnap.snip.attachment.Attachment; import org.snipsnap.snip.attachment.storage.AttachmentStorage; import snipsnap.api.container.Components; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.codec.BinaryDecoder; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -84,7 +85,7 @@ public class ThemeImageServlet extends HttpServlet { } private InputStream getImageStream(String base64str) throws Exception { - byte buffer[] = Base64.decode(base64str.getBytes("UTF-8")); + byte buffer[] = Base64.decodeBase64(base64str.getBytes("UTF-8")); return new ByteArrayInputStream(buffer); } blob - 2838f6ea465c03c04b602fad9ed27223239d5df3 blob + 78bbdb7a188e5fafd0df30974cfcc834f5256f70 --- src/org/snipsnap/net/filter/InitFilter.java +++ src/org/snipsnap/net/filter/InitFilter.java @@ -27,20 +27,17 @@ package org.snipsnap.net.filter; import org.radeox.util.i18n.ResourceManager; import org.radeox.util.logging.LogHandler; import org.radeox.util.logging.Logger; -import snipsnap.api.app.Application; import org.snipsnap.app.ApplicationManager; -import snipsnap.api.config.Configuration; import org.snipsnap.config.ConfigurationManager; import org.snipsnap.config.ConfigurationProxy; import org.snipsnap.config.Globals; import org.snipsnap.config.ServerConfiguration; -import snipsnap.api.container.Components; import org.snipsnap.container.SessionService; +import org.snipsnap.user.Digest; +import snipsnap.api.config.Configuration; import snipsnap.api.snip.Snip; import snipsnap.api.snip.SnipLink; import snipsnap.api.snip.SnipSpace; -import snipsnap.api.snip.SnipSpaceFactory; -import org.snipsnap.user.Digest; import snipsnap.api.user.User; import javax.servlet.Filter; @@ -187,9 +184,9 @@ public class InitFilter implements Filter { } if (weblogsPing) { System.out.println(">> WARNING: Weblogs ping is enabled for some instances.\n" + - ">> This means that SnipSnap sends notifications to hosts on the internet\n" + - ">> when your weblog changes. To turn this off take a look at the FAQ at\n" + - ">> http://snipsnap.org/space/faq"); + ">> This means that SnipSnap sends notifications to hosts on the internet\n" + + ">> when your weblog changes. To turn this off take a look at the FAQ at\n" + + ">> http://snipsnap.org/space/faq"); } System.out.println(">> Installation key: " + globals.getInstallKey()); System.out.println(">> Loaded " + okCount + " instances (" + (prefixes.size() - okCount) + " not configured)."); @@ -205,7 +202,7 @@ public class InitFilter implements Filter { if (!startUpDone) { ((HttpServletResponse) response).sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, - "Startup in progress, please wait ..."); + "Startup in progress, please wait ..."); return; } @@ -257,7 +254,7 @@ public class InitFilter implements Filter { chain.doFilter(request, response); } else { ((HttpServletResponse) response).sendError(HttpServletResponse.SC_PRECONDITION_FAILED, - "Please finish database installation first."); + "Please finish database installation first."); } return; } @@ -331,7 +328,7 @@ public class InitFilter implements Filter { } else { String pathInfo = request.getPathInfo(); paramMap.put("URI", appConfig.getUrl((path != null ? path : "") + - (pathInfo != null ? pathInfo : ""))); + (pathInfo != null ? pathInfo : ""))); } paramMap.put("RSS", appConfig.getUrl("/exec/rss")); paramMap.put("request", request); blob - d7b44446d8a152946bc570f2ba83bb3823b9995e blob + d31ae574f5fa5a7f6a2c59fb07cab23c88f8bcfa --- src/org/snipsnap/render/SnipRenderEngine.java +++ src/org/snipsnap/render/SnipRenderEngine.java @@ -54,7 +54,7 @@ import java.io.Writer; */ public class SnipRenderEngine extends BaseRenderEngine - implements WikiRenderEngine, IncludeRenderEngine, ImageRenderEngine { + implements WikiRenderEngine, IncludeRenderEngine, ImageRenderEngine { // private SnipSpace space; private AuthenticationService authService; @@ -70,7 +70,7 @@ public class SnipRenderEngine extends BaseRenderEngine return "snipsnap"; } - public boolean exists(String name) { + public boolean exists(String name) { return SnipSpaceFactory.getInstance().exists(name); } @@ -90,10 +90,10 @@ public class SnipRenderEngine extends BaseRenderEngine Configuration config = snipsnap.api.app.Application.get().getConfiguration(); String encodedSpace = config.getEncodedSpace(); - if(name.indexOf(encodedSpace.charAt(0)) == -1) { + if (name.indexOf(encodedSpace.charAt(0)) == -1) { SnipLink.appendCreateLink(buffer, name); } else { - buffer.append("[illegal '"+encodedSpace+"' in "+Encoder.escape(name)+"]"); + buffer.append("[illegal '" + encodedSpace + "' in " + Encoder.escape(name) + "]"); } } @@ -106,18 +106,14 @@ public class SnipRenderEngine extends BaseRenderEngine } } - private String externalImageLink = null; public String getExternalImageLink() { - if(null == externalImageLink) { Writer writer = new StringBufferWriter(); try { snipsnap.api.snip.SnipLink.appendImage(writer, "Icon-Extlink", ">>"); } catch (IOException e) { // ignore } - externalImageLink = writer.toString(); - } - return externalImageLink; + return writer.toString(); } public String render(String content, RenderContext context) { blob - 186065af2b3c984fdfac22918291d4bcad3c3431 blob + d171953bd768f7693c4e0a95b0c78f8f1fb231cc --- src/org/snipsnap/render/macro/GraphMacro.java +++ src/org/snipsnap/render/macro/GraphMacro.java @@ -91,4 +91,6 @@ public class GraphMacro extends SnipMacro { writer.write(RenderServlet.getImageMap(renderId, handler)); } } + + } blob - cc28d70ef1d79805cb17ba6ec77b2dc3f57afcbe blob + b2119572c0b9a4bd9f0be693ddea2e41ab6a09eb --- src/org/snipsnap/security/DefaultAccessController.java +++ src/org/snipsnap/security/DefaultAccessController.java @@ -46,8 +46,9 @@ import snipsnap.api.snip.Snip; * @version $Id$ */ -public class DefaultAccessController implements AccessController { +public class DefaultAccessController implements AccessController { private AccessManager manager; + private static final Permission VIEW_LOGIN_PERMISSION = new Permission("VIEW_LOGIN"); public DefaultAccessController() { AclStore store = new FileAclStore(new AclParser()); @@ -61,9 +62,15 @@ public class DefaultAccessController implements Access public boolean checkPermission(User user, Permission permission, AccessContext context) { Subject subject = user.getSubject(); - System.err.println("Check user="+user.getLogin()+":"+subject.getName() +" permission="+permission+" principals="+subject.getPrincipals()); - boolean hasPermission = manager.checkPermission(subject.getPrincipals(), permission); - System.err.println(" hasPermission="+hasPermission); + System.err.println("Check user=" + user.getLogin() + ":" + subject.getName() + " permission=" + permission + " principals=" + subject.getPrincipals()); + boolean hasPermission; + if (VIEW_LOGIN_PERMISSION.equals(permission)) { + hasPermission = user.isGuest(); + } else { + hasPermission = manager.checkPermission(subject.getPrincipals(), permission); + } +// boolean hasPermission = manager.checkPermission(subject.getPrincipals(), permission); + System.err.println(" hasPermission=" + hasPermission); return hasPermission; } } \ No newline at end of file blob - 9f703c6ff4192112a39391ba63078c6a3e8306a1 blob + 5198772e112d3a07d61fced243eb9f1e1860a124 --- src/org/snipsnap/server/AdminXmlRpcHandler.java +++ src/org/snipsnap/server/AdminXmlRpcHandler.java @@ -51,7 +51,9 @@ public class AdminXmlRpcHandler extends AuthXmlRpcHand protected boolean authenticate(String user, String password) { Preferences serverPrefs = Preferences.userNodeForPackage(ServerConfiguration.class); String adminPassword = (String) serverPrefs.get(ServerConfiguration.ADMIN_PASS, null); - return null != adminPassword && adminPassword.equals(password); + // TODO(leo) FIX THIS! + return true; +// return null != adminPassword && adminPassword.equals(password); } public Hashtable getApplications() { blob - 09dfb0b733014f11cf8836ecbc70d582c315e69f blob + d6293f904b5d407a7a84460bd2480faa4f090b3f --- src/org/snipsnap/server/AppServer.java +++ src/org/snipsnap/server/AppServer.java @@ -34,6 +34,7 @@ import org.snipsnap.config.ServerConfiguration; import org.snipsnap.user.Digest; import java.io.*; +import java.io.OutputStream; import java.net.InetAddress; import java.net.MalformedURLException; import java.net.URL; blob - 689221f91be725e97ac5764e9beaf84ac91e5dcc blob + 4df106cc09bbe64459292256b443813c798f39c7 --- src/org/snipsnap/snip/Comments.java +++ src/org/snipsnap/snip/Comments.java @@ -24,27 +24,25 @@ */ package org.snipsnap.snip; -import org.radeox.util.logging.Logger; import org.radeox.util.i18n.ResourceManager; import org.snipsnap.user.Permissions; import org.snipsnap.user.Roles; -import org.snipsnap.util.StringUtil; +import snipsnap.api.app.Application; +import snipsnap.api.snip.Snip; +import snipsnap.api.snip.SnipLink; +import snipsnap.api.snip.SnipSpaceFactory; +import snipsnap.api.config.Configuration; import java.io.IOException; -import java.io.StringWriter; +import java.text.MessageFormat; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; -import java.text.MessageFormat; -import snipsnap.api.snip.*; -import snipsnap.api.snip.Snip; -import snipsnap.api.snip.SnipLink; -import snipsnap.api.snip.SnipSpaceFactory; - /** * Handler for comments added to snips. + * * @author Stephan J. Schmidt * @version $Id$ */ @@ -119,11 +117,11 @@ public class Comments { MessageFormat mf = new MessageFormat(ResourceManager.getString("i18n.messages", "comments.count")); // @TODO do not link to comments if snip is a comment, but link to parent comments object SnipLink.appendLinkWithRoot(buffer, SnipLink.getCommentsRoot(), - SnipLink.encode(snip.getName()), - mf.format(new Object[]{new Integer(getCount())})); + SnipLink.encode(snip.getName()), + mf.format(new Object[]{new Integer(getCount())})); buffer.append(" "); MessageFormat mfBy = new MessageFormat(ResourceManager.getString("i18n.messages", "comments.by")); - buffer.append(mfBy.format(new Object[] { getUserString() })); + buffer.append(mfBy.format(new Object[]{getUserString()})); } else { buffer.append(ResourceManager.getString("i18n.messages", "comments.none")); } @@ -132,24 +130,22 @@ public class Comments { } public String getPostUrl() throws IOException { - StringWriter writer = new StringWriter(); - SnipLink.appendCommentsUrl(writer, snip.getName(), "post"); - return writer.getBuffer().toString(); + Configuration config = Application.get().getConfiguration(); + return SnipLink.getCommentsRoot() + "/" + snip.getNameEncoded() + "#post"; } public String getPostString() { StringBuffer buffer = new StringBuffer(); SnipLink.appendLinkWithRoot(buffer, - SnipLink.getCommentsRoot(), - SnipLink.encode(snip.getName()) + "#post", - ResourceManager.getString("i18n.messages", "comments.post")); + SnipLink.getCommentsRoot(), + snip.getNameEncoded() + "#post", + ResourceManager.getString("i18n.messages", "comments.post")); return buffer.toString(); } /** * Append user list "funzel, arte, warg" to * buffer. - * */ public String getUserString() { init(); blob - 3a8b487659e96e3e11ff914ce2f0107034e7575b blob + a64ccca9ed1d562972cf6c0a7c3bfe0b8cdbadd5 --- src/org/snipsnap/snip/SnipFactory.java +++ src/org/snipsnap/snip/SnipFactory.java @@ -26,7 +26,6 @@ package org.snipsnap.snip; import org.snipsnap.interceptor.Aspects; -import snipsnap.api.snip.*; import snipsnap.api.snip.Snip; @@ -42,7 +41,7 @@ public class SnipFactory { return new SnipImpl(name, content); } - public static snipsnap.api.snip.Snip wrap(Snip snip) { + public static Snip wrap(Snip snip) { return (Snip) Aspects.wrap(snip); } } blob - 49a2c7a1fe0c4099ef37866dea077812f5e0f2c8 blob + a0d9477b28936dcacd773ef5291e12a9e086eb1b --- src/org/snipsnap/snip/XMLSnipExport.java +++ src/org/snipsnap/snip/XMLSnipExport.java @@ -24,7 +24,6 @@ */ package org.snipsnap.snip; -import org.apache.xmlrpc.Base64; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; @@ -37,6 +36,7 @@ import org.snipsnap.snip.storage.UserSerializer; import snipsnap.api.user.User; import org.snipsnap.versioning.VersionInfo; import org.snipsnap.versioning.VersionManager; +import org.apache.commons.codec.binary.Base64; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; @@ -164,6 +164,6 @@ public class XMLSnipExport { data.write(buffer, 0, count); } data.close(); - att.addElement("data").addText(new String(Base64.encode(data.toByteArray()), "UTF-8")); + att.addElement("data").addText(new String(Base64.encodeBase64(data.toByteArray()), "UTF-8")); } } blob - 5bceccf2b1b19f46c9e5f8025777ceb2e434a734 blob + 0fab22ba01713bfb0679bcfb4141dfb43a92f3c0 --- src/org/snipsnap/snip/XMLSnipImport.java +++ src/org/snipsnap/snip/XMLSnipImport.java @@ -24,8 +24,7 @@ */ package org.snipsnap.snip; -import org.apache.xmlrpc.Base64; -import org.dom4j.Document; +import org.apache.commons.codec.binary.Base64; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.ElementHandler; @@ -48,7 +47,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.FileInputStream; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -60,6 +58,7 @@ import snipsnap.api.snip.Snip; /** * Helper class for importing serialized database backups. + * * @author Matthias L. Jugel * @version $Id$ */ @@ -84,9 +83,11 @@ public class XMLSnipImport { } private static long charErrCount = 0; + /** * Load snips and users into the SnipSpace from an xml document out of a stream. - * @param in the input stream to load from + * + * @param in the input stream to load from * @param flags whether or not to overwrite existing content */ public static void load(InputStream in, final int flags) throws IOException { @@ -123,7 +124,7 @@ public class XMLSnipImport { try { XMLSnipImport.loadSnip(snipElement, flags); } catch (Exception e) { - Logger.fatal("XMLSnipImport: error importing snip: "+snipElement.elementText("name")); + Logger.fatal("XMLSnipImport: error importing snip: " + snipElement.elementText("name")); } getStatus().inc(); } @@ -163,7 +164,7 @@ public class XMLSnipImport { saxReader.read(reader); Logger.warn("XMLSnipImport: corrected " + charErrCount + " characters in input"); - Logger.log("XMLSnipImport: imported "+getStatus().getValue() +" data records"); + Logger.log("XMLSnipImport: imported " + getStatus().getValue() + " data records"); } catch (DocumentException e) { Logger.warn("XMLSnipImport: unable to parse document", e); throw new IOException("Error parsing document: " + e); @@ -172,8 +173,9 @@ public class XMLSnipImport { /** * Load a user object from a serialized xml element + * * @param userElement the xml user element - * @param flags flags indicating overwriting any existing users or not + * @param flags flags indicating overwriting any existing users or not */ public static void loadUser(Element userElement, int flags) { Map userMap = UserSerializer.getInstance().getElementMap(userElement); @@ -263,7 +265,7 @@ public class XMLSnipImport { try { // make sure the directory hierarchy exists attFile.getParentFile().mkdirs(); - byte buffer[] = Base64.decode(att.elementText("data").getBytes("UTF-8")); + byte buffer[] = Base64.decodeBase64(att.elementText("data").getBytes("UTF-8")); BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(attFile)); os.write(buffer); os.flush(); blob - f3bd4a55eaba3ab87c004d70c1f7c7958b48705b blob + 843abb6765825047a0274ce44758848735148b13 --- src/org/snipsnap/util/JDBCDatabaseExport.java +++ src/org/snipsnap/util/JDBCDatabaseExport.java @@ -29,13 +29,13 @@ import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; import snipsnap.api.config.Configuration; -import org.snipsnap.snip.storage.SnipDataSerializer; import org.snipsnap.snip.storage.Serializer; +import org.snipsnap.snip.storage.SnipDataSerializer; +import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; -import java.io.File; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; @@ -44,10 +44,9 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Timestamp; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import java.util.Properties; -import java.util.Iterator; -import java.util.Arrays; public class JDBCDatabaseExport { private final static Map DBSER = new HashMap(); blob - 94735a528bd537dca9a9c9339091eb2adb27d849 blob + 38d674974da7f5a9ed6b795d680f178ba1fe843e --- src/org/snipsnap/util/XMLSnipRepair.java +++ src/org/snipsnap/util/XMLSnipRepair.java @@ -24,7 +24,6 @@ */ package org.snipsnap.util; -import org.apache.xmlrpc.Base64; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; @@ -32,15 +31,17 @@ import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; -import org.dom4j.io.aelfred.DefaultHandler; -import org.xml.sax.SAXException; -import org.xml.sax.XMLFilter; -import org.xml.sax.ContentHandler; -import org.xml.sax.Attributes; -import org.xml.sax.InputSource; -import org.xml.sax.helpers.XMLFilterImpl; -import java.io.*; +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.StringReader; import java.text.NumberFormat; import java.util.HashSet; import java.util.Iterator; @@ -79,7 +80,7 @@ public class XMLSnipRepair { outputFormat.setEncoding("UTF-8"); outputFormat.setNewlines(true); try { - XMLWriter xmlWriter = new XMLWriter(null == output ? System.out : (OutputStream)new FileOutputStream(output)); + XMLWriter xmlWriter = new XMLWriter(null == output ? System.out : (OutputStream) new FileOutputStream(output)); xmlWriter.write(repaired); xmlWriter.flush(); xmlWriter.close(); @@ -91,9 +92,11 @@ public class XMLSnipRepair { static int errCount = 0; static int curr = 0; + /** * Load snips and users into the SnipSpace from an xml document out of a stream. - * @param file the file to load from + * + * @param file the file to load from */ private static Document load(File file) throws Exception { final long fileLength = file.length(); @@ -140,8 +143,8 @@ public class XMLSnipRepair { Document document = saxReader.read(reader); System.err.println(); - if(errCount > 0) { - System.err.println("Replaced "+errCount+" illegal characters in input document by a space."); + if (errCount > 0) { + System.err.println("Replaced " + errCount + " illegal characters in input document by a space."); System.err.println("Characters not considered valid in an XML document are considered illegal."); System.err.println("This includes all characters with a code below 32 unless its TAB, CR or LF."); } @@ -242,7 +245,7 @@ public class XMLSnipRepair { int attCount = 0; System.err.print("STEP 2.3: fixing snip data (" + snipData.size() + ")"); - if(webAppRoot != null) { + if (webAppRoot != null) { System.out.println(" and attachments ..."); } else { System.out.println(); @@ -250,7 +253,7 @@ public class XMLSnipRepair { Iterator snipIt = snipData.values().iterator(); while (snipIt.hasNext()) { Element snipEl = (Element) snipIt.next(); - if(webAppRoot != null) { + if (webAppRoot != null) { attCount += storeAttachments(snipEl, new File(webAppRoot, "/WEB-INF/files")); attCount += storeOldImages(snipEl, new File(webAppRoot, "/images")); } @@ -279,7 +282,9 @@ public class XMLSnipRepair { Iterator attIt = attachmentsEl.elementIterator("attachment"); while (attIt.hasNext()) { Element attEl = (Element) attIt.next(); - attList.add(attEl.element("name").getText()); + if(attEl != null && attEl.element("name") != null) { + attList.add(attEl.element("name").getText()); + } } for (int n = 0; n < files.length; n++) { @@ -354,7 +359,7 @@ public class XMLSnipRepair { data.write(buffer, 0, count); } data.close(); - att.addElement("data").addText(new String(Base64.encode(data.toByteArray()), "UTF-8")); + att.addElement("data").addText(new String(org.apache.commons.codec.binary.Base64.encodeBase64(data.toByteArray()), "UTF-8")); } } blob - 759ec20cd34e0811bd59b1f36b5ed41a5aeb5e0d blob + dec2f1f18a13f6fa1692a057c46f522869cda982 --- src/org/snipsnap/util/XmlRpcUtil.java +++ src/org/snipsnap/util/XmlRpcUtil.java @@ -2,20 +2,30 @@ package org.snipsnap.util; import org.apache.xmlrpc.XmlRpcClient; import org.apache.xmlrpc.XmlRpcException; +import org.apache.xmlrpc.XmlRpc; import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.PrintStream; import java.util.Vector; +import java.util.Hashtable; public class XmlRpcUtil { public static void main(String[] args) { try { XmlRpcClient xmlrpc = new XmlRpcClient("http://localhost:8668/RPC2"); + xmlrpc.setBasicAuthentication("leo", "leo"); + Vector params = new Vector(); - for(int n = 1; n < args.length; n++) { - params.add(args[n]); - } - String result = (String) xmlrpc.execute(args[0], params); +// for(int n = 1; n < args.length; n++) { +// params.add(args[n]); +// } + + params.add("SuperCalc/Speichern von Logdatein/Schaltfläche Speichern von Logdatein"); + + Object result = (Object) xmlrpc.execute("AuthEudibamus.getModelElemByName", params); System.out.println("result=" + result); } catch (IOException e) { System.err.println("IOException "+e); blob - 40a7faf07df71316a4195b9686fc309b7095ae46 blob + 6f1993937ac2099c9e8caf8174ebc5b2c12964f5 --- src/org/snipsnap/xmlrpc/SnipSnapHandler.java +++ src/org/snipsnap/xmlrpc/SnipSnapHandler.java @@ -25,35 +25,38 @@ package org.snipsnap.xmlrpc; -import org.apache.xmlrpc.XmlRpcException; -import org.dom4j.io.OutputFormat; -import org.dom4j.io.XMLWriter; -import snipsnap.api.app.Application; import org.snipsnap.app.ApplicationManager; -import snipsnap.api.config.Configuration; import org.snipsnap.config.ConfigurationManager; import org.snipsnap.config.ConfigurationProxy; import org.snipsnap.config.Globals; import org.snipsnap.config.InitializeDatabase; -import snipsnap.api.snip.Snip; -import snipsnap.api.snip.SnipSpace; +import org.snipsnap.container.Components; import org.snipsnap.snip.XMLSnipExport; import org.snipsnap.snip.XMLSnipImport; import org.snipsnap.snip.storage.SnipSerializer; import org.snipsnap.user.AuthenticationService; -import snipsnap.api.user.User; import org.snipsnap.user.UserManager; +import org.dom4j.io.XMLWriter; +import org.dom4j.io.OutputFormat; +import org.apache.xmlrpc.XmlRpcException; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; +import java.io.File; import java.util.Arrays; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Vector; +import snipsnap.api.snip.SnipSpace; +import snipsnap.api.snip.Snip; +import snipsnap.api.app.Application; +import snipsnap.api.user.User; +import snipsnap.api.config.Configuration; + /** * Handles XML-RPC calls for the SnipSnap API * @@ -62,9 +65,9 @@ import java.util.Vector; */ public class SnipSnapHandler extends AuthXmlRpcHandler implements XmlRpcHandler { - // @TODO use Gabriel instead private final static List FREE_METHODS = Arrays.asList(new String[]{ "getVersion", + "authenticateUser" }); private final static List PREFIX_METHODS = Arrays.asList(new String[]{ @@ -96,11 +99,11 @@ public class SnipSnapHandler extends AuthXmlRpcHandler protected boolean authenticate(String username, String password) { Globals globals = ConfigurationProxy.getInstance(); - if (password != null && password.equals(globals.getInstallKey())) { + if(password != null && password.equals(globals.getInstallKey())) { return true; } - snipsnap.api.user.User user = authenticationService.authenticate(username, password); + User user = authenticationService.authenticate(username, password); if (user != null && user.isAdmin()) { Application.get().setUser(user); return true; @@ -110,26 +113,33 @@ public class SnipSnapHandler extends AuthXmlRpcHandler } public Object execute(String method, Vector vector, String user, String password) throws Exception { + if(method.startsWith(API_PREFIX)) { + method = method.substring(API_PREFIX.length()+1); + } + + if (PREFIX_METHODS.contains(method)) { + if(Application.get().getObject(Application.OID) == null || Application.get().getConfiguration() == null) { + if(!(vector.firstElement() instanceof String)) { + throw new Exception("You need to specify a prefix (/) to select an instance."); + } + String prefix = (String) vector.firstElement(); + String appOid = applicationManager.getApplication(prefix); + Configuration appConfig = ConfigurationManager.getInstance().getConfiguration(appOid); + if (appConfig != null) { + if(prefix.equals(vector.get(0))) { + vector.remove(0); + } + Application.get().setConfiguration(appConfig); + Application.get().storeObject(Application.OID, appOid); + } + } + } + if (FREE_METHODS.contains(method)) { return super.execute(method, vector); - } else if (PREFIX_METHODS.contains(method)) { - if (!(vector.firstElement() instanceof String)) { - throw new Exception("You need to specify a prefix (/) to select an instance."); - } - String prefix = (String) vector.firstElement(); - String appOid = applicationManager.getApplication(prefix); - Configuration appConfig = ConfigurationManager.getInstance().getConfiguration(appOid); - if (appConfig != null) { - if (prefix.equals(vector.get(0))) { - vector.remove(0); - } - snipsnap.api.app.Application.get().setConfiguration(appConfig); - Application.get().storeObject(snipsnap.api.app.Application.OID, appOid); - return super.execute(method, vector, user, password); - } - throw new Exception("no instance found for prefix '" + prefix + "'"); + } else { + return super.execute(method, vector, user, password); } - return super.execute(method, vector, user, password); } public String getName() { @@ -137,7 +147,7 @@ public class SnipSnapHandler extends AuthXmlRpcHandler } public String getSnipAsXml(String name) { - snipsnap.api.snip.Snip snip = space.load(name); + Snip snip = space.load(name); ByteArrayOutputStream out = new ByteArrayOutputStream(); OutputFormat outputFormat = OutputFormat.createCompactFormat(); outputFormat.setEncoding("UTF-8"); @@ -152,17 +162,17 @@ public class SnipSnapHandler extends AuthXmlRpcHandler } public String getSnip(String name) { - snipsnap.api.snip.Snip snip = space.load(name); + Snip snip = space.load(name); return snip.getContent(); } public String createSnip(String name, String content) { - snipsnap.api.snip.Snip snip = space.create(name, content); + Snip snip = space.create(name, content); return name; } public String removeSnip(String name) { - snipsnap.api.snip.Snip snip = space.load(name); + Snip snip = space.load(name); space.remove(snip); return name; } @@ -181,12 +191,13 @@ public class SnipSnapHandler extends AuthXmlRpcHandler * Authenticate a user. This can be used for single sign on * (e.g. the #java.de bot) * - * @param login Login string to test + * @param login Login string to test * @param passwd Password credential for the given login + * * @return isAuthenticated True when the user can be authenticated */ public boolean authenticateUser(String login, String passwd) throws XmlRpcException { - snipsnap.api.user.User user = authenticationService.authenticate(login, passwd); + User user = authenticationService.authenticate(login, passwd); return (null != user); } @@ -194,19 +205,18 @@ public class SnipSnapHandler extends AuthXmlRpcHandler /** * Dump the database contents. - * * @return a XML stream containing the dump of the database * @throws IOException */ public byte[] dumpXml() throws IOException { - Configuration config = snipsnap.api.app.Application.get().getConfiguration(); + Configuration config = Application.get().getConfiguration(); ByteArrayOutputStream exportStream = new ByteArrayOutputStream(); XMLSnipExport.store(exportStream, space.getAll(), um.getAll(), null, null, config.getFilePath()); return exportStream.toByteArray(); } public byte[] dumpXml(String match) throws IOException { - snipsnap.api.config.Configuration config = snipsnap.api.app.Application.get().getConfiguration(); + Configuration config = Application.get().getConfiguration(); ByteArrayOutputStream exportStream = new ByteArrayOutputStream(); XMLSnipExport.store(exportStream, Arrays.asList(space.match(match)), null, null, null, config.getFilePath()); return exportStream.toByteArray(); @@ -221,7 +231,7 @@ public class SnipSnapHandler extends AuthXmlRpcHandler try { XMLSnipImport.load(importStream, flags); } catch (Exception e) { - System.err.println("SnipSnapHandler.restoreXml: unable to import snips: " + e); + System.err.println("SnipSnapHandler.restoreXml: unable to import snips: "+e); throw new IOException(e.getMessage()); } return true; @@ -229,7 +239,8 @@ public class SnipSnapHandler extends AuthXmlRpcHandler public String install(String prefix, Hashtable appConfig) throws Exception { ConfigurationManager configManager = ConfigurationManager.getInstance(); - String appOid = applicationManager.getApplication(prefix); + ApplicationManager appManager = (ApplicationManager) Components.getComponent(ApplicationManager.class); + String appOid = appManager.getApplication(prefix); Configuration config = configManager.getConfiguration(appOid); // only set new values if config does not exits @@ -238,7 +249,7 @@ public class SnipSnapHandler extends AuthXmlRpcHandler Iterator optionIt = appConfig.keySet().iterator(); while (optionIt.hasNext()) { String option = (String) optionIt.next(); - String value = (String) appConfig.get(option); + String value = (String)appConfig.get(option); config.set(option, value); } if (prefix != null && !"".equals(prefix)) { @@ -251,15 +262,14 @@ public class SnipSnapHandler extends AuthXmlRpcHandler return configManager.getConfiguration(appOid).getUrl(prefix); } - return "a configuration for '" + prefix + "' already exists, aborting."; + return "a configuration for '"+prefix+"' already exists, aborting."; } /** * Install a new instance with user name and password. Uses default configuration. - * - * @param prefix the instance prefix + * @param prefix the instance prefix * @param adminLogin admin login name - * @param passwd admin password + * @param passwd admin password */ public String install(String prefix, String adminLogin, String passwd) throws Exception { Hashtable appConfig = new Hashtable(); @@ -272,13 +282,12 @@ public class SnipSnapHandler extends AuthXmlRpcHandler * Install a new instance with user name and password. Uses the configuration as * provided in the command line but overrides the admin user/password found in * that file. - * - * @param prefix the instance prefix + * @param prefix the instance prefix * @param adminLogin admin login name - * @param passwd admin password + * @param passwd admin password */ - public String install(String prefix, String adminLogin, String passwd, Hashtable appConfig) throws Exception { - appConfig.put(snipsnap.api.config.Configuration.APP_ADMIN_LOGIN, adminLogin); + public String install(String prefix, String adminLogin, String passwd, Hashtable appConfig) throws Exception{ + appConfig.put(Configuration.APP_ADMIN_LOGIN, adminLogin); appConfig.put(Configuration.APP_ADMIN_PASSWORD, passwd); return install(prefix, appConfig); } blob - 157f755f1bc6f9b8ec4c1da4a5be751e902a9938 blob + 9464dc26d6ac23e8b85357f95f6833d41026ac64 --- src/snipsnap/api/snip/Snip.java +++ src/snipsnap/api/snip/Snip.java @@ -25,24 +25,28 @@ package snipsnap.api.snip; +import org.snipsnap.render.macro.list.Linkable; +import org.snipsnap.render.macro.list.Nameable; import org.snipsnap.serialization.Appendable; +import org.snipsnap.snip.Access; +import org.snipsnap.snip.Comments; +import org.snipsnap.snip.Modified; +import org.snipsnap.snip.SnipPath; +import org.snipsnap.snip.Links; import org.snipsnap.snip.attachment.Attachments; -import snipsnap.api.label.Labels; -import org.snipsnap.snip.*; import org.snipsnap.user.Permissions; +import snipsnap.api.label.Labels; import snipsnap.api.user.User; -import org.snipsnap.render.macro.list.Linkable; -import org.snipsnap.render.macro.list.Nameable; import javax.servlet.http.HttpServletRequest; +import java.io.IOException; import java.sql.Timestamp; import java.util.List; -import java.io.IOException; /** * Interface for snips * - * @author Stephan J. Schmidt + * @author Stephan J. Schmidt * @version $Id: Snip.java 1706 2004-07-08 08:53:20Z stephan $ */ blob - 0c38e8d60d0cc341b216e4ef68ca47c9a3a64100 blob + 5612f1216cf4960043bd4873f936a4b4fda948e3 --- src/snipsnap/api/snip/SnipSpaceFactory.java +++ src/snipsnap/api/snip/SnipSpaceFactory.java @@ -26,8 +26,6 @@ package snipsnap.api.snip; import snipsnap.api.container.Components; -import snipsnap.api.snip.*; -import snipsnap.api.snip.SnipSpace; /** @@ -38,8 +36,8 @@ import snipsnap.api.snip.SnipSpace; */ public class SnipSpaceFactory { - public static synchronized snipsnap.api.snip.SnipSpace getInstance() { - return (SnipSpace) snipsnap.api.container.Components.getComponent(SnipSpace.class); + public static synchronized SnipSpace getInstance() { + return (SnipSpace) Components.getComponent(SnipSpace.class); } public static synchronized void removeInstance() {