/* This code is part of Freenet. It is distributed under the GNU General * Public License, version 2 (or at your option any later version). See * http://www.gnu.org/ for further details of the GPL. */ package freenet.support.plugins.helpers1; import java.util.List; import freenet.clients.http.InfoboxNode; import freenet.clients.http.LinkEnabledCallback; import freenet.clients.http.Toadlet; import freenet.clients.http.ToadletContext; import freenet.keys.FreenetURI; import freenet.node.NodeClientCore; import freenet.pluginmanager.PluginRespirator; import freenet.support.HTMLNode; import freenet.support.api.HTTPRequest; public abstract class WebInterfaceToadlet extends Toadlet implements LinkEnabledCallback { protected final PluginContext pluginContext; private final String _path; protected WebInterfaceToadlet(PluginContext pluginContext2, String pluginURL, String pageName) { super(pluginContext2.hlsc); pluginContext = pluginContext2; _path = pluginURL + "/" + pageName; } @Override public String path() { return _path; } @Override public boolean isEnabled(ToadletContext ctx) { return true; } /** * returns allways at min a "/", but "/path" is allways without trailing '/' * so "/path/to/toadlet/blah" and "/path/to/toadlet/blah/" cant be distinguished * * @param path * @return the path without "/path/to/toadlet" */ protected String normalizePath(String path) { String result = path.substring(_path.length()); if (result.length() == 0) { return "/"; } if (result.endsWith("/")) { result = result.substring(0, result.length()-1); } return result; } /** * Validates whether the request contains a formPassword which matches {@link NodeClientCore#formPassword}. See the JavaDoc there for an explanation * of the purpose of this mechanism. * * <p><b>ATTENTION</b>: It is critically important to use this function when processing requests which "change the server state". Other words for this * would be requests which change your database or "write" requests. * Requests which only read values from the server don't have to validate the form password.</p> * * <p>To produce a form which already contains the password, use {@link PluginRespirator#addFormChild(freenet.support.HTMLNode, String, String)}.</p> * * @return true if the form password is valid */ protected boolean isFormPassword(HTTPRequest req) { String passwd = req.getParam("formPassword", null); if (passwd == null) passwd = req.getPartAsStringFailsafe("formPassword", 32); return (passwd != null) && passwd.equals(pluginContext.clientCore.formPassword); } public HTMLNode createErrorBox(List<String> errors) { return createErrorBox(errors, null, null, null); } public HTMLNode createErrorBox(List<String> errors, String path, FreenetURI retryUri, String extraParams) { InfoboxNode box = pluginContext.pageMaker.getInfobox("infobox-alert", "ERROR"); HTMLNode errorBox = box.content; for (String error : errors) { errorBox.addChild("#", error); errorBox.addChild("br"); } if (retryUri != null) { errorBox.addChild("#", "Retry: "); errorBox.addChild(new HTMLNode("a", "href", path + "?key=" + ((extraParams == null) ? retryUri : (retryUri + extraParams)), retryUri.toString(false, false))); } return box.outer; } }