Compare commits
36 Commits
i2p-firefo
...
settable-p
Author | SHA1 | Date | |
---|---|---|---|
aa4b1ab942 | |||
e051d4095c | |||
73f94a120e | |||
74d5ccc47f | |||
4ce272765f | |||
714ef026f3 | |||
8135506213 | |||
ffb9efaab8 | |||
706a7a6fe2 | |||
af44dd357a | |||
c64f0fe632 | |||
cf3385cfd0 | |||
ef0b5c5cad | |||
9282d22e7b | |||
400b9d3edc | |||
4aa673a959 | |||
1f543c8db5 | |||
87f9cc063b | |||
6651a16fb2 | |||
9a34008c48 | |||
1f980fb016 | |||
cf394be352 | |||
51dca79a76 | |||
bb7dcaa907 | |||
9da43b3961 | |||
a28bb6ac3c | |||
44b2ae44ee | |||
e2ad0d190a | |||
f5a424f083 | |||
fe99c7bb05 | |||
bc36564f5d | |||
d8e7551edb | |||
3391c23abd | |||
723b4d0e27 | |||
09d07c8c88 | |||
1d0cf4aba7 |
4
Makefile
4
Makefile
@ -39,7 +39,7 @@ prep: profile.tgz app-profile.tgz profile build/licenses build/I2P build/I2P/con
|
||||
cp src/nsis/*.nsh build
|
||||
cp src/icons/*.ico build
|
||||
|
||||
install.exe:
|
||||
install.exe: build/licenses
|
||||
cd build && makensis i2pbrowser-installer.nsi && cp I2P-Profile-Installer-*.exe ../ && echo "built windows installer"
|
||||
|
||||
export RES_DIR="../i2p.i2p.jpackage-build/installer/resources"
|
||||
@ -66,7 +66,7 @@ src/I2P/config: build/I2P
|
||||
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 router.config > src/I2P/config/router.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
|
||||
|
43
README.md
43
README.md
@ -4,22 +4,22 @@ I2P Browsing Profile for Firefox
|
||||
Features:
|
||||
---------
|
||||
|
||||
- Automatically select an up-to-date, secure Firefox or Tor Browser(On Windows) variant
|
||||
- Automatically configure a profile for I2P
|
||||
- Automatically block-list all non-I2P local destinations
|
||||
- Enable first-party isolation, anti-fingerprinting, letterboxing
|
||||
- Automatically sandbox I2P, Non-I2P, and I2P-Application cookiestores
|
||||
- Automatically select an up-to-date, secure Firefox or Tor Browser(On Windows) variant
|
||||
- Automatically configure a profile for I2P
|
||||
- Automatically block-list all non-I2P local destinations
|
||||
- Enable first-party isolation, anti-fingerprinting, letterboxing
|
||||
- Automatically sandbox I2P, Non-I2P, and I2P-Application cookiestores
|
||||
|
||||
Build Dependencies:
|
||||
-------------------
|
||||
|
||||
To build this, you will need the following software packages (all available in Debian) :
|
||||
|
||||
* make
|
||||
* nsis
|
||||
* dos2unix
|
||||
* curl
|
||||
* jq
|
||||
- make
|
||||
- nsis
|
||||
- dos2unix
|
||||
- curl
|
||||
- jq
|
||||
|
||||
In addition, you will need the NSIS plugin "ShellExecAsUser" which you can get from the
|
||||
[NSIS Wiki Page](https://nsis.sourceforge.io/ShellExecAsUser_plug-in). In order to install
|
||||
@ -32,14 +32,13 @@ cp -rv Plugins/* /usr/share/nsis/Plugins/
|
||||
|
||||
To build a Debian package, you'll also need
|
||||
|
||||
* checkinstall
|
||||
- checkinstall
|
||||
|
||||
Preparation
|
||||
-----------
|
||||
|
||||
Before you build, run the targets
|
||||
|
||||
|
||||
make clean-extensions
|
||||
make extensions
|
||||
|
||||
@ -99,8 +98,8 @@ with `sudo service i2p start` then you can run the script:
|
||||
|
||||
/usr/local/bin/i2p-config-service-setup
|
||||
|
||||
Including a jpackaged I2P Router(EXPERIMENTAL)
|
||||
----------------------------------------------
|
||||
Including a jpackaged I2P Router
|
||||
--------------------------------
|
||||
|
||||
In order to include a jpackaged(dependency-free) I2P router in the Profile
|
||||
Bundle you will need to build the jpackaged I2P router as an "App Image" on
|
||||
@ -168,6 +167,9 @@ you should select "Checkout as is, commit as is" and leave line-endings alone.
|
||||
End-to-End Windows build process using Cygwin
|
||||
---------------------------------------------
|
||||
|
||||
I highly recommend you look into the Chocolatey package manager, which makes it much
|
||||
easier to configure these tools and keep them up to date.
|
||||
|
||||
**Prerequisites:** You need to have OpenJDK 14 or greater installed and configured
|
||||
with your `%JAVA_HOME%` environment variable configured and `%JAVA_HOME%/bin` on
|
||||
your `%PATH%`. You need to have Apache Ant installed and configured with `%ANT_HOME%`
|
||||
@ -178,27 +180,26 @@ select "Checkout as is, commit as is" and leave line-endings alone.
|
||||
|
||||
TODO: Add links to the respective instructions for each of these.
|
||||
|
||||
1. Run the Cygwin `setup-$arch.exe` for your platform to set up new packages.
|
||||
Select the `make` `jq` `dos2unix` and `curl` packages.
|
||||
2. Open a cygwin terminal.
|
||||
3. Clone `i2p.i2p` and `i2p.firefox`
|
||||
1. Run the Cygwin `setup-$arch.exe` for your platform to set up new packages. Select the `make` `jq` `dos2unix` and `curl` packages.
|
||||
2. Open a cygwin terminal.
|
||||
3. Clone `i2p.i2p` and `i2p.firefox`
|
||||
|
||||
git clone https://github.com/i2p/i2p.i2p
|
||||
git clone https://github.com/i2p/i2p.firefox
|
||||
|
||||
3. Move to the i2p.i2p directory. Build the .jar files required to build the App Image
|
||||
4. Move to the i2p.i2p directory. Build the .jar files required to build the App Image
|
||||
inside i2p.i2p. Return to home.
|
||||
|
||||
cd i2p.i2p
|
||||
ant clean pkg
|
||||
cd ..
|
||||
|
||||
4. Move into the i2p.firefox directory. Run the `./build.sh` script.
|
||||
5. Move into the i2p.firefox directory. Run the `./build.sh` script.
|
||||
|
||||
cd i2p.firefox
|
||||
./build.sh
|
||||
|
||||
5. Run `make` to build the installer.
|
||||
6. Run `make` to build the installer.
|
||||
|
||||
Doing a Release
|
||||
---------------
|
||||
|
15
build.sh
15
build.sh
@ -52,9 +52,22 @@ I2P_JBIGI="$HERE/../i2p.i2p.jpackage-build/installer/lib/jbigi"
|
||||
echo "compiling custom launcher"
|
||||
mkdir build
|
||||
cp "$I2P_JARS"/*.jar build
|
||||
if [ ! -f "$HERE/build/jna.jar" ]; then
|
||||
wget -O "$HERE/build/jna.jar" "https://repo1.maven.org/maven2/net/java/dev/jna/jna/$JNA_VERSION/jna-$JNA_VERSION.jar"
|
||||
fi
|
||||
|
||||
if [ ! -f "$HERE/build/jna-platform.jar" ]; then
|
||||
wget -O "$HERE/build/jna-platform.jar" "https://repo1.maven.org/maven2/net/java/dev/jna/jna-platform/$JNA_VERSION/jna-platform-$JNA_VERSION.jar"
|
||||
fi
|
||||
|
||||
cd java
|
||||
"$JAVA_HOME"/bin/javac -d ../build -classpath "$HERE"/build/i2p.jar:"$HERE"/build/router.jar:"$HERE"/build/routerconsole.jar net/i2p/router/WinLauncher.java net/i2p/router/WindowsUpdatePostProcessor.java net/i2p/router/WinUpdateProcess.java
|
||||
"$JAVA_HOME"/bin/javac -d ../build -classpath "$HERE/build/jna.jar":"$HERE/build/jna-platform.jar":"$HERE/build/i2p.jar":"$HERE/build/router.jar":"$HERE/build/routerconsole.jar" \
|
||||
net/i2p/router/Elevator.java \
|
||||
net/i2p/router/Shell32X.java \
|
||||
net/i2p/router/WinLauncher.java \
|
||||
net/i2p/router/WindowsUpdatePostProcessor.java \
|
||||
net/i2p/router/WinUpdateProcess.java
|
||||
|
||||
cd ..
|
||||
|
||||
#echo "building launcher.jar"
|
||||
|
@ -1,3 +1,12 @@
|
||||
2022-03-25 idk
|
||||
* This release adds support for user-mode, non-privileged installation of the
|
||||
jpackaged router and the browser profile. Admin installation is still supported
|
||||
and detected automatically, to support existing bundles.
|
||||
* On restart to update, will detect if a router requires admin rights to install
|
||||
and will ask the user to authorize the update. In user-mode, no prompt will ever
|
||||
be seen.
|
||||
* Updates to the Firefox profiles to improve compatibility with more Firefoxes
|
||||
|
||||
2022-02-10 idk
|
||||
* This release fixes automatic update using Bittorrent within the I2P network
|
||||
and the custom Update PostProcessor.
|
||||
|
1
clean.sh
1
clean.sh
@ -16,6 +16,7 @@ rm -rf \
|
||||
peerProfiles \
|
||||
prngseed.rnd \
|
||||
wrapper.log \
|
||||
*.app \
|
||||
*.jar \
|
||||
*.exe \
|
||||
*.dmg
|
@ -1,5 +1,7 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
JNA_VERSION=5.10.0
|
||||
export JNA_VERSION=5.10.0
|
||||
|
||||
#Comment this out to build from an alternate branch or
|
||||
# the tip of the master branch.
|
||||
|
33
java/net/i2p/router/Elevator.java
Normal file
33
java/net/i2p/router/Elevator.java
Normal file
@ -0,0 +1,33 @@
|
||||
package net.i2p.router;
|
||||
|
||||
import com.sun.jna.WString;
|
||||
import com.sun.jna.platform.win32.Kernel32;
|
||||
import com.sun.jna.platform.win32.Kernel32Util;
|
||||
|
||||
public class Elevator {
|
||||
public static void main(String... args) {
|
||||
executeAsAdministrator("c:\\windows\\system32\\notepad.exe", "");
|
||||
}
|
||||
|
||||
public static void executeAsAdministrator(String command, String args) {
|
||||
if (command == "" || command == null) {
|
||||
System.out.println("No command specified");
|
||||
return;
|
||||
}
|
||||
Shell32X.SHELLEXECUTEINFO execInfo = new Shell32X.SHELLEXECUTEINFO();
|
||||
execInfo.lpFile = new WString(command);
|
||||
if (args != null)
|
||||
execInfo.lpParameters = new WString(args);
|
||||
execInfo.nShow = Shell32X.SW_SHOWDEFAULT;
|
||||
execInfo.fMask = Shell32X.SEE_MASK_NOCLOSEPROCESS;
|
||||
execInfo.lpVerb = new WString("runas");
|
||||
boolean result = Shell32X.INSTANCE.ShellExecuteEx(execInfo);
|
||||
|
||||
if (!result) {
|
||||
int lastError = Kernel32.INSTANCE.GetLastError();
|
||||
String errorMessage = Kernel32Util.formatMessageFromLastErrorCode(lastError);
|
||||
throw new RuntimeException("Error performing elevation: " + lastError + ": " + errorMessage + " (apperror="
|
||||
+ execInfo.hInstApp + ")");
|
||||
}
|
||||
}
|
||||
}
|
111
java/net/i2p/router/Shell32X.java
Normal file
111
java/net/i2p/router/Shell32X.java
Normal file
@ -0,0 +1,111 @@
|
||||
package net.i2p.router;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.WString;
|
||||
import com.sun.jna.platform.win32.Shell32;
|
||||
import com.sun.jna.platform.win32.WinDef.HINSTANCE;
|
||||
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;
|
||||
|
||||
public interface Shell32X extends Shell32 {
|
||||
Shell32X INSTANCE = (Shell32X) Native.loadLibrary("shell32", Shell32X.class, W32APIOptions.UNICODE_OPTIONS);
|
||||
|
||||
int SW_HIDE = 0;
|
||||
int SW_MAXIMIZE = 3;
|
||||
int SW_MINIMIZE = 6;
|
||||
int SW_RESTORE = 9;
|
||||
int SW_SHOW = 5;
|
||||
int SW_SHOWDEFAULT = 10;
|
||||
int SW_SHOWMAXIMIZED = 3;
|
||||
int SW_SHOWMINIMIZED = 2;
|
||||
int SW_SHOWMINNOACTIVE = 7;
|
||||
int SW_SHOWNA = 8;
|
||||
int SW_SHOWNOACTIVATE = 4;
|
||||
int SW_SHOWNORMAL = 1;
|
||||
|
||||
/** File not found. */
|
||||
int SE_ERR_FNF = 2;
|
||||
|
||||
/** Path not found. */
|
||||
int SE_ERR_PNF = 3;
|
||||
|
||||
/** Access denied. */
|
||||
int SE_ERR_ACCESSDENIED = 5;
|
||||
|
||||
/** Out of memory. */
|
||||
int SE_ERR_OOM = 8;
|
||||
|
||||
/** DLL not found. */
|
||||
int SE_ERR_DLLNOTFOUND = 32;
|
||||
|
||||
/** Cannot share an open file. */
|
||||
int SE_ERR_SHARE = 26;
|
||||
|
||||
int SEE_MASK_NOCLOSEPROCESS = 0x00000040;
|
||||
|
||||
int ShellExecute(int i, String lpVerb, String lpFile, String lpParameters, String lpDirectory, int nShow);
|
||||
|
||||
boolean ShellExecuteEx(SHELLEXECUTEINFO lpExecInfo);
|
||||
|
||||
public static class SHELLEXECUTEINFO extends Structure {
|
||||
/*
|
||||
* DWORD cbSize;
|
||||
* ULONG fMask;
|
||||
* HWND hwnd;
|
||||
* LPCTSTR lpVerb;
|
||||
* LPCTSTR lpFile;
|
||||
* LPCTSTR lpParameters;
|
||||
* LPCTSTR lpDirectory;
|
||||
* int nShow;
|
||||
* HINSTANCE hInstApp;
|
||||
* LPVOID lpIDList;
|
||||
* LPCTSTR lpClass;
|
||||
* HKEY hkeyClass;
|
||||
* DWORD dwHotKey;
|
||||
* union {
|
||||
* HANDLE hIcon;
|
||||
* HANDLE hMonitor;
|
||||
* } DUMMYUNIONNAME;
|
||||
* HANDLE hProcess;
|
||||
*/
|
||||
|
||||
public int cbSize = size();
|
||||
public int fMask;
|
||||
public HWND hwnd;
|
||||
public WString lpVerb;
|
||||
public WString lpFile;
|
||||
public WString lpParameters;
|
||||
public WString lpDirectory;
|
||||
public int nShow;
|
||||
public HINSTANCE hInstApp;
|
||||
public Pointer lpIDList;
|
||||
public WString lpClass;
|
||||
public HKEY hKeyClass;
|
||||
public int dwHotKey;
|
||||
|
||||
/*
|
||||
* Actually:
|
||||
* union {
|
||||
* HANDLE hIcon;
|
||||
* HANDLE hMonitor;
|
||||
* } DUMMYUNIONNAME;
|
||||
*/
|
||||
public HANDLE hMonitor;
|
||||
public HANDLE hProcess;
|
||||
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] {
|
||||
"cbSize", "fMask", "hwnd", "lpVerb", "lpFile", "lpParameters",
|
||||
"lpDirectory", "nShow", "hInstApp", "lpIDList", "lpClass",
|
||||
"hKeyClass", "dwHotKey", "hMonitor", "hProcess",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
package net.i2p.router;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.InetAddress;
|
||||
import java.net.Socket;
|
||||
import java.util.*;
|
||||
|
||||
import net.i2p.crypto.*;
|
||||
@ -49,6 +51,12 @@ public class WinLauncher {
|
||||
System.out.println("\t" + System.getProperty("i2p.dir.base") + "\n\t" + System.getProperty("i2p.dir.config")
|
||||
+ "\n\t" + System.getProperty("router.pid"));
|
||||
|
||||
// do a quick check to see of port 7657 is already occupied
|
||||
if (i2pIsRunning()) {
|
||||
System.err.println("I2P is already running");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
// wupp.i2pRouter = new Router(System.getProperties());
|
||||
System.out.println("Router is configured");
|
||||
|
||||
@ -61,6 +69,18 @@ public class WinLauncher {
|
||||
RouterLaunch.main(args);
|
||||
}
|
||||
|
||||
private static boolean i2pIsRunning() {
|
||||
// check if there's something listening on port 7657
|
||||
try {
|
||||
InetAddress localhost = InetAddress.getLocalHost();
|
||||
Socket s = new Socket(localhost, 7657);
|
||||
s.close();
|
||||
return true;
|
||||
} catch (IOException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static final Runnable REGISTER_UPP = () -> {
|
||||
|
||||
// first wait for the RouterContext to appear
|
||||
@ -96,6 +116,16 @@ public class WinLauncher {
|
||||
}
|
||||
|
||||
private static File selectHome() { // throws Exception {
|
||||
String path_override = System.getenv("I2P_CONFIG");
|
||||
if (path_override != null) {
|
||||
File path = new File(path_override);
|
||||
if (path != null && path.exists()) {
|
||||
if (path.isDirectory())
|
||||
return path.getAbsoluteFile();
|
||||
else
|
||||
throw new RuntimeException("I2P_CONFIG is not a directory: " + path);
|
||||
}
|
||||
}
|
||||
if (SystemVersion.isWindows()) {
|
||||
File home = new File(System.getProperty("user.home"));
|
||||
File appData = new File(home, "AppData");
|
||||
@ -113,6 +143,16 @@ public class WinLauncher {
|
||||
}
|
||||
|
||||
private static File selectProgramFile() {
|
||||
String path_override = System.getenv("I2P");
|
||||
if (path_override != null) {
|
||||
File path = new File(path_override);
|
||||
if (path.exists()) {
|
||||
if (path.isDirectory())
|
||||
return path.getAbsoluteFile();
|
||||
else
|
||||
throw new RuntimeException("I2P is not a directory: " + path);
|
||||
}
|
||||
}
|
||||
if (SystemVersion.isWindows()) {
|
||||
File jrehome = new File(System.getProperty("java.home"));
|
||||
File programs = jrehome.getParentFile();
|
||||
|
@ -42,20 +42,29 @@ class WinUpdateProcess implements Runnable {
|
||||
var workingDir = workDir();
|
||||
var logFile = new File(workingDir, "log-" + version + ".txt");
|
||||
|
||||
ProcessBuilder pb = new ProcessBuilder(file.getAbsolutePath());
|
||||
var env = pb.environment();
|
||||
env.put("OLD_I2P_VERSION", version);
|
||||
env.remove("RESTART_I2P");
|
||||
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());
|
||||
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)
|
||||
env.put("RESTART_I2P", "true");
|
||||
int exitCode = ctx.router().scheduledGracefulExitCode();
|
||||
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();
|
||||
} catch (IOException ex) {
|
||||
System.out.println("Unable to run update-program in background. Update will fail.");
|
||||
try {
|
||||
pb.directory(workingDir).redirectErrorStream(true).redirectOutput(logFile).start();
|
||||
} catch (IOException ex) {
|
||||
System.out.println("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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -43,28 +43,30 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
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) {
|
||||
_log.warn("Unsupported update type " + type);
|
||||
return;
|
||||
if (type != UpdateType.ROUTER_SIGNED_SU3 && type != UpdateType.ROUTER_DEV_SU3) {
|
||||
_log.warn("Unsupported update type " + type);
|
||||
return;
|
||||
}
|
||||
|
||||
if (fileType != SU3File.TYPE_EXE) {
|
||||
_log.warn("Unsupported file type " + fileType);
|
||||
return;
|
||||
}
|
||||
|
||||
this.positionedFile = moveUpdateInstaller(file);
|
||||
this.version = version;
|
||||
|
||||
if (!hook.compareAndSet(false, true)) {
|
||||
_log.info("shutdown hook was already set");
|
||||
return;
|
||||
}
|
||||
|
||||
_log.info("adding shutdown hook");
|
||||
|
||||
ctx.addFinalShutdownTask(new WinUpdateProcess(ctx, this::getVersion, this::getFile));
|
||||
}
|
||||
|
||||
if (fileType != SU3File.TYPE_EXE) {
|
||||
_log.warn("Unsupported file type " + fileType);
|
||||
return;
|
||||
}
|
||||
|
||||
this.positionedFile = moveUpdateInstaller(file);
|
||||
this.version = version;
|
||||
|
||||
if (!hook.compareAndSet(false, true)) {
|
||||
_log.info("shutdown hook was already set");
|
||||
return;
|
||||
}
|
||||
|
||||
_log.info("adding shutdown hook");
|
||||
ctx.addFinalShutdownTask(new WinUpdateProcess(ctx, this::getVersion, this::getFile));
|
||||
|
||||
}
|
||||
|
||||
private File moveUpdateInstaller(File file) throws IOException {
|
||||
|
@ -60,3 +60,4 @@ user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
||||
user_pref("webgl.enable-webgl2", false);
|
||||
user_pref("media.navigator.enabled", false);
|
||||
user_pref("dom.w3c_touch_events.enabled", false);
|
||||
user_pref("browser.display.use_system_colors", false);
|
@ -1,19 +1,18 @@
|
||||
# Overrides for Extension Preferences
|
||||
# Tor Browser Bundle
|
||||
# Do not edit this file.
|
||||
#
|
||||
# This file is modified from a file included in the Tor Browser Bundle.
|
||||
#
|
||||
# Copyright 2017 The Tor Project. See LICENSE.tor for licensing information.
|
||||
/*
|
||||
Overrides#
|
||||
for Extension Preferences# Tor Browser Bundle# Do not edit this file.##This file is modified from a file included in the Tor Browser Bundle.##Copyright 2017 The Tor Project.See LICENSE.tor#
|
||||
for licensing information.
|
||||
|
||||
# HTTPS Everywhere Preferences:
|
||||
HTTPS Everywhere Preferences:
|
||||
*/
|
||||
user_pref("extensions.https_everywhere._observatory.popup_shown", true);
|
||||
user_pref("extensions.https_everywhere.toolbar_hint_shown", true);
|
||||
|
||||
# NoScript Preferences:
|
||||
# In order to disable all scripts by default, uncomment the following line...
|
||||
# user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");
|
||||
# and comment out the following line
|
||||
/*
|
||||
NoScript Preferences: #In order to disable all scripts by
|
||||
default, uncomment the following line...#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
|
||||
and comment out the following line
|
||||
*/
|
||||
user_pref("capability.policy.maonoscript.javascript.enabled", "allAccess");
|
||||
user_pref("capability.policy.maonoscript.sites", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
||||
user_pref("noscript.default", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
||||
@ -106,7 +105,7 @@ user_pref("network.proxy.ftp_port", 4444);
|
||||
user_pref("network.proxy.socks", "127.0.0.1");
|
||||
user_pref("network.proxy.socks_port", 4444);
|
||||
user_pref("network.proxy.share_proxy_settings", true);
|
||||
user_pref("browser.startup.homepage", "about:blank");
|
||||
user_pref("browser.startup.homepage", "http://127.0.0.1:7657/home");
|
||||
|
||||
// Privacy-harden and disable irrelevant features.
|
||||
user_pref("app.normandy.api_url", "");
|
||||
@ -222,3 +221,4 @@ user_pref("webgl.min_capability_mode", true);
|
||||
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
||||
user_pref("webgl.enable-webgl2", false);
|
||||
user_pref("dom.w3c_touch_events.enabled", false);
|
||||
user_pref("browser.display.use_system_colors", false);
|
@ -27,6 +27,8 @@ SetOverwrite on
|
||||
!define I2PINSTEXE
|
||||
!define I2PINSTEXE32 "$PROGRAMFILES32\i2p"
|
||||
!define I2PINSTEXE64 "$PROGRAMFILES64\i2p"
|
||||
!define I2PINSTEXE_USERMODE "$LOCALAPPDATA\i2p"
|
||||
|
||||
|
||||
!define RAM_NEEDED_FOR_64BIT 0x80000000
|
||||
|
||||
@ -39,7 +41,7 @@ Name "${COMPANYNAME} - ${APPNAME}"
|
||||
Icon ui2pbrowser_icon.ico
|
||||
OutFile "I2P-Profile-Installer-${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}.exe"
|
||||
|
||||
RequestExecutionLevel admin
|
||||
RequestExecutionLevel user
|
||||
|
||||
!include LogicLib.nsh
|
||||
!include x64.nsh
|
||||
@ -144,6 +146,13 @@ Page instfiles
|
||||
!include i2pbrowser-mozcompat.nsi
|
||||
|
||||
Function .onInit
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
|
||||
UserInfo::GetAccountType
|
||||
pop $0
|
||||
${If} $0 != "admin"
|
||||
StrCpy $INSTDIR "$LOCALAPPDATA\${COMPANYNAME}\${APPNAME}"
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE_USERMODE}"
|
||||
${EndIf}
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
Call ShouldInstall64Bit
|
||||
${If} $0 == 1
|
||||
@ -172,13 +181,18 @@ Function .onInit
|
||||
StrCpy $FFINSTEXE "$PROFILE\Desktop\Tor Browser\Browser\"
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
|
||||
${If} ${FileExists} "${I2PINSTEXE32}\i2p.exe"
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE32}"
|
||||
${EndIf}
|
||||
${If} ${FileExists} "${I2PINSTEXE64}\i2p.exe"
|
||||
UserInfo::GetAccountType
|
||||
pop $0
|
||||
${If} $0 == "admin"
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
|
||||
${If} ${FileExists} "${I2PINSTEXE32}\i2p.exe"
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE32}"
|
||||
${EndIf}
|
||||
${If} ${FileExists} "${I2PINSTEXE64}\i2p.exe"
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
# look for user installs
|
||||
FunctionEnd
|
||||
|
||||
Function firefoxDetect
|
||||
|
@ -1,3 +1,3 @@
|
||||
!define VERSIONMAJOR 1
|
||||
!define VERSIONMINOR 07
|
||||
!define VERSIONBUILD 1
|
||||
!define VERSIONBUILD 3
|
||||
|
@ -58,6 +58,5 @@ user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
||||
user_pref("webgl.enable-webgl2", false);
|
||||
user_pref("media.navigator.enabled", false);
|
||||
user_pref("dom.w3c_touch_events.enabled", false);
|
||||
user_pref("fission.autostart", true);
|
||||
user_pref("gfx.webrender.all", false);
|
||||
user_pref("privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts", false);
|
||||
user_pref("browser.privatebrowsing.autostart", false);
|
||||
user_pref("browser.display.use_system_colors", false);
|
@ -1,15 +1,18 @@
|
||||
//# Overrides
|
||||
//for Extension Preferences# Tor Browser Bundle# Do not edit this file.##This file is modified from a file included in the Tor Browser Bundle.##Copyright 2017 The Tor Project.See LICENSE.tor
|
||||
//for licensing information.
|
||||
/*
|
||||
Overrides#
|
||||
for Extension Preferences# Tor Browser Bundle# Do not edit this file.##This file is modified from a file included in the Tor Browser Bundle.##Copyright 2017 The Tor Project.See LICENSE.tor#
|
||||
for licensing information.
|
||||
|
||||
//# HTTPS Everywhere Preferences:
|
||||
HTTPS Everywhere Preferences:
|
||||
*/
|
||||
user_pref("extensions.https_everywhere._observatory.popup_shown", true);
|
||||
user_pref("extensions.https_everywhere.toolbar_hint_shown", true);
|
||||
|
||||
//# NoScript Preferences: #In order to disable all scripts by
|
||||
//default, uncomment the following line...
|
||||
//#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
|
||||
//and comment out the following line
|
||||
/*
|
||||
NoScript Preferences: #In order to disable all scripts by
|
||||
default, uncomment the following line...#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
|
||||
and comment out the following line
|
||||
*/
|
||||
user_pref("capability.policy.maonoscript.javascript.enabled", "allAccess");
|
||||
user_pref("capability.policy.maonoscript.sites", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
||||
user_pref("noscript.default", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
||||
@ -79,6 +82,9 @@ user_pref("extensions.torbutton.use_nontor_proxy", true);
|
||||
//user_pref("extensions.torlauncher.socks_port_use_ipc", );
|
||||
//user_pref("extensions.torlauncher.socks_ipc_path", "");
|
||||
|
||||
// TODO: this is a Tor Browser specific setting which is ignored on Firefox. If
|
||||
// I make it true, the SOCKS outproxy will have something to connect to. But I
|
||||
// need to test more to find out if that's prudent.
|
||||
user_pref("extensions.torlauncher.start_tor", false);
|
||||
//user_pref("extensions.torlauncher.default_bridge_type", "");
|
||||
user_pref("extensions.torlauncher.prompt_at_startup", false);
|
||||
@ -102,7 +108,7 @@ user_pref("network.proxy.ftp_port", 4444);
|
||||
user_pref("network.proxy.socks", "127.0.0.1");
|
||||
user_pref("network.proxy.socks_port", 4444);
|
||||
user_pref("network.proxy.share_proxy_settings", true);
|
||||
user_pref("browser.startup.homepage", "about:blank");
|
||||
user_pref("browser.startup.homepage", "http://127.0.0.1:7657/home");
|
||||
|
||||
// Privacy-harden and disable irrelevant features.
|
||||
user_pref("app.normandy.api_url", "");
|
||||
@ -218,6 +224,5 @@ user_pref("webgl.min_capability_mode", true);
|
||||
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
||||
user_pref("webgl.enable-webgl2", false);
|
||||
user_pref("dom.w3c_touch_events.enabled", false);
|
||||
user_pref("fission.autostart", true);
|
||||
user_pref("gfx.webrender.all", false);
|
||||
user_pref("privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts", false);
|
||||
user_pref("browser.privatebrowsing.autostart", false);
|
||||
user_pref("browser.display.use_system_colors", false);
|
@ -9,26 +9,31 @@ if exist "%ProgramFiles(x86)%\I2P" (
|
||||
set "I2PPath=%ProgramFiles(x86)%\I2P"
|
||||
)
|
||||
|
||||
netstat /o /a | find /i "listening" | find ":7657" >nul 2>nul && (
|
||||
echo I2P is already running
|
||||
) || (
|
||||
if exist "%ProgramFiles%\I2P\jpackaged" (
|
||||
start "i2p" /D "%LOCALAPPDATA%\I2P" "%I2PPath%\i2p.exe"
|
||||
) else (
|
||||
start "i2p" "%I2PPath%\i2p.exe"
|
||||
)
|
||||
set "I2PPath=%LocalAppData%\I2P\"
|
||||
if exist "%LocalAppData%\I2P\I2P.exe" (
|
||||
set "I2PPath=%LocalAppData%\I2P\"
|
||||
)
|
||||
|
||||
if exist "%I2PPath%\jpackaged" (
|
||||
cd "%LOCALAPPDATA%\I2P"
|
||||
start "i2p" /D "%LOCALAPPDATA%\I2P" "%I2PPath%\i2p.exe"
|
||||
) else (
|
||||
start "i2p" "%I2PPath%\i2p.exe"
|
||||
)
|
||||
|
||||
timeout /t 3
|
||||
|
||||
if exist "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\" (
|
||||
echo "profile is configured, updating extensions"
|
||||
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
|
||||
xcopy /s /i /y "%I2PPath%\I2PBrowser-Launcher\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
|
||||
) else (
|
||||
echo "configuring profile"
|
||||
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p"
|
||||
xcopy /s /i /y "%I2PPath%\I2PBrowser-Launcher\firefox.profile.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p"
|
||||
)
|
||||
|
||||
xcopy /s /i /y "%I2PPath%\I2PBrowser-Launcher\firefox.profile.i2p\user.js" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\user.js"
|
||||
xcopy /s /i /y "%I2PPath%\I2PBrowser-Launcher\firefox.profile.i2p\prefs.js" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\prefs.js"
|
||||
|
||||
if exist "%USERPROFILE%/Desktop/Tor Browser/Browser/firefox.exe" (
|
||||
start "i2pbrowser" "%USERPROFILE%/Desktop/Tor Browser/Browser/firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p" -private-window about:blank
|
||||
exit
|
||||
|
@ -9,29 +9,31 @@ if exist "%ProgramFiles(x86)%\I2P" (
|
||||
set "I2PPath=%ProgramFiles(x86)%\I2P"
|
||||
)
|
||||
|
||||
netstat /o /a | find /i "listening" | find ":7657" >nul 2>nul && (
|
||||
echo I2P is already running
|
||||
) || (
|
||||
if exist "%ProgramFiles%\I2P\jpackaged" (
|
||||
start "i2p" /D "%LOCALAPPDATA%\I2P" "%I2PPath%\i2p.exe"
|
||||
) else (
|
||||
start "i2p" "%I2PPath%\i2p.exe"
|
||||
)
|
||||
set "I2PPath=%LocalAppData%\I2P\"
|
||||
if exist "%LocalAppData%\I2P\I2P.exe" (
|
||||
set "I2PPath=%LocalAppData%\I2P\"
|
||||
)
|
||||
|
||||
|
||||
|
||||
if exist "%I2PPath%\jpackaged" (
|
||||
cd "%LOCALAPPDATA%\I2P"
|
||||
start "i2p" /D "%LOCALAPPDATA%\I2P" "%I2PPath%\i2p.exe"
|
||||
) else (
|
||||
start "i2p" "%I2PPath%\i2p.exe"
|
||||
)
|
||||
|
||||
timeout /t 3
|
||||
|
||||
if exist "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\" (
|
||||
echo "profile is configured, updating extensions"
|
||||
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
|
||||
xcopy /s /i /y "%I2PPath%\I2PBrowser-Launcher\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
|
||||
) else (
|
||||
echo "configuring profile"
|
||||
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p"
|
||||
xcopy /s /i /y "%I2PPath%\I2PBrowser-Launcher\firefox.profile.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p"
|
||||
)
|
||||
|
||||
xcopy /s /i /y "%I2PPath%\I2PBrowser-Launcher\firefox.profile.i2p\user.js" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\user.js"
|
||||
xcopy /s /i /y "%I2PPath%\I2PBrowser-Launcher\firefox.profile.i2p\prefs.js" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\prefs.js"
|
||||
|
||||
if exist "%USERPROFILE%/Desktop/Tor Browser/Browser/firefox.exe" (
|
||||
start "i2pbrowser" "%USERPROFILE%/Desktop/Tor Browser/Browser/firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p" -url %1
|
||||
exit
|
||||
|
@ -1,13 +1,30 @@
|
||||
@echo off
|
||||
@echo on
|
||||
|
||||
set "I2PPath=%ProgramFiles%\I2P\"
|
||||
if exist "%ProgramFiles%\I2P\" (
|
||||
set "I2PPath=%ProgramFiles%\I2P\"
|
||||
)
|
||||
|
||||
if exist "%ProgramFiles(x86)%\I2P" (
|
||||
set "I2PPath=%ProgramFiles(x86)%\I2P"
|
||||
)
|
||||
|
||||
set "I2PPath=%LocalAppData%\I2P\"
|
||||
if exist "%LocalAppData%\I2P\I2P.exe" (
|
||||
set "I2PPath=%LocalAppData%\I2P\"
|
||||
)
|
||||
|
||||
if exist "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p\" (
|
||||
echo "profile is configured"
|
||||
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
|
||||
xcopy /s /i /y "%I2PPath%\I2PBrowser-Launcher\firefox.profile.config.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p\extensions"
|
||||
) else (
|
||||
echo "configuring profile"
|
||||
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.config.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p"
|
||||
xcopy /s /i /y "%I2PPath%\I2PBrowser-Launcher\firefox.profile.config.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p"
|
||||
)
|
||||
|
||||
xcopy /s /i /y "%I2PPath%\I2PBrowser-Launcher\firefox.profile.config.i2p\user.js" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p\user.js"
|
||||
xcopy /s /i /y "%I2PPath%\I2PBrowser-Launcher\firefox.profile.config.i2p\prefs.js" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p\prefs.js"
|
||||
|
||||
if exist "%ProgramFiles%\Mozilla Firefox\firefox.exe" (
|
||||
start "i2pbrowser" "%ProgramFiles%\Mozilla Firefox\firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p" -url %1
|
||||
exit
|
||||
|
Reference in New Issue
Block a user