Compare commits
116 Commits
Author | SHA1 | Date | |
---|---|---|---|
81d9d13742 | |||
e66fc3440c | |||
f9e3d1b040 | |||
928ae1a85f | |||
93b197efb9 | |||
09ffb8edbe | |||
cdc3224eaa | |||
2eeb2106fc | |||
26a7944470 | |||
b97d581fcc | |||
615818976a | |||
e6fc5a349d | |||
3718d2edb9 | |||
4a55a8d4ab | |||
a3a45b01e5 | |||
e07c43f1eb | |||
fd75a7e244 | |||
0e77d53c15 | |||
4dd9448752 | |||
b220697af2 | |||
d9cffc9520 | |||
c8590e4fe5 | |||
3c8b1b6d28 | |||
460837d7f5 | |||
2bd3abe6bb | |||
5ef6118b91 | |||
394f58f90e | |||
5ee89f98a9 | |||
6736d527a2 | |||
ef203ba935 | |||
3749f49641 | |||
d63128096c | |||
51cb4c608a | |||
f920fa8090 | |||
252a80eb72 | |||
ed7814cd74 | |||
073ba01da6 | |||
7caf03d6e4 | |||
c3934ab4e4 | |||
54ffdc2352 | |||
ab2548ecd4 | |||
5cf5d56738 | |||
262311390e | |||
3ac2f2b4a2 | |||
00ca509e57 | |||
a1826d40e8 | |||
c8f3f0b960 | |||
a80512cd5a | |||
7e5579fd65 | |||
934ab43b2a | |||
9214c2116c | |||
c02e466f80 | |||
59a1a3d9e6 | |||
a230a49af7 | |||
079ef87c8f | |||
f9a7f8ab2d | |||
3c8dd9dee9 | |||
65db834ec9 | |||
b955dbe66e | |||
e367227714 | |||
4a02ec418a | |||
4368b80c79 | |||
7dff65d67d | |||
0ad9406387 | |||
c2485eeea0 | |||
603c10ed9f | |||
7806b6f232 | |||
21b396e343 | |||
3d67aa4dca | |||
646778680d | |||
910aeed82c | |||
2f0e553b20 | |||
bc33051d8d | |||
e4d0be36c9 | |||
9374b1b274 | |||
e4e3df90dc | |||
acb66c97d0 | |||
a8ac47966c | |||
acf67d93c6 | |||
07f7b84817 | |||
c7a42e6447 | |||
66e93709ca | |||
a7eba5f5ae | |||
ba0e2fb8c0 | |||
8ee2a1170e | |||
a08046655b | |||
54be1d3acd | |||
e7e40a96ba | |||
6de7e95a4b | |||
b4d9687eed | |||
73b779ba5c | |||
f4d55be5b4 | |||
03ea86c345 | |||
1ba8327589 | |||
50c8804c8a | |||
3d29135e50 | |||
419105420d | |||
217f54db07 | |||
6afecedf59 | |||
1347859bc5 | |||
eafa1bf04d | |||
63e1326dae | |||
50b00c6c88 | |||
49d52e150b | |||
86e363d13e | |||
3930c6750d | |||
cead2e1133 | |||
82b85ca77f | |||
06f7521e2e | |||
b7a9d57c73 | |||
0219d14b48 | |||
1657111ddb | |||
3329925e73 | |||
e154064cbd | |||
c784284b03 | |||
0efd2495b5 |
@ -1,12 +1,13 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
I2P Browsing Pro...
|
||||
I2P Easy-Install...
|
||||
</title>
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.firefox" />
|
||||
<meta name="keywords" content="master" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="navbar">
|
||||
@ -98,6 +99,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://geti2p.net/">
|
||||
<img src="i2plogo.png"></img>
|
||||
I2P
|
||||
</a>
|
||||
</div>
|
||||
|
2
Makefile
2
Makefile
@ -83,10 +83,10 @@ src/I2P/config: build/I2P
|
||||
rm -rf src/I2P/config/geoip src/I2P/config/webapps src/I2P/config/certificates
|
||||
echo true | tee src/I2P/config/jpackaged
|
||||
cp -v $(RES_DIR)/clients.config src/I2P/config/
|
||||
cp -v $(RES_DIR)/i2ptunnel.config src/I2P/config/
|
||||
cp -v $(RES_DIR)/wrapper.config src/I2P/config/
|
||||
#grep -v 'router.updateURL' $(RES_DIR)/router.config > src/I2P/config/router.config
|
||||
cat router.config > src/I2P/config/router.config
|
||||
cat i2ptunnel.config > src/I2P/config/i2ptunnel.config
|
||||
cp -v $(RES_DIR)/hosts.txt src/I2P/config/hosts.txt
|
||||
cp -R $(RES_DIR)/certificates src/I2P/config/certificates
|
||||
cp -R $(RES_DIR)/eepsite src/I2P/config/eepsite
|
||||
|
@ -1,5 +1,5 @@
|
||||
I2P Browsing Profile for Firefox
|
||||
================================
|
||||
I2P Easy-Install Bundle for Windows(Also/formerly)I2P Browsing Profile for Firefox
|
||||
==================================================================================
|
||||
|
||||
Features:
|
||||
---------
|
||||
|
@ -1,12 +1,13 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
I2P Browsing Pro...
|
||||
I2P Easy-Install...
|
||||
</title>
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.firefox" />
|
||||
<meta name="keywords" content="master" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="navbar">
|
||||
@ -135,6 +136,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://geti2p.net/">
|
||||
<img src="i2plogo.png"></img>
|
||||
I2P
|
||||
</a>
|
||||
</div>
|
||||
|
7
build.sh
7
build.sh
@ -41,6 +41,7 @@ sleep 5s
|
||||
HERE="$PWD"
|
||||
if [ ! -d "$HERE/../i2p.i2p.jpackage-build/" ]; then
|
||||
git clone -b "$VERSION" https://i2pgit.org/i2p-hackers/i2p.i2p "$HERE/../i2p.i2p.jpackage-build/"
|
||||
tar --exclude="$HERE/../i2p.i2p.jpackage-build/.git" cvzf i2p.i2p.jpackage-build.tar.gz "$HERE/../i2p.i2p.jpackage-build/"
|
||||
fi
|
||||
cd "$HERE/../i2p.i2p.jpackage-build/"
|
||||
for i in $COUNT; do
|
||||
@ -65,8 +66,12 @@ 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
|
||||
|
||||
if [ ! -f "$HERE/build/i2pfirefox.jar" ]; then
|
||||
wget -O "$HERE/build/i2pfirefox.jar" "https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/$I2PFIREFOX_VERSION/i2pfirefox.jar"
|
||||
fi
|
||||
|
||||
cd 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" \
|
||||
"$JAVA_HOME"/bin/javac -d ../build -classpath "$HERE/build/i2pfirefox.jar:$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 \
|
||||
|
@ -1,3 +1,17 @@
|
||||
2022-09-08 idk
|
||||
* Generate a source tarball when we checkout a branch of i2p.i2p
|
||||
* Upload a source tarball when we do a daily build
|
||||
* Clean up a source tarball when running the clean script. Regenerate tarball after cleaning.
|
||||
|
||||
2022-09-06 idk
|
||||
* Point release 1.9.5, fixes a bug which occurs more often on Windows 11, fixes a SusiDNS issue
|
||||
|
||||
2022-08-28 idk
|
||||
* Migrate away from batch scripts and simply launch a browser if I2P is already running.
|
||||
This is more flexible, stable, and simplet to install
|
||||
* Improves compatibility with detatched and un-bundled routers on the same system
|
||||
* Fixes bugs in Firefox path finding
|
||||
|
||||
2022-05-8 idk
|
||||
* Add translations for Arabic, German, French, Italian, Japanese, Portuguese, Russian,
|
||||
and Chinese.
|
||||
|
4
clean.sh
4
clean.sh
@ -4,6 +4,7 @@ SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
|
||||
if [ -f config_overide.sh ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
@ -11,8 +12,9 @@ fi
|
||||
|
||||
cd ../i2p.i2p.jpackage-build/
|
||||
ant distclean
|
||||
git clean -fd
|
||||
git checkout .
|
||||
git checkout master
|
||||
tar --exclude="$SCRIPT_DIR/../i2p.i2p.jpackage-build/.git" -cvzf "$SCRIPT_DIR/../i2p.i2p.jpackage-build.tar.gz" "$SCRIPT_DIR/../i2p.i2p.jpackage-build/"
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
rm -rf \
|
||||
build \
|
||||
|
32
config.sh
32
config.sh
@ -3,16 +3,28 @@
|
||||
## If you need to use a different JVM, JDK, or other utility from
|
||||
# build.sh, set it in this file, for example:
|
||||
|
||||
uname=$(uname)
|
||||
|
||||
#export PATH="$PATH:/c/Program Files/Java/jdk-17.0.3/bin/"
|
||||
#export JAVA_HOME="/c/Program Files/Java/jdk-17.0.3"
|
||||
# to use it for Oracle OpenJDK17
|
||||
|
||||
## Other potential values(NOT exhaustive):
|
||||
|
||||
PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
export PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
export JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
|
||||
PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
export PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
export JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
fi
|
||||
|
||||
if [ "${uname}" != "Linux" ]; then
|
||||
PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
export PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
export JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
fi
|
||||
|
||||
#export PATH="$PATH:/c/Program Files/Eclipse Adoptium/jdk-17.0.3/bin/"
|
||||
#export JAVA_HOME="/c/Program Files/Eclipse Adoptium/jdk-17.0.3"
|
||||
#export PATH="$PATH:/c/Program Files/OpenJDK/jdk-17.0.3/bin/"
|
||||
@ -49,6 +61,12 @@ export JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
#export ANT_HOME="/c/apache-ant-1.10.9"
|
||||
#export PATH="$PATH:$ANT_HOME/bin/"
|
||||
|
||||
# Uncomment this to add signtool to the path so you don't have to fight with Visual Studio.
|
||||
PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
export PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
|
||||
PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
export PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
fi
|
||||
|
||||
if [ "${uname}" != "Linux" ]; then
|
||||
PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
export PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
fi
|
4
daily.sh
4
daily.sh
@ -49,3 +49,7 @@ tar -a -cf ../I2P.zip I2P
|
||||
ZIPCHECKSUM=$(sha256sum "../I2P.zip")
|
||||
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "../I2P.zip" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.zip"
|
||||
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "../I2P.zip" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.zip"
|
||||
|
||||
TARCHECKSUM=$(sha256sum "i2p.i2p.jpackage-build.tar.gz")
|
||||
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "i2p.i2p.jpackage-build.tar.gz" -l "Upstream I2P Router source code $TARCHECKSUM" -t "$TODAYSDATE" -n "i2p.i2p.jpackage-build.tar.gz"
|
||||
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "i2p.i2p.jpackage-build.tar.gz" -l "Upstream I2P Router source code $TARCHECKSUM" -t "$TODAYSDATE" -n "i2p.i2p.jpackage-build.tar.gz"
|
||||
|
40
exe.sh
Executable file
40
exe.sh
Executable file
@ -0,0 +1,40 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
## EXPERIMENTAL. PROBABLY WON'T SEE THE LIGHT OF DAY BUT MAYBE I GET LUCKY.
|
||||
|
||||
# Motivation
|
||||
|
||||
. ./config.sh
|
||||
. ./i2pversion
|
||||
jpackage --name I2P-MSI --app-version "$I2P_VERSION" \
|
||||
--verbose \
|
||||
--java-options "-Xmx512m" \
|
||||
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/sun.nio.fs=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.nio=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
||||
$JPACKAGE_OPTS \
|
||||
--app-content build/I2P/config/certificates \
|
||||
--app-content build/I2P/config/eepsite \
|
||||
--app-content build/I2P/config/geoip \
|
||||
--app-content build/I2P/config/webapps \
|
||||
--app-content build/I2P/config/clients.config \
|
||||
--app-content build/I2P/config/hosts.txt \
|
||||
--app-content build/I2P/config/i2ptunnel.config \
|
||||
--app-content build/I2P/config/jpackaged \
|
||||
--app-content build/I2P/config/router.config \
|
||||
--app-content build/I2P/config/wrappper.config \
|
||||
--input build \
|
||||
--verbose \
|
||||
--type exe \
|
||||
--win-dir-chooser \
|
||||
--win-help-url "https://geti2p.net" \
|
||||
--win-menu \
|
||||
--win-menu-group "I2P Easy-Install Bundle" \
|
||||
--win-shortcut \
|
||||
--win-shortcut-prompt \
|
||||
--win-per-user-install \
|
||||
--license-file LICENSE.md \
|
||||
--main-jar launcher.jar \
|
||||
--main-class net.i2p.router.WinLauncher
|
17
experimental.sh
Executable file
17
experimental.sh
Executable file
@ -0,0 +1,17 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f config_overide.sh ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
./clean.sh
|
||||
wsl make distclean
|
||||
wsl make clean-extensions
|
||||
wsl make new-extensions
|
||||
./build.sh
|
||||
wsl make
|
BIN
i2plogo.png
Normal file
BIN
i2plogo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
192
i2ptunnel.config
Normal file
192
i2ptunnel.config
Normal file
@ -0,0 +1,192 @@
|
||||
# NOTE: This I2P config file must use UTF-8 encoding
|
||||
#
|
||||
# If you have a 'split' directory installation, with configuration
|
||||
# files in ~/.i2p (Linux), %LOCALAPPDATA%\I2P (Windows),
|
||||
# or /Users/(user)/Library/Application Support/i2p (Mac), be sure to
|
||||
# edit the file in the configuration directory, NOT the install directory.
|
||||
# When running as a Linux daemon, the configuration directory is /var/lib/i2p
|
||||
# and the install directory is /usr/share/i2p .
|
||||
# When running as a Windows service, the configuration directory is \ProgramData\i2p
|
||||
# and the install directory is \Program Files\i2p .
|
||||
#
|
||||
# On first run, this file will be split into individual config files
|
||||
# in i2ptunnel.config.d/ in the configuration directory.
|
||||
# Look in that directory for the file to edit.
|
||||
#
|
||||
|
||||
# eepproxy
|
||||
tunnel.0.name=I2P HTTP Proxy
|
||||
tunnel.0.description=HTTP proxy for browsing eepsites and the web
|
||||
tunnel.0.type=httpclient
|
||||
tunnel.0.sharedClient=false
|
||||
tunnel.0.interface=127.0.0.1
|
||||
tunnel.0.listenPort=4444
|
||||
tunnel.0.proxyList=false.i2p
|
||||
tunnel.0.i2cpHost=127.0.0.1
|
||||
tunnel.0.i2cpPort=7654
|
||||
tunnel.0.option.inbound.nickname=HTTP Proxy
|
||||
tunnel.0.option.outbound.nickname=HTTP Proxy
|
||||
tunnel.0.option.i2cp.leaseSetEncType=4,0
|
||||
tunnel.0.option.i2cp.reduceIdleTime=900000
|
||||
tunnel.0.option.i2cp.reduceOnIdle=true
|
||||
tunnel.0.option.i2cp.reduceQuantity=1
|
||||
tunnel.0.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=false.i2p
|
||||
tunnel.0.option.inbound.length=3
|
||||
tunnel.0.option.inbound.lengthVariance=0
|
||||
tunnel.0.option.outbound.length=3
|
||||
tunnel.0.option.outbound.lengthVariance=0
|
||||
tunnel.0.option.outbound.priority=10
|
||||
tunnel.0.startOnLoad=true
|
||||
tunnel.0.option.persistentClientKey=false
|
||||
tunnel.0.option.i2cp.closeIdleTime=1800000
|
||||
tunnel.0.option.i2cp.closeOnIdle=true
|
||||
tunnel.0.option.i2cp.newDestOnResume=true
|
||||
|
||||
# irc
|
||||
tunnel.1.name=Irc2P
|
||||
tunnel.1.description=IRC tunnel to access the Irc2P network
|
||||
tunnel.1.type=ircclient
|
||||
tunnel.1.sharedClient=false
|
||||
tunnel.1.interface=127.0.0.1
|
||||
tunnel.1.listenPort=6668
|
||||
tunnel.1.targetDestination=irc.postman.i2p:6667,irc.echelon.i2p:6667
|
||||
tunnel.1.i2cpHost=127.0.0.1
|
||||
tunnel.1.i2cpPort=7654
|
||||
tunnel.1.option.inbound.nickname=Irc2P
|
||||
tunnel.1.option.outbound.nickname=Irc2P
|
||||
tunnel.1.option.i2cp.closeIdleTime=1200000
|
||||
tunnel.1.option.i2cp.closeOnIdle=true
|
||||
tunnel.1.option.i2cp.delayOpen=true
|
||||
tunnel.1.option.i2cp.destination.sigType=7
|
||||
tunnel.1.option.i2cp.leaseSetEncType=4,0
|
||||
tunnel.1.option.i2cp.newDestOnResume=false
|
||||
tunnel.1.option.i2cp.reduceIdleTime=600000
|
||||
tunnel.1.option.i2cp.reduceOnIdle=true
|
||||
tunnel.1.option.i2cp.reduceQuantity=1
|
||||
tunnel.1.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.1.option.i2p.streaming.maxWindowSize=16
|
||||
tunnel.1.option.inbound.length=3
|
||||
tunnel.1.option.inbound.lengthVariance=0
|
||||
tunnel.1.option.outbound.length=3
|
||||
tunnel.1.option.outbound.lengthVariance=0
|
||||
tunnel.1.option.outbound.priority=15
|
||||
tunnel.1.startOnLoad=true
|
||||
|
||||
# local eepserver
|
||||
tunnel.3.name=I2P webserver
|
||||
tunnel.3.description=My eepsite
|
||||
tunnel.3.type=httpserver
|
||||
tunnel.3.targetHost=127.0.0.1
|
||||
tunnel.3.targetPort=7658
|
||||
tunnel.3.spoofedHost=mysite.i2p
|
||||
tunnel.3.privKeyFile=eepsite/eepPriv.dat
|
||||
tunnel.3.i2cpHost=127.0.0.1
|
||||
tunnel.3.i2cpPort=7654
|
||||
tunnel.3.option.inbound.nickname=eepsite
|
||||
tunnel.3.option.outbound.nickname=eepsite
|
||||
tunnel.3.option.i2cp.destination.sigType=7
|
||||
tunnel.3.option.i2cp.leaseSetEncType=4,0
|
||||
tunnel.3.option.inbound.length=3
|
||||
tunnel.3.option.inbound.lengthVariance=0
|
||||
tunnel.3.option.outbound.length=3
|
||||
tunnel.3.option.outbound.lengthVariance=0
|
||||
# uncomment for HTTPS to port 7668
|
||||
#tunnel.3.option.targetForPort.443=127.0.0.1:7668
|
||||
tunnel.3.startOnLoad=false
|
||||
|
||||
# postman's SMTP server - see hq.postman.i2p
|
||||
tunnel.4.description=smtp server
|
||||
tunnel.4.i2cpHost=127.0.0.1
|
||||
tunnel.4.i2cpPort=7654
|
||||
tunnel.4.interface=127.0.0.1
|
||||
tunnel.4.listenPort=7659
|
||||
tunnel.4.name=smtp.postman.i2p
|
||||
tunnel.4.option.inbound.nickname=shared clients
|
||||
tunnel.4.option.outbound.nickname=shared clients
|
||||
tunnel.4.option.i2cp.leaseSetEncType=4,0
|
||||
tunnel.4.option.i2cp.reduceIdleTime=900000
|
||||
tunnel.4.option.i2cp.reduceOnIdle=true
|
||||
tunnel.4.option.i2cp.reduceQuantity=1
|
||||
tunnel.4.option.inbound.length=3
|
||||
tunnel.4.option.inbound.lengthVariance=0
|
||||
tunnel.4.option.outbound.length=3
|
||||
tunnel.4.option.outbound.lengthVariance=0
|
||||
tunnel.4.startOnLoad=true
|
||||
tunnel.4.targetDestination=smtp.postman.i2p:25
|
||||
tunnel.4.type=client
|
||||
tunnel.4.sharedClient=true
|
||||
|
||||
# postman's POP3 server - see hq.postman.i2p
|
||||
tunnel.2.name=pop3.postman.i2p
|
||||
tunnel.2.description=pop3 server
|
||||
tunnel.2.i2cpHost=127.0.0.1
|
||||
tunnel.2.i2cpPort=7654
|
||||
tunnel.2.interface=127.0.0.1
|
||||
tunnel.2.listenPort=7660
|
||||
tunnel.2.option.inbound.nickname=shared clients
|
||||
tunnel.2.option.outbound.nickname=shared clients
|
||||
tunnel.2.option.i2cp.leaseSetEncType=4,0
|
||||
tunnel.2.option.i2cp.reduceIdleTime=900000
|
||||
tunnel.2.option.i2cp.reduceOnIdle=true
|
||||
tunnel.2.option.i2cp.reduceQuantity=1
|
||||
tunnel.2.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.2.option.inbound.length=3
|
||||
tunnel.2.option.inbound.lengthVariance=0
|
||||
tunnel.2.option.outbound.length=3
|
||||
tunnel.2.option.outbound.lengthVariance=0
|
||||
tunnel.2.startOnLoad=true
|
||||
tunnel.2.targetDestination=pop.postman.i2p:110
|
||||
tunnel.2.type=client
|
||||
tunnel.2.sharedClient=true
|
||||
|
||||
# HTTPS (CONNECT) outproxy
|
||||
tunnel.5.name=I2P HTTPS Proxy
|
||||
tunnel.5.description=HTTPS proxy for browsing eepsites and the web
|
||||
tunnel.5.type=connectclient
|
||||
tunnel.5.sharedClient=true
|
||||
tunnel.5.interface=127.0.0.1
|
||||
tunnel.5.listenPort=4445
|
||||
tunnel.5.proxyList=outproxy-tor.meeh.i2p
|
||||
tunnel.5.i2cpHost=127.0.0.1
|
||||
tunnel.5.i2cpPort=7654
|
||||
tunnel.5.option.inbound.nickname=shared clients
|
||||
tunnel.5.option.outbound.nickname=shared clients
|
||||
tunnel.5.option.i2cp.leaseSetEncType=4,0
|
||||
tunnel.5.option.i2cp.reduceIdleTime=900000
|
||||
tunnel.5.option.i2cp.reduceOnIdle=true
|
||||
tunnel.5.option.i2cp.reduceQuantity=1
|
||||
tunnel.5.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.5.option.inbound.length=3
|
||||
tunnel.5.option.inbound.lengthVariance=0
|
||||
tunnel.5.option.outbound.length=3
|
||||
tunnel.5.option.outbound.lengthVariance=0
|
||||
tunnel.5.startOnLoad=true
|
||||
|
||||
# I2P Git Repositories SSH Access
|
||||
tunnel.6.description=I2P Git Repositories SSH Access
|
||||
tunnel.6.interface=127.0.0.1
|
||||
tunnel.6.listenPort=7670
|
||||
tunnel.6.name=gitssh.idk.i2p
|
||||
tunnel.6.option.i2cp.closeIdleTime=1800000
|
||||
tunnel.6.option.i2cp.closeOnIdle=false
|
||||
tunnel.6.option.i2cp.delayOpen=true
|
||||
tunnel.6.option.i2cp.destination.sigType=7
|
||||
tunnel.6.option.i2cp.leaseSetEncType=4
|
||||
tunnel.6.option.i2cp.newDestOnResume=false
|
||||
tunnel.6.option.i2cp.reduceIdleTime=1200000
|
||||
tunnel.6.option.i2cp.reduceOnIdle=true
|
||||
tunnel.6.option.i2cp.reduceQuantity=1
|
||||
tunnel.6.option.inbound.backupQuantity=1
|
||||
tunnel.6.option.inbound.length=3
|
||||
tunnel.6.option.inbound.nickname=gitssh.idk.i2p
|
||||
tunnel.6.option.inbound.quantity=3
|
||||
tunnel.6.option.outbound.backupQuantity=1
|
||||
tunnel.6.option.outbound.length=3
|
||||
tunnel.6.option.outbound.nickname=gitssh.idk.i2p
|
||||
tunnel.6.option.outbound.quantity=3
|
||||
tunnel.6.sharedClient=false
|
||||
tunnel.6.startOnLoad=false
|
||||
tunnel.6.targetDestination=gitssh.idk.i2p
|
||||
tunnel.6.type=client
|
||||
|
18
i2pversion
18
i2pversion
@ -2,19 +2,15 @@
|
||||
|
||||
JNA_VERSION=5.11.0
|
||||
export JNA_VERSION=5.11.0
|
||||
|
||||
#Comment this out to build from an alternate branch or
|
||||
I2PFIREFOX_VERSION=0.0.34
|
||||
export I2PFIREFOX_VERSION=0.0.34
|
||||
# Comment this out to build from an alternate branch or
|
||||
# the tip of the master branch.
|
||||
VERSIONMAJOR=1
|
||||
VERSIONMINOR=8
|
||||
VERSIONBUILD=1
|
||||
VERSIONMINOR=9
|
||||
VERSIONBUILD=5
|
||||
I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
||||
export I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
||||
VERSION=i2p-1.8.1
|
||||
export VERSION=i2p-1.8.1
|
||||
VERSION=i2p-jpackage-1.9.4
|
||||
export VERSION=i2p-jpackage-1.9.4
|
||||
|
||||
#Uncomment this to build from the tip of the master.
|
||||
#I2P_VERSION=1.8.0
|
||||
#export I2P_VERSION=1.8.0
|
||||
#VERSION=master
|
||||
#export VERSION="$VERSION"
|
||||
|
@ -1,12 +1,13 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
I2P Browsing Pro...
|
||||
I2P Easy-Install...
|
||||
</title>
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.firefox" />
|
||||
<meta name="keywords" content="master" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="navbar">
|
||||
@ -40,7 +41,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<h1>
|
||||
I2P Browsing Profile for Firefox
|
||||
I2P Easy-Install Bundle for Windows(Also/formerly)I2P Browsing Profile for Firefox
|
||||
</h1>
|
||||
<h2>
|
||||
Features:
|
||||
@ -714,6 +715,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://geti2p.net/">
|
||||
<img src="i2plogo.png"></img>
|
||||
I2P
|
||||
</a>
|
||||
</div>
|
||||
|
@ -5,29 +5,31 @@ 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 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 + ")");
|
||||
}
|
||||
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 + ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
package net.i2p.router;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
@ -12,100 +10,114 @@ import com.sun.jna.platform.win32.WinDef.HWND;
|
||||
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||
import com.sun.jna.platform.win32.WinReg.HKEY;
|
||||
import com.sun.jna.win32.W32APIOptions;
|
||||
import java.util.*;
|
||||
|
||||
public interface Shell32X extends Shell32 {
|
||||
Shell32X INSTANCE = (Shell32X) Native.loadLibrary("shell32", Shell32X.class, W32APIOptions.UNICODE_OPTIONS);
|
||||
Shell32X INSTANCE = (Shell32X)Native.loadLibrary(
|
||||
"shell32", Shell32X.class, W32APIOptions.UNICODE_OPTIONS);
|
||||
|
||||
int SW_HIDE = 0;
|
||||
int SW_MAXIMIZE = 3;
|
||||
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;
|
||||
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;
|
||||
/** File not found. */
|
||||
int SE_ERR_FNF = 2;
|
||||
|
||||
/** Path not found. */
|
||||
int SE_ERR_PNF = 3;
|
||||
/** Path not found. */
|
||||
int SE_ERR_PNF = 3;
|
||||
|
||||
/** Access denied. */
|
||||
int SE_ERR_ACCESSDENIED = 5;
|
||||
/** Access denied. */
|
||||
int SE_ERR_ACCESSDENIED = 5;
|
||||
|
||||
/** Out of memory. */
|
||||
int SE_ERR_OOM = 8;
|
||||
/** Out of memory. */
|
||||
int SE_ERR_OOM = 8;
|
||||
|
||||
/** DLL not found. */
|
||||
int SE_ERR_DLLNOTFOUND = 32;
|
||||
/** DLL not found. */
|
||||
int SE_ERR_DLLNOTFOUND = 32;
|
||||
|
||||
/** Cannot share an open file. */
|
||||
int SE_ERR_SHARE = 26;
|
||||
/** Cannot share an open file. */
|
||||
int SE_ERR_SHARE = 26;
|
||||
|
||||
int SEE_MASK_NOCLOSEPROCESS = 0x00000040;
|
||||
int SEE_MASK_NOCLOSEPROCESS = 0x00000040;
|
||||
|
||||
int ShellExecute(int i, String lpVerb, String lpFile, String lpParameters, String lpDirectory, int nShow);
|
||||
int ShellExecute(int i, String lpVerb, String lpFile, String lpParameters,
|
||||
String lpDirectory, int nShow);
|
||||
|
||||
boolean ShellExecuteEx(SHELLEXECUTEINFO lpExecInfo);
|
||||
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 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;
|
||||
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;
|
||||
/*
|
||||
* 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",
|
||||
});
|
||||
}
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] {
|
||||
"cbSize",
|
||||
"fMask",
|
||||
"hwnd",
|
||||
"lpVerb",
|
||||
"lpFile",
|
||||
"lpParameters",
|
||||
"lpDirectory",
|
||||
"nShow",
|
||||
"hInstApp",
|
||||
"lpIDList",
|
||||
"lpClass",
|
||||
"hKeyClass",
|
||||
"dwHotKey",
|
||||
"hMonitor",
|
||||
"hProcess",
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,29 +1,29 @@
|
||||
package net.i2p.router;
|
||||
|
||||
import static net.i2p.update.UpdateType.*;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.InetAddress;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.util.*;
|
||||
import java.util.logging.FileHandler;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.logging.SimpleFormatter;
|
||||
|
||||
import net.i2p.crypto.*;
|
||||
|
||||
import net.i2p.app.ClientAppManager;
|
||||
import net.i2p.router.RouterLaunch;
|
||||
import net.i2p.crypto.*;
|
||||
import net.i2p.i2pfirefox.*;
|
||||
import net.i2p.router.Router;
|
||||
import net.i2p.router.RouterLaunch;
|
||||
import net.i2p.update.*;
|
||||
import net.i2p.update.UpdateManager;
|
||||
import net.i2p.update.UpdatePostProcessor;
|
||||
import net.i2p.util.SystemVersion;
|
||||
import net.i2p.update.*;
|
||||
|
||||
import 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
|
||||
@ -31,175 +31,311 @@ import static net.i2p.update.UpdateType.*;
|
||||
* router.pid - the pid of the java process.
|
||||
*/
|
||||
public class WinLauncher {
|
||||
static Logger logger = Logger.getLogger("launcherlog");
|
||||
static FileHandler fh;
|
||||
static Logger logger = Logger.getLogger("launcherlog");
|
||||
static FileHandler fh;
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
try {
|
||||
// This block configure the logger with handler and formatter
|
||||
fh = new FileHandler(logFile().toString());
|
||||
logger.addHandler(fh);
|
||||
SimpleFormatter formatter = new SimpleFormatter();
|
||||
fh.setFormatter(formatter);
|
||||
// the following statement is used to log any messages
|
||||
logger.info("My first log");
|
||||
} catch (SecurityException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
File programs = selectProgramFile();
|
||||
if (!programs.exists())
|
||||
programs.mkdirs();
|
||||
else if (!programs.isDirectory()) {
|
||||
logger.warning(programs + " exists but is not a directory. Please get it out of the way");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
File home = selectHome();
|
||||
if (!home.exists())
|
||||
home.mkdirs();
|
||||
else if (!home.isDirectory()) {
|
||||
logger.warning(home + " exists but is not a directory. Please get it out of the way");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
if (i2pIsRunning()) {
|
||||
logger.warning("I2P is already running");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
System.setProperty("i2p.dir.base", programs.getAbsolutePath());
|
||||
System.setProperty("i2p.dir.config", home.getAbsolutePath());
|
||||
System.setProperty("router.pid", String.valueOf(ProcessHandle.current().pid()));
|
||||
logger.info("\t" + System.getProperty("i2p.dir.base") + "\n\t" + System.getProperty("i2p.dir.config")
|
||||
+ "\n\t" + System.getProperty("router.pid"));
|
||||
|
||||
// wupp.i2pRouter = new Router(System.getProperties());
|
||||
logger.info("Router is configured");
|
||||
|
||||
Thread registrationThread = new Thread(REGISTER_UPP);
|
||||
registrationThread.setName("UPP Registration");
|
||||
registrationThread.setDaemon(true);
|
||||
registrationThread.start();
|
||||
|
||||
// wupp.i2pRouter.runRouter();
|
||||
RouterLaunch.main(args);
|
||||
public static void main(String[] args) throws Exception {
|
||||
try {
|
||||
// This block configure the logger with handler and formatter
|
||||
fh = new FileHandler(logFile().toString());
|
||||
logger.addHandler(fh);
|
||||
SimpleFormatter formatter = new SimpleFormatter();
|
||||
fh.setFormatter(formatter);
|
||||
// the following statement is used to log any messages
|
||||
logger.info("My first log");
|
||||
} catch (SecurityException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
boolean privateBrowsing = false;
|
||||
boolean usabilityMode = false;
|
||||
boolean chromiumFirst = false;
|
||||
int proxyTimeoutTime = 200;
|
||||
ArrayList<String> newArgsList = new ArrayList<String>();
|
||||
|
||||
private static boolean i2pIsRunning() {
|
||||
// check if there's something listening on port 7657
|
||||
// check for the existence of router.ping file, if it's less then 2 minutes old,
|
||||
// exit
|
||||
File home = selectHome();
|
||||
File ping = new File(home, "router.ping");
|
||||
if (ping.exists()) {
|
||||
long diff = System.currentTimeMillis() - ping.lastModified();
|
||||
if (diff < 2 * 60 * 1000) {
|
||||
logger.info("router.ping exists and is less than 2 minutes old, I2P appears to be running already.");
|
||||
return true;
|
||||
if (args != null) {
|
||||
if (args.length > 0) {
|
||||
for (String arg : args) {
|
||||
if (arg.equals("-private")) {
|
||||
privateBrowsing = true;
|
||||
logger.info(
|
||||
"Private browsing is true, profile will be discarded at end of session.");
|
||||
} else if (arg.equals("-chromium")) {
|
||||
chromiumFirst = true;
|
||||
logger.info("Chromium will be selected before Firefox.");
|
||||
} else if (arg.equals("-usability")) {
|
||||
usabilityMode = true;
|
||||
logger.info(
|
||||
"Usability mode is true, using alternate extensions loadout.");
|
||||
} else if (arg.equals("-noproxycheck")) {
|
||||
proxyTimeoutTime = 0;
|
||||
logger.info("Proxy timeout time set to zero");
|
||||
} else {
|
||||
// make an effort to not let people launch into sites if the proxy
|
||||
// isn't quite ready yet, but also disable the proxy timeout if
|
||||
// they're reaching a router console
|
||||
if (arg.startsWith("http://localhost:76")) {
|
||||
newArgsList.add(arg);
|
||||
proxyTimeoutTime = 0;
|
||||
} else if (arg.startsWith("http://127.0.0.1:76")) {
|
||||
newArgsList.add(arg);
|
||||
proxyTimeoutTime = 0;
|
||||
} else if (arg.startsWith("https://localhost:76")) {
|
||||
newArgsList.add(arg);
|
||||
proxyTimeoutTime = 0;
|
||||
} else if (arg.startsWith("https://127.0.0.1:76")) {
|
||||
newArgsList.add(arg);
|
||||
proxyTimeoutTime = 0;
|
||||
} else if (proxyTimeoutTime > 0) {
|
||||
newArgsList.add(arg);
|
||||
} else if (!isAvailable(4444)) {
|
||||
newArgsList.add(arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
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
|
||||
RouterContext ctx;
|
||||
while ((ctx = (RouterContext) RouterContext.getCurrentContext()) == null) {
|
||||
sleep(1000);
|
||||
}
|
||||
|
||||
// then wait for the update manager
|
||||
|
||||
ClientAppManager cam;
|
||||
while ((cam = ctx.clientAppManager()) == null) {
|
||||
sleep(1000);
|
||||
}
|
||||
|
||||
UpdateManager um;
|
||||
while ((um = (UpdateManager) cam.getRegisteredApp(UpdateManager.APP_NAME)) == null) {
|
||||
sleep(1000);
|
||||
}
|
||||
|
||||
WindowsUpdatePostProcessor 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);
|
||||
}
|
||||
File programs = selectProgramFile();
|
||||
if (!programs.exists())
|
||||
programs.mkdirs();
|
||||
else if (!programs.isDirectory()) {
|
||||
logger.warning(
|
||||
programs +
|
||||
" exists but is not a directory. Please get it out of the way");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
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");
|
||||
File local = new File(appData, "Local");
|
||||
File i2p;
|
||||
i2p = new File(local, "I2P");
|
||||
logger.info("Windows jpackage wrapper started, using: " + i2p + " as base config");
|
||||
return i2p.getAbsoluteFile();
|
||||
} else {
|
||||
File jrehome = new File(System.getProperty("java.home"));
|
||||
File programs = new File(jrehome.getParentFile().getParentFile(), ".i2p");
|
||||
logger.info("Linux portable jpackage wrapper started, using: " + programs + " as base config");
|
||||
return programs.getAbsoluteFile();
|
||||
}
|
||||
File home = selectHome();
|
||||
if (!home.exists())
|
||||
home.mkdirs();
|
||||
else if (!home.isDirectory()) {
|
||||
logger.warning(
|
||||
home +
|
||||
" exists but is not a directory. Please get it out of the way");
|
||||
System.exit(1);
|
||||
}
|
||||
if (i2pIsRunning()) {
|
||||
setNotRunning();
|
||||
logger.warning("I2P is already running");
|
||||
I2PBrowser i2pBrowser = new I2PBrowser();
|
||||
i2pBrowser.usability = usabilityMode;
|
||||
i2pBrowser.chromiumFirst = chromiumFirst;
|
||||
i2pBrowser.firefox = !chromiumFirst;
|
||||
i2pBrowser.chromium = chromiumFirst;
|
||||
i2pBrowser.setProxyTimeoutTime(proxyTimeoutTime);
|
||||
System.out.println("I2PBrowser");
|
||||
String[] newArgs = newArgsList.toArray(new String[newArgsList.size()]);
|
||||
i2pBrowser.launch(privateBrowsing, newArgs);
|
||||
return;
|
||||
}
|
||||
|
||||
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();
|
||||
logger.info("Windows portable jpackage wrapper found, using: " + programs + " as working config");
|
||||
return programs.getAbsoluteFile();
|
||||
} else {
|
||||
File jrehome = new File(System.getProperty("java.home"));
|
||||
File programs = new File(jrehome.getParentFile().getParentFile(), "i2p");
|
||||
logger.info("Linux portable jpackage wrapper found, using: " + programs + " as working config");
|
||||
return programs.getAbsoluteFile();
|
||||
}
|
||||
System.setProperty("i2p.dir.base", programs.getAbsolutePath());
|
||||
System.setProperty("i2p.dir.config", home.getAbsolutePath());
|
||||
System.setProperty("router.pid",
|
||||
String.valueOf(ProcessHandle.current().pid()));
|
||||
logger.info("\t" + System.getProperty("i2p.dir.base") + "\n\t" +
|
||||
System.getProperty("i2p.dir.config") + "\n\t" +
|
||||
System.getProperty("router.pid"));
|
||||
/**
|
||||
* IMPORTANT: You must set user.dir to the same directory where the
|
||||
* jpackage is intstalled, or when the launcher tries to re-run itself
|
||||
* to start the browser, it will start in the wrong directory and fail
|
||||
* to find the JVM and Runtime bundle. This broke Windows 11 installs.
|
||||
*/
|
||||
System.setProperty("user.dir", programs.getAbsolutePath());
|
||||
|
||||
// wupp.i2pRouter = new Router(System.getProperties());
|
||||
logger.info("Router is configured");
|
||||
|
||||
Thread registrationThread = new Thread(REGISTER_UPP);
|
||||
registrationThread.setName("UPP Registration");
|
||||
registrationThread.setDaemon(true);
|
||||
registrationThread.start();
|
||||
|
||||
setNotRunning();
|
||||
// wupp.i2pRouter.runRouter();
|
||||
RouterLaunch.main(args);
|
||||
}
|
||||
|
||||
// see
|
||||
// https://stackoverflow.com/questions/434718/sockets-discover-port-availability-using-java
|
||||
public static boolean isAvailable(int portNr) {
|
||||
boolean portFree;
|
||||
try (var ignored = new ServerSocket(portNr)) {
|
||||
portFree = true;
|
||||
} catch (IOException e) {
|
||||
portFree = false;
|
||||
}
|
||||
return portFree;
|
||||
}
|
||||
|
||||
private static boolean i2pIsRunningCheck() {
|
||||
// check if there's something listening on port 7657(Router Console)
|
||||
if (!isAvailable(7657)) {
|
||||
return true;
|
||||
}
|
||||
// check if there's something listening on port 7654(I2CP)
|
||||
if (!isAvailable(7654)) {
|
||||
return true;
|
||||
}
|
||||
// check for the existence of router.ping file, if it's less then 2
|
||||
// minutes old, exit
|
||||
File home = selectHome();
|
||||
File ping = new File(home, "router.ping");
|
||||
if (ping.exists()) {
|
||||
long diff = System.currentTimeMillis() - ping.lastModified();
|
||||
if (diff < 60 * 1000) {
|
||||
logger.info(
|
||||
"router.ping exists and is less than 1 minute old, I2P appears to be running already.");
|
||||
logger.info("If I2P is not running, wait 60 seconds and try again.");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void setNotRunning() {
|
||||
File home = selectHome();
|
||||
File running = new File(home, "running");
|
||||
if (running.exists()) {
|
||||
running.delete();
|
||||
}
|
||||
}
|
||||
private static void setRunning() {
|
||||
File home = selectHome();
|
||||
File running = new File(home, "running");
|
||||
if (!running.exists()) {
|
||||
try {
|
||||
running.createNewFile();
|
||||
} catch (IOException e) {
|
||||
logger.info(e.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean i2pIsRunning() {
|
||||
File home = selectHome();
|
||||
File running = new File(home, "running");
|
||||
if (running.exists()) {
|
||||
return true;
|
||||
}
|
||||
setRunning();
|
||||
File ping = new File(home, "router.ping");
|
||||
if (ping.exists()) {
|
||||
long diff = System.currentTimeMillis() - ping.lastModified();
|
||||
if (diff > 60 * 1000) {
|
||||
logger.info(
|
||||
"router.ping exists and is more than 1 minute old, I2P does not appear to be running.");
|
||||
logger.info("If I2P is running, report this as a bug.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (i2pIsRunningCheck())
|
||||
return true;
|
||||
for (int i = 0; i < 10; i++) {
|
||||
if (i2pIsRunningCheck())
|
||||
return true;
|
||||
sleep(1000);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static final Runnable REGISTER_UPP = () -> {
|
||||
|
||||
// first wait for the RouterContext to appear
|
||||
RouterContext ctx;
|
||||
while ((ctx = (RouterContext)RouterContext.getCurrentContext()) == null) {
|
||||
sleep(1000);
|
||||
}
|
||||
|
||||
private static File logFile() {
|
||||
File log = new File(selectProgramFile(), "log");
|
||||
if (!log.exists())
|
||||
log.mkdirs();
|
||||
return new File(log, "launcher.log");
|
||||
// then wait for the update manager
|
||||
|
||||
ClientAppManager cam;
|
||||
while ((cam = ctx.clientAppManager()) == null) {
|
||||
sleep(1000);
|
||||
}
|
||||
|
||||
UpdateManager um;
|
||||
while ((um = (UpdateManager)cam.getRegisteredApp(UpdateManager.APP_NAME)) ==
|
||||
null) {
|
||||
sleep(1000);
|
||||
}
|
||||
|
||||
WindowsUpdatePostProcessor 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 {
|
||||
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");
|
||||
File local = new File(appData, "Local");
|
||||
File i2p;
|
||||
i2p = new File(local, "I2P");
|
||||
logger.info("Windows jpackage wrapper starting up, using: " + i2p +
|
||||
" as base config");
|
||||
return i2p.getAbsoluteFile();
|
||||
} else {
|
||||
File jrehome = new File(System.getProperty("java.home"));
|
||||
File programs = new File(jrehome.getParentFile().getParentFile(), ".i2p");
|
||||
logger.info("Linux portable jpackage wrapper starting up, using: " +
|
||||
programs + " as base config");
|
||||
return programs.getAbsoluteFile();
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
logger.info("Windows portable jpackage wrapper found, using: " +
|
||||
programs + " as working config");
|
||||
return programs.getAbsoluteFile();
|
||||
} else {
|
||||
File jrehome = new File(System.getProperty("java.home"));
|
||||
File programs = new File(jrehome.getParentFile().getParentFile(), "i2p");
|
||||
logger.info("Linux portable jpackage wrapper found, using: " + programs +
|
||||
" as working config");
|
||||
return programs.getAbsoluteFile();
|
||||
}
|
||||
}
|
||||
|
||||
private static File logFile() {
|
||||
File log = new File(selectProgramFile(), "log");
|
||||
if (!log.exists())
|
||||
log.mkdirs();
|
||||
return new File(log, "launcher.log");
|
||||
}
|
||||
}
|
||||
|
@ -1,80 +1,88 @@
|
||||
package net.i2p.router;
|
||||
|
||||
import net.i2p.router.*;
|
||||
import net.i2p.I2PAppContext;
|
||||
|
||||
import java.util.function.*;
|
||||
import java.io.*;
|
||||
import java.util.function.*;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.router.*;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
class WinUpdateProcess implements Runnable {
|
||||
private final RouterContext ctx;
|
||||
private final Supplier<String> versionSupplier;
|
||||
private final Supplier<File> fileSupplier;
|
||||
private final Log _log;
|
||||
private final RouterContext ctx;
|
||||
private final Supplier<String> versionSupplier;
|
||||
private final Supplier<File> fileSupplier;
|
||||
private final Log _log;
|
||||
|
||||
WinUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier, Supplier<File> fileSupplier) {
|
||||
this.ctx = ctx;
|
||||
this.versionSupplier = versionSupplier;
|
||||
this.fileSupplier = fileSupplier;
|
||||
this._log = ctx.logManager().getLog(WinUpdateProcess.class);
|
||||
WinUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier,
|
||||
Supplier<File> fileSupplier) {
|
||||
this.ctx = ctx;
|
||||
this.versionSupplier = versionSupplier;
|
||||
this.fileSupplier = fileSupplier;
|
||||
this._log = ctx.logManager().getLog(WinUpdateProcess.class);
|
||||
}
|
||||
|
||||
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 workDir;
|
||||
} else {
|
||||
workDir.mkdirs();
|
||||
}
|
||||
return workDir;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
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 workDir;
|
||||
} 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");
|
||||
|
||||
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");
|
||||
|
||||
try {
|
||||
pb.directory(workingDir)
|
||||
.redirectErrorStream(true)
|
||||
.redirectOutput(logFile)
|
||||
.start();
|
||||
} catch (IOException ex) {
|
||||
_log.error(
|
||||
"Unable to run update-program in background. Update will fail.");
|
||||
}
|
||||
} else {
|
||||
// If we cant write to the log file and we're on Windows, use the elevator
|
||||
// to execute the installer instead of the ProcessBuilder.
|
||||
Elevator.executeAsAdministrator(file.getAbsolutePath(),
|
||||
" /S /D=" + workingDir.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
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");
|
||||
|
||||
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");
|
||||
|
||||
try {
|
||||
pb.directory(workingDir).redirectErrorStream(true).redirectOutput(logFile).start();
|
||||
} catch (IOException ex) {
|
||||
_log.error("Unable to run update-program in background. Update will fail.");
|
||||
}
|
||||
} else {
|
||||
// If we cant write to the log file and we're on Windows, use the elevator to
|
||||
// execute the installer instead of the ProcessBuilder.
|
||||
Elevator.executeAsAdministrator(file.getAbsolutePath(), " /S /D=" + workingDir.getAbsolutePath());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
runUpdateInstaller();
|
||||
} catch (IOException ioe) {
|
||||
_log.error("Error running updater, update may fail." + ioe);
|
||||
}
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
runUpdateInstaller();
|
||||
} catch (IOException ioe) {
|
||||
_log.error("Error running updater, update may fail." + ioe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,101 +1,100 @@
|
||||
package net.i2p.router;
|
||||
|
||||
import static net.i2p.update.UpdateType.*;
|
||||
|
||||
import java.io.*;
|
||||
import java.lang.InterruptedException;
|
||||
import java.lang.Process;
|
||||
import java.lang.ProcessBuilder;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.*;
|
||||
|
||||
import net.i2p.crypto.*;
|
||||
import static net.i2p.update.UpdateType.*;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.update.UpdateType;
|
||||
import net.i2p.crypto.*;
|
||||
import net.i2p.update.UpdatePostProcessor;
|
||||
import net.i2p.update.UpdateType;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.SystemVersion;
|
||||
|
||||
import java.lang.ProcessBuilder;
|
||||
import java.lang.Process;
|
||||
import java.lang.InterruptedException;
|
||||
|
||||
public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
private final Log _log;
|
||||
private final RouterContext ctx;
|
||||
private final AtomicBoolean hook = new AtomicBoolean();
|
||||
private final String fileName = "i2p-jpackage-update.exe";
|
||||
private final Log _log;
|
||||
private final RouterContext ctx;
|
||||
private final AtomicBoolean hook = new AtomicBoolean();
|
||||
private final String fileName = "i2p-jpackage-update.exe";
|
||||
|
||||
private volatile String version;
|
||||
private volatile String version;
|
||||
|
||||
private volatile File positionedFile = null;
|
||||
private volatile File positionedFile = null;
|
||||
|
||||
WindowsUpdatePostProcessor(RouterContext ctx) {
|
||||
this.ctx = ctx;
|
||||
this._log = ctx.logManager().getLog(WindowsUpdatePostProcessor.class);
|
||||
WindowsUpdatePostProcessor(RouterContext ctx) {
|
||||
this.ctx = ctx;
|
||||
this._log = ctx.logManager().getLog(WindowsUpdatePostProcessor.class);
|
||||
}
|
||||
|
||||
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 (SystemVersion.isWindows()) {
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
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 (SystemVersion.isWindows()) {
|
||||
|
||||
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 {
|
||||
if (this.ctx != 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");
|
||||
}
|
||||
private File moveUpdateInstaller(File file) throws IOException {
|
||||
if (this.ctx != null) {
|
||||
File newFile = new File(workDir(), fileName);
|
||||
boolean renamedStatus = file.renameTo(newFile);
|
||||
if (renamedStatus)
|
||||
return newFile;
|
||||
else
|
||||
throw new IOException(
|
||||
"Router context not available to WindowsUpdatePostProcesssor, unable to find working directory, update will fail");
|
||||
"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 {
|
||||
if (this.ctx != null) {
|
||||
File workDir = new File(this.ctx.getConfigDir().getAbsolutePath(), "i2p_update_win");
|
||||
if (workDir.exists()) {
|
||||
if (workDir.isFile())
|
||||
throw new IOException(workDir + " exists but is a file, get it out of the way");
|
||||
return null;
|
||||
} else {
|
||||
workDir.mkdirs();
|
||||
}
|
||||
return workDir;
|
||||
}
|
||||
private File workDir() throws IOException {
|
||||
if (this.ctx != null) {
|
||||
File workDir =
|
||||
new File(this.ctx.getConfigDir().getAbsolutePath(), "i2p_update_win");
|
||||
if (workDir.exists()) {
|
||||
if (workDir.isFile())
|
||||
throw new IOException(workDir +
|
||||
" exists but is a file, get it out of the way");
|
||||
return null;
|
||||
} else {
|
||||
workDir.mkdirs();
|
||||
}
|
||||
return workDir;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
@ -212,10 +212,6 @@ Applications:
|
||||
Copyright (c) 2006, Matthew Estes
|
||||
See licenses/LICENSE-BlockFile.txt
|
||||
|
||||
BOB (BOB.jar):
|
||||
Copyright (C) sponge
|
||||
See licenses/COPYING-BOB.txt
|
||||
|
||||
Desktopgui (desktopgui.jar):
|
||||
Copyright (c) Mathias De Maré
|
||||
See licenses/LICENSE-DesktopGUI.txt
|
||||
@ -339,9 +335,9 @@ Applications:
|
||||
Systray (systray.jar):
|
||||
Public domain.
|
||||
|
||||
Tomcat 9.0.54 (jasper-runtime.jar):
|
||||
Tomcat 9.0.62 (jasper-runtime.jar):
|
||||
(not included in most distribution packages)
|
||||
Copyright 1999-2021 The Apache Software Foundation
|
||||
Copyright 1999-2022 The Apache Software Foundation
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
See licenses/NOTICE-Tomcat.txt
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
Apache Tomcat
|
||||
Copyright 1999-2021 The Apache Software Foundation
|
||||
Copyright 1999-2022 The Apache Software Foundation
|
||||
|
||||
This product includes software developed at
|
||||
The Apache Software Foundation (https://www.apache.org/).
|
||||
|
@ -7,8 +7,16 @@ app-profile.tgz: app-profile
|
||||
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 ../
|
||||
|
||||
src/app-profile/user.js:
|
||||
wget -O src/app-profile/user.js "https://github.com/arkenfox/user.js/raw/master/user.js"
|
||||
sed -i 's|user_pref("extensions.autoDisableScopes", 15);|user_pref("extensions.autoDisableScopes", 0);|g src/app-profile/user.js
|
||||
sed -i 's|user_pref("extensions.enabledScopes", 5);|user_pref("extensions.enabledScopes", 1);|g' src/app-profile/user.js
|
||||
sed -i 's|user_pref("dom.security.https_only_mode", true);|user_pref("dom.security.https_only_mode", false);|g' src/app-profile/user.js
|
||||
|
||||
|
||||
build/app-profile/user.js: build/app-profile src/app-profile/user.js
|
||||
cp src/app-profile/user.js build/app-profile/user.js
|
||||
cp src/app-profile/user-overrides.js build/app-profile/user-overrides.js
|
||||
|
||||
build/app-profile/prefs.js: build/app-profile src/app-profile/prefs.js
|
||||
cp src/app-profile/prefs.js build/app-profile/prefs.js
|
||||
|
@ -8,25 +8,25 @@ build/win:
|
||||
mkdir -p build/win/
|
||||
|
||||
build/win/common.bat:
|
||||
cp src/win/common.bat build/win/common.bat
|
||||
#cp src/win/common.bat build/win/common.bat
|
||||
|
||||
build/win/copy-config-profile.bat:
|
||||
cp src/win/copy-config-profile.bat build/win/copy-config-profile.bat
|
||||
#cp src/win/copy-config-profile.bat build/win/copy-config-profile.bat
|
||||
|
||||
build/win/copy-profile.bat:
|
||||
cp src/win/launchi2p.bat build/win/copy-profile.bat
|
||||
#cp src/win/launchi2p.bat build/win/copy-profile.bat
|
||||
|
||||
build/win/launchi2p.bat:
|
||||
cp src/win/launchi2p.bat build/win/launchi2p.bat
|
||||
#cp src/win/launchi2p.bat build/win/launchi2p.bat
|
||||
|
||||
build/win/i2pbrowser.bat: build/win/common.bat build/win/copy-config-profile.bat build/win/copy-profile.bat build/win/launchi2p.bat
|
||||
cp src/win/i2pbrowser.bat build/win/i2pbrowser.bat
|
||||
#cp src/win/i2pbrowser.bat build/win/i2pbrowser.bat
|
||||
|
||||
build/win/i2pconfig.bat: build/win/common.bat build/win/copy-config-profile.bat build/win/copy-profile.bat build/win/launchi2p.bat
|
||||
cp src/win/i2pconfig.bat build/win/i2pconfig.bat
|
||||
#cp src/win/i2pconfig.bat build/win/i2pconfig.bat
|
||||
|
||||
build/win/i2pbrowser-private.bat: build/win/common.bat build/win/copy-config-profile.bat build/win/copy-profile.bat build/win/launchi2p.bat
|
||||
cp src/win/i2pbrowser-private.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
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
build-new-extensions: build/i2ppb@eyedeekay.github.io.xpi build/uBlock0@raymondhill.net.xpi build/jsr@javascriptrestrictor.xpi build/onioncbt@eyedeekay.github.io.xpi build/{b86e4813-687a-43e6-ab65-0bde4ab75758}.xpi
|
||||
|
||||
build/uBlock0@raymondhill.net.xpi:
|
||||
curl -L `cat UblockOrigin.url` > build/uBlock0@raymondhill.net.xpi
|
||||
curl -L `cat UBlockOrigin.url` > build/uBlock0@raymondhill.net.xpi
|
||||
|
||||
build/jsr@javascriptrestrictor.xpi:
|
||||
curl -L `cat JShelter.url` > build/jsr@javascriptrestrictor.xpi
|
||||
|
@ -8,8 +8,15 @@ profile.tgz: .version profile
|
||||
install -m755 src/unix/i2pbrowser.sh build/profile/i2pbrowser.sh
|
||||
cd build && tar -czf profile-$(PROFILE_VERSION).tgz profile && cp profile-$(PROFILE_VERSION).tgz ../
|
||||
|
||||
src/profile/user.js:
|
||||
wget -O src/profile/user.js "https://github.com/arkenfox/user.js/raw/master/user.js"
|
||||
sed -i 's|user_pref("extensions.autoDisableScopes", 15);|user_pref("extensions.autoDisableScopes", 0);|g src/profile/user.js
|
||||
sed -i 's|user_pref("extensions.enabledScopes", 5);|user_pref("extensions.enabledScopes", 1);|g' src/profile/user.js
|
||||
sed -i 's|user_pref("dom.security.https_only_mode", true);|user_pref("dom.security.https_only_mode", false);|g' src/profile/user.js
|
||||
|
||||
build/profile/user.js: build/profile src/profile/user.js
|
||||
cp src/profile/user.js build/profile/user.js
|
||||
cp src/profile/user-overrides.js build/profile/user-overrides.js
|
||||
|
||||
build/profile/prefs.js: build/profile src/profile/prefs.js
|
||||
cp src/profile/prefs.js build/profile/prefs.js
|
||||
|
40
msi.sh
Executable file
40
msi.sh
Executable file
@ -0,0 +1,40 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
## EXPERIMENTAL. PROBABLY WON'T SEE THE LIGHT OF DAY BUT MAYBE I GET LUCKY.
|
||||
|
||||
# Motivation
|
||||
|
||||
. ./config.sh
|
||||
. ./i2pversion
|
||||
jpackage --name I2P-MSI --app-version "$I2P_VERSION" \
|
||||
--verbose \
|
||||
--java-options "-Xmx512m" \
|
||||
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/sun.nio.fs=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.nio=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
||||
$JPACKAGE_OPTS \
|
||||
--app-content build/I2P/config/certificates \
|
||||
--app-content build/I2P/config/eepsite \
|
||||
--app-content build/I2P/config/geoip \
|
||||
--app-content build/I2P/config/webapps \
|
||||
--app-content build/I2P/config/clients.config \
|
||||
--app-content build/I2P/config/hosts.txt \
|
||||
--app-content build/I2P/config/i2ptunnel.config \
|
||||
--app-content build/I2P/config/jpackaged \
|
||||
--app-content build/I2P/config/router.config \
|
||||
--app-content build/I2P/config/wrappper.config \
|
||||
--input build \
|
||||
--verbose \
|
||||
--type msi \
|
||||
--win-dir-chooser \
|
||||
--win-help-url "https://geti2p.net" \
|
||||
--win-menu \
|
||||
--win-menu-group "I2P Easy-Install Bundle" \
|
||||
--win-shortcut \
|
||||
--win-shortcut-prompt \
|
||||
--win-per-user-install \
|
||||
--license-file LICENSE.md \
|
||||
--main-jar launcher.jar \
|
||||
--main-class net.i2p.router.WinLauncher
|
@ -1,3 +1,5 @@
|
||||
router.updateURL=http://ekm3fu6fr5pxudhwjmdiea5dovc3jdi66hjgop4c7z7dfaw7spca.b32.i2p/i2pwinupdate.su3
|
||||
router.newsURL=http://dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka.b32.i2p/news/win/beta/news.su3
|
||||
router.backupNewsURL=http://tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq.b32.i2p/win/beta/news.su3
|
||||
routerconsole.browser=I2P.exe -noproxycheck
|
||||
router.disableTunnelTesting=false
|
10
showhider.css
Normal file
10
showhider.css
Normal file
@ -0,0 +1,10 @@
|
||||
/* edgar showhider CSS file */
|
||||
#show {display:none; }
|
||||
#hide {display:block; }
|
||||
#show:target {display: block; }
|
||||
#hide:target {display: none; }
|
||||
|
||||
#shownav {display:none; }
|
||||
#hidenav {display:block; }
|
||||
#shownav:target {display: block; }
|
||||
#hidenav:target {display: none; }
|
2
sign.sh
2
sign.sh
@ -40,6 +40,6 @@ if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
|
||||
linuxsign I2P-Profile-Installer-$I2P_VERSION.exe
|
||||
cp "I2P-Profile-Installer-$I2P_VERSION.exe" "I2P-Profile-Installer-$I2P_VERSION-signed.exe"
|
||||
else
|
||||
signtool.exe sign "I2P-Profile-Installer-$I2P_VERSION.exe"
|
||||
signtool.exe sign -a "I2P-Profile-Installer-$I2P_VERSION.exe"
|
||||
cp "I2P-Profile-Installer-$I2P_VERSION.exe" "I2P-Profile-Installer-$I2P_VERSION-signed.exe"
|
||||
fi
|
||||
|
@ -60,4 +60,6 @@ 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);
|
||||
user_pref("browser.display.use_system_colors", false);
|
||||
user_pref("extensions.autoDisableScopes", 0);
|
||||
user_pref("extensions.enabledScopes", 1);
|
229
src/app-profile/user-overrides.js
Normal file
229
src/app-profile/user-overrides.js
Normal file
@ -0,0 +1,229 @@
|
||||
/*
|
||||
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:
|
||||
*/
|
||||
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
|
||||
*/
|
||||
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");
|
||||
user_pref("noscript.mandatory", "[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.ABE.enabled", false);
|
||||
user_pref("noscript.ABE.notify", false);
|
||||
user_pref("noscript.ABE.wanIpAsLocal", false);
|
||||
user_pref("noscript.confirmUnblock", false);
|
||||
user_pref("noscript.contentBlocker", true);
|
||||
user_pref("noscript.firstRunRedirection", false);
|
||||
user_pref("noscript.global", true);
|
||||
user_pref("noscript.gtemp", "");
|
||||
user_pref("noscript.opacizeObject", 3);
|
||||
user_pref("noscript.forbidWebGL", true);
|
||||
user_pref("noscript.forbidFonts", true);
|
||||
user_pref("noscript.options.tabSelectedIndexes", "5,0,0");
|
||||
user_pref("noscript.policynames", "");
|
||||
user_pref("noscript.secureCookies", true);
|
||||
user_pref("noscript.showAllowPage", false);
|
||||
user_pref("noscript.showBaseDomain", false);
|
||||
user_pref("noscript.showDistrust", false);
|
||||
user_pref("noscript.showRecentlyBlocked", false);
|
||||
user_pref("noscript.showTemp", false);
|
||||
user_pref("noscript.showTempToPerm", false);
|
||||
user_pref("noscript.showUntrusted", false);
|
||||
user_pref("noscript.STS.enabled", false);
|
||||
user_pref("noscript.subscription.lastCheck", -142148139);
|
||||
user_pref("noscript.temp", "");
|
||||
user_pref("noscript.untrusted", "");
|
||||
user_pref("noscript.forbidMedia", true);
|
||||
user_pref("noscript.allowWhitelistUpdates", false);
|
||||
user_pref("noscript.fixLinks", false);
|
||||
// Now handled by plugins.click_to_play // Not in this one.
|
||||
user_pref("noscript.forbidFlash", true);
|
||||
user_pref("noscript.forbidSilverlight", true);
|
||||
user_pref("noscript.forbidJava", true);
|
||||
user_pref("noscript.forbidPlugins", true);
|
||||
// Usability tweaks
|
||||
user_pref("noscript.showPermanent", false);
|
||||
user_pref("noscript.showTempAllowPage", true);
|
||||
user_pref("noscript.showRevokeTemp", true);
|
||||
user_pref("noscript.notify", false);
|
||||
user_pref("noscript.autoReload", true);
|
||||
user_pref("noscript.autoReload.allTabs", false);
|
||||
user_pref("noscript.cascadePermissions", true);
|
||||
user_pref("noscript.restrictSubdocScripting", true);
|
||||
user_pref("noscript.showVolatilePrivatePermissionsToggle", false);
|
||||
user_pref("noscript.volatilePrivatePermissions", true);
|
||||
user_pref("noscript.clearClick", 0);
|
||||
|
||||
user_pref("intl.locale.matchOS", false);
|
||||
|
||||
user_pref("extensions.https_everywhere._observatory.enabled", false);
|
||||
user_pref("extensions.https_everywhere.options.autoUpdateRulesets", false);
|
||||
user_pref("extensions.https_everywhere.globalEnabled", false);
|
||||
user_pref("extensions.https_everywhere._observatory.submit_during_tor", false);
|
||||
user_pref("extensions.https_everywhere._observatory.submit_during_nontor", false);
|
||||
user_pref("extensions.https_everywhere._observatory.use_custom_proxy", true);
|
||||
user_pref("extensions.https_everywhere._observatory.proxy_host", "127.0.0.1");
|
||||
user_pref("extensions.https_everywhere._observatory.proxy_port", 4444);
|
||||
|
||||
user_pref("extensions.torbutton.use_nontor_proxy", true);
|
||||
|
||||
//For socket conversion: in the future, I'll need to make TBB communicate with
|
||||
//i2p over a unix socket. Fortunately, this is how you do that. It will be
|
||||
//configurable in a similar way to the host:port configuration when that happens.
|
||||
//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);
|
||||
|
||||
// Resist-fingerprinting and first-party isolation enable
|
||||
|
||||
user_pref("privacy.resistFingerprinting", true);
|
||||
user_pref("privacy.firstparty.isolate", true);
|
||||
|
||||
// Use i2p http proxy for all connections and set homepage to safe local form.
|
||||
|
||||
// DON'T allow access to the admin panel from the profile we browse i2p with.
|
||||
user_pref("network.proxy.no_proxies_on", "127.0.0.1:7657,localhost:7657,127.0.0.1:7662,localhost:7662,127.0.0.1:7669,localhost:7669");
|
||||
user_pref("network.proxy.type", 1);
|
||||
user_pref("network.proxy.http", "127.0.0.1");
|
||||
user_pref("network.proxy.http_port", 4444);
|
||||
user_pref("network.proxy.ssl", "127.0.0.1");
|
||||
user_pref("network.proxy.ssl_port", 4444);
|
||||
user_pref("network.proxy.ftp", "127.0.0.1");
|
||||
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", "http://127.0.0.1:7657/home");
|
||||
|
||||
// Privacy-harden and disable irrelevant features.
|
||||
user_pref("app.normandy.api_url", "");
|
||||
user_pref("app.normandy.enabled", false);
|
||||
user_pref("app.update.auto", false);
|
||||
user_pref("app.update.enabled", false);
|
||||
user_pref("beacon.enabled", false);
|
||||
user_pref("browser.aboutHomeSnippets.updateUrl", "");
|
||||
user_pref("browser.cache.disk_cache_ssl", false);
|
||||
user_pref("browser.cache.disk.enable", false);
|
||||
user_pref("browser.cache.offline.enable", false);
|
||||
user_pref("browser.disableResetPrompt", true);
|
||||
user_pref("browser.display.use_document_fonts", 0);
|
||||
user_pref("browser.fixup.alternate.enabled", false);
|
||||
user_pref("browser.formfill.enable", false);
|
||||
user_pref("browser.library.activity-stream.enabled", false);
|
||||
user_pref("browser.newtabpage.activity-stream.disableSnippets", true);
|
||||
user_pref("browser.newtabpage.activity-stream.enabled", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.snippets", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", false);
|
||||
user_pref("browser.newtabpage.activity-stream.prerender", false);
|
||||
user_pref("browser.newtabpage.activity-stream.showSearch", false);
|
||||
user_pref("browser.newtabpage.enhanced", false);
|
||||
user_pref("browser.newtabpage.introShown", true);
|
||||
user_pref("browser.newtab.preload", false);
|
||||
user_pref("browser.onboarding.enabled", false);
|
||||
user_pref("browser.pagethumbnails.capturing_disabled", true);
|
||||
user_pref("browser.safebrowsing.appRepURL", "");
|
||||
user_pref("browser.safebrowsing.blockedURIs.enabled", false);
|
||||
user_pref("browser.safebrowsing.downloads.enabled", false);
|
||||
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
|
||||
user_pref("browser.safebrowsing.downloads.remote.url", "");
|
||||
user_pref("browser.safebrowsing.enabled", false);
|
||||
user_pref("browser.safebrowsing.malware.enabled", false);
|
||||
user_pref("browser.safebrowsing.phishing.enabled", false);
|
||||
user_pref("browser.search.geoip.timeout", 1);
|
||||
user_pref("browser.search.suggest.enabled", false);
|
||||
user_pref("browser.selfsupport.url", "");
|
||||
user_pref("browser.send_pings", false);
|
||||
user_pref("browser.shell.checkDefaultBrowser", false);
|
||||
user_pref("browser.startup.homepage_override.mstone", "ignore");
|
||||
user_pref("browser.startup.page", 0);
|
||||
user_pref("browser.toolbarbuttons.introduced.pocket-button", true);
|
||||
user_pref("browser.urlbar.speculativeConnect.enabled", false);
|
||||
user_pref("browser.urlbar.trimURLs", false);
|
||||
user_pref("datareporting.healthreport.uploadEnabled", false);
|
||||
user_pref("datareporting.policy.dataSubmissionEnabled", false);
|
||||
user_pref("dom.battery.enabled", false);
|
||||
user_pref("dom.enable_performance", false);
|
||||
user_pref("dom.enable_performance_navigation_timing", false);
|
||||
user_pref("dom.enable_resource_timing", false);
|
||||
user_pref("dom.event.clipboardevents.enabled", false);
|
||||
user_pref("dom.gamepad.enabled", false);
|
||||
user_pref("dom.indexedDB.enabled", false);
|
||||
user_pref("dom.min_timeout_value", 400);
|
||||
user_pref("dom.push.connection.enabled", false);
|
||||
user_pref("dom.push.enabled", false);
|
||||
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", 0);
|
||||
user_pref("extensions.enabledScopes", 1);
|
||||
user_pref("extensions.getAddons.cache.enabled", false);
|
||||
user_pref("extensions.getAddons.showPane", false);
|
||||
user_pref("extensions.pocket.enabled", false);
|
||||
user_pref("extensions.screenshots.disabled", true);
|
||||
user_pref("extensions.webservice.discoverURL", "");
|
||||
user_pref("geo.enabled", false);
|
||||
user_pref("geo.wifi.uri", "");
|
||||
user_pref("gfx.downloadable_fonts.disable_cache", true);
|
||||
user_pref("javascript.options.shared_memory", false);
|
||||
user_pref("layout.css.visited_links_enabled", false);
|
||||
user_pref("media.autoplay.enabled", false);
|
||||
user_pref("media.cache_size", 0);
|
||||
user_pref("media.navigator.enabled", false);
|
||||
user_pref("media.peerconnection.ice.no_host", true);
|
||||
user_pref("media.video_stats.enabled", false);
|
||||
user_pref("captivedetect.canonicalURL", "");
|
||||
user_pref("network.captive-portal-service.enabled", false);
|
||||
user_pref("network.cookie.cookieBehavior", 1);
|
||||
user_pref("network.cookie.lifetimePolicy", 2);
|
||||
user_pref("network.dns.disablePrefetch", true);
|
||||
user_pref("network.http.referer.spoofSource", true);
|
||||
user_pref("network.http.referer.trimmingPolicy", 2);
|
||||
user_pref("network.http.referer.XOriginPolicy", 2);
|
||||
user_pref("network.prefetch-next", false);
|
||||
user_pref("privacy.donottrackheader.enabled", true);
|
||||
user_pref("privacy.donottrackheader.value", 1);
|
||||
user_pref("toolkit.telemetry.archive.enabled", false);
|
||||
user_pref("toolkit.telemetry.coverage.opt-out", true);
|
||||
user_pref("toolkit.telemetry.enabled", false);
|
||||
user_pref("toolkit.telemetry.server", "");
|
||||
user_pref("toolkit.telemetry.unified", false);
|
||||
user_pref("webgl.disabled", true);
|
||||
user_pref("browser.chrome.errorReporter.infoURL", "");
|
||||
user_pref("breakpad.reportURL", "");
|
||||
//user_pref("browser.newtabpage.activity-stream.default.sites", "");
|
||||
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
|
||||
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
|
||||
user_pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored", false);
|
||||
user_pref("browser.newtabpage.enabled", true);
|
||||
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("dom.security.https_only_mode", false);
|
||||
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);
|
||||
user_pref("browser.privatebrowsing.autostart", false);
|
||||
user_pref("browser.display.use_system_colors", false);
|
1353
src/app-profile/user.js
Normal file
1353
src/app-profile/user.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
||||
1.8.1
|
||||
1.9.5
|
||||
|
@ -5,7 +5,7 @@ UniCode true
|
||||
!define COMPANYNAME "I2P"
|
||||
!define DESCRIPTION "This launches Firefox with a browser profile pre-configured to use i2p"
|
||||
!define FIREFOX_MESSAGE "Could not find Firefox. Please point to where you have installed Firefox. If you have not installed Firefox yet, exit this installer and install Firefox, then start this installer again."
|
||||
!define I2P_MESSAGE "Could not find I2P. Please point to where you have installed I2P. If you have not installed I2P yet, exit this installer and install I2P, then start this installer again."
|
||||
!define I2P_MESSAGE "Could not find I2P. Installing portable Jpackaged I2P."
|
||||
!define LAUNCH_TEXT "Start I2P?"
|
||||
!define LICENSE_TITLE "Many Licenses"
|
||||
!define CONSOLE_URL "http://127.0.0.1:7657/home"
|
||||
@ -14,23 +14,13 @@ UniCode true
|
||||
!include i2pbrowser-jpackage.nsi
|
||||
!include FindProcess.nsh
|
||||
|
||||
var FFINSTEXE
|
||||
var FFNONTORINSTEXE
|
||||
var I2PINSTEXE
|
||||
Var PARENTOPTIONS
|
||||
|
||||
SetOverwrite on
|
||||
!define FFINSTEXE
|
||||
!define FFNONTORINSTEXE
|
||||
!define FFINSTEXE32 "$PROGRAMFILES32\Mozilla Firefox\"
|
||||
!define FFINSTEXE64 "$PROGRAMFILES64\Mozilla Firefox\"
|
||||
|
||||
!define I2PINSTEXE
|
||||
!define I2PINSTEXE32 "$PROGRAMFILES32\i2p"
|
||||
!define I2PINSTEXE64 "$PROGRAMFILES64\i2p"
|
||||
!define I2PINSTEXE_USERMODE "$LOCALAPPDATA\i2p"
|
||||
|
||||
|
||||
!define RAM_NEEDED_FOR_64BIT 0x80000000
|
||||
|
||||
InstallDir "$PROGRAMFILES64\${COMPANYNAME}\${APPNAME}"
|
||||
@ -111,15 +101,15 @@ RequestExecutionLevel user
|
||||
!insertmacro MUI_LANGUAGE "Basque"
|
||||
!insertmacro MUI_LANGUAGE "Welsh"
|
||||
# Commented out languages below do not compile on NSIS v2
|
||||
# !insertmacro MUI_LANGUAGE "Asturian"
|
||||
# !insertmacro MUI_LANGUAGE "Pashto"
|
||||
# !insertmacro MUI_LANGUAGE "ScotsGaelic"
|
||||
# !insertmacro MUI_LANGUAGE "Georgian"
|
||||
# !insertmacro MUI_LANGUAGE "Vietnamese"
|
||||
# !insertmacro MUI_LANGUAGE "Armenian"
|
||||
# !insertmacro MUI_LANGUAGE "Corsican"
|
||||
# !insertmacro MUI_LANGUAGE "Tatar"
|
||||
# !insertmacro MUI_LANGUAGE "Hindi"
|
||||
!insertmacro MUI_LANGUAGE "Asturian"
|
||||
!insertmacro MUI_LANGUAGE "Pashto"
|
||||
!insertmacro MUI_LANGUAGE "ScotsGaelic"
|
||||
!insertmacro MUI_LANGUAGE "Georgian"
|
||||
!insertmacro MUI_LANGUAGE "Vietnamese"
|
||||
!insertmacro MUI_LANGUAGE "Armenian"
|
||||
!insertmacro MUI_LANGUAGE "Corsican"
|
||||
!insertmacro MUI_LANGUAGE "Tatar"
|
||||
!insertmacro MUI_LANGUAGE "Hindi"
|
||||
### END LANGUAGES
|
||||
|
||||
# small speed optimization
|
||||
@ -130,13 +120,6 @@ RequestExecutionLevel user
|
||||
PageEx license
|
||||
licensetext "${LICENSE_TITLE}"
|
||||
licensedata "licenses\LICENSE.txt"
|
||||
#PageCallbacks elevatorCallback
|
||||
PageExEnd
|
||||
PageEx directory
|
||||
dirtext "${FIREFOX_MESSAGE}"
|
||||
dirvar $FFINSTEXE
|
||||
dirvar $FFNONTORINSTEXE
|
||||
PageCallbacks firefoxDetect
|
||||
PageExEnd
|
||||
PageEx directory
|
||||
dirtext "${I2P_MESSAGE}"
|
||||
@ -145,79 +128,53 @@ PageEx directory
|
||||
PageExEnd
|
||||
Page instfiles
|
||||
|
||||
!include i2pbrowser-mozcompat.nsi
|
||||
#!include i2pbrowser-mozcompat.nsi
|
||||
|
||||
Function .onInit
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE_USERMODE}"
|
||||
UserInfo::GetAccountType
|
||||
pop $0
|
||||
${If} $0 != "admin"
|
||||
StrCpy $INSTDIR "$LOCALAPPDATA\${COMPANYNAME}\${APPNAME}"
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE_USERMODE}"
|
||||
${EndIf}
|
||||
${If} ${FileExists} "${I2PINSTEXE32}\i2p.exe"
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE32}"
|
||||
${EndIf}
|
||||
${If} ${FileExists} "${I2PINSTEXE64}\i2p.exe"
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
|
||||
${EndIf}
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
Call ShouldInstall64Bit
|
||||
${If} $0 == 1
|
||||
${If} ${FileExists} "${FFINSTEXE64}\firefox.exe"
|
||||
StrCpy $FFINSTEXE "${FFINSTEXE64}"
|
||||
StrCpy $FFNONTORINSTEXE "${FFINSTEXE64}"
|
||||
${ElseIf} ${FileExists} "${FFINSTEXE32}\firefox.exe"
|
||||
StrCpy $FFINSTEXE "${FFINSTEXE32}"
|
||||
StrCpy $FFNONTORINSTEXE "${FFINSTEXE32}"
|
||||
${EndIf}
|
||||
${If} ${FileExists} "$PROFILE\OneDrive\Desktop\Tor Browser\Browser\firefox.exe"
|
||||
StrCpy $FFINSTEXE "$PROFILE\OneDrive\Desktop\Tor Browser\Browser\"
|
||||
${EndIf}
|
||||
${If} ${FileExists} "$PROFILE\Desktop\Tor Browser\Browser\firefox.exe"
|
||||
StrCpy $FFINSTEXE "$PROFILE\Desktop\Tor Browser\Browser\"
|
||||
${EndIf}
|
||||
${Else}
|
||||
${If} ${FileExists} "${FFINSTEXE32}\firefox.exe"
|
||||
StrCpy $FFINSTEXE "${FFINSTEXE32}"
|
||||
StrCpy $FFNONTORINSTEXE "${FFINSTEXE32}"
|
||||
${EndIf}
|
||||
${If} ${FileExists} "$PROFILE\OneDrive\Desktop\Tor Browser\Browser\firefox.exe"
|
||||
StrCpy $FFINSTEXE "$PROFILE\OneDrive\Desktop\Tor Browser\Browser\"
|
||||
${EndIf}
|
||||
${If} ${FileExists} "$PROFILE\Desktop\Tor Browser\Browser\firefox.exe"
|
||||
StrCpy $FFINSTEXE "$PROFILE\Desktop\Tor Browser\Browser\"
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
#Call ShouldInstall64Bit
|
||||
# look for user installs
|
||||
FunctionEnd
|
||||
|
||||
Function firefoxDetect
|
||||
${If} ${FileExists} "$FFINSTEXE\firefox.exe"
|
||||
Abort directory
|
||||
${EndIf}
|
||||
FunctionEnd
|
||||
|
||||
Function routerDetect
|
||||
${If} ${FileExists} "$I2PINSTEXE"
|
||||
Abort directory
|
||||
${Else}
|
||||
createDirectory $I2PINSTEXE
|
||||
SetOutPath $I2PINSTEXE
|
||||
File /nonfatal /a /r "I2P\"
|
||||
File /nonfatal /a /r "I2P\I2P.exe"
|
||||
File /nonfatal "I2P\config\jpackaged"
|
||||
createDirectory $I2PINSTEXE
|
||||
SetOutPath $I2PINSTEXE\app
|
||||
File /nonfatal /a /r "I2P\app\"
|
||||
SetOutPath $I2PINSTEXE\runtime
|
||||
File /nonfatal /a /r "I2P\runtime\"
|
||||
SetOutPath $I2PINSTEXE
|
||||
File /nonfatal /a /r "I2P\I2P.exe"
|
||||
File /nonfatal /a /r "I2P\I2P.ico"
|
||||
File /nonfatal "I2P\config\jpackaged"
|
||||
|
||||
createDirectory "$I2PINSTEXE\"
|
||||
SetOutPath "$I2PINSTEXE\"
|
||||
File /nonfatal /a /r "I2P/config/*"
|
||||
|
||||
Abort directory
|
||||
${EndIf}
|
||||
createDirectory "$I2PINSTEXE\"
|
||||
SetOutPath "$I2PINSTEXE\"
|
||||
IfFileExists $I2PINSTEXE\router.config +2 0
|
||||
File /a /r "I2P/config/router.config"
|
||||
IfFileExists $I2PINSTEXE\clients.config +2 0
|
||||
File /a /r "I2P/config/clients.config"
|
||||
IfFileExists $I2PINSTEXE\wrapper.config +2 0
|
||||
File /a /r "I2P/config/wrapper.config"
|
||||
IfFileExists $I2PINSTEXE\hosts.txt +2 0
|
||||
File /a /r "I2P/config/hosts.txt"
|
||||
IfFileExists $I2PINSTEXE\eepsite +2 0
|
||||
File /a /r "I2P/config/eepsite"
|
||||
IfFileExists $I2PINSTEXE\webapps +2 0
|
||||
File /a /r "I2P/config/webapps"
|
||||
File /a /r "I2P/config/certificates"
|
||||
File /a /r "I2P/config/geoip"
|
||||
File /a /r "I2P/config/i2ptunnel.config"
|
||||
FunctionEnd
|
||||
|
||||
Function installerFunction
|
||||
${If} ${Silent}
|
||||
${If} ${Silent}
|
||||
${Do}
|
||||
${FindProcess} "I2P.exe" $0
|
||||
Sleep 500
|
||||
@ -237,33 +194,19 @@ ${If} ${Silent}
|
||||
${If} ${Silent}
|
||||
ReadEnvStr $0 OLD_I2P_VERSION
|
||||
${If} $0 < ${I2P_VERSION}
|
||||
rmDir /r $I2PINSTEXE/app
|
||||
rmDir /r $I2PINSTEXE/runtime
|
||||
File /nonfatal /a /r "I2P\"
|
||||
File /nonfatal "I2P\config\jpackaged"
|
||||
|
||||
createDirectory "$I2PINSTEXE\"
|
||||
SetOutPath "$I2PINSTEXE\"
|
||||
File /nonfatal /a /r "I2P/config/*"
|
||||
call routerDetect
|
||||
|
||||
${EndIf}
|
||||
${Else}
|
||||
rmDir /r $I2PINSTEXE/app
|
||||
rmDir /r $I2PINSTEXE/runtime
|
||||
File /nonfatal /a /r "I2P\"
|
||||
File /nonfatal "I2P\config\jpackaged"
|
||||
|
||||
createDirectory "$I2PINSTEXE\"
|
||||
SetOutPath "$I2PINSTEXE\"
|
||||
File /nonfatal /a /r "I2P/config/*"
|
||||
call routerDetect
|
||||
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
|
||||
# Install the launcher scripts
|
||||
createDirectory "$INSTDIR"
|
||||
SetOutPath "$INSTDIR"
|
||||
File "win/*"
|
||||
#SetOutPath "$INSTDIR"
|
||||
#File "win/*"
|
||||
|
||||
# Install the licenses
|
||||
createDirectory "$INSTDIR\licenses"
|
||||
@ -280,28 +223,14 @@ ${If} ${Silent}
|
||||
SetOutPath "$INSTDIR\firefox.profile.config.i2p"
|
||||
File /a /r "app-profile/*"
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
SetOutPath "$I2PINSTEXE"
|
||||
createDirectory "$SMPROGRAMS\${APPNAME}"
|
||||
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 "$SMPROGRAMS\${APPNAME}\Browse I2P.lnk" "$I2PINSTEXE\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P - Temporary Identity.lnk" "$I2PINSTEXE\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
|
||||
CreateShortCut "$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
|
||||
FileSeek $0 0 END
|
||||
FileWriteByte $0 "13"
|
||||
FileWriteByte $0 "10"
|
||||
FileWrite $0 "routerconsole.browser=$\"$INSTDIR\i2pconfig.bat$\""
|
||||
FileWriteByte $0 "13"
|
||||
FileWriteByte $0 "10"
|
||||
FileWrite $0 "router.disableTunnelTesting=false"
|
||||
FileWriteByte $0 "13"
|
||||
FileWriteByte $0 "10"
|
||||
FileClose $0
|
||||
CreateShortCut "$DESKTOP\Browse I2P.lnk" "$I2PINSTEXE\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
CreateShortCut "$DESKTOP\Browse I2P - Temporary Identity.lnk" "$I2PINSTEXE\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
SetShellVarContext current
|
||||
Var /Global I2PAPPDATA
|
||||
@ -319,20 +248,7 @@ ${If} ${Silent}
|
||||
SetOutPath "$I2PAPPDATA"
|
||||
|
||||
IfFileExists "$LOCALAPPDATA\I2P\eepsite\docroot" +2 0
|
||||
File /nonfatal /a /r "I2P\eepsite"
|
||||
|
||||
;# Point the browser config setting in the working config
|
||||
FileOpen $0 "$I2PAPPDATA\router.config" a
|
||||
FileSeek $0 0 END
|
||||
FileWriteByte $0 "13"
|
||||
FileWriteByte $0 "10"
|
||||
FileWrite $0 "routerconsole.browser=$\"$INSTDIR\i2pconfig.bat$\""
|
||||
FileWriteByte $0 "13"
|
||||
FileWriteByte $0 "10"
|
||||
FileWrite $0 "router.disableTunnelTesting=false"
|
||||
FileWriteByte $0 "13"
|
||||
FileWriteByte $0 "10"
|
||||
FileClose $0
|
||||
File /a /r "I2P\eepsite"
|
||||
|
||||
createDirectory "$I2PINSTEXE"
|
||||
SetOutPath "$I2PINSTEXE"
|
||||
@ -345,20 +261,6 @@ ${If} ${Silent}
|
||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Uninstall-${APPNAME}.lnk" "$INSTDIR\uninstall-i2pbrowser.exe"
|
||||
FunctionEnd
|
||||
|
||||
Function elevatorCallback
|
||||
${GetOptions} $CMDLINE "/p" $PARENTOPTIONS
|
||||
${If} "${PARENTOPTIONS}" != ""
|
||||
StrCpy $PARENTOPTIONS "-ArgumentList '$PARENTOPTIONS'"
|
||||
${EndIf}
|
||||
${If} ${FileExists} "${I2PINSTEXE64}\i2p.exe"
|
||||
ExecShell open "powershell -Command Start-Process .\$EXEFILE -Wait -Verb RunAs $PARENTOPTIONS"
|
||||
#Quit
|
||||
${ElseIf} ${FileExists} "${I2PINSTEXE32}\i2p.exe"
|
||||
ExecShell open "powershell -Command Start-Process .\$EXEFILE -Wait -Verb RunAs $PARENTOPTIONS"
|
||||
#Quit
|
||||
${EndIf}
|
||||
FunctionEnd
|
||||
|
||||
|
||||
# start default section
|
||||
Section Install
|
||||
@ -374,7 +276,6 @@ Section "uninstall"
|
||||
Delete $I2PINSTEXE\*
|
||||
rmDir /r "$I2PINSTEXE"
|
||||
${EndIf}
|
||||
|
||||
|
||||
# Remove shortcuts and folders
|
||||
Delete "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk"
|
||||
@ -404,12 +305,26 @@ SectionEnd
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
Function LaunchLink
|
||||
SetOutPath "$I2PINSTEXE"
|
||||
StrCpy $OUTDIR $I2PINSTEXE
|
||||
${If} ${Silent}
|
||||
ReadEnvStr $0 RESTART_I2P
|
||||
${If} $0 != ""
|
||||
ShellExecAsUser::ShellExecAsUser "open" "$DESKTOP\Browse I2P.lnk"
|
||||
UserInfo::GetAccountType
|
||||
pop $0
|
||||
${If} $0 == "admin"
|
||||
ShellExecAsUser::ShellExecAsUser "open" "$DESKTOP\Browse I2P.lnk"
|
||||
${Else}
|
||||
ExecShell "" "$DESKTOP\Browse I2P.lnk"
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
${Else}
|
||||
ShellExecAsUser::ShellExecAsUser "open" "$DESKTOP\Browse I2P.lnk"
|
||||
UserInfo::GetAccountType
|
||||
pop $0
|
||||
${If} $0 == "admin"
|
||||
ShellExecAsUser::ShellExecAsUser "open" "$DESKTOP\Browse I2P.lnk"
|
||||
${Else}
|
||||
ExecShell "" "$DESKTOP\Browse I2P.lnk"
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
FunctionEnd
|
||||
|
@ -1 +1 @@
|
||||
!define I2P_VERSION 1.8.1
|
||||
!define I2P_VERSION 1.9.5
|
||||
|
@ -1,3 +1,3 @@
|
||||
!define VERSIONMAJOR 1
|
||||
!define VERSIONMINOR 8
|
||||
!define VERSIONBUILD 1
|
||||
!define VERSIONMINOR 9
|
||||
!define VERSIONBUILD 5
|
||||
|
@ -60,4 +60,6 @@ user_pref("media.navigator.enabled", false);
|
||||
user_pref("dom.w3c_touch_events.enabled", false);
|
||||
user_pref("browser.privatebrowsing.autostart", false);
|
||||
user_pref("browser.display.use_system_colors", false);
|
||||
user_pref("dom.image-lazy-loading.enabled", false)
|
||||
user_pref("dom.image-lazy-loading.enabled", false)
|
||||
user_pref("extensions.autoDisableScopes", 0);
|
||||
user_pref("extensions.enabledScopes", 1);
|
229
src/profile/user-overrides.js
Normal file
229
src/profile/user-overrides.js
Normal file
@ -0,0 +1,229 @@
|
||||
/*
|
||||
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:
|
||||
*/
|
||||
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
|
||||
*/
|
||||
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");
|
||||
user_pref("noscript.mandatory", "[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.ABE.enabled", false);
|
||||
user_pref("noscript.ABE.notify", false);
|
||||
user_pref("noscript.ABE.wanIpAsLocal", false);
|
||||
user_pref("noscript.confirmUnblock", false);
|
||||
user_pref("noscript.contentBlocker", true);
|
||||
user_pref("noscript.firstRunRedirection", false);
|
||||
user_pref("noscript.global", true);
|
||||
user_pref("noscript.gtemp", "");
|
||||
user_pref("noscript.opacizeObject", 3);
|
||||
user_pref("noscript.forbidWebGL", true);
|
||||
user_pref("noscript.forbidFonts", true);
|
||||
user_pref("noscript.options.tabSelectedIndexes", "5,0,0");
|
||||
user_pref("noscript.policynames", "");
|
||||
user_pref("noscript.secureCookies", true);
|
||||
user_pref("noscript.showAllowPage", false);
|
||||
user_pref("noscript.showBaseDomain", false);
|
||||
user_pref("noscript.showDistrust", false);
|
||||
user_pref("noscript.showRecentlyBlocked", false);
|
||||
user_pref("noscript.showTemp", false);
|
||||
user_pref("noscript.showTempToPerm", false);
|
||||
user_pref("noscript.showUntrusted", false);
|
||||
user_pref("noscript.STS.enabled", false);
|
||||
user_pref("noscript.subscription.lastCheck", -142148139);
|
||||
user_pref("noscript.temp", "");
|
||||
user_pref("noscript.untrusted", "");
|
||||
user_pref("noscript.forbidMedia", true);
|
||||
user_pref("noscript.allowWhitelistUpdates", false);
|
||||
user_pref("noscript.fixLinks", false);
|
||||
// Now handled by plugins.click_to_play // Not in this one.
|
||||
user_pref("noscript.forbidFlash", true);
|
||||
user_pref("noscript.forbidSilverlight", true);
|
||||
user_pref("noscript.forbidJava", true);
|
||||
user_pref("noscript.forbidPlugins", true);
|
||||
// Usability tweaks
|
||||
user_pref("noscript.showPermanent", false);
|
||||
user_pref("noscript.showTempAllowPage", true);
|
||||
user_pref("noscript.showRevokeTemp", true);
|
||||
user_pref("noscript.notify", false);
|
||||
user_pref("noscript.autoReload", true);
|
||||
user_pref("noscript.autoReload.allTabs", false);
|
||||
user_pref("noscript.cascadePermissions", true);
|
||||
user_pref("noscript.restrictSubdocScripting", true);
|
||||
user_pref("noscript.showVolatilePrivatePermissionsToggle", false);
|
||||
user_pref("noscript.volatilePrivatePermissions", true);
|
||||
user_pref("noscript.clearClick", 0);
|
||||
|
||||
user_pref("intl.locale.matchOS", false);
|
||||
|
||||
user_pref("extensions.https_everywhere._observatory.enabled", false);
|
||||
user_pref("extensions.https_everywhere.options.autoUpdateRulesets", false);
|
||||
user_pref("extensions.https_everywhere.globalEnabled", false);
|
||||
user_pref("extensions.https_everywhere._observatory.submit_during_tor", false);
|
||||
user_pref("extensions.https_everywhere._observatory.submit_during_nontor", false);
|
||||
user_pref("extensions.https_everywhere._observatory.use_custom_proxy", true);
|
||||
user_pref("extensions.https_everywhere._observatory.proxy_host", "127.0.0.1");
|
||||
user_pref("extensions.https_everywhere._observatory.proxy_port", 4444);
|
||||
|
||||
user_pref("extensions.torbutton.use_nontor_proxy", true);
|
||||
|
||||
//For socket conversion: in the future, I'll need to make TBB communicate with
|
||||
//i2p over a unix socket. Fortunately, this is how you do that. It will be
|
||||
//configurable in a similar way to the host:port configuration when that happens.
|
||||
//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);
|
||||
|
||||
// Resist-fingerprinting and first-party isolation enable
|
||||
|
||||
user_pref("privacy.resistFingerprinting", true);
|
||||
user_pref("privacy.firstparty.isolate", true);
|
||||
|
||||
// Use i2p http proxy for all connections and set homepage to safe local form.
|
||||
|
||||
// DON'T allow access to the admin panel from the profile we browse i2p with.
|
||||
user_pref("network.proxy.no_proxies_on", "127.0.0.1:7657,localhost:7657,127.0.0.1:7662,localhost:7662,127.0.0.1:7669,localhost:7669");
|
||||
user_pref("network.proxy.type", 1);
|
||||
user_pref("network.proxy.http", "127.0.0.1");
|
||||
user_pref("network.proxy.http_port", 4444);
|
||||
user_pref("network.proxy.ssl", "127.0.0.1");
|
||||
user_pref("network.proxy.ssl_port", 4444);
|
||||
user_pref("network.proxy.ftp", "127.0.0.1");
|
||||
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", "http://127.0.0.1:7657/home");
|
||||
|
||||
// Privacy-harden and disable irrelevant features.
|
||||
user_pref("app.normandy.api_url", "");
|
||||
user_pref("app.normandy.enabled", false);
|
||||
user_pref("app.update.auto", false);
|
||||
user_pref("app.update.enabled", false);
|
||||
user_pref("beacon.enabled", false);
|
||||
user_pref("browser.aboutHomeSnippets.updateUrl", "");
|
||||
user_pref("browser.cache.disk_cache_ssl", false);
|
||||
user_pref("browser.cache.disk.enable", false);
|
||||
user_pref("browser.cache.offline.enable", false);
|
||||
user_pref("browser.disableResetPrompt", true);
|
||||
user_pref("browser.display.use_document_fonts", 0);
|
||||
user_pref("browser.fixup.alternate.enabled", false);
|
||||
user_pref("browser.formfill.enable", false);
|
||||
user_pref("browser.library.activity-stream.enabled", false);
|
||||
user_pref("browser.newtabpage.activity-stream.disableSnippets", true);
|
||||
user_pref("browser.newtabpage.activity-stream.enabled", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.snippets", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", false);
|
||||
user_pref("browser.newtabpage.activity-stream.prerender", false);
|
||||
user_pref("browser.newtabpage.activity-stream.showSearch", false);
|
||||
user_pref("browser.newtabpage.enhanced", false);
|
||||
user_pref("browser.newtabpage.introShown", true);
|
||||
user_pref("browser.newtab.preload", false);
|
||||
user_pref("browser.onboarding.enabled", false);
|
||||
user_pref("browser.pagethumbnails.capturing_disabled", true);
|
||||
user_pref("browser.safebrowsing.appRepURL", "");
|
||||
user_pref("browser.safebrowsing.blockedURIs.enabled", false);
|
||||
user_pref("browser.safebrowsing.downloads.enabled", false);
|
||||
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
|
||||
user_pref("browser.safebrowsing.downloads.remote.url", "");
|
||||
user_pref("browser.safebrowsing.enabled", false);
|
||||
user_pref("browser.safebrowsing.malware.enabled", false);
|
||||
user_pref("browser.safebrowsing.phishing.enabled", false);
|
||||
user_pref("browser.search.geoip.timeout", 1);
|
||||
user_pref("browser.search.suggest.enabled", false);
|
||||
user_pref("browser.selfsupport.url", "");
|
||||
user_pref("browser.send_pings", false);
|
||||
user_pref("browser.shell.checkDefaultBrowser", false);
|
||||
user_pref("browser.startup.homepage_override.mstone", "ignore");
|
||||
user_pref("browser.startup.page", 0);
|
||||
user_pref("browser.toolbarbuttons.introduced.pocket-button", true);
|
||||
user_pref("browser.urlbar.speculativeConnect.enabled", false);
|
||||
user_pref("browser.urlbar.trimURLs", false);
|
||||
user_pref("datareporting.healthreport.uploadEnabled", false);
|
||||
user_pref("datareporting.policy.dataSubmissionEnabled", false);
|
||||
user_pref("dom.battery.enabled", false);
|
||||
user_pref("dom.enable_performance", false);
|
||||
user_pref("dom.enable_performance_navigation_timing", false);
|
||||
user_pref("dom.enable_resource_timing", false);
|
||||
user_pref("dom.event.clipboardevents.enabled", false);
|
||||
user_pref("dom.gamepad.enabled", false);
|
||||
user_pref("dom.indexedDB.enabled", false);
|
||||
user_pref("dom.min_timeout_value", 400);
|
||||
user_pref("dom.push.connection.enabled", false);
|
||||
user_pref("dom.push.enabled", false);
|
||||
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", 0);
|
||||
user_pref("extensions.enabledScopes", 1);
|
||||
user_pref("extensions.getAddons.cache.enabled", false);
|
||||
user_pref("extensions.getAddons.showPane", false);
|
||||
user_pref("extensions.pocket.enabled", false);
|
||||
user_pref("extensions.screenshots.disabled", true);
|
||||
user_pref("extensions.webservice.discoverURL", "");
|
||||
user_pref("geo.enabled", false);
|
||||
user_pref("geo.wifi.uri", "");
|
||||
user_pref("gfx.downloadable_fonts.disable_cache", true);
|
||||
user_pref("javascript.options.shared_memory", false);
|
||||
user_pref("layout.css.visited_links_enabled", false);
|
||||
user_pref("media.autoplay.enabled", false);
|
||||
user_pref("media.cache_size", 0);
|
||||
user_pref("media.navigator.enabled", false);
|
||||
user_pref("media.peerconnection.ice.no_host", true);
|
||||
user_pref("media.video_stats.enabled", false);
|
||||
user_pref("captivedetect.canonicalURL", "");
|
||||
user_pref("network.captive-portal-service.enabled", false);
|
||||
user_pref("network.cookie.cookieBehavior", 1);
|
||||
user_pref("network.cookie.lifetimePolicy", 2);
|
||||
user_pref("network.dns.disablePrefetch", true);
|
||||
user_pref("network.http.referer.spoofSource", true);
|
||||
user_pref("network.http.referer.trimmingPolicy", 2);
|
||||
user_pref("network.http.referer.XOriginPolicy", 2);
|
||||
user_pref("network.prefetch-next", false);
|
||||
user_pref("privacy.donottrackheader.enabled", true);
|
||||
user_pref("privacy.donottrackheader.value", 1);
|
||||
user_pref("toolkit.telemetry.archive.enabled", false);
|
||||
user_pref("toolkit.telemetry.coverage.opt-out", true);
|
||||
user_pref("toolkit.telemetry.enabled", false);
|
||||
user_pref("toolkit.telemetry.server", "");
|
||||
user_pref("toolkit.telemetry.unified", false);
|
||||
user_pref("webgl.disabled", true);
|
||||
user_pref("browser.chrome.errorReporter.infoURL", "");
|
||||
user_pref("breakpad.reportURL", "");
|
||||
//user_pref("browser.newtabpage.activity-stream.default.sites", "");
|
||||
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
|
||||
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
|
||||
user_pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored", false);
|
||||
user_pref("browser.newtabpage.enabled", true);
|
||||
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("dom.security.https_only_mode", false);
|
||||
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);
|
||||
user_pref("browser.privatebrowsing.autostart", false);
|
||||
user_pref("browser.display.use_system_colors", false);
|
1288
src/profile/user.js
1288
src/profile/user.js
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
||||
1.8.1
|
||||
1.9.5
|
||||
|
@ -1,18 +0,0 @@
|
||||
@echo off
|
||||
|
||||
SET "MYPATH=%~dp0"
|
||||
|
||||
set ProgramFiles64=%ProgramFiles: (x86)=%
|
||||
set "I2PData=%LocalAppData%\I2P\"
|
||||
|
||||
if exist "%LocalAppData%\I2P\I2P.exe" (
|
||||
set "I2PPath=%LocalAppData%\I2P\"
|
||||
)
|
||||
|
||||
if exist "%ProgramFiles64%\I2P\I2P.exe" (
|
||||
set "I2PPath=%ProgramFiles64%\I2P\"
|
||||
)
|
||||
|
||||
if exist "%ProgramFiles(x86)%\I2P\I2P.exe" (
|
||||
set "I2PPath=%ProgramFiles(x86)%\I2P\"
|
||||
)
|
@ -1,12 +0,0 @@
|
||||
|
||||
SET "MYPATH=%~dp0"
|
||||
call "%MYPATH%common.bat"
|
||||
|
||||
if exist "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p\" (
|
||||
echo "profile is configured" & xcopy /s /i /y "%I2PData%I2PBrowser-Launcher\firefox.profile.config.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p\extensions"
|
||||
) else (
|
||||
echo "configuring profile" & xcopy /s /i /y "%I2PData%I2PBrowser-Launcher\firefox.profile.config.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p"
|
||||
)
|
||||
|
||||
xcopy /s /i /y "%I2PData%I2PBrowser-Launcher\firefox.profile.config.i2p\user.js" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p\user.js*"
|
||||
xcopy /s /i /y "%I2PData%I2PBrowser-Launcher\firefox.profile.config.i2p\prefs.js" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p\prefs.js*"
|
@ -1,12 +0,0 @@
|
||||
|
||||
SET "MYPATH=%~dp0"
|
||||
call "%MYPATH%common.bat"
|
||||
|
||||
if exist "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\" (
|
||||
echo "profile is configured, updating extensions" & xcopy /s /i /y "%I2PData%I2PBrowser-Launcher\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
|
||||
) else (
|
||||
echo "configuring profile" & xcopy /s /i /y "%I2PData%I2PBrowser-Launcher\firefox.profile.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p"
|
||||
)
|
||||
|
||||
xcopy /s /i /y "%I2PData%I2PBrowser-Launcher\firefox.profile.i2p\user.js" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\user.js*"
|
||||
xcopy /s /i /y "%I2PData%I2PBrowser-Launcher\firefox.profile.i2p\prefs.js" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\prefs.js*"
|
@ -1,27 +0,0 @@
|
||||
@echo on
|
||||
|
||||
SET "MYPATH=%~dp0"
|
||||
call "%MYPATH%common.bat"
|
||||
|
||||
call "%MYPATH%launchi2p.bat"
|
||||
|
||||
call "%MYPATH%copy-profile.bat"
|
||||
|
||||
timeout /t 3
|
||||
|
||||
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
|
@ -1,27 +0,0 @@
|
||||
@echo on
|
||||
|
||||
SET "MYPATH=%~dp0"
|
||||
call "%MYPATH%common.bat"
|
||||
|
||||
call "%MYPATH%launchi2p.bat"
|
||||
|
||||
call "%MYPATH%copy-profile.bat"
|
||||
|
||||
timeout /t 3
|
||||
|
||||
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
|
@ -1,23 +0,0 @@
|
||||
@echo off
|
||||
|
||||
SET "MYPATH=%~dp0"
|
||||
call "%MYPATH%common.bat"
|
||||
|
||||
call "%MYPATH%copy-config-profile.bat"
|
||||
|
||||
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
|
||||
)
|
||||
|
||||
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.config.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.config.i2p" -url %1
|
||||
exit
|
||||
)
|
||||
|
||||
exit
|
@ -1,17 +0,0 @@
|
||||
@echo on
|
||||
|
||||
SET "MYPATH=%~dp0"
|
||||
call "%MYPATH%common.bat"
|
||||
|
||||
|
||||
echo "check if I2P is already running"
|
||||
::only launch I2P if the proxy is not up on 4444
|
||||
netstat /o /a /n | findstr "LISTENING" | findstr "7657" >nul 2>nul && (
|
||||
echo "I2P is already running, not launching"
|
||||
) || (
|
||||
echo "I2P is not running, launching"
|
||||
echo start "i2p" /D %I2PPath% i2p.exe
|
||||
start "i2p" /D %I2PPath% i2p.exe
|
||||
)
|
||||
|
||||
|
@ -1,8 +0,0 @@
|
||||
|
||||
SET "MYPATH=%~dp0"
|
||||
|
||||
call "%MYPATH%common.bat"
|
||||
|
||||
set TEST=TEST
|
||||
|
||||
echo testing: %TEST% path to me: %MYPATH% path to I2P %I2PPath%
|
Reference in New Issue
Block a user