Merge branch 'EXPERIMENTAL-jpackage' of 127.0.0.1:i2p-hackers/i2p.firefox into EXPERIMENTAL-debian

This commit is contained in:
idk
2021-08-20 01:36:08 -04:00
26 changed files with 898 additions and 139 deletions

11
.gitignore vendored
View File

@@ -2,14 +2,7 @@ build
*.deb
*.tgz
./I2P/
debian/*.ex
debian/*.EX
debian/i2p-firefox-profile
i2pversion_override
*.crl
*.crt
*.pem
*.info
*.keys.dat
mar-tools-mac64*
mar-tools-win64*
mar-tools-linux64*
*.pem

118
Makefile
View File

@@ -1,9 +1,40 @@
-include i2pversion
-include i2pversion_override
PROFILE_VERSION=0.04
-include config.mk
all: install.exe
preset=`rm .version; make .version`
prep: profile.tgz app-profile.tgz profile build/licenses build/I2P build/I2P/config
include .version
PROFILE_VERSION=$(MAJOR).$(MINOR).$(BUILD)
all: .version install.exe
tag:
git tag $(PROFILE_VERSION)
.version:
sed 's|!define VERSION||g' src/nsis/i2pbrowser-version.nsi | sed 's| |=|g' > .version
make version.txt src/nsis/i2pbrowser_jpackage.nsi
version.txt:
echo "$(PROFILE_VERSION)" > src/profile/version.txt
echo "$(PROFILE_VERSION)" > src/app-profile/version.txt
src/nsis/i2pbrowser_jpackage.nsi:
echo "!define I2P_VERSION $(I2P_VERSION)" > src/nsis/i2pbrowser_jpackage.nsi
jpackage: .version I2P all
help: .version
@echo "I2P-Profile-Installer-$(PROFILE_VERSION)"
@echo "$(SIGNER)"
@echo "$(I2P_VERSION)"
@echo "$(MAJOR).$(MINOR).$(BUILD)"
@echo "$(preset)"
prep: profile.tgz app-profile.tgz profile build/licenses build/I2P build/I2P/config launchers
cp src/nsis/*.nsi build
cp src/nsis/*.nsh build
cp src/icons/*.ico build
@@ -13,28 +44,41 @@ install.exe: prep
export RES_DIR="../i2p.i2p/installer/resources"
export PKG_DIR="../i2p.i2p/pkg-temp"
export I2P_JBIGI="../i2p.i2p/installer/lib/jbigi"
distclean: clean
rm -rf I2P
I2P:
./build.sh
build/I2P: build
rm -rf build/I2P
cp -rv I2P build/I2P ; true
cp "$(I2P_JBIGI)"/*windows*.dll build/I2P/runtime/lib; true
configdir: src/I2P/config
src/I2P/config:
mkdir src/I2P/config
rm -rf src/I2P/config/geoip src/I2P/config/webapps src/I2P/config/certificates
echo true | tee src/I2P/config/jpackaged ; true
cp $(RES_DIR)/clients.config src/I2P/config/ ; true
cp $(RES_DIR)/i2ptunnel.config src/I2P/config/ ; true
cp $(RES_DIR)/wrapper.config src/I2P/config/ ; true
cp $(RES_DIR)/hosts.txt src/I2P/config/hosts.txt ; true
cp -R $(RES_DIR)/certificates src/I2P/config/certificates ; true
mkdir -p src/I2P/config/geoip ; true
cp $(RES_DIR)/GeoLite2-Country.mmdb.gz src/I2P/config/geoip/GeoLite2-Country.mmdb.gz ; true
cp -R "$(PKG_DIR)"/webapps src/I2P/config/webapps ; true
cd src/I2P/config/geoip && gunzip GeoLite2-Country.mmdb.gz; cd ../../.. ; true
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
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
mkdir -p src/I2P/config/geoip
cp -v $(RES_DIR)/GeoLite2-Country.mmdb.gz src/I2P/config/geoip/GeoLite2-Country.mmdb.gz
cp -R "$(PKG_DIR)"/webapps src/I2P/config/webapps
cd src/I2P/config/geoip && gunzip GeoLite2-Country.mmdb.gz; cd ../../..
build/I2P/config: build/I2P
build/I2P/config: build/I2P src/I2P/config
cp -rv src/I2P/config build/I2P/config ; true
cp -rv src/I2P/config build/I2P/.i2p ; true
#
# Warning: a displayed license file of more than 28752 bytes
@@ -48,7 +92,7 @@ build/licenses: build
unix2dos build/licenses/LICENSE.index
clean:
rm -rf build app-profile-*.tgz profile-*.tgz I2P-Profile-Installer-*.exe *.deb
rm -rf build app-profile-*.tgz profile-*.tgz I2P-Profile-Installer-*.exe *.deb src/I2P/config *.su3
build:
@echo "creating build directory"
@@ -56,9 +100,10 @@ build:
profile: build/profile/user.js build/profile/prefs.js build/profile/bookmarks.html build/profile/storage-sync.sqlite copy-xpi
profile.tgz: profile
$(eval PROFILE_VERSION := $(shell cat src/profile/version.txt))
profile.tgz: .version profile
# $(eval PROFILE_VERSION := $(shell cat src/profile/version.txt))
@echo "building profile tarball $(PROFILE_VERSION)"
bash -c 'ls I2P && cp -rv build/I2P build/profile/I2P'; true
install -m755 src/unix/i2pbrowser.sh build/profile/i2pbrowser.sh
cd build && tar -czf profile-$(PROFILE_VERSION).tgz profile && cp profile-$(PROFILE_VERSION).tgz ../
@@ -79,11 +124,12 @@ copy-xpi: build/NoScript.xpi build/HTTPSEverywhere.xpi build/i2prhz@eyedeekay.gi
cp build/HTTPSEverywhere.xpi "build/profile/extensions/https-everywhere-eff@eff.org.xpi"
cp build/i2prhz@eyedeekay.github.io.xpi build/profile/extensions/i2prhz@eyedeekay.github.io.xpi
app-profile: build/app-profile/user.js build/app-profile/prefs.js build/app-profile/chrome/userChrome.css build/app-profile/bookmarks.html build/app-profile/storage-sync.sqlite copy-app-xpi
app-profile: .version build/app-profile/user.js build/app-profile/prefs.js build/app-profile/chrome/userChrome.css build/app-profile/bookmarks.html build/app-profile/storage-sync.sqlite copy-app-xpi
app-profile.tgz: app-profile
$(eval PROFILE_VERSION := $(shell cat src/app-profile/version.txt))
# $(eval PROFILE_VERSION := $(shell cat src/app-profile/version.txt))
@echo "building app-profile tarball $(PROFILE_VERSION)"
bash -c 'ls I2P && cp -rv build/I2P build/app-profile/I2P'; true
install -m755 src/unix/i2pconfig.sh build/app-profile/i2pconfig.sh
cd build && tar -czf app-profile-$(PROFILE_VERSION).tgz app-profile && cp app-profile-$(PROFILE_VERSION).tgz ../
@@ -134,7 +180,20 @@ build/profile/extensions: build/profile
build/profile: build
mkdir -p build/profile
build/win:
mkdir -p build/win/
build/win/i2pbrowser.bat:
cp src/win/i2pbrowser.bat build/win/i2pbrowser.bat
build/win/i2pconfig.bat:
cp src/win/i2pconfig.bat build/win/i2pconfig.bat
build/win/i2pbrowser-private.bat:
cp src/win/i2pbrowser-private.bat build/win/i2pbrowser-private.bat
launchers: build/win build/win/i2pbrowser.bat build/win/i2pbrowser-private.bat build/win/i2pconfig.bat
build/app-profile/chrome: build/app-profile
mkdir -p build/app-profile/chrome
@@ -167,7 +226,7 @@ uninstall:
/usr/share/applications/i2pbrowser.desktop \
/usr/share/applications/i2pconfig.desktop
checkinstall:
checkinstall: version
checkinstall \
--default \
--install=no \
@@ -177,14 +236,21 @@ checkinstall:
--pkggroup=net \
--pkgrelease=1 \
--pkgsource="https://i2pgit.org/i2p-hackers/i2p.firefox" \
--maintainer="hankhill19580@gmail.com" \
--requires="firefox,wget,i2p,i2p-router" \
--maintainer="$(SIGNER)" \
--requires="firefox,wget" \
--suggests="i2p,i2p-router,syndie,tor,tsocks" \
--nodoc \
--deldoc=yes \
--deldesc=yes \
--backup=no
orig:
rm -fv ../i2p-firefox-profile_$(PROFILE_VERSION).orig.tar.gz
tar cvzf ../i2p-firefox-profile_$(PROFILE_VERSION).orig.tar.gz .
GOPATH=$(HOME)/go
$(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools:
git clone https://i2pgit.org/idk/su3-tools $(GOPATH)/src/i2pgit.org/idk/su3-tools; true
git pull --all
cd $(GOPATH)/src/i2pgit.org/idk/su3-tools && \
go mod vendor && go build
su3: $(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools
$(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools -name "I2P-Profile-Installer-$(PROFILE_VERSION)" -signer "$(SIGNER)" -version "$(I2P_VERSION)"

View File

@@ -127,9 +127,9 @@ End-to-End Windows build process using WSL
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%`
environment variable configured and `%ANT_HOME%/bin` on your `%PATH%`. You must have
Cygwin installed. You must have `NSIS.exe` installed and available on your `%PATH%`.
You must have Git for Windows installed. When installing git for Windows, you should
select "Checkout as is, commit as is" and leave line-endings alone.
Cygwin installed. You must have `NSIS.exe` installed and `makensis` available on your
`%PATH%`. You must have Git for Windows installed. When installing git for Windows,
you should select "Checkout as is, commit as is" and leave line-endings alone.
1. [Set up Windows Subsystem for Linux per Microsoft's instructions](https://docs.microsoft.com/en-us/windows/wsl/install-win10#manual-installation-steps)
2. [Install Ubuntu Focal per Microsoft's instructions](https://www.microsoft.com/store/apps/9n6svws3rx71)
@@ -163,8 +163,8 @@ End-to-End Windows build process using Cygwin
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%`
environment variable configured and `%ANT_HOME%/bin` on your `%PATH%`. You must have
Cygwin installed. You must have `NSIS.exe` installed and available on your `%PATH%`.
You must have Git for Windows installed. When installing git for Windows, you should
WSL and git bash installed. You must have `NSIS.exe` installed and `makensis` available on your
`%PATH%`. You must have Git for Windows installed. When installing git for Windows, you should
select "Checkout as is, commit as is" and leave line-endings alone.
TODO: Add links to the respective instructions for each of these.
@@ -191,6 +191,22 @@ TODO: Add links to the respective instructions for each of these.
5. Run `make` to build the installer.
Building a signed update file
-----------------------------
Building a signed update file for automatically updating a Windows I2P router
requires you to also have Go installed in your Cygwin or WSL environment.
With WSL, you can do this using the command:
wsl sudo apt-get install golang-go
With that dependency satisfied, you can then run:
wsl make su3
to build the signing tool if necessary and then package the installer in a
signed update file.
Issues
------

29
UPDATES.md Normal file
View File

@@ -0,0 +1,29 @@
Setting up an Update Server for an I2P Bundle
=============================================
It is important to set up a signed update server so that people are able to
safely and anonymously update your I2P bundle.
The quick way:
--------------
This process depends on my ability to push releases to github. If you are
forking, setting up a dev server, or taking over because I got hit by a bus,
you'll need to do it the complete way.
For as long as I am building updates, you will be able to mirror the jpackaged
Windows bundle by cloning the repository `https://github.com/eyedeekay/i2p` and
running the `make docker run` target in that repository. You can retrieve the
base32 address of your update server by viewing the log with
`docker logs eephttpd-jpackage | grep b32.i2p | tee eephttpd-address.md`. To
update the site, run `./update.site.sh` in that repository.
Once you have cloned the repository and started the container with
`make docker run`, you can simply add `path/to/repo/update-site.sh` to your
`crontab` and it will update at an interval of your choosing.
The complete way:
-----------------
TODO: describe how to do it with less of the awesome fancy stuff I put together
to make it easier on myself to keep an update server going.

View File

@@ -1,3 +1,4 @@
#! /usr/bin/env sh
curl -s https://addons.mozilla.org/api/v5/addons/addon/$1/versions/?page_size=1 | jq '.results | .[0] | .version' | tr -d '"'
curl -s "https://addons.mozilla.org/api/v5/addons/addon/$1/versions/?page_size=1" | jq '.results | .[0] | .version' | tr -d '"'

61
build.sh Executable file
View File

@@ -0,0 +1,61 @@
#!/bin/bash
set -e
. i2pversion
if [ -f i2pversion_override ]; then
. i2pversion_override
fi
JAVA=$(java --version | tr -d 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\n' | cut -d ' ' -f 2 | cut -d '.' -f 1 | tr -d '\n\t\- ')
if [ "$JAVA" -lt "14" ]; then
echo "Java 14+ must be used to compile with jpackage, java is $JAVA"
exit 1
fi
sleep 2s
if [ -z "${JAVA_HOME}" ]; then
JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
echo "Building with: $JAVA, $JAVA_HOME"
fi
echo "cleaning"
./clean.sh
HERE="$PWD"
cd "$HERE/../i2p.i2p/"
git checkout "$VERSION"
ant distclean preppkg-windows || true
cd "$HERE"
RES_DIR="$HERE/../i2p.i2p/installer/resources"
I2P_JARS="$HERE/../i2p.i2p/pkg-temp/lib"
I2P_JBIGI="$HERE/../i2p.i2p/installer/lib//jbigi"
I2P_PKG="$HERE/../i2p.i2p/pkg-temp"
echo "compiling custom launcher"
mkdir build
cp "$I2P_JARS"/*.jar build
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
cd ..
#echo "building launcher.jar"
cd build
"$JAVA_HOME"/bin/jar -cf launcher.jar net
cd ..
if [ -z $I2P_VERSION ]; then
I2P_VERSION=$("$JAVA_HOME"/bin/java -cp build/router.jar net.i2p.router.RouterVersion | sed "s/.*: //" | head -n 1 | sed 's|-|.|g')
fi
echo "preparing to invoke jpackage for I2P version $I2P_VERSION"
"$JAVA_HOME"/bin/jpackage --type app-image --name I2P --app-version "$I2P_VERSION" \
--verbose \
$JPACKAGE_OPTS \
--resource-dir build \
--java-options "--illegal-access=permit" \
--input build --main-jar launcher.jar --main-class net.i2p.router.WinLauncher

17
clean.sh Executable file
View File

@@ -0,0 +1,17 @@
#! /usr/bin/env sh
rm -rf \
build \
eventlog.txt \
hostsdb.blockfile \
I2P \
i2p_1.0-1_amd64.deb \
libjbigi.so \
libjcpuid.so \
logs \
peerProfiles \
prngseed.rnd \
wrapper.log \
*.jar \
*.exe \
*.dmg

2
config.mk Normal file
View File

@@ -0,0 +1,2 @@
SIGNER=hankhill19580@gmail.com
export SIGNER=hankhill19580@gmail.com

15
i2pversion Normal file
View File

@@ -0,0 +1,15 @@
#! /usr/bin/env sh
#Comment this out to build from an alternate branch or
# the tip of the master branch.
#I2P_VERSION=0.9.50
#export I2P_VERSION=0.9.50
#VERSION=i2p-$I2P_VERSION
#export VERSION="$VERSION"
#Uncomment this to build from the tip of the master.
I2P_VERSION=0.9.50
export I2P_VERSION=0.9.50
VERSION=master
export VERSION="$VERSION"

View File

@@ -0,0 +1,108 @@
package net.i2p.router;
import java.io.*;
import java.util.*;
import net.i2p.crypto.*;
import net.i2p.app.ClientAppManager;
import net.i2p.router.RouterLaunch;
import net.i2p.router.Router;
import net.i2p.update.UpdateManager;
import net.i2p.update.UpdatePostProcessor;
import net.i2p.util.SystemVersion;
import net.i2p.update.*;
import static net.i2p.update.UpdateType.*;
/**
* Launches a router from %PROGRAMFILES%/I2P using configuration data in
* %LOCALAPPDATA%/I2P.. Uses Java 9 APIs.
* Sets the following properties:
* i2p.dir.base - this points to the (read-only) resources inside the bundle
* i2p.dir.config this points to the (read-write) config directory in local appdata
* router.pid - the pid of the java process.
*/
public class WinLauncher {
private static WindowsUpdatePostProcessor wupp = new WindowsUpdatePostProcessor();
public static void main(String[] args) throws Exception {
File programs = wupp.selectProgramFile();
if (!programs.exists())
programs.mkdirs();
else if (!programs.isDirectory()) {
System.err.println(programs + " exists but is not a directory. Please get it out of the way");
System.exit(1);
}
File home = selectHome();
if (!home.exists())
home.mkdirs();
else if (!home.isDirectory()) {
System.err.println(home + " exists but is not a directory. Please get it out of the way");
System.exit(1);
}
System.setProperty("i2p.dir.base", programs.getAbsolutePath());
System.setProperty("i2p.dir.config", home.getAbsolutePath());
System.setProperty("router.pid", String.valueOf(ProcessHandle.current().pid()));
System.out.println("\t"+System.getProperty("i2p.dir.base") +"\n\t"+System.getProperty("i2p.dir.config")+"\n\t"+ System.getProperty("router.pid"));
wupp.i2pRouter = new Router(System.getProperties());
System.out.println("Router is configured");
Thread registrationThread = new Thread(REGISTER_UPP);
registrationThread.setName("UPP Registration");
registrationThread.setDaemon(true);
registrationThread.start();
wupp.i2pRouter.runRouter();
}
private static final Runnable REGISTER_UPP = () -> {
// first wait for the RouterContext to appear
RouterContext ctx;
while ((ctx = (RouterContext) wupp.i2pRouter.getContext().getCurrentContext()) == null) {
sleep(1000);
}
// then wait for the update manager
ClientAppManager cam = ctx.clientAppManager();
UpdateManager um;
while ((um = (UpdateManager) cam.getRegisteredApp(UpdateManager.APP_NAME)) == null) {
sleep(1000);
}
wupp = new WindowsUpdatePostProcessor(ctx);
um.register(wupp, UpdateType.ROUTER_SIGNED_SU3, SU3File.TYPE_EXE);
um.register(wupp, UpdateType.ROUTER_DEV_SU3, SU3File.TYPE_EXE);
};
private static void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException bad) {
bad.printStackTrace();
throw new RuntimeException(bad);
}
}
private static File selectHome() { //throws Exception {
if (SystemVersion.isWindows()) {
File home = new File(System.getProperty("user.home"));
File appData = new File(home, "AppData");
File local = new File(appData, "Local");
File i2p;
i2p = new File(local, "I2P");
System.out.println("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");
System.out.println("Linux portable jpackage wrapper started, using: " + programs + " as base config");
return programs.getAbsoluteFile();
}
}
}

