Compare commits

...

23 Commits

Author SHA1 Message Date
idk
262311390e prevent double-launch on the first run 2022-09-04 11:09:52 -04:00
idk
3ac2f2b4a2 switch to tag containing the addressbook fix 2022-09-04 08:35:29 -04:00
idk
00ca509e57 bump version 2022-09-04 02:04:37 -04:00
idk
a1826d40e8 rotate keys in tunnel config 2022-09-04 01:59:27 -04:00
idk
c8f3f0b960 rotate keys in tunnel config 2022-09-04 01:52:58 -04:00
idk
a80512cd5a add a note which indicates that the user.dir must be set for the launcher to relauch itself 2022-09-04 01:39:09 -04:00
idk
7e5579fd65 allow chromium-first mode while I wait for the VM to extract(again) 2022-09-04 00:52:48 -04:00
idk
934ab43b2a Download from sub-directory since my release now has multiple artifacts github puts it at a different place 2022-09-03 22:41:30 -04:00
idk
9214c2116c move version of browser wrapping bundle to version config file 2022-09-03 22:20:42 -04:00
idk
c02e466f80 move version of browser wrapping bundle to version config file 2022-09-03 21:57:07 -04:00
idk
59a1a3d9e6 update browser wrapping bundle 2022-09-03 21:42:39 -04:00
idk
a230a49af7 format everything for readability and so the brackets all line up again. All whitespace changes. 2022-09-03 21:17:44 -04:00
idk
079ef87c8f format everything for readability and so the brackets all line up again. All whitespace changes. 2022-09-03 21:13:27 -04:00
idk
f9a7f8ab2d Set user.dir after getting path 2022-09-03 20:51:33 -04:00
idk
3c8dd9dee9 fix indent 2022-09-03 19:09:47 -04:00
idk
65db834ec9 no directory abort 2022-09-03 19:08:57 -04:00
idk
b955dbe66e fix setoutpaths for runtime and app dir 2022-09-03 18:27:13 -04:00
idk
e367227714 enable the usability profile 2022-09-02 20:05:51 -04:00
idk
4a02ec418a Merge branch 'auto-configure-any-browser' into 'master'
WIP: This enables the jpackage to launch almost any browser as an I2P-enabled...

See merge request i2p-hackers/i2p.firefox!7
2022-09-02 02:51:05 +00:00
idk
4368b80c79 Merge branch 'master' into 'auto-configure-any-browser'
# Conflicts:
#   src/nsis/i2pbrowser-installer.nsi
2022-09-02 02:49:56 +00:00
idk
7dff65d67d Merge branch 'experimental-extension-loadout' into 'master'
WIP: add 2 extension loadouts, one "Usability" loadout, one "Strict" loadout

See merge request i2p-hackers/i2p.firefox!8
2022-09-02 02:48:58 +00:00
idk
0ad9406387 copy app, runtime individually instead of the parent dir 2022-09-01 21:33:32 -04:00
idk
21b396e343 add buildscript for experimental extension loadout 2022-08-29 19:56:13 -04:00
16 changed files with 727 additions and 459 deletions

View File

@ -83,10 +83,10 @@ src/I2P/config: build/I2P
rm -rf src/I2P/config/geoip src/I2P/config/webapps src/I2P/config/certificates
echo true | tee src/I2P/config/jpackaged
cp -v $(RES_DIR)/clients.config src/I2P/config/
cp -v $(RES_DIR)/i2ptunnel.config src/I2P/config/
cp -v $(RES_DIR)/wrapper.config src/I2P/config/
#grep -v 'router.updateURL' $(RES_DIR)/router.config > src/I2P/config/router.config
cat router.config > src/I2P/config/router.config
cat i2ptunnel.config > src/I2P/config/i2ptunnel.config
cp -v $(RES_DIR)/hosts.txt src/I2P/config/hosts.txt
cp -R $(RES_DIR)/certificates src/I2P/config/certificates
cp -R $(RES_DIR)/eepsite src/I2P/config/eepsite

View File

@ -66,7 +66,7 @@ if [ ! -f "$HERE/build/jna-platform.jar" ]; then
fi
if [ ! -f "$HERE/build/i2pfirefox.jar" ]; then
wget -O "$HERE/build/i2pfirefox.jar" https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/0.0.16/i2pfirefox.jar
wget -O "$HERE/build/i2pfirefox.jar" "https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/$I2PFIREFOX_VERSION/i2pfirefox.jar"
fi
cd java

