forked from I2P_Developers/i2p.i2p
* Passwords:
- Add remove method - Add console password form to configui.jsp - Consolidate multiple setSettings()/getJettyString() in FormHandler - Some form message tweaks
This commit is contained in:
@ -19,7 +19,6 @@ import org.mortbay.jetty.handler.ContextHandlerCollection;
|
|||||||
* Saves changes to clients.config or webapps.config
|
* Saves changes to clients.config or webapps.config
|
||||||
*/
|
*/
|
||||||
public class ConfigClientsHandler extends FormHandler {
|
public class ConfigClientsHandler extends FormHandler {
|
||||||
private Map _settings;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void processForm() {
|
protected void processForm() {
|
||||||
@ -167,8 +166,6 @@ public class ConfigClientsHandler extends FormHandler {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSettings(Map settings) { _settings = new HashMap(settings); }
|
|
||||||
|
|
||||||
private void saveClientChanges() {
|
private void saveClientChanges() {
|
||||||
List<ClientAppConfig> clients = ClientAppConfig.getClientApps(_context);
|
List<ClientAppConfig> clients = ClientAppConfig.getClientApps(_context);
|
||||||
for (int cur = 0; cur < clients.size(); cur++) {
|
for (int cur = 0; cur < clients.size(); cur++) {
|
||||||
@ -212,15 +209,8 @@ public class ConfigClientsHandler extends FormHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ClientAppConfig.writeClientAppConfig(_context, clients);
|
ClientAppConfig.writeClientAppConfig(_context, clients);
|
||||||
addFormNotice(_("Client configuration saved successfully - restart required to take effect."));
|
addFormNotice(_("Client configuration saved successfully"));
|
||||||
}
|
addFormNotice(_("Restart required to take effect"));
|
||||||
|
|
||||||
/** curses Jetty for returning arrays */
|
|
||||||
private String getJettyString(String key) {
|
|
||||||
String[] arr = (String[]) _settings.get(key);
|
|
||||||
if (arr == null)
|
|
||||||
return null;
|
|
||||||
return arr[0].trim();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB for stopClient, not completed yet.
|
// STUB for stopClient, not completed yet.
|
||||||
@ -421,9 +411,10 @@ public class ConfigClientsHandler extends FormHandler {
|
|||||||
boolean all = "0.0.0.0".equals(intfc) || "0:0:0:0:0:0:0:0".equals(intfc) ||
|
boolean all = "0.0.0.0".equals(intfc) || "0:0:0:0:0:0:0:0".equals(intfc) ||
|
||||||
"::".equals(intfc);
|
"::".equals(intfc);
|
||||||
changes.put(ConfigClientsHelper.BIND_ALL_INTERFACES, Boolean.toString(all));
|
changes.put(ConfigClientsHelper.BIND_ALL_INTERFACES, Boolean.toString(all));
|
||||||
if (_context.router().saveConfig(changes, null))
|
if (_context.router().saveConfig(changes, null)) {
|
||||||
addFormNotice(_("Interface configuration saved successfully - restart required to take effect."));
|
addFormNotice(_("Interface configuration saved"));
|
||||||
else
|
addFormNotice(_("Restart required to take effect"));
|
||||||
|
} else
|
||||||
addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs"));
|
addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
package net.i2p.router.web;
|
package net.i2p.router.web;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import net.i2p.data.DataHelper;
|
import net.i2p.data.DataHelper;
|
||||||
|
|
||||||
@ -16,8 +14,6 @@ import net.i2p.data.DataHelper;
|
|||||||
*/
|
*/
|
||||||
public class ConfigHomeHandler extends FormHandler {
|
public class ConfigHomeHandler extends FormHandler {
|
||||||
|
|
||||||
private Map _settings;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void processForm() {
|
protected void processForm() {
|
||||||
if (_action == null) return;
|
if (_action == null) return;
|
||||||
@ -106,14 +102,4 @@ public class ConfigHomeHandler extends FormHandler {
|
|||||||
addFormError(_("Unsupported"));
|
addFormError(_("Unsupported"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSettings(Map settings) { _settings = new HashMap(settings); }
|
|
||||||
|
|
||||||
/** curses Jetty for returning arrays */
|
|
||||||
private String getJettyString(String key) {
|
|
||||||
String[] arr = (String[]) _settings.get(key);
|
|
||||||
if (arr == null)
|
|
||||||
return null;
|
|
||||||
return arr[0].trim();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -280,9 +280,10 @@ public class ConfigNetHandler extends FormHandler {
|
|||||||
_upnp) {
|
_upnp) {
|
||||||
// This is minor, don't set restartRequired
|
// This is minor, don't set restartRequired
|
||||||
if (_upnp)
|
if (_upnp)
|
||||||
addFormNotice(_("Enabling UPnP, restart required to take effect"));
|
addFormNotice(_("Enabling UPnP"));
|
||||||
else
|
else
|
||||||
addFormNotice(_("Disabling UPnP, restart required to take effect"));
|
addFormNotice(_("Disabling UPnP"));
|
||||||
|
addFormNotice(_("Restart required to take effect"));
|
||||||
}
|
}
|
||||||
changes.put(TransportManager.PROP_ENABLE_UPNP, "" + _upnp);
|
changes.put(TransportManager.PROP_ENABLE_UPNP, "" + _upnp);
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@ import net.i2p.router.networkdb.reseed.Reseeder;
|
|||||||
* @since 0.8.3
|
* @since 0.8.3
|
||||||
*/
|
*/
|
||||||
public class ConfigReseedHandler extends FormHandler {
|
public class ConfigReseedHandler extends FormHandler {
|
||||||
private Map _settings;
|
|
||||||
private final Map<String, String> changes = new HashMap();
|
private final Map<String, String> changes = new HashMap();
|
||||||
private final List<String> removes = new ArrayList();
|
private final List<String> removes = new ArrayList();
|
||||||
|
|
||||||
@ -35,16 +34,6 @@ public class ConfigReseedHandler extends FormHandler {
|
|||||||
addFormError(_("Unsupported") + ' ' + _action + '.');
|
addFormError(_("Unsupported") + ' ' + _action + '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSettings(Map settings) { _settings = new HashMap(settings); }
|
|
||||||
|
|
||||||
/** curses Jetty for returning arrays */
|
|
||||||
private String getJettyString(String key) {
|
|
||||||
String[] arr = (String[]) _settings.get(key);
|
|
||||||
if (arr == null)
|
|
||||||
return null;
|
|
||||||
return arr[0].trim();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @since 0.8.9 */
|
/** @since 0.8.9 */
|
||||||
private void saveString(String config, String param) {
|
private void saveString(String config, String param) {
|
||||||
String val = getJettyString(param);
|
String val = getJettyString(param);
|
||||||
|
@ -116,9 +116,10 @@ public class ConfigStatsHandler extends FormHandler {
|
|||||||
addFormNotice(_("Stat filter and location updated successfully to") + ": " + stats.toString());
|
addFormNotice(_("Stat filter and location updated successfully to") + ": " + stats.toString());
|
||||||
if (fullChanged) {
|
if (fullChanged) {
|
||||||
if (_isFull)
|
if (_isFull)
|
||||||
addFormNotice(_("Full statistics enabled - restart required to take effect"));
|
addFormNotice(_("Full statistics enabled"));
|
||||||
else
|
else
|
||||||
addFormNotice(_("Full statistics disabled - restart required to take effect"));
|
addFormNotice(_("Full statistics disabled"));
|
||||||
|
addFormNotice(_("Restart required to take effect"));
|
||||||
}
|
}
|
||||||
if (graphsChanged)
|
if (graphsChanged)
|
||||||
addFormNotice(_("Graph list updated, may take up to 60s to be reflected here and on the <a href=\"graphs.jsp\">Graphs Page</a>"));
|
addFormNotice(_("Graph list updated, may take up to 60s to be reflected here and on the <a href=\"graphs.jsp\">Graphs Page</a>"));
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package net.i2p.router.web;
|
package net.i2p.router.web;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -17,8 +16,6 @@ import net.i2p.data.DataHelper;
|
|||||||
*/
|
*/
|
||||||
public class ConfigSummaryHandler extends FormHandler {
|
public class ConfigSummaryHandler extends FormHandler {
|
||||||
|
|
||||||
private Map _settings;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void processForm() {
|
protected void processForm() {
|
||||||
if (_action == null) return;
|
if (_action == null) return;
|
||||||
@ -144,16 +141,6 @@ public class ConfigSummaryHandler extends FormHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSettings(Map settings) { _settings = new HashMap(settings); }
|
|
||||||
|
|
||||||
/** curses Jetty for returning arrays */
|
|
||||||
private String getJettyString(String key) {
|
|
||||||
String[] arr = (String[]) _settings.get(key);
|
|
||||||
if (arr == null)
|
|
||||||
return null;
|
|
||||||
return arr[0].trim();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMovingAction() {
|
public void setMovingAction() {
|
||||||
for (Object o : _settings.keySet()) {
|
for (Object o : _settings.keySet()) {
|
||||||
if (!(o instanceof String))
|
if (!(o instanceof String))
|
||||||
|
@ -13,8 +13,13 @@ public class ConfigUIHandler extends FormHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void processForm() {
|
protected void processForm() {
|
||||||
if (_shouldSave)
|
if (_shouldSave) {
|
||||||
saveChanges();
|
saveChanges();
|
||||||
|
} else if (_action.equals(_("Delete selected"))) {
|
||||||
|
delUser();
|
||||||
|
} else if (_action.equals(_("Add user"))) {
|
||||||
|
addUser();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setShouldsave(String moo) { _shouldSave = true; }
|
public void setShouldsave(String moo) { _shouldSave = true; }
|
||||||
@ -51,4 +56,47 @@ public class ConfigUIHandler extends FormHandler {
|
|||||||
addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs."));
|
addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addUser() {
|
||||||
|
String name = getJettyString("name");
|
||||||
|
if (name == null || name.length() <= 0) {
|
||||||
|
addFormError(_("No user name entered"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String pw = getJettyString("pw");
|
||||||
|
if (pw == null || pw.length() <= 0) {
|
||||||
|
addFormError(_("No password entered"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ConsolePasswordManager mgr = new ConsolePasswordManager(_context);
|
||||||
|
// rfc 2617
|
||||||
|
pw = name + ':' + RouterConsoleRunner.JETTY_REALM + ':' + pw;
|
||||||
|
if (mgr.saveMD5(RouterConsoleRunner.PROP_CONSOLE_PW, name, pw)) {
|
||||||
|
addFormNotice(_("Added user {0}", name));
|
||||||
|
addFormNotice(_("Restart required to take effect"));
|
||||||
|
} else {
|
||||||
|
addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void delUser() {
|
||||||
|
ConsolePasswordManager mgr = new ConsolePasswordManager(_context);
|
||||||
|
boolean success = false;
|
||||||
|
for (Object o : _settings.keySet()) {
|
||||||
|
if (!(o instanceof String))
|
||||||
|
continue;
|
||||||
|
String k = (String) o;
|
||||||
|
if (!k.startsWith("delete_"))
|
||||||
|
continue;
|
||||||
|
k = k.substring(7);
|
||||||
|
if (mgr.remove(RouterConsoleRunner.PROP_CONSOLE_PW, k)) {
|
||||||
|
addFormNotice(_("Removed user {0}", k));
|
||||||
|
success = true;
|
||||||
|
} else {
|
||||||
|
addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (success)
|
||||||
|
addFormNotice(_("Restart required to take effect"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,9 @@ package net.i2p.router.web;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.TreeSet;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
|
||||||
public class ConfigUIHelper extends HelperBase {
|
public class ConfigUIHelper extends HelperBase {
|
||||||
|
|
||||||
@ -87,4 +88,38 @@ public class ConfigUIHelper extends HelperBase {
|
|||||||
}
|
}
|
||||||
return buf.toString();
|
return buf.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @since 0.9.4 */
|
||||||
|
public String getPasswordForm() {
|
||||||
|
StringBuilder buf = new StringBuilder(512);
|
||||||
|
ConsolePasswordManager mgr = new ConsolePasswordManager(_context);
|
||||||
|
Map<String, String> userpw = mgr.getMD5(RouterConsoleRunner.PROP_CONSOLE_PW);
|
||||||
|
buf.append("<table>");
|
||||||
|
if (userpw.isEmpty()) {
|
||||||
|
buf.append("<tr><td colspan=\"3\">");
|
||||||
|
buf.append(_("Add a user and password to enable."));
|
||||||
|
buf.append("</td></tr>");
|
||||||
|
} else {
|
||||||
|
buf.append("<tr><th>")
|
||||||
|
.append(_("Remove"))
|
||||||
|
.append("</th><th>")
|
||||||
|
.append(_("User Name"))
|
||||||
|
.append("</th><th> </th></tr>\n");
|
||||||
|
for (String name : userpw.keySet()) {
|
||||||
|
buf.append("<tr><td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"delete_")
|
||||||
|
.append(name)
|
||||||
|
.append("\"></td><td colspan=\"2\">")
|
||||||
|
.append(name)
|
||||||
|
.append("</td></tr>\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buf.append("<tr><td align=\"center\"><b>")
|
||||||
|
.append(_("Add")).append(":</b>" +
|
||||||
|
"</td><td align=\"left\"><input type=\"text\" name=\"name\">" +
|
||||||
|
"</td><td align=\"left\"><b>");
|
||||||
|
buf.append(_("Password")).append(":</b> " +
|
||||||
|
"<input type=\"password\" size=\"40\" name=\"pw\"></td></tr>" +
|
||||||
|
"</table>\n");
|
||||||
|
return buf.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,9 +173,9 @@ public class ConsolePasswordManager extends RouterPasswordManager {
|
|||||||
/**
|
/**
|
||||||
* Straight MD5, no salt
|
* Straight MD5, no salt
|
||||||
*
|
*
|
||||||
* @param realm e.g. i2cp, routerconsole, etc.
|
* @param realm The full realm, e.g. routerconsole.auth.i2prouter, etc.
|
||||||
* @param user null or "" for no user, already trimmed
|
* @param user null or "" for no user, already trimmed
|
||||||
* @param pw plain text, already trimmed
|
* @param pw plain text, must be of the form user:realm:pw to be compatible with Jetty
|
||||||
* @return if pw verified
|
* @return if pw verified
|
||||||
*/
|
*/
|
||||||
public boolean saveMD5(String realm, String user, String pw) {
|
public boolean saveMD5(String realm, String user, String pw) {
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package net.i2p.router.web;
|
package net.i2p.router.web;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import net.i2p.router.RouterContext;
|
import net.i2p.router.RouterContext;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
@ -18,6 +20,7 @@ import net.i2p.util.Log;
|
|||||||
public class FormHandler {
|
public class FormHandler {
|
||||||
protected RouterContext _context;
|
protected RouterContext _context;
|
||||||
protected Log _log;
|
protected Log _log;
|
||||||
|
protected Map _settings;
|
||||||
private String _nonce;
|
private String _nonce;
|
||||||
protected String _action;
|
protected String _action;
|
||||||
protected String _method;
|
protected String _method;
|
||||||
@ -52,6 +55,28 @@ public class FormHandler {
|
|||||||
public void setNonce(String val) { _nonce = val; }
|
public void setNonce(String val) { _nonce = val; }
|
||||||
public void setAction(String val) { _action = val; }
|
public void setAction(String val) { _action = val; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For many forms, it's easiest just to put all the parameters here.
|
||||||
|
*
|
||||||
|
* @since 0.9.4 consolidated from numerous FormHandlers
|
||||||
|
*/
|
||||||
|
public void setSettings(Map settings) { _settings = new HashMap(settings); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* setSettings() must have been called previously
|
||||||
|
* Curses Jetty for returning arrays.
|
||||||
|
*
|
||||||
|
* @since 0.9.4 consolidated from numerous FormHandlers
|
||||||
|
*/
|
||||||
|
protected String getJettyString(String key) {
|
||||||
|
if (_settings == null)
|
||||||
|
return null;
|
||||||
|
String[] arr = (String[]) _settings.get(key);
|
||||||
|
if (arr == null)
|
||||||
|
return null;
|
||||||
|
return arr[0].trim();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call this to prevent changes using GET
|
* Call this to prevent changes using GET
|
||||||
*
|
*
|
||||||
|
@ -6,6 +6,13 @@
|
|||||||
<html><head>
|
<html><head>
|
||||||
<%@include file="css.jsi" %>
|
<%@include file="css.jsi" %>
|
||||||
<%=intl.title("config UI")%>
|
<%=intl.title("config UI")%>
|
||||||
|
<style type='text/css'>
|
||||||
|
input.default {
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<script src="/js/ajax.js" type="text/javascript"></script>
|
<script src="/js/ajax.js" type="text/javascript"></script>
|
||||||
<%@include file="summaryajax.jsi" %>
|
<%@include file="summaryajax.jsi" %>
|
||||||
</head><body onload="initAjax()">
|
</head><body onload="initAjax()">
|
||||||
@ -24,6 +31,7 @@
|
|||||||
<% formhandler.storeMethod(request.getMethod()); %>
|
<% formhandler.storeMethod(request.getMethod()); %>
|
||||||
<jsp:setProperty name="formhandler" property="*" />
|
<jsp:setProperty name="formhandler" property="*" />
|
||||||
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
|
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
|
||||||
|
<jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" />
|
||||||
<jsp:getProperty name="formhandler" property="allMessages" />
|
<jsp:getProperty name="formhandler" property="allMessages" />
|
||||||
<div class="configure"><div class="topshimten"><h3><%=uihelper._("Router Console Theme")%></h3></div>
|
<div class="configure"><div class="topshimten"><h3><%=uihelper._("Router Console Theme")%></h3></div>
|
||||||
<form action="" method="POST">
|
<form action="" method="POST">
|
||||||
@ -34,9 +42,10 @@
|
|||||||
consoleNonce = Long.toString(new java.util.Random().nextLong());
|
consoleNonce = Long.toString(new java.util.Random().nextLong());
|
||||||
System.setProperty("router.consoleNonce", consoleNonce);
|
System.setProperty("router.consoleNonce", consoleNonce);
|
||||||
}
|
}
|
||||||
|
String pageNonce = formhandler.getNewNonce();
|
||||||
%>
|
%>
|
||||||
<input type="hidden" name="consoleNonce" value="<%=consoleNonce%>" >
|
<input type="hidden" name="consoleNonce" value="<%=consoleNonce%>" >
|
||||||
<input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" >
|
<input type="hidden" name="nonce" value="<%=pageNonce%>" >
|
||||||
<input type="hidden" name="action" value="blah" >
|
<input type="hidden" name="action" value="blah" >
|
||||||
<%
|
<%
|
||||||
String userAgent = request.getHeader("User-Agent");
|
String userAgent = request.getHeader("User-Agent");
|
||||||
@ -54,5 +63,17 @@
|
|||||||
</p><hr><div class="formaction">
|
</p><hr><div class="formaction">
|
||||||
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
|
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
|
||||||
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Apply")%>" >
|
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Apply")%>" >
|
||||||
</div></form></div>
|
</div></form>
|
||||||
|
|
||||||
|
<h3><%=uihelper._("Router Console Password")%></h3>
|
||||||
|
<form action="" method="POST">
|
||||||
|
<input type="hidden" name="nonce" value="<%=pageNonce%>" >
|
||||||
|
<jsp:getProperty name="uihelper" property="passwordForm" />
|
||||||
|
<div class="formaction">
|
||||||
|
<input type="submit" name="action" class="default" value="<%=intl._("Add user")%>" >
|
||||||
|
<input type="submit" name="action" class="delete" value="<%=intl._("Delete selected")%>" >
|
||||||
|
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
|
||||||
|
<input type="submit" name="action" class="add" value="<%=intl._("Add user")%>" >
|
||||||
|
</div>
|
||||||
|
</form></div>
|
||||||
</div></body></html>
|
</div></body></html>
|
||||||
|
@ -164,4 +164,24 @@ public class RouterPasswordManager extends PasswordManager {
|
|||||||
toDel.add(pfx + PROP_CRYPT);
|
toDel.add(pfx + PROP_CRYPT);
|
||||||
return _context.router().saveConfig(toAdd, toDel);
|
return _context.router().saveConfig(toAdd, toDel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove password, any kind.
|
||||||
|
*
|
||||||
|
* @param realm e.g. i2cp, routerconsole, etc.
|
||||||
|
* @param user null or "" for no user, already trimmed
|
||||||
|
* @return success
|
||||||
|
*/
|
||||||
|
public boolean remove(String realm, String user) {
|
||||||
|
String pfx = realm;
|
||||||
|
if (user != null && user.length() > 0)
|
||||||
|
pfx += '.' + user;
|
||||||
|
List<String> toDel = new ArrayList(5);
|
||||||
|
toDel.add(pfx + PROP_PW);
|
||||||
|
toDel.add(pfx + PROP_B64);
|
||||||
|
toDel.add(pfx + PROP_MD5);
|
||||||
|
toDel.add(pfx + PROP_CRYPT);
|
||||||
|
toDel.add(pfx + PROP_SHASH);
|
||||||
|
return _context.router().saveConfig(null, toDel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user