View File

@@ -0,0 +1,72 @@
package net.i2p.router;
import net.i2p.router.*;
import net.i2p.I2PAppContext;
import java.util.function.*;
import java.io.*;
import net.i2p.util.Log;
class WinUpdateProcess implements Runnable {
private final RouterContext ctx;
private final Supplier<String> versionSupplier;
private final Supplier<File> fileSupplier;
WinUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier, Supplier<File> fileSupplier) {
this.ctx = ctx;
this.versionSupplier = versionSupplier;
this.fileSupplier = fileSupplier;
}
private File workDir() throws IOException{
if (ctx != null) {
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");
return null;
} else {
workDir.mkdirs();
}
return workDir;
}
return null;
}
private void runUpdateInstaller() throws IOException {
String version = versionSupplier.get();
File file = fileSupplier.get();
if (file == null)
return;
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");
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.");
}
}
@Override
public void run() {
try {
runUpdateInstaller();
} catch(IOException ioe) {
System.out.println("Error running updater, update may fail." + ioe);
}
}
}

View File

@@ -0,0 +1,119 @@
package net.i2p.router;
import java.io.*;
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.update.UpdatePostProcessor;
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 = I2PAppContext.getGlobalContext().logManager().getLog(WindowsUpdatePostProcessor.class);
private final RouterContext ctx;
protected static Router i2pRouter = null;
private final AtomicBoolean hook = new AtomicBoolean();
private volatile String version;
private volatile File positionedFile = null;
private final String fileName = "i2p-jpackage-update.exe";
WindowsUpdatePostProcessor() {
this.ctx = null;
}
WindowsUpdatePostProcessor(RouterContext ctx) {
this.ctx = ctx;
}
public String getVersion() {
return version;
}
public File getFile() {
return positionedFile;
}
public void updateDownloadedandVerified(UpdateType type, int fileType, String version, File file) throws IOException {
_log.info("Got an update to post-process");
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));
}
private File moveUpdateInstaller(File file) throws IOException {
RouterContext i2pContext = i2pRouter.getContext();
if (i2pContext != null) {
File newFile = new File(workDir(), fileName);
boolean renamedStatus = file.renameTo(newFile);
if (renamedStatus)
return newFile;
else
throw new IOException("WindowsUpdatePostProcesssor unable to move file to working directory, update will fail");
}
throw new IOException("Router context not available to WindowsUpdatePostProcesssor, unable to find working directory, update will fail");
}
private File workDir() throws IOException{
RouterContext i2pContext = i2pRouter.getContext();
if (i2pContext != null) {
File workDir = new File(i2pContext.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");
return null;
} else {
workDir.mkdirs();
}
return workDir;
}
return null;
}
protected File selectProgramFile() {
if (SystemVersion.isWindows()) {
File jrehome = new File(System.getProperty("java.home"));
File programs = jrehome.getParentFile();
System.out.println("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");
System.out.println("Linux portable jpackage wrapper found, using: " + programs + " as working config");
return programs.getAbsoluteFile();
}
}
}

