Add support for RouterManager.CheckUpdates and RouterManager.Update.

This commit is contained in:
dev
2015-06-09 04:06:00 +00:00
parent 8a39b639b9
commit fcd2a54754
30 changed files with 154 additions and 205 deletions

View File

@ -8,4 +8,4 @@ updateURL=http://itoopie.i2p/files/I2PControl-update.xpi2p
license=Apache 2.0
min-jetty-version=7
max-jetty-version=8.9999
min-i2p-version=0.9.16
min-i2p-version=0.9.21

View File

@ -1,10 +1,10 @@
package com.thetransactioncompany.jsonrpc2;
import org.json.simple.JSONObject;
import java.util.List;
import java.util.Map;
import org.json.simple.JSONObject;
/**
* Represents a JSON-RPC 2.0 notification.

View File

@ -1,15 +1,15 @@
package com.thetransactioncompany.jsonrpc2;
import java.util.List;
import java.util.LinkedList;
import java.util.Map;
import java.util.LinkedHashMap;
import org.json.simple.parser.ContainerFactory;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* Parses JSON-RPC 2.0 request, notification and response messages.

View File

@ -1,11 +1,10 @@
package com.thetransactioncompany.jsonrpc2;
import java.util.HashMap;
import org.json.simple.JSONObject;
import java.util.List;
import java.util.Map;
import org.json.simple.JSONObject;
/**
* Represents a JSON-RPC 2.0 request.

View File

@ -1,10 +1,10 @@
package com.thetransactioncompany.jsonrpc2;
import org.json.simple.JSONObject;
import java.util.List;
import java.util.Map;
import org.json.simple.JSONObject;
/**
* Represents a JSON-RPC 2.0 response.

View File

@ -1,9 +1,12 @@
package com.thetransactioncompany.jsonrpc2.server;
import java.util.*;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Error;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Notification;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
import com.thetransactioncompany.jsonrpc2.*;
import java.util.Hashtable;
/**

View File

@ -1,9 +1,9 @@
package com.thetransactioncompany.jsonrpc2.server;
import javax.servlet.http.HttpServletRequest;
import java.security.Principal;
import java.security.cert.X509Certificate;
import javax.servlet.http.HttpServletRequest;
/**

View File

@ -1,7 +1,7 @@
package com.thetransactioncompany.jsonrpc2.server;
import com.thetransactioncompany.jsonrpc2.*;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Notification;
/**

View File

@ -1,7 +1,8 @@
package com.thetransactioncompany.jsonrpc2.server;
import com.thetransactioncompany.jsonrpc2.*;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
/**

View File

@ -1,14 +1,13 @@
package com.thetransactioncompany.jsonrpc2.util;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Error;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.thetransactioncompany.jsonrpc2.*;
/**
* Utility class for retrieving JSON-RPC 2.0 named parameters (key-value pairs

View File

@ -1,9 +1,7 @@
package com.thetransactioncompany.jsonrpc2.util;
import java.lang.reflect.*;
import com.thetransactioncompany.jsonrpc2.*;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Error;
/**

View File

@ -1,12 +1,11 @@
package com.thetransactioncompany.jsonrpc2.util;
import java.util.LinkedList;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Error;
import java.util.List;
import java.util.Map;
import com.thetransactioncompany.jsonrpc2.*;
/**
* Utility class for retrieving JSON-RPC 2.0 positional parameters (packed into

View File

@ -16,22 +16,21 @@ package net.i2p.i2pcontrol;
*
*/
import java.io.File;
import java.io.IOException;
import java.net.UnknownHostException;
import net.i2p.I2PAppContext;
import net.i2p.i2pcontrol.security.KeyStoreFactory;
import net.i2p.i2pcontrol.security.SecurityManager;
import net.i2p.i2pcontrol.servlets.JSONRPC2Servlet;
import net.i2p.i2pcontrol.servlets.configuration.ConfigurationManager;
import net.i2p.util.Log;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ssl.SslSocketConnector;
import org.eclipse.jetty.servlet.ServletHandler;
import java.io.File;
import java.io.IOException;
import java.net.UnknownHostException;
/**
* This handles the starting and stopping of an eepsite tunnel and jetty
@ -77,7 +76,7 @@ public class I2PControlController{
private static void start(String args[]) {
I2PAppContext.getGlobalContext().logManager().getLog(JSONRPC2Servlet.class).setMinimumPriority(Log.DEBUG);
try{
try {
_server = buildServer();
} catch (IOException e) {
_log.error("Unable to add listener " + _conf.getConf("i2pcontrol.listen.address", "127.0.0.1")+":"+_conf.getConf("i2pcontrol.listen.port", 7560) + " - " + e.getMessage());

View File

@ -1,25 +1,9 @@
package net.i2p.i2pcontrol.router;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;
import net.i2p.I2PAppContext;
import net.i2p.data.Certificate;
import net.i2p.data.DataFormatException;
import net.i2p.data.PrivateKey;
import net.i2p.data.PublicKey;
import net.i2p.data.router.RouterIdentity;
import net.i2p.data.router.RouterInfo;
import net.i2p.data.SigningPrivateKey;
import net.i2p.data.SigningPublicKey;
import net.i2p.router.Router;
import net.i2p.router.RouterContext;
import net.i2p.util.Log;
import net.i2p.util.SecureFileOutputStream;
/**
* Handle communications with the router instance.

View File

@ -1,7 +1,6 @@
package net.i2p.i2pcontrol.security;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;

View File

@ -1,43 +1,16 @@
package net.i2p.i2pcontrol.security;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import net.i2p.i2pcontrol.I2PControlController;
import sun.security.util.ObjectIdentifier;
import sun.security.x509.*;
import java.io.*;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.SecureRandom;
import java.security.SignatureException;
import java.security.UnrecoverableKeyException;
import java.security.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Date;
import net.i2p.i2pcontrol.I2PControlController;
import sun.security.util.ObjectIdentifier;
import sun.security.x509.AlgorithmId;
import sun.security.x509.CertificateAlgorithmId;
import sun.security.x509.CertificateIssuerName;
import sun.security.x509.CertificateSerialNumber;
import sun.security.x509.CertificateSubjectName;
import sun.security.x509.CertificateValidity;
import sun.security.x509.CertificateVersion;
import sun.security.x509.CertificateX509Key;
import sun.security.x509.X500Name;
import sun.security.x509.X509CertImpl;
import sun.security.x509.X509CertInfo;
public class KeyStoreFactory {
private static final float JAVA_VERSION = Float.valueOf(System.getProperty("java.version").charAt(0) + "." + System.getProperty("java.version").charAt(2));
public static final ObjectIdentifier DEFAULT_CERTIFICATE_ALGORITHM = AlgorithmId.sha512WithRSAEncryption_oid;

View File

@ -1,14 +1,14 @@
package net.i2p.i2pcontrol.security;
import net.i2p.I2PAppContext;
import net.i2p.i2pcontrol.I2PControlController;
import net.i2p.util.Log;
import java.security.KeyPair;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.cert.X509Certificate;
import net.i2p.I2PAppContext;
import net.i2p.i2pcontrol.I2PControlController;
import net.i2p.util.Log;
public class KeyStoreInitializer {
private static KeyStore _ks;

View File

@ -16,19 +16,6 @@ package net.i2p.i2pcontrol.security;
*
*/
import java.security.KeyStore;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import javax.net.SocketFactory;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import net.i2p.I2PAppContext;
import net.i2p.crypto.SHA256Generator;
import net.i2p.data.Base64;
@ -36,6 +23,14 @@ import net.i2p.i2pcontrol.security.jbcrypt.BCrypt;
import net.i2p.i2pcontrol.servlets.configuration.ConfigurationManager;
import net.i2p.util.Log;
import javax.net.SocketFactory;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.security.KeyStore;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import java.util.*;
/**
* Manage the password storing for I2PControl.
*/