17
experimental.sh Executable file
View File

@ -0,0 +1,17 @@
#! /usr/bin/env bash
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
cd "$SCRIPT_DIR" || exit 1
. "$SCRIPT_DIR/config.sh"
if [ -f config_overide.sh ]; then
. "$SCRIPT_DIR/config_override.sh"
fi
./clean.sh
wsl make distclean
wsl make clean-extensions
wsl make new-extensions
./build.sh
wsl make

192
i2ptunnel.config Normal file
View File

@ -0,0 +1,192 @@
# NOTE: This I2P config file must use UTF-8 encoding
#
# If you have a 'split' directory installation, with configuration
# files in ~/.i2p (Linux), %LOCALAPPDATA%\I2P (Windows),
# or /Users/(user)/Library/Application Support/i2p (Mac), be sure to
# edit the file in the configuration directory, NOT the install directory.
# When running as a Linux daemon, the configuration directory is /var/lib/i2p
# and the install directory is /usr/share/i2p .
# When running as a Windows service, the configuration directory is \ProgramData\i2p
# and the install directory is \Program Files\i2p .
#
# On first run, this file will be split into individual config files
# in i2ptunnel.config.d/ in the configuration directory.
# Look in that directory for the file to edit.
#
# eepproxy
tunnel.0.name=I2P HTTP Proxy
tunnel.0.description=HTTP proxy for browsing eepsites and the web
tunnel.0.type=httpclient
tunnel.0.sharedClient=false
tunnel.0.interface=127.0.0.1
tunnel.0.listenPort=4444
tunnel.0.proxyList=false.i2p
tunnel.0.i2cpHost=127.0.0.1
tunnel.0.i2cpPort=7654
tunnel.0.option.inbound.nickname=shared clients
tunnel.0.option.outbound.nickname=shared clients
tunnel.0.option.i2cp.leaseSetEncType=4,0
tunnel.0.option.i2cp.reduceIdleTime=900000
tunnel.0.option.i2cp.reduceOnIdle=true
tunnel.0.option.i2cp.reduceQuantity=1
tunnel.0.option.i2p.streaming.connectDelay=1000
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=false.i2p
tunnel.0.option.inbound.length=3
tunnel.0.option.inbound.lengthVariance=0
tunnel.0.option.outbound.length=3
tunnel.0.option.outbound.lengthVariance=0
tunnel.0.option.outbound.priority=10
tunnel.0.startOnLoad=true
tunnel.0.option.persistentClientKey=false
tunnel.0.option.i2cp.closeIdleTime=1800000
tunnel.0.option.i2cp.closeOnIdle=true
tunnel.0.option.i2cp.newDestOnResume=true
# irc
tunnel.1.name=Irc2P
tunnel.1.description=IRC tunnel to access the Irc2P network
tunnel.1.type=ircclient
tunnel.1.sharedClient=false
tunnel.1.interface=127.0.0.1
tunnel.1.listenPort=6668
tunnel.1.targetDestination=irc.postman.i2p:6667,irc.echelon.i2p:6667
tunnel.1.i2cpHost=127.0.0.1
tunnel.1.i2cpPort=7654
tunnel.1.option.inbound.nickname=Irc2P
tunnel.1.option.outbound.nickname=Irc2P
tunnel.1.option.i2cp.closeIdleTime=1200000
tunnel.1.option.i2cp.closeOnIdle=true
tunnel.1.option.i2cp.delayOpen=true
tunnel.1.option.i2cp.destination.sigType=7
tunnel.1.option.i2cp.leaseSetEncType=4,0
tunnel.1.option.i2cp.newDestOnResume=false
tunnel.1.option.i2cp.reduceIdleTime=600000
tunnel.1.option.i2cp.reduceOnIdle=true
tunnel.1.option.i2cp.reduceQuantity=1
tunnel.1.option.i2p.streaming.connectDelay=1000
tunnel.1.option.i2p.streaming.maxWindowSize=16
tunnel.1.option.inbound.length=3
tunnel.1.option.inbound.lengthVariance=0
tunnel.1.option.outbound.length=3
tunnel.1.option.outbound.lengthVariance=0
tunnel.1.option.outbound.priority=15
tunnel.1.startOnLoad=true
# local eepserver
tunnel.3.name=I2P webserver
tunnel.3.description=My eepsite
tunnel.3.type=httpserver
tunnel.3.targetHost=127.0.0.1
tunnel.3.targetPort=7658
tunnel.3.spoofedHost=mysite.i2p
tunnel.3.privKeyFile=eepsite/eepPriv.dat
tunnel.3.i2cpHost=127.0.0.1
tunnel.3.i2cpPort=7654
tunnel.3.option.inbound.nickname=eepsite
tunnel.3.option.outbound.nickname=eepsite
tunnel.3.option.i2cp.destination.sigType=7
tunnel.3.option.i2cp.leaseSetEncType=4,0
tunnel.3.option.inbound.length=3
tunnel.3.option.inbound.lengthVariance=0
tunnel.3.option.outbound.length=3
tunnel.3.option.outbound.lengthVariance=0
# uncomment for HTTPS to port 7668
#tunnel.3.option.targetForPort.443=127.0.0.1:7668
tunnel.3.startOnLoad=false
# postman's SMTP server - see hq.postman.i2p
tunnel.4.description=smtp server
tunnel.4.i2cpHost=127.0.0.1
tunnel.4.i2cpPort=7654
tunnel.4.interface=127.0.0.1
tunnel.4.listenPort=7659
tunnel.4.name=smtp.postman.i2p
tunnel.4.option.inbound.nickname=shared clients
tunnel.4.option.outbound.nickname=shared clients
tunnel.4.option.i2cp.leaseSetEncType=4,0
tunnel.4.option.i2cp.reduceIdleTime=900000
tunnel.4.option.i2cp.reduceOnIdle=true
tunnel.4.option.i2cp.reduceQuantity=1
tunnel.4.option.inbound.length=3
tunnel.4.option.inbound.lengthVariance=0
tunnel.4.option.outbound.length=3
tunnel.4.option.outbound.lengthVariance=0
tunnel.4.startOnLoad=true
tunnel.4.targetDestination=smtp.postman.i2p:25
tunnel.4.type=client
tunnel.4.sharedClient=true
# postman's POP3 server - see hq.postman.i2p
tunnel.2.name=pop3.postman.i2p
tunnel.2.description=pop3 server
tunnel.2.i2cpHost=127.0.0.1
tunnel.2.i2cpPort=7654
tunnel.2.interface=127.0.0.1
tunnel.2.listenPort=7660
tunnel.2.option.inbound.nickname=shared clients
tunnel.2.option.outbound.nickname=shared clients
tunnel.2.option.i2cp.leaseSetEncType=4,0
tunnel.2.option.i2cp.reduceIdleTime=900000
tunnel.2.option.i2cp.reduceOnIdle=true
tunnel.2.option.i2cp.reduceQuantity=1
tunnel.2.option.i2p.streaming.connectDelay=1000
tunnel.2.option.inbound.length=3
tunnel.2.option.inbound.lengthVariance=0
tunnel.2.option.outbound.length=3
tunnel.2.option.outbound.lengthVariance=0
tunnel.2.startOnLoad=true
tunnel.2.targetDestination=pop.postman.i2p:110
tunnel.2.type=client
tunnel.2.sharedClient=true
# HTTPS (CONNECT) outproxy
tunnel.5.name=I2P HTTPS Proxy
tunnel.5.description=HTTPS proxy for browsing eepsites and the web
tunnel.5.type=connectclient
tunnel.5.sharedClient=true
tunnel.5.interface=127.0.0.1
tunnel.5.listenPort=4445
tunnel.5.proxyList=outproxy-tor.meeh.i2p
tunnel.5.i2cpHost=127.0.0.1
tunnel.5.i2cpPort=7654
tunnel.5.option.inbound.nickname=shared clients
tunnel.5.option.outbound.nickname=shared clients
tunnel.5.option.i2cp.leaseSetEncType=4,0
tunnel.5.option.i2cp.reduceIdleTime=900000
tunnel.5.option.i2cp.reduceOnIdle=true
tunnel.5.option.i2cp.reduceQuantity=1
tunnel.5.option.i2p.streaming.connectDelay=1000
tunnel.5.option.inbound.length=3
tunnel.5.option.inbound.lengthVariance=0
tunnel.5.option.outbound.length=3
tunnel.5.option.outbound.lengthVariance=0
tunnel.5.startOnLoad=true
# I2P Git Repositories SSH Access
tunnel.6.description=I2P Git Repositories SSH Access
tunnel.6.interface=127.0.0.1
tunnel.6.listenPort=7670
tunnel.6.name=gitssh.idk.i2p
tunnel.6.option.i2cp.closeIdleTime=1800000
tunnel.6.option.i2cp.closeOnIdle=false
tunnel.6.option.i2cp.delayOpen=true
tunnel.6.option.i2cp.destination.sigType=7
tunnel.6.option.i2cp.leaseSetEncType=4
tunnel.6.option.i2cp.newDestOnResume=false
tunnel.6.option.i2cp.reduceIdleTime=1200000
tunnel.6.option.i2cp.reduceOnIdle=true
tunnel.6.option.i2cp.reduceQuantity=1
tunnel.6.option.inbound.backupQuantity=1
tunnel.6.option.inbound.length=3
tunnel.6.option.inbound.nickname=gitssh.idk.i2p
tunnel.6.option.inbound.quantity=3
tunnel.6.option.outbound.backupQuantity=1
tunnel.6.option.outbound.length=3
tunnel.6.option.outbound.nickname=gitssh.idk.i2p
tunnel.6.option.outbound.quantity=3
tunnel.6.sharedClient=false
tunnel.6.startOnLoad=false
tunnel.6.targetDestination=gitssh.idk.i2p
tunnel.6.type=client