1
router.config Normal file
View File

@@ -0,0 +1 @@
router.updateURL=http://ekm3fu6fr5pxudhwjmdiea5dovc3jdi66hjgop4c7z7dfaw7spca.b32.i2p/i2pwinupdate.su3

View File

@@ -53,3 +53,10 @@ user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
user_pref("browser.newtabpage.activity-stream.default.sites", "http://127.0.0.1:7657/home,http://127.0.0.1:7657/i2psnark/,http://127.0.0.1:7657/susimail/");
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true);
user_pref("ui.use_standins_for_native_colors", true);
user_pref("webgl.disable-extensions", true);
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("media.navigator.enabled", false);
user_pref("dom.w3c_touch_events.enabled", false);

View File

@@ -216,3 +216,9 @@ user_pref("keyword.enabled", false);
user_pref("extensions.allowPrivateBrowsingByDefault", true);
user_pref("extensions.PrivateBrowsing.notification", false);
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true);
user_pref("ui.use_standins_for_native_colors", true);
user_pref("webgl.disable-extensions", true);
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);

View File

@@ -1 +1 @@
0.4
0.04.0

122
src/nsis/FindProcess.nsh Normal file
View File

@@ -0,0 +1,122 @@
/* FindProcess.nsh
*
* written by Donald Miller
* Mar 7, 2007
*
*/
!include LogicLib.nsh
!include WordFunc.nsh
!insertmacro WordFind
!ifndef FindProcess
!define FindProcess '!insertmacro FindProcess'
!macro FindProcess ProcessList BoolReturn
Push '${ProcessList}'
Call FindProcess
Pop ${BoolReturn}
!macroend
Function FindProcess
# return True if any process in ProcessList is active
Exch $0 ; get ProcessList, save $0
Push $1
Push $2
Push $R0
Push $R1
Push $R2
StrCpy $2 "$0," ; $2 = ProcessList
Push 0 ; set return value = False
# method based upon one by Phoenix1701@gmail.com 1/27/07
System::Alloc 1024
Pop $R0 ; process list buffer
# get an array of all process ids
System::Call "Psapi::EnumProcesses(i R0, i 1024, *i .R1)i .r0"
${Unless} $0 = 0
IntOp $R1 $R1 / 4 ; Divide by sizeof(DWORD) to get $R1 process count
IntOp $R1 $R1 - 1 ; decr for 0 base loop
ClearErrors
${For} $R2 0 $R1
# get a PID from the array
IntOp $0 $R2 << 2
IntOp $0 $0 + $R0 ; buffer.dword[i]
System::Call "*$0(i .r0)" ; Get next PID
${Unless} $0 = 0
Push $0
Call GetProcessName
Pop $1
# is this process one we are looking for?
${WordFind} '$2' ',' 'E/$1' $0
${Unless} ${Errors}
# yes, change return value
Pop $0 ; discard old result
Push 1 ; set return True
# exit the loop
${Break}
${EndUnless}
${EndUnless}
${Next}
${EndUnless}
System::Free $R0
Pop $0 ; get return value
Pop $R2 ; restore registers
Pop $R1
Pop $R0
Pop $2
Pop $1
Exch $0
FunctionEnd
Function GetProcessName
# ( Pid -- ProcessName )
Exch $2 ; get Pid, save $2
Push $0
Push $1
Push $3
Push $R0
System::Call "Kernel32::OpenProcess(i 1040, i 0, i r2)i .r3"
StrCpy $2 "<unknown>" ; set return value
${Unless} $3 = 0 ; $3 is hProcess
# get hMod array
System::Alloc 1024
Pop $R0
# params: Pid, &hMod, sizeof(hMod), &cb
System::Call "Psapi::EnumProcessModules(i r3, i R0, i 1024, *i .r1)i .r0"
${Unless} $0 = 0
# get first hMod
System::Call "*$R0(i .r0)"
# get BaseName; params: Pid, hMod, szBuffer, sizeof(szBuffer)
System::Call "Psapi::GetModuleBaseName(i r3, i r0, t .r2, i 256)i .r0"
${EndUnless}
System::Free $R0
System::Call "kernel32::CloseHandle(i r3)"
${EndUnless}
Pop $R0 ; restore registers
Pop $3
Pop $1
Pop $0
Exch $2 ; save process name
FunctionEnd
!endif

