Compare commits

...

36 Commits

Author SHA1 Message Date
idk
aa4b1ab942 add .app to clean script 2022-04-08 20:48:48 -04:00
idk
e051d4095c add use_system_colors to the prefs.js and user.js files 2022-04-07 20:34:51 -04:00
idk
73f94a120e Merge branch 'master' into 'settable-paths'
# Conflicts:
#   src/nsis/i2pbrowser-version.nsi
#   src/win/i2pbrowser-private.bat
#   src/win/i2pbrowser.bat
2022-04-04 17:55:42 +00:00
idk
74d5ccc47f cd before starting a jpackaged router from the script in case the environment is overriding it 2022-03-25 18:51:11 -04:00
idk
4ce272765f check if the console is up before continuing 2022-03-25 18:47:48 -04:00
idk
714ef026f3 always copy settings to profile directory 2022-03-25 17:49:39 -04:00
idk
8135506213 update config launcher script 2022-03-25 17:23:49 -04:00
idk
ffb9efaab8 update browser profiles 2022-03-25 17:09:07 -04:00
idk
706a7a6fe2 enable a user-mode run of I2P jpackages 2022-03-25 15:23:19 -04:00
idk
af44dd357a enable a user-mode install of I2P jpackages 2022-03-25 15:09:15 -04:00
idk
c64f0fe632 enable a user-mode install of I2P jpackages 2022-03-25 15:04:15 -04:00
idk
cf3385cfd0 Set install dir to local app data if the user is not elevated 2022-03-25 14:50:11 -04:00
idk
ef0b5c5cad Set install dir to local app data if the user is not elevated 2022-03-25 14:32:05 -04:00
idk
9282d22e7b Request only the user execution level, highest will request admin if the user has permission to elevate and I want to avoid that 2022-03-25 14:23:50 -04:00
idk
400b9d3edc Set install dir to local app data if the user is not elevated 2022-03-25 14:20:39 -04:00
idk
4aa673a959 Request only the user execution level, highest will request admin if the user has permission to elevate and I want to avoid that 2022-03-25 14:19:06 -04:00
idk
1f543c8db5 Request only the highest execution level, not necessarily admin 2022-03-25 13:31:57 -04:00
idk
87f9cc063b update version number 2022-03-25 12:22:46 -04:00
idk
6651a16fb2 don't accidentally dupe values in router.config when running src/I2P/config target twice 2022-03-25 12:17:28 -04:00
idk
9a34008c48 Makefile wasn't producing licenses at the right step, try and detect if elevated from the NSIS installer from the start of the script, for now, fail if we aren't 2022-03-25 12:05:57 -04:00
idk
1f980fb016 Add choco to the Windows README 2022-03-21 11:43:34 -04:00
idk
cf394be352 Add choco to the Windows README 2022-03-21 11:41:29 -04:00
idk
51dca79a76 remove the RequestExecutionLevel line 2022-03-21 11:36:28 -04:00
idk
bb7dcaa907 Add elevator.java to build.sh 2022-03-21 11:32:10 -04:00
idk
9da43b3961 Try a way of determining required rights for the installer 2022-03-21 11:04:27 -04:00
idk
a28bb6ac3c Fix package imports, copy over the elevator functions 2022-03-20 02:41:09 -04:00
idk
44b2ae44ee Don't download JNA jars if they're already downloaded 2022-03-19 18:10:36 -04:00
idk
e2ad0d190a Use both JNA jars 2022-03-19 17:52:01 -04:00
idk
f5a424f083 Fix wrong JNA version 2022-03-19 17:23:55 -04:00
idk
fe99c7bb05 Check in Shell32X.java and see if it builds on a real Windows machine? 2022-03-19 16:39:06 -04:00
idk
bc36564f5d Start adding JNA stuff, for now just copied from zlatinb's but I'll need to customize a bit to account for portables 2022-03-19 13:44:29 -04:00
idk
d8e7551edb update the version 2022-03-11 14:52:07 -05:00
idk
3391c23abd Null check path_override 2022-02-20 20:29:47 -05:00
idk
723b4d0e27 Switch I2P and I2P_CONFIG for environment variable based install-path configuration 2022-02-19 11:13:27 -05:00
idk
09d07c8c88 Merge branch 'master' of 127.0.0.1:i2p-hackers/i2p.firefox into settable-paths 2022-02-18 01:52:47 -05:00
idk
1d0cf4aba7 make the path that the install and config are placed in configurable 2022-02-17 16:02:13 -05:00
20 changed files with 379 additions and 115 deletions

View File

@ -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

View File

@ -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
---------------

View File

@ -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"

View File

@ -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.

View File

@ -16,6 +16,7 @@ rm -rf \
peerProfiles \
prngseed.rnd \
wrapper.log \
*.app \
*.jar \
*.exe \
*.dmg

View File

@ -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.

View 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 + ")");
}
}
}

View 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",
});
}
}
}

View File

@ -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();

View File

@ -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

View File

@ -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 {

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -1,3 +1,3 @@
!define VERSIONMAJOR 1
!define VERSIONMINOR 07
!define VERSIONBUILD 1
!define VERSIONBUILD 3

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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