View File

@ -2,16 +2,17 @@
JNA_VERSION=5.11.0
export JNA_VERSION=5.11.0
I2PFIREFOX_VERSION=0.0.22
export I2PFIREFOX_VERSION=0.0.22
#Comment this out to build from an alternate branch or
# the tip of the master branch.
VERSIONMAJOR=1
VERSIONMINOR=9
VERSIONBUILD=0
VERSIONBUILD=1
I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
export I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
VERSION=i2p-1.9.0
export VERSION=i2p-1.9.0
VERSION=i2p-jpackage-1.9.1
export VERSION=i2p-jpackage-1.9.1
#Uncomment this to build from the tip of the master.
#I2P_VERSION=1.8.0

View File

@ -25,9 +25,11 @@ public class Elevator {
if (!result) {
int lastError = Kernel32.INSTANCE.GetLastError();
String errorMessage = Kernel32Util.formatMessageFromLastErrorCode(lastError);
throw new RuntimeException("Error performing elevation: " + lastError + ": " + errorMessage + " (apperror="
+ execInfo.hInstApp + ")");
String errorMessage =
Kernel32Util.formatMessageFromLastErrorCode(lastError);
throw new RuntimeException("Error performing elevation: " + lastError +
": " + errorMessage +
" (apperror=" + execInfo.hInstApp + ")");
}
}
}