View File

@@ -1,4 +1,4 @@
# uncomment on v3
# This now requires v3
UniCode true
!define APPNAME "I2PBrowser-Launcher"
@@ -11,11 +11,14 @@ UniCode true
!define CONSOLE_URL "http://127.0.0.1:7657/home"
!include i2pbrowser-version.nsi
!include i2pbrowser-jpackage.nsi
!include FindProcess.nsh
var FFINSTEXE
var FFNONTORINSTEXE
var I2PINSTEXE
!define FFINSTEXE
!define FFNONTORINSTEXE
!define FFINSTEXE32 "$PROGRAMFILES32\Mozilla Firefox\"
@@ -27,14 +30,14 @@ var I2PINSTEXE
!define RAM_NEEDED_FOR_64BIT 0x80000000
InstallDir "$PROGRAMFILES\${COMPANYNAME}\${APPNAME}"
InstallDir "$PROGRAMFILES64\${COMPANYNAME}\${APPNAME}"
# rtf or txt file - remember if it is txt, it must be in the DOS text format (\r\n)
LicenseData "licenses\LICENSE.index"
# This will be in the installer/uninstaller's title bar
Name "${COMPANYNAME} - ${APPNAME}"
Icon ui2pbrowser_icon.ico
OutFile "I2P-Profile-Installer-${VERSIONMAJOR}.${VERSIONMINOR}${VERSIONBUILD}.exe"
OutFile "I2P-Profile-Installer-${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}.exe"
RequestExecutionLevel admin
@@ -169,10 +172,11 @@ Function .onInit
StrCpy $FFINSTEXE "$PROFILE/Desktop/Tor Browser/Browser/"
${EndIf}
${EndIf}
${If} ${FileExists} "${I2PINSTEXE32}/i2p.exe"
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
${If} ${FileExists} "${I2PINSTEXE32}\i2p.exe"
StrCpy $I2PINSTEXE "${I2PINSTEXE32}"
${EndIf}
${If} ${FileExists} "${I2PINSTEXE64}/i2p.exe"
${If} ${FileExists} "${I2PINSTEXE64}\i2p.exe"
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
${EndIf}
FunctionEnd
@@ -185,6 +189,36 @@ FunctionEnd
Function routerDetect
${If} ${FileExists} "$I2PINSTEXE"
Abort directory
${Else}
createDirectory $I2PINSTEXE
SetOutPath $I2PINSTEXE
File /nonfatal /a /r "I2P\"
File /nonfatal "I2P\config\jpackaged"
createDirectory "$I2PINSTEXE\"
SetOutPath "$I2PINSTEXE\"
File /nonfatal "I2P\config\clients.config"
File /nonfatal "I2P\config\i2ptunnel.config"
File /nonfatal "I2P\config\wrapper.config"
File /nonfatal "I2P\config\hosts.txt"
createDirectory "$I2PINSTEXE\webapps\"
SetOutPath "$I2PINSTEXE\webapps\"
File /nonfatal /a /r "I2P\config\webapps\"
createDirectory "$I2PINSTEXE\geoip\"
SetOutPath "$I2PINSTEXE\geoip\"
File /nonfatal /a /r "I2P\config\geoip\"
createDirectory "$I2PINSTEXE\certificates\"
SetOutPath "$I2PINSTEXE\certificates\"
File /nonfatal /a /r "I2P\config\certificates\"
createDirectory "$I2PINSTEXE\eepsite\"
SetOutPath "$I2PINSTEXE\eepsite\"
File /nonfatal /a /r "I2P\config\eepsite\"
Abort directory
${EndIf}
FunctionEnd
@@ -192,97 +226,71 @@ FunctionEnd
# start default section
Section Install
${If} ${Silent}
${Do}
${FindProcess} "I2P.exe" $0
Sleep 500
${LoopWhile} $0 <> 0
${EndIf}
# set the installation directory as the destination for the following actions
createDirectory $INSTDIR
SetOutPath $INSTDIR
File ui2pbrowser_icon.ico
# Install the launcher scripts: This will need to be it's own section, since
# now I think we just need to let the user select if the user is using a non
# default Firefox path.
FileOpen $0 "$INSTDIR\i2pbrowser.bat" w
FileWrite $0 "@echo off"
FileWriteByte $0 "13"
FileWriteByte $0 "10"
# Update jpackaged I2P router, if it exists
${If} ${FileExists} "$I2PINSTEXE\jpackaged"
FileWrite $0 'start /D "%LOCALAPPDATA%\${APPNAME}" "" "$I2PINSTEXE\i2p.exe"'
${Else}
FileWrite $0 'start "" "$I2PINSTEXE\i2p.exe"'
createDirectory $I2PINSTEXE
SetOutPath $I2PINSTEXE
${If} ${Silent}
ReadEnvStr $0 OLD_I2P_VERSION
${If} $0 < ${I2P_VERSION}
File /nonfatal /a /r "I2P\"
File /nonfatal "I2P\config\jpackaged"
createDirectory "$I2PINSTEXE\"
SetOutPath "$I2PINSTEXE\"
createDirectory "$I2PINSTEXE\webapps\"
SetOutPath "$I2PINSTEXE\webapps\"
File /nonfatal /a /r "I2P\config\webapps\"
createDirectory "$I2PINSTEXE\geoip\"
SetOutPath "$I2PINSTEXE\geoip\"
File /nonfatal /a /r "I2P\config\geoip\"
createDirectory "$I2PINSTEXE\certificates\"
SetOutPath "$I2PINSTEXE\certificates\"
File /nonfatal /a /r "I2P\config\certificates\"
${EndIf}
${Else}
File /nonfatal /a /r "I2P\"
File /nonfatal "I2P\config\jpackaged"
createDirectory "$I2PINSTEXE\"
SetOutPath "$I2PINSTEXE\"
createDirectory "$I2PINSTEXE\webapps\"
SetOutPath "$I2PINSTEXE\webapps\"
File /nonfatal /a /r "I2P\config\webapps\"
createDirectory "$I2PINSTEXE\geoip\"
SetOutPath "$I2PINSTEXE\geoip\"
File /nonfatal /a /r "I2P\config\geoip\"
createDirectory "$I2PINSTEXE\certificates\"
SetOutPath "$I2PINSTEXE\certificates\"
File /nonfatal /a /r "I2P\config\certificates\"
${EndIf}
${EndIf}
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 'if exist "%LOCALAPPDATA%\${APPNAME}\firefox.profile.i2p\" ('
FileWrite $0 ' echo "profile is configured"'
FileWrite $0 ') else ('
FileWrite $0 ' echo "configuring profile"'
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 ' xcopy /s /i /y "$INSTDIR\firefox.profile.i2p" "%LOCALAPPDATA%\${APPNAME}\firefox.profile.i2p"'
FileWrite $0 ')'
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 'start "" "$FFINSTEXE\firefox.exe" -no-remote -profile "%LOCALAPPDATA%\${APPNAME}\firefox.profile.i2p" -url %1'
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 exit
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileClose $0
FileOpen $0 "$INSTDIR\i2pbrowser-private.bat" w
FileWrite $0 "@echo off"
FileWriteByte $0 "13"
FileWriteByte $0 "10"
${If} ${FileExists} "$I2PINSTEXE\jpackaged"
FileWrite $0 'start /D "%LOCALAPPDATA%\${APPNAME}" "" "$I2PINSTEXE\i2p.exe"'
${Else}
FileWrite $0 'start "" "$I2PINSTEXE\i2p.exe"'
${EndIf}
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 'if exist "%LOCALAPPDATA%\${APPNAME}\firefox.profile.i2p\" ('
FileWrite $0 ' echo "profile is configured"'
FileWrite $0 ') else ('
FileWrite $0 ' echo "configuring profile"'
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 ' xcopy /s /i /y "$INSTDIR\firefox.profile.i2p" "%LOCALAPPDATA%\${APPNAME}\firefox.profile.i2p"'
FileWrite $0 ')'
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 'start "" "$FFINSTEXE\firefox.exe" -no-remote -profile "%LOCALAPPDATA%\${APPNAME}\firefox.profile.i2p" -private-window about:blank'
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 exit
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileClose $0
# Install the launcher scripts: This will need to be it's own section, since
# now I think we just need to let the user select if the user is using a non
# default Firefox path.
FileOpen $0 "$INSTDIR\i2pconfig.bat" w
FileWrite $0 "@echo off"
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 'if exist "%LOCALAPPDATA%\${APPNAME}\firefox.profile.config.i2p\" ('
FileWrite $0 ' echo "profile is configured"'
FileWrite $0 ') else ('
FileWrite $0 ' echo "configuring profile"'
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 ' xcopy /s /i /y "$INSTDIR\firefox.profile.config.i2p" "%LOCALAPPDATA%\${APPNAME}\firefox.profile.config.i2p"'
FileWrite $0 ')'
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 'start "" "$FFNONTORINSTEXE\firefox.exe" -no-remote -profile "%LOCALAPPDATA%\${APPNAME}\firefox.profile.config.i2p" -url %1'
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 exit
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileClose $0
# Install the launcher scripts
createDirectory "$INSTDIR\licenses"
SetOutPath "$INSTDIR"
File win/i2pbrowser.bat
File win/i2pbrowser-private.bat
File win/i2pconfig.bat
# Install the licenses
createDirectory "$INSTDIR\licenses"
@@ -325,10 +333,13 @@ Section Install
SetOutPath "$INSTDIR"
createDirectory "$SMPROGRAMS\${APPNAME}"
CreateShortCut "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pbrowser.bat$\" ${CONSOLE_URL}" "$INSTDIR\ui2pbrowser_icon.ico"
CreateShortCut "$SMPROGRAMS\${APPNAME}\Private Browsing-${APPNAME}.lnk" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pbrowser-private.bat$\"" "$INSTDIR\ui2pbrowser_icon.ico"
CreateShortCut "$DESKTOP\${APPNAME}.lnk" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pbrowser.bat$\" ${CONSOLE_URL}" "$INSTDIR\ui2pbrowser_icon.ico"
CreateShortCut "$DESKTOP\Private Browsing-${APPNAME}.lnk" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pbrowser-private.bat$\"" "$INSTDIR\ui2pbrowser_icon.ico"
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P.lnk" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pbrowser.bat$\" ${CONSOLE_URL}" "$INSTDIR\ui2pbrowser_icon.ico"
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P - Temporary Identity.lnk" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pbrowser-private.bat$\"" "$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" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pbrowser.bat$\" ${CONSOLE_URL}" "$INSTDIR\ui2pbrowser_icon.ico"
CreateShortCut "$DESKTOP\Browse I2P - Temporary Identity.lnk" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pbrowser-private.bat$\"" "$INSTDIR\ui2pbrowser_icon.ico"
; CreateShortCut "$DESKTOP\I2P Applications.lnk" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pconfig.bat$\"" "$INSTDIR\ui2pbrowser_icon.ico"
;# Point the browser config setting in the base router.config
FileOpen $0 "$I2PINSTEXE\router.config" a
@@ -421,7 +432,10 @@ Section "uninstall"
rmDir "$INSTDIR\firefox.profile.i2p"
rmDir "$LOCALAPPDATA\${APPNAME}"
rmDir "$INSTDIR"
${If} ${FileExists} "$I2PINSTEXE\jpackaged"
rmDir "$I2PINSTEXE"
${EndIf}
# delete the uninstaller
Delete "$INSTDIR\uninstall-i2pbrowser.exe"
@@ -435,5 +449,12 @@ SectionEnd
!insertmacro MUI_PAGE_FINISH
Function LaunchLink
ExecShell "" "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk"
${If} ${Silent}
ReadEnvStr $0 RESTART_I2P
${If} $0 != ""
Exec "$INSTDIR\i2pbrowser.bat"
${EndIf}
${Else}
Exec "$INSTDIR\i2pbrowser.bat"
${EndIf}
FunctionEnd