View File

@ -15,7 +15,6 @@ package net.i2p.i2pcontrol.security.jbcrypt;
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
import java.io.UnsupportedEncodingException;
import java.security.SecureRandom;
/**

View File

@ -16,33 +16,19 @@ package net.i2p.i2pcontrol.servlets;
*
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;
import com.thetransactioncompany.jsonrpc2.*;
import com.thetransactioncompany.jsonrpc2.server.Dispatcher;
import net.i2p.I2PAppContext;
import net.i2p.i2pcontrol.I2PControlVersion;
import net.i2p.i2pcontrol.servlets.jsonrpc2handlers.*;
import net.i2p.util.Log;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.i2p.I2PAppContext;
import net.i2p.util.Log;
import net.i2p.i2pcontrol.I2PControlVersion;
import net.i2p.i2pcontrol.servlets.jsonrpc2handlers.AuthenticateHandler;
import net.i2p.i2pcontrol.servlets.jsonrpc2handlers.EchoHandler;
import net.i2p.i2pcontrol.servlets.jsonrpc2handlers.GetRateHandler;
import net.i2p.i2pcontrol.servlets.jsonrpc2handlers.I2PControlHandler;
import net.i2p.i2pcontrol.servlets.jsonrpc2handlers.NetworkSettingHandler;
import net.i2p.i2pcontrol.servlets.jsonrpc2handlers.RouterInfoHandler;
import net.i2p.i2pcontrol.servlets.jsonrpc2handlers.RouterManagerHandler;
import com.thetransactioncompany.jsonrpc2.*;
import com.thetransactioncompany.jsonrpc2.server.*;
import java.io.*;
/**

View File

@ -1,21 +1,14 @@
package net.i2p.i2pcontrol.servlets.configuration;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import net.i2p.I2PAppContext;
import net.i2p.util.Log;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import net.i2p.I2PAppContext;
import net.i2p.i2pcontrol.security.SecurityManager;
import net.i2p.util.Log;
/**
* Manage the configuration of I2PControl.
* @author mathias

View File

@ -1,18 +1,16 @@
package net.i2p.i2pcontrol.servlets.jsonrpc2handlers;
import java.util.HashMap;
import java.util.Map;
import net.i2p.i2pcontrol.I2PControlVersion;
import net.i2p.i2pcontrol.security.AuthToken;
import net.i2p.i2pcontrol.security.SecurityManager;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Error;
import com.thetransactioncompany.jsonrpc2.JSONRPC2ParamsType;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
import com.thetransactioncompany.jsonrpc2.server.MessageContext;
import com.thetransactioncompany.jsonrpc2.server.RequestHandler;
import net.i2p.i2pcontrol.I2PControlVersion;
import net.i2p.i2pcontrol.security.AuthToken;
import net.i2p.i2pcontrol.security.SecurityManager;
import java.util.HashMap;
import java.util.Map;
/*
* Copyright 2011 hottuna (dev@robertfoss.se)

View File

@ -1,15 +1,14 @@
package net.i2p.i2pcontrol.servlets.jsonrpc2handlers;
import java.util.HashMap;
import java.util.Map;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Error;
import com.thetransactioncompany.jsonrpc2.JSONRPC2ParamsType;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
import com.thetransactioncompany.jsonrpc2.server.MessageContext;
import com.thetransactioncompany.jsonrpc2.server.RequestHandler;
import java.util.HashMap;
import java.util.Map;
public class EchoHandler implements RequestHandler {
private String[] requiredArgs = {"Echo"};

View File

@ -1,18 +1,16 @@
package net.i2p.i2pcontrol.servlets.jsonrpc2handlers;
import java.util.HashMap;
import java.util.Map;
import net.i2p.I2PAppContext;
import net.i2p.stat.Rate;
import net.i2p.stat.RateStat;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Error;
import com.thetransactioncompany.jsonrpc2.JSONRPC2ParamsType;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
import com.thetransactioncompany.jsonrpc2.server.MessageContext;
import com.thetransactioncompany.jsonrpc2.server.RequestHandler;
import net.i2p.I2PAppContext;
import net.i2p.stat.Rate;
import net.i2p.stat.RateStat;
import java.util.HashMap;
import java.util.Map;
/*
* Copyright 2011 hottuna (dev@robertfoss.se)

View File

@ -1,13 +1,10 @@
package net.i2p.i2pcontrol.servlets.jsonrpc2handlers;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.jetty.server.ssl.SslSocketConnector;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Error;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
import com.thetransactioncompany.jsonrpc2.server.MessageContext;
import com.thetransactioncompany.jsonrpc2.server.RequestHandler;
import net.i2p.I2PAppContext;
import net.i2p.i2pcontrol.I2PControlController;
import net.i2p.i2pcontrol.router.RouterManager;
@ -15,12 +12,12 @@ import net.i2p.i2pcontrol.security.SecurityManager;
import net.i2p.i2pcontrol.servlets.configuration.ConfigurationManager;
import net.i2p.router.RouterContext;
import net.i2p.util.Log;
import org.eclipse.jetty.server.ssl.SslSocketConnector;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Error;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
import com.thetransactioncompany.jsonrpc2.server.MessageContext;
import com.thetransactioncompany.jsonrpc2.server.RequestHandler;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
/*
* Copyright 2011 hottuna (dev@robertfoss.se)

View File

@ -1,8 +1,7 @@
package net.i2p.i2pcontrol.servlets.jsonrpc2handlers;
import org.json.simple.JSONObject;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Error;
import org.json.simple.JSONObject;
/*
* Copyright 2011 hottuna (dev@robertfoss.se)

View File

@ -1,15 +1,13 @@
package net.i2p.i2pcontrol.servlets.jsonrpc2handlers;
import net.i2p.i2pcontrol.I2PControlVersion;
import net.i2p.i2pcontrol.security.*;
import net.i2p.i2pcontrol.security.SecurityManager;
import java.util.HashMap;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Error;
import com.thetransactioncompany.jsonrpc2.JSONRPC2ParamsType;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
import net.i2p.i2pcontrol.security.ExpiredAuthTokenException;
import net.i2p.i2pcontrol.security.InvalidAuthTokenException;
import net.i2p.i2pcontrol.security.SecurityManager;
import java.util.HashMap;
/*
* Copyright 2011 hottuna (dev@robertfoss.se)

View File

@ -1,33 +1,23 @@
package net.i2p.i2pcontrol.servlets.jsonrpc2handlers;
import java.util.HashMap;
import java.util.Map;
import org.tanukisoftware.wrapper.WrapperManager;
import net.i2p.I2PAppContext;
import net.i2p.data.DataHelper;
import net.i2p.data.router.RouterAddress;
import net.i2p.data.router.RouterInfo;
import net.i2p.i2pcontrol.I2PControlController;
import net.i2p.i2pcontrol.router.RouterManager;
import net.i2p.router.CommSystemFacade;
import net.i2p.router.Router;
import net.i2p.router.RouterContext;
import net.i2p.router.RouterVersion;
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
import net.i2p.router.networkdb.reseed.ReseedChecker;
import net.i2p.router.transport.CommSystemFacadeImpl;
import net.i2p.router.transport.FIFOBandwidthRefiller;
import net.i2p.router.transport.TransportManager;
import net.i2p.util.Log;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Error;
import com.thetransactioncompany.jsonrpc2.JSONRPC2ParamsType;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
import com.thetransactioncompany.jsonrpc2.server.MessageContext;
import com.thetransactioncompany.jsonrpc2.server.RequestHandler;
import net.i2p.I2PAppContext;
import net.i2p.app.ClientAppManager;
import net.i2p.i2pcontrol.router.RouterManager;
import net.i2p.router.Router;
import net.i2p.router.RouterContext;
import net.i2p.router.networkdb.reseed.ReseedChecker;
import net.i2p.update.UpdateManager;
import net.i2p.update.UpdateType;
import net.i2p.util.Log;
import org.tanukisoftware.wrapper.WrapperManager;
import java.util.HashMap;
import java.util.Map;
/*
* Copyright 2011 hottuna (dev@robertfoss.se)
@ -88,7 +78,7 @@ public class RouterManagerHandler implements RequestHandler {
req.getID());
}
HashMap inParams = (HashMap) req.getParams();
Map outParams = new HashMap();
final Map outParams = new HashMap();
if (inParams.containsKey("Shutdown")) {
outParams.put("Shutdown", null);
@ -157,8 +147,51 @@ public class RouterManagerHandler implements RequestHandler {
reseeder.requestReseed();
}
}).start();
return new JSONRPC2Response(outParams, req.getID());
}
if (inParams.containsKey("CheckUpdates")){
Thread t = new Thread(){
@Override
public void run(){
ClientAppManager clmgr = I2PAppContext.getCurrentContext().clientAppManager();
UpdateManager upmgr = (UpdateManager) clmgr.getRegisteredApp(UpdateManager.APP_NAME);
boolean updateIsAvailable = upmgr.checkAvailable(UpdateType.ROUTER_SIGNED) != null;
outParams.put("CheckUpdates", updateIsAvailable);
}
};
t.start();
try {
t.join();
} catch (InterruptedException e) {}
return new JSONRPC2Response(outParams, req.getID());
}
if (inParams.containsKey("Update")){
Thread t = new Thread(){
@Override
public void run(){
ClientAppManager clmgr = I2PAppContext.getCurrentContext().clientAppManager();
UpdateManager upmgr = (UpdateManager) clmgr.getRegisteredApp(UpdateManager.APP_NAME);
boolean updateStarted = upmgr.update(UpdateType.ROUTER_SIGNED);
if (!updateStarted) {
outParams.put("Update", "Failed");
}
boolean isUpdating = upmgr.isUpdateInProgress(UpdateType.ROUTER_SIGNED);
while (isUpdating) {
try { Thread.sleep(100);} catch (Exception e){}
isUpdating = upmgr.isUpdateInProgress(UpdateType.ROUTER_SIGNED);
}
outParams.put("Update", upmgr.getStatus());
}
};
t.start();
try {
t.join();
} catch (InterruptedException e) {}
return new JSONRPC2Response(outParams, req.getID());
}
return new JSONRPC2Response(outParams, req.getID());
}

View File

@ -4,6 +4,9 @@
*/
package org.json.simple;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
@ -11,9 +14,6 @@ import java.io.Writer;
import java.util.List;
import java.util.Map;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
* @author FangYidong<fangyidong@yahoo.com.cn>

View File

@ -4,6 +4,9 @@
*/
package org.json.simple.parser;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
@ -11,9 +14,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
/**
* Parser for JSON text. Please note that JSONParser is NOT thread-safe.