View File

@ -1,7 +1,5 @@
package net.i2p.router;
import java.util.*;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
@ -12,9 +10,11 @@ import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.WinReg.HKEY;
import com.sun.jna.win32.W32APIOptions;
import java.util.*;
public interface Shell32X extends Shell32 {
Shell32X INSTANCE = (Shell32X) Native.loadLibrary("shell32", Shell32X.class, W32APIOptions.UNICODE_OPTIONS);
Shell32X INSTANCE = (Shell32X)Native.loadLibrary(
"shell32", Shell32X.class, W32APIOptions.UNICODE_OPTIONS);
int SW_HIDE = 0;
int SW_MAXIMIZE = 3;
@ -49,7 +49,8 @@ public interface Shell32X extends Shell32 {
int SEE_MASK_NOCLOSEPROCESS = 0x00000040;
int ShellExecute(int i, String lpVerb, String lpFile, String lpParameters, String lpDirectory, int nShow);
int ShellExecute(int i, String lpVerb, String lpFile, String lpParameters,
String lpDirectory, int nShow);
boolean ShellExecuteEx(SHELLEXECUTEINFO lpExecInfo);
@ -101,11 +102,22 @@ public interface Shell32X extends Shell32 {
protected List getFieldOrder() {
return Arrays.asList(new String[] {
"cbSize", "fMask", "hwnd", "lpVerb", "lpFile", "lpParameters",
"lpDirectory", "nShow", "hInstApp", "lpIDList", "lpClass",
"hKeyClass", "dwHotKey", "hMonitor", "hProcess",
"cbSize",
"fMask",
"hwnd",
"lpVerb",
"lpFile",
"lpParameters",
"lpDirectory",
"nShow",
"hInstApp",
"lpIDList",
"lpClass",
"hKeyClass",
"dwHotKey",
"hMonitor",
"hProcess",
});
}
}
}

View File

@ -1,5 +1,7 @@
package net.i2p.router;
import static net.i2p.update.UpdateType.*;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
@ -8,19 +10,15 @@ import java.util.*;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import net.i2p.crypto.*;
import net.i2p.app.ClientAppManager;
import net.i2p.router.RouterLaunch;
import net.i2p.crypto.*;
import net.i2p.i2pfirefox.*;
import net.i2p.router.Router;
import net.i2p.router.RouterLaunch;
import net.i2p.update.*;
import net.i2p.update.UpdateManager;
import net.i2p.update.UpdatePostProcessor;
import net.i2p.util.SystemVersion;
import net.i2p.update.*;
import net.i2p.i2pfirefox.*;
import static net.i2p.update.UpdateType.*;
/**
* Launches a router from %PROGRAMFILES%/I2P using configuration data in
@ -51,11 +49,26 @@ public class WinLauncher {
e.printStackTrace();
}
boolean privateBrowsing = false;
if (args != null && args.length > 0) {
boolean usabilityMode = false;
boolean chromiumFirst = false;
if (args != null) {
if (args.length > 0) {
logger.info("checking for private browsing");
if (args[0].equals("-private")) {
privateBrowsing = true;
logger.info("private browsing is true, profile will be discarded at end of session");
logger.info(
"Private browsing is true, profile will be discarded at end of session.");
}
if (args[0].equals("-chromium")) {
chromiumFirst = true;
logger.info("Chromium will be selected before Firefox.");
}
if (args[0].equals("-usability")) {
usabilityMode = true;
logger.info(
"Usability mode is true, using alternate extensions loadout.");
}
}
}
@ -63,7 +76,9 @@ public class WinLauncher {
if (!programs.exists())
programs.mkdirs();
else if (!programs.isDirectory()) {
logger.warning(programs + " exists but is not a directory. Please get it out of the way");
logger.warning(
programs +
" exists but is not a directory. Please get it out of the way");
System.exit(1);
}
@ -71,23 +86,38 @@ public class WinLauncher {
if (!home.exists())
home.mkdirs();
else if (!home.isDirectory()) {
logger.warning(home + " exists but is not a directory. Please get it out of the way");
logger.warning(
home +
" exists but is not a directory. Please get it out of the way");
System.exit(1);
}
if (i2pIsRunning()) {
logger.warning("I2P is already running");
I2PBrowser i2pBrowser = new I2PBrowser();
System.out.println("i2pBrowser");
i2pBrowser.usability = usabilityMode;
i2pBrowser.chromiumFirst = chromiumFirst;
i2pBrowser.firefox = !chromiumFirst;
i2pBrowser.chromium = chromiumFirst;
System.out.println("I2PBrowser");
i2pBrowser.launch(privateBrowsing);
return;
}
System.setProperty("i2p.dir.base", programs.getAbsolutePath());
System.setProperty("i2p.dir.config", home.getAbsolutePath());
System.setProperty("router.pid", String.valueOf(ProcessHandle.current().pid()));
logger.info("\t" + System.getProperty("i2p.dir.base") + "\n\t" + System.getProperty("i2p.dir.config")
+ "\n\t" + System.getProperty("router.pid"));
System.setProperty("router.pid",
String.valueOf(ProcessHandle.current().pid()));
logger.info("\t" + System.getProperty("i2p.dir.base") + "\n\t" +
System.getProperty("i2p.dir.config") + "\n\t" +
System.getProperty("router.pid"));
/**
* IMPORTANT: You must set user.dir to the same directory where the
* jpackage is intstalled, or when the launcher tries to re-run itself
* to start the browser, it will start in the wrong directory and fail
* to find the JVM and Runtime bundle. This broke Windows 11 installs.
*/
System.setProperty("user.dir", programs.getAbsolutePath());
// wupp.i2pRouter = new Router(System.getProperties());
logger.info("Router is configured");
@ -101,7 +131,8 @@ public class WinLauncher {
RouterLaunch.main(args);
}
// see https://stackoverflow.com/questions/434718/sockets-discover-port-availability-using-java
// see
// https://stackoverflow.com/questions/434718/sockets-discover-port-availability-using-java
public static boolean isAvailable(int portNr) {
boolean portFree;
try (var ignored = new ServerSocket(portNr)) {
@ -122,14 +153,15 @@ public class WinLauncher {
if (!isAvailable(7654)) {
return true;
}
// check for the existence of router.ping file, if it's less then 2 minutes old,
// exit
// check for the existence of router.ping file, if it's less then 2 minutes
// old, exit
File home = selectHome();
File ping = new File(home, "router.ping");
if (ping.exists()) {
long diff = System.currentTimeMillis() - ping.lastModified();
if (diff < 60 * 1000) {
logger.info("router.ping exists and is less than 1 minute old, I2P appears to be running already.");
logger.info(
"router.ping exists and is less than 1 minute old, I2P appears to be running already.");
logger.info("If I2P is not running, wait 60 seconds and try again.");
return true;
}
@ -153,7 +185,8 @@ public class WinLauncher {
}
UpdateManager um;
while ((um = (UpdateManager) cam.getRegisteredApp(UpdateManager.APP_NAME)) == null) {
while ((um = (UpdateManager)cam.getRegisteredApp(UpdateManager.APP_NAME)) ==
null) {
sleep(1000);
}
@ -188,12 +221,14 @@ public class WinLauncher {
File local = new File(appData, "Local");
File i2p;
i2p = new File(local, "I2P");
logger.info("Windows jpackage wrapper started, using: " + i2p + " as base config");
logger.info("Windows jpackage wrapper started, using: " + i2p +
" as base config");
return i2p.getAbsoluteFile();
} else {
File jrehome = new File(System.getProperty("java.home"));
File programs = new File(jrehome.getParentFile().getParentFile(), ".i2p");
logger.info("Linux portable jpackage wrapper started, using: " + programs + " as base config");
logger.info("Linux portable jpackage wrapper started, using: " +
programs + " as base config");
return programs.getAbsoluteFile();
}
}
@ -212,12 +247,14 @@ public class WinLauncher {
if (SystemVersion.isWindows()) {
File jrehome = new File(System.getProperty("java.home"));
File programs = jrehome.getParentFile();
logger.info("Windows portable jpackage wrapper found, using: " + programs + " as working config");
logger.info("Windows portable jpackage wrapper found, using: " +
programs + " as working config");
return programs.getAbsoluteFile();
} else {
File jrehome = new File(System.getProperty("java.home"));
File programs = new File(jrehome.getParentFile().getParentFile(), "i2p");
logger.info("Linux portable jpackage wrapper found, using: " + programs + " as working config");
logger.info("Linux portable jpackage wrapper found, using: " + programs +
" as working config");
return programs.getAbsoluteFile();
}
}

View File

@ -1,10 +1,9 @@
package net.i2p.router;
import net.i2p.router.*;
import net.i2p.I2PAppContext;
import java.util.function.*;
import java.io.*;
import java.util.function.*;
import net.i2p.I2PAppContext;
import net.i2p.router.*;
import net.i2p.util.Log;
class WinUpdateProcess implements Runnable {
@ -13,7 +12,8 @@ class WinUpdateProcess implements Runnable {
private final Supplier<File> fileSupplier;
private final Log _log;
WinUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier, Supplier<File> fileSupplier) {
WinUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier,
Supplier<File> fileSupplier) {
this.ctx = ctx;
this.versionSupplier = versionSupplier;
this.fileSupplier = fileSupplier;
@ -22,10 +22,12 @@ class WinUpdateProcess implements Runnable {
private File workDir() throws IOException {
if (ctx != null) {
File workDir = new File(ctx.getConfigDir().getAbsolutePath(), "i2p_update_win");
File workDir =
new File(ctx.getConfigDir().getAbsolutePath(), "i2p_update_win");
if (workDir.exists()) {
if (workDir.isFile())
throw new IOException(workDir + " exists but is a file, get it out of the way");
throw new IOException(workDir +
" exists but is a file, get it out of the way");
return workDir;
} else {
workDir.mkdirs();
@ -45,28 +47,34 @@ class WinUpdateProcess implements Runnable {
var logFile = new File(workingDir, "log-" + version + ".txt");
if (logFile.canWrite()) {
// check if we can write to the log file. If we can, use the ProcessBuilder to
// run the installer.
ProcessBuilder pb = new ProcessBuilder(file.getAbsolutePath(), "/S", "/D=" + workingDir.getAbsolutePath());
// check if we can write to the log file. If we can, use the
// ProcessBuilder to run the installer.
ProcessBuilder pb = new ProcessBuilder(
file.getAbsolutePath(), "/S", "/D=" + workingDir.getAbsolutePath());
var env = pb.environment();
env.put("OLD_I2P_VERSION", version);
env.remove("RESTART_I2P");
int exitCode = ctx.router().scheduledGracefulExitCode();
if (exitCode == Router.EXIT_HARD_RESTART || exitCode == Router.EXIT_GRACEFUL_RESTART)
if (exitCode == Router.EXIT_HARD_RESTART ||
exitCode == Router.EXIT_GRACEFUL_RESTART)
env.put("RESTART_I2P", "true");
try {
pb.directory(workingDir).redirectErrorStream(true).redirectOutput(logFile).start();
pb.directory(workingDir)
.redirectErrorStream(true)
.redirectOutput(logFile)
.start();
} catch (IOException ex) {
_log.error("Unable to run update-program in background. Update will fail.");
_log.error(
"Unable to run update-program in background. Update will fail.");
}
} else {
// If we cant write to the log file and we're on Windows, use the elevator to
// execute the installer instead of the ProcessBuilder.
Elevator.executeAsAdministrator(file.getAbsolutePath(), " /S /D=" + workingDir.getAbsolutePath());
// If we cant write to the log file and we're on Windows, use the elevator
// to execute the installer instead of the ProcessBuilder.
Elevator.executeAsAdministrator(file.getAbsolutePath(),
" /S /D=" + workingDir.getAbsolutePath());
}
}
@Override

View File

@ -1,22 +1,21 @@
package net.i2p.router;
import static net.i2p.update.UpdateType.*;
import java.io.*;
import java.lang.InterruptedException;
import java.lang.Process;
import java.lang.ProcessBuilder;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.*;
import net.i2p.crypto.*;
import static net.i2p.update.UpdateType.*;
import net.i2p.I2PAppContext;
import net.i2p.update.UpdateType;
import net.i2p.crypto.*;
import net.i2p.update.UpdatePostProcessor;
import net.i2p.update.UpdateType;
import net.i2p.util.Log;
import net.i2p.util.SystemVersion;
import java.lang.ProcessBuilder;
import java.lang.Process;
import java.lang.InterruptedException;
public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
private final Log _log;
private final RouterContext ctx;
@ -32,20 +31,18 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
this._log = ctx.logManager().getLog(WindowsUpdatePostProcessor.class);
}
public String getVersion() {
return version;
}
public String getVersion() { return version; }
public File getFile() {
return positionedFile;
}
public File getFile() { return positionedFile; }
public void updateDownloadedandVerified(UpdateType type, int fileType, String version, File file)
public void updateDownloadedandVerified(UpdateType type, int fileType,
String version, File file)
throws IOException {
_log.info("Got an update to post-process");
if (SystemVersion.isWindows()) {
if (type != UpdateType.ROUTER_SIGNED_SU3 && type != UpdateType.ROUTER_DEV_SU3) {
if (type != UpdateType.ROUTER_SIGNED_SU3 &&
type != UpdateType.ROUTER_DEV_SU3) {
_log.warn("Unsupported update type " + type);
return;
}
@ -65,7 +62,8 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
_log.info("adding shutdown hook");
ctx.addFinalShutdownTask(new WinUpdateProcess(ctx, this::getVersion, this::getFile));
ctx.addFinalShutdownTask(
new WinUpdateProcess(ctx, this::getVersion, this::getFile));
}
}
@ -85,10 +83,12 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
private File workDir() throws IOException {
if (this.ctx != null) {
File workDir = new File(this.ctx.getConfigDir().getAbsolutePath(), "i2p_update_win");
File workDir =
new File(this.ctx.getConfigDir().getAbsolutePath(), "i2p_update_win");
if (workDir.exists()) {
if (workDir.isFile())
throw new IOException(workDir + " exists but is a file, get it out of the way");
throw new IOException(workDir +
" exists but is a file, get it out of the way");
return null;
} else {
workDir.mkdirs();
@ -97,5 +97,4 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
}
return null;
}
}

View File

@ -2,7 +2,7 @@
build-new-extensions: build/i2ppb@eyedeekay.github.io.xpi build/uBlock0@raymondhill.net.xpi build/jsr@javascriptrestrictor.xpi build/onioncbt@eyedeekay.github.io.xpi build/{b86e4813-687a-43e6-ab65-0bde4ab75758}.xpi
build/uBlock0@raymondhill.net.xpi:
curl -L `cat UblockOrigin.url` > build/uBlock0@raymondhill.net.xpi
curl -L `cat UBlockOrigin.url` > build/uBlock0@raymondhill.net.xpi
build/jsr@javascriptrestrictor.xpi:
curl -L `cat JShelter.url` > build/jsr@javascriptrestrictor.xpi

View File

@ -1 +1 @@
1.9.0
1.9.1

View File

@ -5,7 +5,7 @@ UniCode true
!define COMPANYNAME "I2P"
!define DESCRIPTION "This launches Firefox with a browser profile pre-configured to use i2p"
!define FIREFOX_MESSAGE "Could not find Firefox. Please point to where you have installed Firefox. If you have not installed Firefox yet, exit this installer and install Firefox, then start this installer again."
!define I2P_MESSAGE "Could not find I2P. Please point to where you have installed I2P. If you have not installed I2P yet, exit this installer and install I2P, then start this installer again."
!define I2P_MESSAGE "Could not find I2P. Installing portable Jpackaged I2P."
!define LAUNCH_TEXT "Start I2P?"
!define LICENSE_TITLE "Many Licenses"
!define CONSOLE_URL "http://127.0.0.1:7657/home"
@ -145,10 +145,14 @@ FunctionEnd
Function routerDetect
createDirectory $I2PINSTEXE
SetOutPath $I2PINSTEXE\app
File /nonfatal /a /r "I2P\app\"
SetOutPath $I2PINSTEXE\runtime
File /nonfatal /a /r "I2P\runtime\"
SetOutPath $I2PINSTEXE
File /a /r "I2P\"
File /nonfatal /a /r "I2P\I2P.exe"
File "I2P\config\jpackaged"
File /nonfatal /a /r "I2P\I2P.ico"
File /nonfatal "I2P\config\jpackaged"
createDirectory "$I2PINSTEXE\"
SetOutPath "$I2PINSTEXE\"
@ -167,8 +171,6 @@ Function routerDetect
File /a /r "I2P/config/certificates"
File /a /r "I2P/config/geoip"
File /a /r "I2P/config/i2ptunnel.config"
Abort directory
FunctionEnd
Function installerFunction
@ -225,11 +227,9 @@ ${If} ${Silent}
createDirectory "$SMPROGRAMS\${APPNAME}"
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P.lnk" "$I2PINSTEXE\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P - Temporary Identity.lnk" "$I2PINSTEXE\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
; CreateShortCut "$SMPROGRAMS\${APPNAME}\I2P Applications.lnk" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pconfig.bat$\"" "$INSTDIR\ui2pbrowser_icon.ico"
CreateShortCut "$DESKTOP\Browse I2P.lnk" "$I2PINSTEXE\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
CreateShortCut "$DESKTOP\Browse I2P - Temporary Identity.lnk" "$I2PINSTEXE\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
; CreateShortCut "$DESKTOP\I2P Applications.lnk" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pconfig.bat$\"" "$INSTDIR\ui2pbrowser_icon.ico"
SetOutPath "$INSTDIR"
SetShellVarContext current

View File

@ -1 +1 @@
!define I2P_VERSION 1.9.0
!define I2P_VERSION 1.9.1

View File

@ -1,3 +1,3 @@
!define VERSIONMAJOR 1
!define VERSIONMINOR 9
!define VERSIONBUILD 0
!define VERSIONBUILD 1

View File

@ -1 +1 @@
1.9.0
1.9.1