View File

@@ -0,0 +1 @@
!define I2P_VERSION 0.9.50

View File

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

View File

@@ -51,3 +51,10 @@ user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
user_pref("browser.newtabpage.activity-stream.default.sites", "http://planet.i2p/,http://legwork.i2p/,http://i2pwiki.i2p/,http://i2pforums.i2p/,http://zzz.i2p/");
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true);
user_pref("ui.use_standins_for_native_colors", true);
user_pref("webgl.disable-extensions", true);
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("media.navigator.enabled", false);
user_pref("dom.w3c_touch_events.enabled", false);

View File

@@ -170,7 +170,7 @@ user_pref("dom.serviceWorkers.enabled", false);
user_pref("dom.serviceWorkers.interception.enabled", false);
user_pref("dom.storage.enabled", false);
user_pref("dom.webaudio.enabled", false);
user_pref("extensions.autoDisableScopes", 14);
user_pref("extensions.autoDisableScopes", 0);
user_pref("extensions.getAddons.cache.enabled", false);
user_pref("extensions.getAddons.showPane", false);
user_pref("extensions.pocket.enabled", false);
@@ -216,3 +216,9 @@ user_pref("keyword.enabled", false);
user_pref("extensions.allowPrivateBrowsingByDefault", true);
user_pref("extensions.PrivateBrowsing.notification", false);
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true);
user_pref("ui.use_standins_for_native_colors", true);
user_pref("webgl.disable-extensions", true);
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);

View File

@@ -1 +1 @@
0.4
0.04.0

View File

@@ -0,0 +1,38 @@
@echo on
if not exist "%ProgramFiles%\I2P\" (
set "ProgramFiles=C:\Program Files"
)
if exist "%ProgramFiles%\I2P\jpackaged" (
start "i2p" /D "%LOCALAPPDATA%\I2P" "%ProgramFiles%\I2P\i2p.exe"
) else (
start "i2p" "%ProgramFiles%\I2P\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"
) else (
echo "configuring profile"
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p"
)
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
)
if exist "%USERPROFILE%/OneDrive/Desktop/Tor Browser/Browser/firefox.exe" (
start "i2pbrowser" "%USERPROFILE%/OneDrive/Desktop/Tor Browser/Browser/firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p" -private-window about:blank
exit
)
if exist "%ProgramFiles%\Mozilla Firefox\firefox.exe" (
start "i2pbrowser" "%ProgramFiles%\Mozilla Firefox\firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p" -private-window about:blank
exit
)
exit

38
src/win/i2pbrowser.bat Normal file
View File

@@ -0,0 +1,38 @@
@echo on
if not exist "%ProgramFiles%\I2P\" (
set "ProgramFiles=C:\Program Files"
)
if exist "%ProgramFiles%\I2P\jpackaged" (
start "i2p" /D "%LOCALAPPDATA%\I2P" "%ProgramFiles%\I2P\i2p.exe"
) else (
start "i2p" "%ProgramFiles%\I2P\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"
) else (
echo "configuring profile"
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p"
)
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
)
if exist "%USERPROFILE%/OneDrive/Desktop/Tor Browser/Browser/firefox.exe" (
start "i2pbrowser" "%USERPROFILE%/OneDrive/Desktop/Tor Browser/Browser/firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p" -url %1
exit
)
if exist "%ProgramFiles%\Mozilla Firefox\firefox.exe" (
start "i2pbrowser" "%ProgramFiles%\Mozilla Firefox\firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p" -url %1
exit
)
exit

13
src/win/i2pconfig.bat Normal file
View File

@@ -0,0 +1,13 @@
@echo off
if exist "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p\" (
echo "profile is configured"
xcopy /s /i /y "$INSTDIR\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
) else (
echo "configuring profile"
xcopy /s /i /y "$INSTDIR\firefox.profile.config.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p"
)
start "i2pconfig" "c:\Program Files\Mozilla Firefox\firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p" -url %1
exit