Compare commits
130 Commits
i2p-firefo
...
20220527
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a09da35170 | ||
![]() |
af5add3143 | ||
![]() |
0f5eb563eb | ||
![]() |
53dd311b58 | ||
![]() |
6fc7d9a7b4 | ||
![]() |
d283efdbf5 | ||
![]() |
de56966a51 | ||
![]() |
9b7f886e96 | ||
![]() |
ec94eee4e2 | ||
![]() |
17d3b9161f | ||
![]() |
b8d1a48961 | ||
![]() |
597207b425 | ||
![]() |
d851dec3c4 | ||
![]() |
1339df4ea6 | ||
![]() |
02ed695417 | ||
![]() |
0c0219c308 | ||
![]() |
d47a6c1234 | ||
![]() |
cc5f3052fa | ||
![]() |
c10cf6aaeb | ||
![]() |
17f2c8bdae | ||
![]() |
7627dd9742 | ||
![]() |
d4f14fdae9 | ||
![]() |
1e18aa8c0d | ||
![]() |
88ba9dc96e | ||
![]() |
3fda252a34 | ||
![]() |
dbc8376ebd | ||
![]() |
ed53efea8f | ||
![]() |
a4d9d17306 | ||
![]() |
42b2e78bbe | ||
![]() |
7fb9fd4e8d | ||
![]() |
6ca76277db | ||
![]() |
983813caaf | ||
![]() |
5d9cd3b669 | ||
![]() |
45a358bba4 | ||
![]() |
1b2985665a | ||
![]() |
a40a212774 | ||
![]() |
78e703fd92 | ||
![]() |
7f2ef1d074 | ||
![]() |
c2b2624388 | ||
![]() |
c5dda34ef2 | ||
![]() |
8c507478b6 | ||
![]() |
574321a1ee | ||
![]() |
28ad8fcb61 | ||
![]() |
af3e1696b8 | ||
![]() |
ca4bf67e19 | ||
![]() |
451e5d0494 | ||
![]() |
ea8788e1c8 | ||
![]() |
fa05c5f1cc | ||
![]() |
3ab6464c54 | ||
![]() |
0d29cd2bff | ||
![]() |
cf4017f212 | ||
![]() |
10ca0ec281 | ||
![]() |
288007d6dd | ||
![]() |
0e7b25ad2c | ||
![]() |
27082b713e | ||
![]() |
e16c7bca76 | ||
![]() |
85fb43ca57 | ||
![]() |
7a3598817d | ||
![]() |
8e95435be0 | ||
![]() |
9aba119a49 | ||
![]() |
cf091c9e10 | ||
![]() |
1cbd3f6553 | ||
![]() |
467512bd26 | ||
![]() |
af9c2460e9 | ||
![]() |
6ffd0dae9a | ||
![]() |
fb28051ba2 | ||
![]() |
8f19517167 | ||
![]() |
e55c57c6f8 | ||
![]() |
e722cb4bec | ||
![]() |
963d7e88b4 | ||
![]() |
59baf37322 | ||
![]() |
b949fa8a84 | ||
![]() |
12b762d595 | ||
![]() |
aa2ab5bbe5 | ||
![]() |
e3f42a42bd | ||
![]() |
3da8f56247 | ||
![]() |
31c60f74e1 | ||
![]() |
cd790ecae8 | ||
![]() |
cfbeae0ecb | ||
![]() |
b87e701ee0 | ||
![]() |
f8c84ba50a | ||
![]() |
5d3615a0c6 | ||
![]() |
ec98865d33 | ||
![]() |
978af1cb11 | ||
![]() |
560f1c707a | ||
![]() |
e29fdd95a1 | ||
![]() |
39e1df1b10 | ||
![]() |
93b6bc4b3e | ||
![]() |
334e6525b1 | ||
![]() |
46c6fb77e2 | ||
![]() |
9305301bf5 | ||
![]() |
d874204add | ||
![]() |
66864c317d | ||
![]() |
c426b73d79 | ||
![]() |
a05f3777a7 | ||
![]() |
e051d4095c | ||
![]() |
73f94a120e | ||
![]() |
74d5ccc47f | ||
![]() |
4ce272765f | ||
![]() |
714ef026f3 | ||
![]() |
8135506213 | ||
![]() |
ffb9efaab8 | ||
![]() |
706a7a6fe2 | ||
![]() |
af44dd357a | ||
![]() |
c64f0fe632 | ||
![]() |
cf3385cfd0 | ||
![]() |
ef0b5c5cad | ||
![]() |
9282d22e7b | ||
![]() |
400b9d3edc | ||
![]() |
4aa673a959 | ||
![]() |
1f543c8db5 | ||
![]() |
87f9cc063b | ||
![]() |
6651a16fb2 | ||
![]() |
9a34008c48 | ||
![]() |
1f980fb016 | ||
![]() |
cf394be352 | ||
![]() |
51dca79a76 | ||
![]() |
bb7dcaa907 | ||
![]() |
9da43b3961 | ||
![]() |
a28bb6ac3c | ||
![]() |
44b2ae44ee | ||
![]() |
e2ad0d190a | ||
![]() |
f5a424f083 | ||
![]() |
fe99c7bb05 | ||
![]() |
bc36564f5d | ||
![]() |
d8e7551edb | ||
![]() |
3391c23abd | ||
![]() |
723b4d0e27 | ||
![]() |
09d07c8c88 | ||
![]() |
1d0cf4aba7 |
10
.gitignore
vendored
10
.gitignore
vendored
@@ -2,6 +2,7 @@ build
|
|||||||
*.deb
|
*.deb
|
||||||
*.tgz
|
*.tgz
|
||||||
./I2P/
|
./I2P/
|
||||||
|
I2P/
|
||||||
i2pversion_override
|
i2pversion_override
|
||||||
*.crl
|
*.crl
|
||||||
*.crt
|
*.crt
|
||||||
@@ -9,3 +10,12 @@ i2pversion_override
|
|||||||
*.p12
|
*.p12
|
||||||
.stfolder
|
.stfolder
|
||||||
*.url
|
*.url
|
||||||
|
.vscode
|
||||||
|
.version
|
||||||
|
*.su3
|
||||||
|
*.su3.torrent
|
||||||
|
*.exe
|
||||||
|
*.log
|
||||||
|
cmd
|
||||||
|
*.so
|
||||||
|
*.jar
|
42
Makefile
42
Makefile
@@ -3,19 +3,23 @@
|
|||||||
|
|
||||||
-include config.mk
|
-include config.mk
|
||||||
|
|
||||||
preset=`rm .version; make .version`
|
preset=`rm .version; make version`
|
||||||
|
|
||||||
include .version
|
-include .version
|
||||||
|
|
||||||
PROFILE_VERSION=$(MAJOR).$(MINOR).$(BUILD)
|
PROFILE_VERSION=$(MAJOR).$(MINOR).$(BUILD)
|
||||||
|
|
||||||
all: .version prep install.exe
|
all: version prep install.exe
|
||||||
|
|
||||||
tag:
|
tag:
|
||||||
git tag $(PROFILE_VERSION)
|
git tag $(PROFILE_VERSION)
|
||||||
|
|
||||||
.version:
|
version:
|
||||||
|
echo !define VERSIONMAJOR $(VERSIONMAJOR) > src/nsis/i2pbrowser-version.nsi
|
||||||
|
echo !define VERSIONMINOR $(VERSIONMINOR) >> src/nsis/i2pbrowser-version.nsi
|
||||||
|
echo !define VERSIONBUILD $(VERSIONBUILD) >> src/nsis/i2pbrowser-version.nsi
|
||||||
sed 's|!define VERSION||g' src/nsis/i2pbrowser-version.nsi | sed 's| |=|g' > .version
|
sed 's|!define VERSION||g' src/nsis/i2pbrowser-version.nsi | sed 's| |=|g' > .version
|
||||||
|
rm -f version.txt
|
||||||
make version.txt i2pbrowser-jpackage.nsi
|
make version.txt i2pbrowser-jpackage.nsi
|
||||||
|
|
||||||
version.txt:
|
version.txt:
|
||||||
@@ -23,23 +27,39 @@ version.txt:
|
|||||||
echo "$(PROFILE_VERSION)" > src/app-profile/version.txt
|
echo "$(PROFILE_VERSION)" > src/app-profile/version.txt
|
||||||
|
|
||||||
i2pbrowser-jpackage.nsi:
|
i2pbrowser-jpackage.nsi:
|
||||||
echo "!define I2P_VERSION $(I2P_VERSION)" > src/nsis/i2pbrowser-jpackage.nsi
|
echo "!define I2P_VERSION $(PROFILE_VERSION)" > src/nsis/i2pbrowser-jpackage.nsi
|
||||||
|
|
||||||
jpackage: .version I2P build/I2P/config all
|
jpackage: version I2P build/I2P/config all
|
||||||
|
|
||||||
help: .version
|
help: version
|
||||||
@echo "I2P-Profile-Installer-$(PROFILE_VERSION)"
|
@echo "I2P-Profile-Installer-$(PROFILE_VERSION)"
|
||||||
@echo "$(SIGNER)"
|
@echo "$(SIGNER)"
|
||||||
@echo "$(I2P_VERSION)"
|
@echo "$(I2P_VERSION)"
|
||||||
@echo "$(MAJOR).$(MINOR).$(BUILD)"
|
@echo "$(MAJOR).$(MINOR).$(BUILD)"
|
||||||
@echo "$(preset)"
|
@echo "$(preset)"
|
||||||
|
|
||||||
prep: profile.tgz app-profile.tgz profile build/licenses build/I2P build/I2P/config launchers
|
prep: #launchers build/licenses profile.tgz app-profile.tgz profile build/I2P build/I2P/config #
|
||||||
|
make launchers
|
||||||
|
echo "launchers" >make.log
|
||||||
|
make build/licenses
|
||||||
|
echo "licenses" >make.log
|
||||||
|
make profile.tgz
|
||||||
|
echo "profilezip" >make.log
|
||||||
|
make app-profile.tgz
|
||||||
|
echo "appprofile" >make.log
|
||||||
|
make profile
|
||||||
|
echo "profile" >make.log
|
||||||
|
make build/I2P
|
||||||
|
echo "buildi2p" >make.log
|
||||||
|
make build/I2P/config
|
||||||
|
echo "buildi2pconfig" >make.log
|
||||||
cp src/nsis/*.nsi build
|
cp src/nsis/*.nsi build
|
||||||
|
echo "nsi1" >make.log
|
||||||
cp src/nsis/*.nsh build
|
cp src/nsis/*.nsh build
|
||||||
|
echo "nsi2" >make.log
|
||||||
cp src/icons/*.ico build
|
cp src/icons/*.ico build
|
||||||
|
|
||||||
install.exe:
|
install.exe: #build/licenses
|
||||||
cd build && makensis i2pbrowser-installer.nsi && cp I2P-Profile-Installer-*.exe ../ && echo "built windows installer"
|
cd build && makensis i2pbrowser-installer.nsi && cp I2P-Profile-Installer-*.exe ../ && echo "built windows installer"
|
||||||
|
|
||||||
export RES_DIR="../i2p.i2p.jpackage-build/installer/resources"
|
export RES_DIR="../i2p.i2p.jpackage-build/installer/resources"
|
||||||
@@ -66,7 +86,7 @@ src/I2P/config: build/I2P
|
|||||||
cp -v $(RES_DIR)/i2ptunnel.config src/I2P/config/
|
cp -v $(RES_DIR)/i2ptunnel.config src/I2P/config/
|
||||||
cp -v $(RES_DIR)/wrapper.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
|
#grep -v 'router.updateURL' $(RES_DIR)/router.config > src/I2P/config/router.config
|
||||||
cat router.config >> src/I2P/config/router.config
|
cat router.config > src/I2P/config/router.config
|
||||||
cp -v $(RES_DIR)/hosts.txt src/I2P/config/hosts.txt
|
cp -v $(RES_DIR)/hosts.txt src/I2P/config/hosts.txt
|
||||||
cp -R $(RES_DIR)/certificates src/I2P/config/certificates
|
cp -R $(RES_DIR)/certificates src/I2P/config/certificates
|
||||||
cp -R $(RES_DIR)/eepsite src/I2P/config/eepsite
|
cp -R $(RES_DIR)/eepsite src/I2P/config/eepsite
|
||||||
@@ -92,7 +112,7 @@ build/licenses: build
|
|||||||
unix2dos build/licenses/LICENSE.index
|
unix2dos build/licenses/LICENSE.index
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf build app-profile-*.tgz profile-*.tgz I2P-Profile-Installer-*.exe *.deb src/I2P/config *.su3 .version *.url
|
rm -rf build app-profile-*.tgz profile-*.tgz I2P-Profile-Installer-*.exe *.deb src/I2P/config *.su3 .version *.url make.log
|
||||||
git clean -fdx src build
|
git clean -fdx src build
|
||||||
|
|
||||||
build:
|
build:
|
||||||
|
71
README.md
71
README.md
@@ -4,22 +4,22 @@ I2P Browsing Profile for Firefox
|
|||||||
Features:
|
Features:
|
||||||
---------
|
---------
|
||||||
|
|
||||||
- Automatically select an up-to-date, secure Firefox or Tor Browser(On Windows) variant
|
- Automatically select an up-to-date, secure Firefox or Tor Browser(On Windows) variant
|
||||||
- Automatically configure a profile for I2P
|
- Automatically configure a profile for I2P
|
||||||
- Automatically block-list all non-I2P local destinations
|
- Automatically block-list all non-I2P local destinations
|
||||||
- Enable first-party isolation, anti-fingerprinting, letterboxing
|
- Enable first-party isolation, anti-fingerprinting, letterboxing
|
||||||
- Automatically sandbox I2P, Non-I2P, and I2P-Application cookiestores
|
- Automatically sandbox I2P, Non-I2P, and I2P-Application cookiestores
|
||||||
|
|
||||||
Build Dependencies:
|
Build Dependencies:
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
To build this, you will need the following software packages (all available in Debian) :
|
To build this, you will need the following software packages (all available in Debian) :
|
||||||
|
|
||||||
* make
|
- make
|
||||||
* nsis
|
- nsis
|
||||||
* dos2unix
|
- dos2unix
|
||||||
* curl
|
- curl
|
||||||
* jq
|
- jq
|
||||||
|
|
||||||
In addition, you will need the NSIS plugin "ShellExecAsUser" which you can get from the
|
In addition, you will need the NSIS plugin "ShellExecAsUser" which you can get from the
|
||||||
[NSIS Wiki Page](https://nsis.sourceforge.io/ShellExecAsUser_plug-in). In order to install
|
[NSIS Wiki Page](https://nsis.sourceforge.io/ShellExecAsUser_plug-in). In order to install
|
||||||
@@ -32,14 +32,13 @@ cp -rv Plugins/* /usr/share/nsis/Plugins/
|
|||||||
|
|
||||||
To build a Debian package, you'll also need
|
To build a Debian package, you'll also need
|
||||||
|
|
||||||
* checkinstall
|
- checkinstall
|
||||||
|
|
||||||
Preparation
|
Preparation
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
Before you build, run the targets
|
Before you build, run the targets
|
||||||
|
|
||||||
|
|
||||||
make clean-extensions
|
make clean-extensions
|
||||||
make extensions
|
make extensions
|
||||||
|
|
||||||
@@ -99,8 +98,8 @@ with `sudo service i2p start` then you can run the script:
|
|||||||
|
|
||||||
/usr/local/bin/i2p-config-service-setup
|
/usr/local/bin/i2p-config-service-setup
|
||||||
|
|
||||||
Including a jpackaged I2P Router(EXPERIMENTAL)
|
Including a jpackaged I2P Router
|
||||||
----------------------------------------------
|
--------------------------------
|
||||||
|
|
||||||
In order to include a jpackaged(dependency-free) I2P router in the Profile
|
In order to include a jpackaged(dependency-free) I2P router in the Profile
|
||||||
Bundle you will need to build the jpackaged I2P router as an "App Image" on
|
Bundle you will need to build the jpackaged I2P router as an "App Image" on
|
||||||
@@ -168,6 +167,9 @@ you should select "Checkout as is, commit as is" and leave line-endings alone.
|
|||||||
End-to-End Windows build process using Cygwin
|
End-to-End Windows build process using Cygwin
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
|
|
||||||
|
I highly recommend you look into the Chocolatey package manager, which makes it much
|
||||||
|
easier to configure these tools and keep them up to date.
|
||||||
|
|
||||||
**Prerequisites:** You need to have OpenJDK 14 or greater installed and configured
|
**Prerequisites:** You need to have OpenJDK 14 or greater installed and configured
|
||||||
with your `%JAVA_HOME%` environment variable configured and `%JAVA_HOME%/bin` on
|
with your `%JAVA_HOME%` environment variable configured and `%JAVA_HOME%/bin` on
|
||||||
your `%PATH%`. You need to have Apache Ant installed and configured with `%ANT_HOME%`
|
your `%PATH%`. You need to have Apache Ant installed and configured with `%ANT_HOME%`
|
||||||
@@ -178,27 +180,26 @@ select "Checkout as is, commit as is" and leave line-endings alone.
|
|||||||
|
|
||||||
TODO: Add links to the respective instructions for each of these.
|
TODO: Add links to the respective instructions for each of these.
|
||||||
|
|
||||||
1. Run the Cygwin `setup-$arch.exe` for your platform to set up new packages.
|
1. Run the Cygwin `setup-$arch.exe` for your platform to set up new packages. Select the `make` `jq` `dos2unix` and `curl` packages.
|
||||||
Select the `make` `jq` `dos2unix` and `curl` packages.
|
2. Open a cygwin terminal.
|
||||||
2. Open a cygwin terminal.
|
3. Clone `i2p.i2p` and `i2p.firefox`
|
||||||
3. Clone `i2p.i2p` and `i2p.firefox`
|
|
||||||
|
|
||||||
git clone https://github.com/i2p/i2p.i2p
|
git clone https://github.com/i2p/i2p.i2p
|
||||||
git clone https://github.com/i2p/i2p.firefox
|
git clone https://github.com/i2p/i2p.firefox
|
||||||
|
|
||||||
3. Move to the i2p.i2p directory. Build the .jar files required to build the App Image
|
4. Move to the i2p.i2p directory. Build the .jar files required to build the App Image
|
||||||
inside i2p.i2p. Return to home.
|
inside i2p.i2p. Return to home.
|
||||||
|
|
||||||
cd i2p.i2p
|
cd i2p.i2p
|
||||||
ant clean pkg
|
ant clean pkg
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
4. Move into the i2p.firefox directory. Run the `./build.sh` script.
|
5. Move into the i2p.firefox directory. Run the `./build.sh` script.
|
||||||
|
|
||||||
cd i2p.firefox
|
cd i2p.firefox
|
||||||
./build.sh
|
./build.sh
|
||||||
|
|
||||||
5. Run `make` to build the installer.
|
6. Run `make` to build the installer.
|
||||||
|
|
||||||
Doing a Release
|
Doing a Release
|
||||||
---------------
|
---------------
|
||||||
@@ -208,25 +209,29 @@ do a release. As a final step, someone must sign the `.exe` file using a
|
|||||||
Certificate which Windows will recognize. The current signer of the Windows
|
Certificate which Windows will recognize. The current signer of the Windows
|
||||||
bundle is Zlatinb. Standard Windows signing tools are used.
|
bundle is Zlatinb. Standard Windows signing tools are used.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Release Copypasta
|
||||||
|
./clean.sh
|
||||||
|
wsl make distclean
|
||||||
|
wsl make clean-extensions
|
||||||
|
wsl make extensions
|
||||||
|
./build.sh
|
||||||
|
wsl make
|
||||||
|
./sign.sh
|
||||||
|
```
|
||||||
|
|
||||||
Building a signed update file
|
Building a signed update file
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
Building a signed update file for automatically updating a Windows I2P router
|
Building a signed update file for automatically updating a Windows I2P router
|
||||||
requires you to also have Go installed in your Cygwin or WSL environment.
|
requires you to either be using linux, or have Go installed in your Cygwin or WSL environment.
|
||||||
With WSL, you can do this using the command:
|
On Linux(Where I sign the su3 files), this works:
|
||||||
|
|
||||||
wsl sudo apt-get install golang-go
|
make su3
|
||||||
|
|
||||||
With that dependency satisfied, you can then run:
|
to run the signing tool if necessary and then package the installer in a
|
||||||
|
|
||||||
wsl make su3
|
|
||||||
|
|
||||||
to build the signing tool if necessary and then package the installer in a
|
|
||||||
signed update file.
|
signed update file.
|
||||||
|
|
||||||
It's also probably possible to do this with the Java I2P distribution and a
|
|
||||||
`.bat` script.
|
|
||||||
|
|
||||||
Docker Support
|
Docker Support
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
@@ -265,5 +270,3 @@ HTTPS Everywhere is developed on Github by the EFF:
|
|||||||
I2P in Private Browsing is developed on Gitlab and Github by idk and the community:
|
I2P in Private Browsing is developed on Gitlab and Github by idk and the community:
|
||||||
- https://i2pgit.org/idk/I2P-in-Private-Browsing-Mode-Firefox
|
- https://i2pgit.org/idk/I2P-in-Private-Browsing-Mode-Firefox
|
||||||
- https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox
|
- https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox
|
||||||
|
|
||||||
|
|
||||||
|
32
build.sh
32
build.sh
@@ -27,21 +27,22 @@ fi
|
|||||||
if [ "$JAVA" -lt "17" ]; then
|
if [ "$JAVA" -lt "17" ]; then
|
||||||
echo "It is highly recommended that you use Java 17+ to build release packages"
|
echo "It is highly recommended that you use Java 17+ to build release packages"
|
||||||
fi
|
fi
|
||||||
sleep 5s
|
|
||||||
|
|
||||||
if [ -z "${JAVA_HOME}" ]; then
|
if [ -z "${JAVA_HOME}" ]; then
|
||||||
JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
|
JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
|
||||||
echo "Building with: $JAVA, $JAVA_HOME"
|
|
||||||
fi
|
fi
|
||||||
|
if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
|
||||||
echo "cleaning"
|
JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
|
||||||
./clean.sh
|
fi
|
||||||
|
echo "Building with: $JAVA, $JAVA_HOME"
|
||||||
|
sleep 5s
|
||||||
|
|
||||||
HERE="$PWD"
|
HERE="$PWD"
|
||||||
if [ ! -d "$HERE/../i2p.i2p.jpackage-build/" ]; then
|
if [ ! -d "$HERE/../i2p.i2p.jpackage-build/" ]; then
|
||||||
git clone https://i2pgit.org/i2p-hackers/i2p.i2p "$HERE/../i2p.i2p.jpackage-build/"
|
git clone --depth 1 -b "$VERSION" https://i2pgit.org/i2p-hackers/i2p.i2p "$HERE/../i2p.i2p.jpackage-build/"
|
||||||
fi
|
fi
|
||||||
cd "$HERE/../i2p.i2p.jpackage-build/"
|
cd "$HERE/../i2p.i2p.jpackage-build/"
|
||||||
|
git pull --tags
|
||||||
git checkout "$VERSION"
|
git checkout "$VERSION"
|
||||||
for i in $COUNT; do
|
for i in $COUNT; do
|
||||||
echo -n "$i...."; sleep 1s
|
echo -n "$i...."; sleep 1s
|
||||||
@@ -56,11 +57,24 @@ I2P_JBIGI="$HERE/../i2p.i2p.jpackage-build/installer/lib/jbigi"
|
|||||||
|
|
||||||
|
|
||||||
echo "compiling custom launcher"
|
echo "compiling custom launcher"
|
||||||
mkdir build
|
mkdir -p build
|
||||||
cp "$I2P_JARS"/*.jar build
|
cp "$I2P_JARS"/*.jar build
|
||||||
|
if [ ! -f "$HERE/build/jna.jar" ]; then
|
||||||
|
wget -O "$HERE/build/jna.jar" "https://repo1.maven.org/maven2/net/java/dev/jna/jna/$JNA_VERSION/jna-$JNA_VERSION.jar"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "$HERE/build/jna-platform.jar" ]; then
|
||||||
|
wget -O "$HERE/build/jna-platform.jar" "https://repo1.maven.org/maven2/net/java/dev/jna/jna-platform/$JNA_VERSION/jna-platform-$JNA_VERSION.jar"
|
||||||
|
fi
|
||||||
|
|
||||||
cd java
|
cd java
|
||||||
"$JAVA_HOME"/bin/javac -d ../build -classpath "$HERE"/build/i2p.jar:"$HERE"/build/router.jar:"$HERE"/build/routerconsole.jar net/i2p/router/WinLauncher.java net/i2p/router/WindowsUpdatePostProcessor.java net/i2p/router/WinUpdateProcess.java
|
"$JAVA_HOME"/bin/javac -d ../build -classpath "$HERE/build/jna.jar":"$HERE/build/jna-platform.jar":"$HERE/build/i2p.jar":"$HERE/build/router.jar":"$HERE/build/routerconsole.jar" \
|
||||||
|
net/i2p/router/Elevator.java \
|
||||||
|
net/i2p/router/Shell32X.java \
|
||||||
|
net/i2p/router/WinLauncher.java \
|
||||||
|
net/i2p/router/WindowsUpdatePostProcessor.java \
|
||||||
|
net/i2p/router/WinUpdateProcess.java
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
#echo "building launcher.jar"
|
#echo "building launcher.jar"
|
||||||
@@ -80,6 +94,8 @@ echo "preparing to invoke jpackage for I2P version $I2P_VERSION"
|
|||||||
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED" \
|
--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/sun.nio.fs=ALL-UNNAMED" \
|
||||||
--java-options "--add-opens java.base/java.nio=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 \
|
$JPACKAGE_OPTS \
|
||||||
--resource-dir build \
|
--resource-dir build \
|
||||||
--input build --main-jar launcher.jar --main-class net.i2p.router.WinLauncher
|
--input build --main-jar launcher.jar --main-class net.i2p.router.WinLauncher
|
||||||
|
@@ -1,3 +1,25 @@
|
|||||||
|
2022-05-8 idk
|
||||||
|
* Add translations for Arabic, German, French, Italian, Japanese, Portuguese, Russian,
|
||||||
|
and Chinese.
|
||||||
|
* Add support for I2P+ Router Console detection. Not an endorsement of I2P+, just
|
||||||
|
a convenience requested by a helpful user.
|
||||||
|
* The build system has been radically improved in order to be simpler to set up and
|
||||||
|
configure.
|
||||||
|
* Fixed a bug where the build deleted a config file.
|
||||||
|
|
||||||
|
2022-05-5 idk
|
||||||
|
* Fix a bug where the I2P router detection inappropriately prioritized an easy
|
||||||
|
install bundle when a non-bundled instal was in use.
|
||||||
|
|
||||||
|
2022-03-25 idk
|
||||||
|
* This release adds support for user-mode, non-privileged installation of the
|
||||||
|
jpackaged router and the browser profile. Admin installation is still supported
|
||||||
|
and detected automatically, to support existing bundles.
|
||||||
|
* On restart to update, will detect if a router requires admin rights to install
|
||||||
|
and will ask the user to authorize the update. In user-mode, no prompt will ever
|
||||||
|
be seen.
|
||||||
|
* Updates to the Firefox profiles to improve compatibility with more Firefoxes
|
||||||
|
|
||||||
2022-02-10 idk
|
2022-02-10 idk
|
||||||
* This release fixes automatic update using Bittorrent within the I2P network
|
* This release fixes automatic update using Bittorrent within the I2P network
|
||||||
and the custom Update PostProcessor.
|
and the custom Update PostProcessor.
|
||||||
|
5
clean.sh
5
clean.sh
@@ -3,6 +3,8 @@
|
|||||||
here=$(pwd)
|
here=$(pwd)
|
||||||
cd ../i2p.i2p.jpackage-build/
|
cd ../i2p.i2p.jpackage-build/
|
||||||
ant distclean
|
ant distclean
|
||||||
|
git checkout .
|
||||||
|
git checkout master
|
||||||
cd "$here"
|
cd "$here"
|
||||||
rm -rf \
|
rm -rf \
|
||||||
build \
|
build \
|
||||||
@@ -18,4 +20,5 @@ rm -rf \
|
|||||||
wrapper.log \
|
wrapper.log \
|
||||||
*.jar \
|
*.jar \
|
||||||
*.exe \
|
*.exe \
|
||||||
*.dmg
|
*.dmg
|
||||||
|
make clean
|
24
config.sh
Normal file → Executable file
24
config.sh
Normal file → Executable file
@@ -2,22 +2,29 @@
|
|||||||
## If you need to use a different JVM, JDK, or other utility from
|
## If you need to use a different JVM, JDK, or other utility from
|
||||||
# build.sh, set it in this file, for example:
|
# build.sh, set it in this file, for example:
|
||||||
|
|
||||||
#export PATH="$PATH:/c/Program Files/Java/jdk-17.0.3/bin/"
|
export PATH="$PATH:/c/Program Files/Java/jdk-17.0.3/bin/"
|
||||||
#export JAVA_HOME="/c/Program Files/Java/jdk-17.0.3"
|
export JAVA_HOME="/c/Program Files/Java/jdk-17.0.3"
|
||||||
# to use it for Oracle OpenJDK17
|
# to use it for Oracle OpenJDK17
|
||||||
|
|
||||||
## Other potential values(NOT exhaustive):
|
## Other potential values(NOT exhaustive):
|
||||||
|
|
||||||
#export PATH="$PATH:/c/Program Files/OpenJDK/jdk-17.0.2/bin/"
|
|
||||||
#export JAVA_HOME="/c/Program Files/OpenJDK/jdk-17.0.2"
|
|
||||||
#export PATH="$PATH:/c/Program Files/Java/jdk-18.0.1/bin/"
|
#export PATH="$PATH:/c/Program Files/Java/jdk-18.0.1/bin/"
|
||||||
#export JAVA_HOME="/c/Program Files/Java/jdk-18.0.1"
|
#export JAVA_HOME="/c/Program Files/Java/jdk-18.0.1"
|
||||||
#export PATH="$PATH:/c/Program Files/Eclipse Adoptium/jdk-17.0.2/bin/"
|
#export PATH="$PATH:/c/Program Files/Eclipse Adoptium/jdk-17.0.3/bin/"
|
||||||
#export JAVA_HOME="/c/Program Files/Eclipse Adoptium/jdk-17.0.2"
|
#export JAVA_HOME="/c/Program Files/Eclipse Adoptium/jdk-17.0.3"
|
||||||
|
#export PATH="$PATH:/c/Program Files/OpenJDK/jdk-17.0.3/bin/"
|
||||||
|
#export JAVA_HOME="/c/Program Files/OpenJDK/jdk-17.0.3"
|
||||||
|
|
||||||
|
#BREAKS!
|
||||||
#export PATH=/c/Program Files/GraalVM/graalvm-ce-java17-22.0.0.2/bin
|
#export PATH=/c/Program Files/GraalVM/graalvm-ce-java17-22.0.0.2/bin
|
||||||
#export JAVA_HOME=/c/Program Files/GraalVM/graalvm-ce-java17-22.0.0.2
|
#export JAVA_HOME=/c/Program Files/GraalVM/graalvm-ce-java17-22.0.0.2
|
||||||
|
#BREAKS!
|
||||||
|
# might be fun to learn why this is broken
|
||||||
|
|
||||||
|
#WORKS WELL! GETS UPDATES AS SOON AS ORACLE! VIABLE ALTERNATIVE!
|
||||||
#export PATH="$PATH:/c/Program Files/Amazon Corretto/jdk17.0.3_6/bin/"
|
#export PATH="$PATH:/c/Program Files/Amazon Corretto/jdk17.0.3_6/bin/"
|
||||||
#export JAVA_HOME="/c/Program Files/Amazon Corretto/jdk17.0.3_6"
|
#export JAVA_HOME="/c/Program Files/Amazon Corretto/jdk17.0.3_6"
|
||||||
|
#WORKS WELL! GETS UPDATES AS SOON AS ORACLE! VIABLE ALTERNATIVE!
|
||||||
|
|
||||||
# These are all things I built the package with today(April 20, 2022, idk)
|
# These are all things I built the package with today(April 20, 2022, idk)
|
||||||
|
|
||||||
@@ -37,4 +44,7 @@
|
|||||||
# required to build this if you do not wish to edit your PATH across the entire
|
# required to build this if you do not wish to edit your PATH across the entire
|
||||||
# Windows session, and for setting ANT_HOME
|
# Windows session, and for setting ANT_HOME
|
||||||
#export ANT_HOME="/c/apache-ant-1.10.9"
|
#export ANT_HOME="/c/apache-ant-1.10.9"
|
||||||
#export PATH="$PATH:$ANT_HOME/bin/"
|
#export PATH="$PATH:$ANT_HOME/bin/"
|
||||||
|
|
||||||
|
# Uncomment this to add signtool to the path so you don't have to fight with Visual Studio.
|
||||||
|
export PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
38
daily.sh
Executable file
38
daily.sh
Executable file
@@ -0,0 +1,38 @@
|
|||||||
|
#! /usr/bin/env sh
|
||||||
|
|
||||||
|
### How to set up this script:
|
||||||
|
#
|
||||||
|
# This script will not work unless you give it a Github API key.
|
||||||
|
# You need to create a file in your $HOME directory, which on
|
||||||
|
# Windows will by /c/Users/yourusername, called github-release-config.sh,
|
||||||
|
# containing this key as the variable GITHUB_TOKEN.
|
||||||
|
# github-release-config.sh must also contain:
|
||||||
|
# GITHUB_USERNAME=your github username
|
||||||
|
git clean -fdx
|
||||||
|
git checkout .
|
||||||
|
./unsigned.sh
|
||||||
|
|
||||||
|
. "$HOME/github-release-config.sh"
|
||||||
|
|
||||||
|
. ./i2pversion
|
||||||
|
|
||||||
|
if [ -f ./i2pversion_override ]; then
|
||||||
|
. ./i2pversion_override
|
||||||
|
fi
|
||||||
|
|
||||||
|
TODAYSDATE=$(date +%Y%m%d)
|
||||||
|
|
||||||
|
if [ -z "$DESCRIPTION" ]; then
|
||||||
|
DESCRIPTION="Daily unsigned build of i2p.firefox for $TODAYSDATE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo github-release release -p -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "$TODAYSDATE" -d "$DESCRIPTION" -t "$TODAYSDATE"
|
||||||
|
github-release release -p -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "$TODAYSDATE" -d "$DESCRIPTION" -t "$TODAYSDATE"
|
||||||
|
EXECHECKSUM=$(sha256sum "I2P-Profile-Installer-$I2P_VERSION.exe")
|
||||||
|
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P-Profile-Installer-$I2P_VERSION.exe" -l "$EXECHECKSUM" -t "$TODAYSDATE" -n "I2P-Profile-Installer-$I2P_VERSION.exe"
|
||||||
|
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P-Profile-Installer-$I2P_VERSION.exe" -l "$EXECHECKSUM" -t "$TODAYSDATE" -n "I2P-Profile-Installer-$I2P_VERSION.exe"
|
||||||
|
cd build || exit
|
||||||
|
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"
|
15
i2pversion
15
i2pversion
@@ -1,15 +1,20 @@
|
|||||||
#! /usr/bin/env sh
|
#! /usr/bin/env sh
|
||||||
|
|
||||||
|
JNA_VERSION=5.11.0
|
||||||
|
export JNA_VERSION=5.11.0
|
||||||
|
|
||||||
#Comment this out to build from an alternate branch or
|
#Comment this out to build from an alternate branch or
|
||||||
# the tip of the master branch.
|
# the tip of the master branch.
|
||||||
I2P_VERSION=1.7.4
|
VERSIONMAJOR=1
|
||||||
export I2P_VERSION=1.7.4
|
VERSIONMINOR=7
|
||||||
|
VERSIONBUILD=7
|
||||||
|
I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
||||||
|
export I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
||||||
VERSION=i2p-jpackage-1.7.1
|
VERSION=i2p-jpackage-1.7.1
|
||||||
export VERSION="$VERSION"
|
export VERSION=i2p-jpackage-1.7.1
|
||||||
|
|
||||||
#Uncomment this to build from the tip of the master.
|
#Uncomment this to build from the tip of the master.
|
||||||
#I2P_VERSION=1.7.0
|
#I2P_VERSION=1.8.0
|
||||||
#export I2P_VERSION=1.7.0
|
#export I2P_VERSION=1.8.0
|
||||||
#VERSION=master
|
#VERSION=master
|
||||||
#export VERSION="$VERSION"
|
#export VERSION="$VERSION"
|
||||||
|
33
java/net/i2p/router/Elevator.java
Normal file
33
java/net/i2p/router/Elevator.java
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package net.i2p.router;
|
||||||
|
|
||||||
|
import com.sun.jna.WString;
|
||||||
|
import com.sun.jna.platform.win32.Kernel32;
|
||||||
|
import com.sun.jna.platform.win32.Kernel32Util;
|
||||||
|
|
||||||
|
public class Elevator {
|
||||||
|
public static void main(String... args) {
|
||||||
|
executeAsAdministrator("c:\\windows\\system32\\notepad.exe", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void executeAsAdministrator(String command, String args) {
|
||||||
|
if (command == "" || command == null) {
|
||||||
|
System.out.println("No command specified");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Shell32X.SHELLEXECUTEINFO execInfo = new Shell32X.SHELLEXECUTEINFO();
|
||||||
|
execInfo.lpFile = new WString(command);
|
||||||
|
if (args != null)
|
||||||
|
execInfo.lpParameters = new WString(args);
|
||||||
|
execInfo.nShow = Shell32X.SW_SHOWDEFAULT;
|
||||||
|
execInfo.fMask = Shell32X.SEE_MASK_NOCLOSEPROCESS;
|
||||||
|
execInfo.lpVerb = new WString("runas");
|
||||||
|
boolean result = Shell32X.INSTANCE.ShellExecuteEx(execInfo);
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
int lastError = Kernel32.INSTANCE.GetLastError();
|
||||||
|
String errorMessage = Kernel32Util.formatMessageFromLastErrorCode(lastError);
|
||||||
|
throw new RuntimeException("Error performing elevation: " + lastError + ": " + errorMessage + " (apperror="
|
||||||
|
+ execInfo.hInstApp + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
111
java/net/i2p/router/Shell32X.java
Normal file
111
java/net/i2p/router/Shell32X.java
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
package net.i2p.router;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import com.sun.jna.Native;
|
||||||
|
import com.sun.jna.Pointer;
|
||||||
|
import com.sun.jna.Structure;
|
||||||
|
import com.sun.jna.WString;
|
||||||
|
import com.sun.jna.platform.win32.Shell32;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.HINSTANCE;
|
||||||
|
import com.sun.jna.platform.win32.WinDef.HWND;
|
||||||
|
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||||
|
import com.sun.jna.platform.win32.WinReg.HKEY;
|
||||||
|
import com.sun.jna.win32.W32APIOptions;
|
||||||
|
|
||||||
|
public interface Shell32X extends Shell32 {
|
||||||
|
Shell32X INSTANCE = (Shell32X) Native.loadLibrary("shell32", Shell32X.class, W32APIOptions.UNICODE_OPTIONS);
|
||||||
|
|
||||||
|
int SW_HIDE = 0;
|
||||||
|
int SW_MAXIMIZE = 3;
|
||||||
|
int SW_MINIMIZE = 6;
|
||||||
|
int SW_RESTORE = 9;
|
||||||
|
int SW_SHOW = 5;
|
||||||
|
int SW_SHOWDEFAULT = 10;
|
||||||
|
int SW_SHOWMAXIMIZED = 3;
|
||||||
|
int SW_SHOWMINIMIZED = 2;
|
||||||
|
int SW_SHOWMINNOACTIVE = 7;
|
||||||
|
int SW_SHOWNA = 8;
|
||||||
|
int SW_SHOWNOACTIVATE = 4;
|
||||||
|
int SW_SHOWNORMAL = 1;
|
||||||
|
|
||||||
|
/** File not found. */
|
||||||
|
int SE_ERR_FNF = 2;
|
||||||
|
|
||||||
|
/** Path not found. */
|
||||||
|
int SE_ERR_PNF = 3;
|
||||||
|
|
||||||
|
/** Access denied. */
|
||||||
|
int SE_ERR_ACCESSDENIED = 5;
|
||||||
|
|
||||||
|
/** Out of memory. */
|
||||||
|
int SE_ERR_OOM = 8;
|
||||||
|
|
||||||
|
/** DLL not found. */
|
||||||
|
int SE_ERR_DLLNOTFOUND = 32;
|
||||||
|
|
||||||
|
/** Cannot share an open file. */
|
||||||
|
int SE_ERR_SHARE = 26;
|
||||||
|
|
||||||
|
int SEE_MASK_NOCLOSEPROCESS = 0x00000040;
|
||||||
|
|
||||||
|
int ShellExecute(int i, String lpVerb, String lpFile, String lpParameters, String lpDirectory, int nShow);
|
||||||
|
|
||||||
|
boolean ShellExecuteEx(SHELLEXECUTEINFO lpExecInfo);
|
||||||
|
|
||||||
|
public static class SHELLEXECUTEINFO extends Structure {
|
||||||
|
/*
|
||||||
|
* DWORD cbSize;
|
||||||
|
* ULONG fMask;
|
||||||
|
* HWND hwnd;
|
||||||
|
* LPCTSTR lpVerb;
|
||||||
|
* LPCTSTR lpFile;
|
||||||
|
* LPCTSTR lpParameters;
|
||||||
|
* LPCTSTR lpDirectory;
|
||||||
|
* int nShow;
|
||||||
|
* HINSTANCE hInstApp;
|
||||||
|
* LPVOID lpIDList;
|
||||||
|
* LPCTSTR lpClass;
|
||||||
|
* HKEY hkeyClass;
|
||||||
|
* DWORD dwHotKey;
|
||||||
|
* union {
|
||||||
|
* HANDLE hIcon;
|
||||||
|
* HANDLE hMonitor;
|
||||||
|
* } DUMMYUNIONNAME;
|
||||||
|
* HANDLE hProcess;
|
||||||
|
*/
|
||||||
|
|
||||||
|
public int cbSize = size();
|
||||||
|
public int fMask;
|
||||||
|
public HWND hwnd;
|
||||||
|
public WString lpVerb;
|
||||||
|
public WString lpFile;
|
||||||
|
public WString lpParameters;
|
||||||
|
public WString lpDirectory;
|
||||||
|
public int nShow;
|
||||||
|
public HINSTANCE hInstApp;
|
||||||
|
public Pointer lpIDList;
|
||||||
|
public WString lpClass;
|
||||||
|
public HKEY hKeyClass;
|
||||||
|
public int dwHotKey;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actually:
|
||||||
|
* union {
|
||||||
|
* HANDLE hIcon;
|
||||||
|
* HANDLE hMonitor;
|
||||||
|
* } DUMMYUNIONNAME;
|
||||||
|
*/
|
||||||
|
public HANDLE hMonitor;
|
||||||
|
public HANDLE hProcess;
|
||||||
|
|
||||||
|
protected List getFieldOrder() {
|
||||||
|
return Arrays.asList(new String[] {
|
||||||
|
"cbSize", "fMask", "hwnd", "lpVerb", "lpFile", "lpParameters",
|
||||||
|
"lpDirectory", "nShow", "hInstApp", "lpIDList", "lpClass",
|
||||||
|
"hKeyClass", "dwHotKey", "hMonitor", "hProcess",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -1,7 +1,12 @@
|
|||||||
package net.i2p.router;
|
package net.i2p.router;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.Socket;
|
||||||
import java.util.*;
|
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.crypto.*;
|
||||||
|
|
||||||
@@ -26,12 +31,29 @@ import static net.i2p.update.UpdateType.*;
|
|||||||
* router.pid - the pid of the java process.
|
* router.pid - the pid of the java process.
|
||||||
*/
|
*/
|
||||||
public class WinLauncher {
|
public class WinLauncher {
|
||||||
|
static Logger logger = Logger.getLogger("launcherlog");
|
||||||
|
static FileHandler fh;
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
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();
|
File programs = selectProgramFile();
|
||||||
if (!programs.exists())
|
if (!programs.exists())
|
||||||
programs.mkdirs();
|
programs.mkdirs();
|
||||||
else if (!programs.isDirectory()) {
|
else if (!programs.isDirectory()) {
|
||||||
System.err.println(programs + " exists but is not a directory. Please get it out of the way");
|
logger.warning(programs + " exists but is not a directory. Please get it out of the way");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,18 +61,24 @@ public class WinLauncher {
|
|||||||
if (!home.exists())
|
if (!home.exists())
|
||||||
home.mkdirs();
|
home.mkdirs();
|
||||||
else if (!home.isDirectory()) {
|
else if (!home.isDirectory()) {
|
||||||
System.err.println(home + " exists but is not a directory. Please get it out of the way");
|
logger.warning(home + " exists but is not a directory. Please get it out of the way");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
System.setProperty("i2p.dir.base", programs.getAbsolutePath());
|
System.setProperty("i2p.dir.base", programs.getAbsolutePath());
|
||||||
System.setProperty("i2p.dir.config", home.getAbsolutePath());
|
System.setProperty("i2p.dir.config", home.getAbsolutePath());
|
||||||
System.setProperty("router.pid", String.valueOf(ProcessHandle.current().pid()));
|
System.setProperty("router.pid", String.valueOf(ProcessHandle.current().pid()));
|
||||||
System.out.println("\t" + System.getProperty("i2p.dir.base") + "\n\t" + System.getProperty("i2p.dir.config")
|
logger.info("\t" + System.getProperty("i2p.dir.base") + "\n\t" + System.getProperty("i2p.dir.config")
|
||||||
+ "\n\t" + System.getProperty("router.pid"));
|
+ "\n\t" + System.getProperty("router.pid"));
|
||||||
|
|
||||||
|
// do a quick check to see of port 7657 is already occupied
|
||||||
|
if (i2pIsRunning()) {
|
||||||
|
logger.warning("I2P is already running");
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
// wupp.i2pRouter = new Router(System.getProperties());
|
// wupp.i2pRouter = new Router(System.getProperties());
|
||||||
System.out.println("Router is configured");
|
logger.info("Router is configured");
|
||||||
|
|
||||||
Thread registrationThread = new Thread(REGISTER_UPP);
|
Thread registrationThread = new Thread(REGISTER_UPP);
|
||||||
registrationThread.setName("UPP Registration");
|
registrationThread.setName("UPP Registration");
|
||||||
@@ -61,6 +89,18 @@ public class WinLauncher {
|
|||||||
RouterLaunch.main(args);
|
RouterLaunch.main(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean i2pIsRunning() {
|
||||||
|
// check if there's something listening on port 7657
|
||||||
|
try {
|
||||||
|
InetAddress localhost = InetAddress.getLocalHost();
|
||||||
|
Socket s = new Socket(localhost, 7657);
|
||||||
|
s.close();
|
||||||
|
return true;
|
||||||
|
} catch (IOException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static final Runnable REGISTER_UPP = () -> {
|
private static final Runnable REGISTER_UPP = () -> {
|
||||||
|
|
||||||
// first wait for the RouterContext to appear
|
// first wait for the RouterContext to appear
|
||||||
@@ -96,33 +136,60 @@ public class WinLauncher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static File selectHome() { // throws Exception {
|
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()) {
|
if (SystemVersion.isWindows()) {
|
||||||
File home = new File(System.getProperty("user.home"));
|
File home = new File(System.getProperty("user.home"));
|
||||||
File appData = new File(home, "AppData");
|
File appData = new File(home, "AppData");
|
||||||
File local = new File(appData, "Local");
|
File local = new File(appData, "Local");
|
||||||
File i2p;
|
File i2p;
|
||||||
i2p = new File(local, "I2P");
|
i2p = new File(local, "I2P");
|
||||||
System.out.println("Windows jpackage wrapper started, using: " + i2p + " as base config");
|
logger.info("Windows jpackage wrapper started, using: " + i2p + " as base config");
|
||||||
return i2p.getAbsoluteFile();
|
return i2p.getAbsoluteFile();
|
||||||
} else {
|
} else {
|
||||||
File jrehome = new File(System.getProperty("java.home"));
|
File jrehome = new File(System.getProperty("java.home"));
|
||||||
File programs = new File(jrehome.getParentFile().getParentFile(), ".i2p");
|
File programs = new File(jrehome.getParentFile().getParentFile(), ".i2p");
|
||||||
System.out.println("Linux portable jpackage wrapper started, using: " + programs + " as base config");
|
logger.info("Linux portable jpackage wrapper started, using: " + programs + " as base config");
|
||||||
return programs.getAbsoluteFile();
|
return programs.getAbsoluteFile();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static File selectProgramFile() {
|
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()) {
|
if (SystemVersion.isWindows()) {
|
||||||
File jrehome = new File(System.getProperty("java.home"));
|
File jrehome = new File(System.getProperty("java.home"));
|
||||||
File programs = jrehome.getParentFile();
|
File programs = jrehome.getParentFile();
|
||||||
System.out.println("Windows portable jpackage wrapper found, using: " + programs + " as working config");
|
logger.info("Windows portable jpackage wrapper found, using: " + programs + " as working config");
|
||||||
return programs.getAbsoluteFile();
|
return programs.getAbsoluteFile();
|
||||||
} else {
|
} else {
|
||||||
File jrehome = new File(System.getProperty("java.home"));
|
File jrehome = new File(System.getProperty("java.home"));
|
||||||
File programs = new File(jrehome.getParentFile().getParentFile(), "i2p");
|
File programs = new File(jrehome.getParentFile().getParentFile(), "i2p");
|
||||||
System.out.println("Linux portable jpackage wrapper found, using: " + programs + " as working config");
|
logger.info("Linux portable jpackage wrapper found, using: " + programs + " as working config");
|
||||||
return programs.getAbsoluteFile();
|
return programs.getAbsoluteFile();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static File logFile() {
|
||||||
|
File log = new File(selectProgramFile(), "log");
|
||||||
|
if (!log.exists())
|
||||||
|
log.mkdirs();
|
||||||
|
return new File(log, "launcher.log");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,11 +11,13 @@ class WinUpdateProcess implements Runnable {
|
|||||||
private final RouterContext ctx;
|
private final RouterContext ctx;
|
||||||
private final Supplier<String> versionSupplier;
|
private final Supplier<String> versionSupplier;
|
||||||
private final Supplier<File> fileSupplier;
|
private final Supplier<File> fileSupplier;
|
||||||
|
private final Log _log;
|
||||||
|
|
||||||
WinUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier, Supplier<File> fileSupplier) {
|
WinUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier, Supplier<File> fileSupplier) {
|
||||||
this.ctx = ctx;
|
this.ctx = ctx;
|
||||||
this.versionSupplier = versionSupplier;
|
this.versionSupplier = versionSupplier;
|
||||||
this.fileSupplier = fileSupplier;
|
this.fileSupplier = fileSupplier;
|
||||||
|
this._log = ctx.logManager().getLog(WinUpdateProcess.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private File workDir() throws IOException {
|
private File workDir() throws IOException {
|
||||||
@@ -24,7 +26,7 @@ class WinUpdateProcess implements Runnable {
|
|||||||
if (workDir.exists()) {
|
if (workDir.exists()) {
|
||||||
if (workDir.isFile())
|
if (workDir.isFile())
|
||||||
throw new IOException(workDir + " exists but is a file, get it out of the way");
|
throw new IOException(workDir + " exists but is a file, get it out of the way");
|
||||||
return null;
|
return workDir;
|
||||||
} else {
|
} else {
|
||||||
workDir.mkdirs();
|
workDir.mkdirs();
|
||||||
}
|
}
|
||||||
@@ -42,20 +44,29 @@ class WinUpdateProcess implements Runnable {
|
|||||||
var workingDir = workDir();
|
var workingDir = workDir();
|
||||||
var logFile = new File(workingDir, "log-" + version + ".txt");
|
var logFile = new File(workingDir, "log-" + version + ".txt");
|
||||||
|
|
||||||
ProcessBuilder pb = new ProcessBuilder(file.getAbsolutePath());
|
if (logFile.canWrite()) {
|
||||||
var env = pb.environment();
|
// check if we can write to the log file. If we can, use the ProcessBuilder to
|
||||||
env.put("OLD_I2P_VERSION", version);
|
// run the installer.
|
||||||
env.remove("RESTART_I2P");
|
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();
|
int exitCode = ctx.router().scheduledGracefulExitCode();
|
||||||
if (exitCode == Router.EXIT_HARD_RESTART || exitCode == Router.EXIT_GRACEFUL_RESTART)
|
if (exitCode == Router.EXIT_HARD_RESTART || exitCode == Router.EXIT_GRACEFUL_RESTART)
|
||||||
env.put("RESTART_I2P", "true");
|
env.put("RESTART_I2P", "true");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
pb.directory(workingDir).redirectErrorStream(true).redirectOutput(logFile).start();
|
pb.directory(workingDir).redirectErrorStream(true).redirectOutput(logFile).start();
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
System.out.println("Unable to run update-program in background. Update will fail.");
|
_log.error("Unable to run update-program in background. Update will fail.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// If we cant write to the log file and we're on Windows, use the elevator to
|
||||||
|
// execute the installer instead of the ProcessBuilder.
|
||||||
|
Elevator.executeAsAdministrator(file.getAbsolutePath(), " /S /D=" + workingDir.getAbsolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -63,7 +74,7 @@ class WinUpdateProcess implements Runnable {
|
|||||||
try {
|
try {
|
||||||
runUpdateInstaller();
|
runUpdateInstaller();
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
System.out.println("Error running updater, update may fail." + ioe);
|
_log.error("Error running updater, update may fail." + ioe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -43,28 +43,30 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
|||||||
public void updateDownloadedandVerified(UpdateType type, int fileType, String version, File file)
|
public void updateDownloadedandVerified(UpdateType type, int fileType, String version, File file)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
_log.info("Got an update to post-process");
|
_log.info("Got an update to post-process");
|
||||||
|
if (SystemVersion.isWindows()) {
|
||||||
|
|
||||||
if (type != UpdateType.ROUTER_SIGNED_SU3 && type != UpdateType.ROUTER_DEV_SU3) {
|
if (type != UpdateType.ROUTER_SIGNED_SU3 && type != UpdateType.ROUTER_DEV_SU3) {
|
||||||
_log.warn("Unsupported update type " + type);
|
_log.warn("Unsupported update type " + type);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileType != SU3File.TYPE_EXE) {
|
||||||
|
_log.warn("Unsupported file type " + fileType);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.positionedFile = moveUpdateInstaller(file);
|
||||||
|
this.version = version;
|
||||||
|
|
||||||
|
if (!hook.compareAndSet(false, true)) {
|
||||||
|
_log.info("shutdown hook was already set");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_log.info("adding shutdown hook");
|
||||||
|
|
||||||
|
ctx.addFinalShutdownTask(new WinUpdateProcess(ctx, this::getVersion, this::getFile));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileType != SU3File.TYPE_EXE) {
|
|
||||||
_log.warn("Unsupported file type " + fileType);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.positionedFile = moveUpdateInstaller(file);
|
|
||||||
this.version = version;
|
|
||||||
|
|
||||||
if (!hook.compareAndSet(false, true)) {
|
|
||||||
_log.info("shutdown hook was already set");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_log.info("adding shutdown hook");
|
|
||||||
ctx.addFinalShutdownTask(new WinUpdateProcess(ctx, this::getVersion, this::getFile));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private File moveUpdateInstaller(File file) throws IOException {
|
private File moveUpdateInstaller(File file) throws IOException {
|
||||||
|
@@ -7,13 +7,25 @@ build/profile: build
|
|||||||
build/win:
|
build/win:
|
||||||
mkdir -p build/win/
|
mkdir -p build/win/
|
||||||
|
|
||||||
build/win/i2pbrowser.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
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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/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/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
|
launchers: build/win build/win/i2pbrowser.bat build/win/i2pbrowser-private.bat build/win/i2pconfig.bat
|
||||||
|
4
release.sh
Executable file
4
release.sh
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
./unsigned.sh
|
||||||
|
./sign.sh
|
42
sign.sh
Executable file
42
sign.sh
Executable file
@@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
. i2pversion
|
||||||
|
|
||||||
|
if [ -f i2pversion_override ]; then
|
||||||
|
. i2pversion_override
|
||||||
|
fi
|
||||||
|
|
||||||
|
. config.sh
|
||||||
|
|
||||||
|
if [ -f config_overide.sh ]; then
|
||||||
|
. config_override.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
linuxsign() {
|
||||||
|
## LINUX SIGNING IS EXPERIMENTAL AND SHOULD NOT BE USED IN DEFAULT STATE.
|
||||||
|
if [ ! -f jsign-4.1.jar ]; then
|
||||||
|
wget -O jsign-4.1.jar https://github.com/ebourg/jsign/releases/download/4.1/jsign-4.1.jar
|
||||||
|
fi
|
||||||
|
if [ ! -f "$HOME/signingkeys/signing-key.jks" ]; then
|
||||||
|
mkdir -p "$HOME/signingkeys/"
|
||||||
|
keytool -genkey -alias server-alias -keyalg RSA -keypass changeit \
|
||||||
|
-storepass changeit -keystore "$HOME/signingkeys/signing-key.jks"
|
||||||
|
fi
|
||||||
|
java -jar jsign-4.1.jar \
|
||||||
|
--keystore "$HOME/signingkeys/signing-key.jks" \
|
||||||
|
--storepass changeit \
|
||||||
|
--keypass changeit \
|
||||||
|
--tsaurl "http://timestamp.sectigo.com" \
|
||||||
|
--name "I2P-Browser-Installer" \
|
||||||
|
--alg "SHA-512" \
|
||||||
|
"$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
|
||||||
|
JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
|
||||||
|
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"
|
||||||
|
cp "I2P-Profile-Installer-$I2P_VERSION.exe" "I2P-Profile-Installer-$I2P_VERSION-signed.exe"
|
||||||
|
fi
|
@@ -60,3 +60,4 @@ user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
|||||||
user_pref("webgl.enable-webgl2", false);
|
user_pref("webgl.enable-webgl2", false);
|
||||||
user_pref("media.navigator.enabled", false);
|
user_pref("media.navigator.enabled", false);
|
||||||
user_pref("dom.w3c_touch_events.enabled", false);
|
user_pref("dom.w3c_touch_events.enabled", false);
|
||||||
|
user_pref("browser.display.use_system_colors", false);
|
@@ -1,19 +1,18 @@
|
|||||||
# Overrides for Extension Preferences
|
/*
|
||||||
# Tor Browser Bundle
|
Overrides#
|
||||||
# Do not edit this file.
|
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.
|
||||||
# This file is modified from a file included in the Tor Browser Bundle.
|
|
||||||
#
|
|
||||||
# Copyright 2017 The Tor Project. See LICENSE.tor for licensing information.
|
|
||||||
|
|
||||||
# HTTPS Everywhere Preferences:
|
HTTPS Everywhere Preferences:
|
||||||
|
*/
|
||||||
user_pref("extensions.https_everywhere._observatory.popup_shown", true);
|
user_pref("extensions.https_everywhere._observatory.popup_shown", true);
|
||||||
user_pref("extensions.https_everywhere.toolbar_hint_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...
|
NoScript Preferences: #In order to disable all scripts by
|
||||||
# user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");
|
default, uncomment the following line...#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
|
||||||
# and comment out the following line
|
and comment out the following line
|
||||||
|
*/
|
||||||
user_pref("capability.policy.maonoscript.javascript.enabled", "allAccess");
|
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("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.default", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
||||||
@@ -106,7 +105,7 @@ user_pref("network.proxy.ftp_port", 4444);
|
|||||||
user_pref("network.proxy.socks", "127.0.0.1");
|
user_pref("network.proxy.socks", "127.0.0.1");
|
||||||
user_pref("network.proxy.socks_port", 4444);
|
user_pref("network.proxy.socks_port", 4444);
|
||||||
user_pref("network.proxy.share_proxy_settings", true);
|
user_pref("network.proxy.share_proxy_settings", true);
|
||||||
user_pref("browser.startup.homepage", "about:blank");
|
user_pref("browser.startup.homepage", "http://127.0.0.1:7657/home");
|
||||||
|
|
||||||
// Privacy-harden and disable irrelevant features.
|
// Privacy-harden and disable irrelevant features.
|
||||||
user_pref("app.normandy.api_url", "");
|
user_pref("app.normandy.api_url", "");
|
||||||
@@ -222,3 +221,4 @@ user_pref("webgl.min_capability_mode", true);
|
|||||||
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
||||||
user_pref("webgl.enable-webgl2", false);
|
user_pref("webgl.enable-webgl2", false);
|
||||||
user_pref("dom.w3c_touch_events.enabled", false);
|
user_pref("dom.w3c_touch_events.enabled", false);
|
||||||
|
user_pref("browser.display.use_system_colors", false);
|
@@ -1 +1 @@
|
|||||||
1.07.2
|
1.7.7
|
||||||
|
@@ -17,6 +17,7 @@ UniCode true
|
|||||||
var FFINSTEXE
|
var FFINSTEXE
|
||||||
var FFNONTORINSTEXE
|
var FFNONTORINSTEXE
|
||||||
var I2PINSTEXE
|
var I2PINSTEXE
|
||||||
|
Var PARENTOPTIONS
|
||||||
|
|
||||||
SetOverwrite on
|
SetOverwrite on
|
||||||
!define FFINSTEXE
|
!define FFINSTEXE
|
||||||
@@ -27,6 +28,8 @@ SetOverwrite on
|
|||||||
!define I2PINSTEXE
|
!define I2PINSTEXE
|
||||||
!define I2PINSTEXE32 "$PROGRAMFILES32\i2p"
|
!define I2PINSTEXE32 "$PROGRAMFILES32\i2p"
|
||||||
!define I2PINSTEXE64 "$PROGRAMFILES64\i2p"
|
!define I2PINSTEXE64 "$PROGRAMFILES64\i2p"
|
||||||
|
!define I2PINSTEXE_USERMODE "$LOCALAPPDATA\i2p"
|
||||||
|
|
||||||
|
|
||||||
!define RAM_NEEDED_FOR_64BIT 0x80000000
|
!define RAM_NEEDED_FOR_64BIT 0x80000000
|
||||||
|
|
||||||
@@ -39,10 +42,11 @@ Name "${COMPANYNAME} - ${APPNAME}"
|
|||||||
Icon ui2pbrowser_icon.ico
|
Icon ui2pbrowser_icon.ico
|
||||||
OutFile "I2P-Profile-Installer-${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}.exe"
|
OutFile "I2P-Profile-Installer-${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}.exe"
|
||||||
|
|
||||||
RequestExecutionLevel admin
|
RequestExecutionLevel user
|
||||||
|
|
||||||
!include LogicLib.nsh
|
!include LogicLib.nsh
|
||||||
!include x64.nsh
|
!include x64.nsh
|
||||||
|
!include FileFunc.nsh
|
||||||
!define MUI_ICON ui2pbrowser_icon.ico
|
!define MUI_ICON ui2pbrowser_icon.ico
|
||||||
!define MUI_FINISHPAGE
|
!define MUI_FINISHPAGE
|
||||||
!include "MUI2.nsh"
|
!include "MUI2.nsh"
|
||||||
@@ -126,6 +130,7 @@ RequestExecutionLevel admin
|
|||||||
PageEx license
|
PageEx license
|
||||||
licensetext "${LICENSE_TITLE}"
|
licensetext "${LICENSE_TITLE}"
|
||||||
licensedata "licenses\LICENSE.index"
|
licensedata "licenses\LICENSE.index"
|
||||||
|
#PageCallbacks elevatorCallback
|
||||||
PageExEnd
|
PageExEnd
|
||||||
PageEx directory
|
PageEx directory
|
||||||
dirtext "${FIREFOX_MESSAGE}"
|
dirtext "${FIREFOX_MESSAGE}"
|
||||||
@@ -140,10 +145,22 @@ PageEx directory
|
|||||||
PageExEnd
|
PageExEnd
|
||||||
Page instfiles
|
Page instfiles
|
||||||
|
|
||||||
|
|
||||||
!include i2pbrowser-mozcompat.nsi
|
!include i2pbrowser-mozcompat.nsi
|
||||||
|
|
||||||
Function .onInit
|
Function .onInit
|
||||||
|
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
|
||||||
|
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
|
!insertmacro MUI_LANGDLL_DISPLAY
|
||||||
Call ShouldInstall64Bit
|
Call ShouldInstall64Bit
|
||||||
${If} $0 == 1
|
${If} $0 == 1
|
||||||
@@ -172,13 +189,7 @@ Function .onInit
|
|||||||
StrCpy $FFINSTEXE "$PROFILE\Desktop\Tor Browser\Browser\"
|
StrCpy $FFINSTEXE "$PROFILE\Desktop\Tor Browser\Browser\"
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
|
# look for user installs
|
||||||
${If} ${FileExists} "${I2PINSTEXE32}\i2p.exe"
|
|
||||||
StrCpy $I2PINSTEXE "${I2PINSTEXE32}"
|
|
||||||
${EndIf}
|
|
||||||
${If} ${FileExists} "${I2PINSTEXE64}\i2p.exe"
|
|
||||||
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
|
|
||||||
${EndIf}
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
Function firefoxDetect
|
Function firefoxDetect
|
||||||
@@ -205,10 +216,8 @@ Function routerDetect
|
|||||||
${EndIf}
|
${EndIf}
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
# start default section
|
Function installerFunction
|
||||||
Section Install
|
${If} ${Silent}
|
||||||
|
|
||||||
${If} ${Silent}
|
|
||||||
${Do}
|
${Do}
|
||||||
${FindProcess} "I2P.exe" $0
|
${FindProcess} "I2P.exe" $0
|
||||||
Sleep 500
|
Sleep 500
|
||||||
@@ -330,20 +339,38 @@ Section Install
|
|||||||
|
|
||||||
# create a shortcut to the uninstaller
|
# create a shortcut to the uninstaller
|
||||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Uninstall-${APPNAME}.lnk" "$INSTDIR\uninstall-i2pbrowser.exe"
|
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
|
||||||
|
Call installerFunction
|
||||||
SectionEnd
|
SectionEnd
|
||||||
|
|
||||||
# uninstaller section start
|
# uninstaller section start
|
||||||
Section "uninstall"
|
Section "uninstall"
|
||||||
|
|
||||||
# Remove the licenses
|
|
||||||
rmDir /r "$INSTDIR\"
|
|
||||||
|
|
||||||
# Uninstall the launcher scripts
|
# Uninstall the launcher scripts
|
||||||
Delete $INSTDIR\i2pbrowser.bat
|
Delete $INSTDIR\*
|
||||||
Delete $INSTDIR\i2pconfig.bat
|
rmDir /r "$INSTDIR\"
|
||||||
Delete $INSTDIR\i2pbrowser-private.bat
|
${If} ${FileExists} "$I2PINSTEXE\jpackaged"
|
||||||
Delete $INSTDIR\ui2pbrowser_icon.ico
|
Delete $I2PINSTEXE\*
|
||||||
|
rmDir /r "$I2PINSTEXE"
|
||||||
|
${EndIf}
|
||||||
|
|
||||||
|
|
||||||
# Remove shortcuts and folders
|
# Remove shortcuts and folders
|
||||||
Delete "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk"
|
Delete "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk"
|
||||||
@@ -354,15 +381,12 @@ Section "uninstall"
|
|||||||
Delete "$DESKTOP\Browse I2P.lnk"
|
Delete "$DESKTOP\Browse I2P.lnk"
|
||||||
Delete "$DESKTOP\${APPNAME}.lnk"
|
Delete "$DESKTOP\${APPNAME}.lnk"
|
||||||
Delete "$DESKTOP\Private Browsing-${APPNAME}.lnk"
|
Delete "$DESKTOP\Private Browsing-${APPNAME}.lnk"
|
||||||
rmDir "$SMPROGRAMS\${APPNAME}"
|
rmDir /r "$SMPROGRAMS\${APPNAME}"
|
||||||
rmDir "$INSTDIR\firefox.profile.i2p\extensions"
|
rmDir /r "$INSTDIR\firefox.profile.i2p\extensions"
|
||||||
rmDir "$INSTDIR\firefox.profile.i2p"
|
rmDir /r "$INSTDIR\firefox.profile.i2p"
|
||||||
rmDir "$LOCALAPPDATA\${APPNAME}"
|
rmDir /r "$LOCALAPPDATA\${APPNAME}"
|
||||||
rmDir "$INSTDIR"
|
rmDir /r "$INSTDIR"
|
||||||
|
|
||||||
${If} ${FileExists} "$I2PINSTEXE\jpackaged"
|
|
||||||
rmDir "$I2PINSTEXE"
|
|
||||||
${EndIf}
|
|
||||||
# delete the uninstaller
|
# delete the uninstaller
|
||||||
Delete "$INSTDIR\uninstall-i2pbrowser.exe"
|
Delete "$INSTDIR\uninstall-i2pbrowser.exe"
|
||||||
|
|
||||||
|
@@ -1 +1 @@
|
|||||||
!define I2P_VERSION 1.7.0
|
!define I2P_VERSION 1.7.7
|
||||||
|
@@ -1,3 +1,3 @@
|
|||||||
!define VERSIONMAJOR 1
|
!define VERSIONMAJOR 1
|
||||||
!define VERSIONMINOR 7
|
!define VERSIONMINOR 7
|
||||||
!define VERSIONBUILD 4
|
!define VERSIONBUILD 7
|
||||||
|
@@ -58,6 +58,5 @@ user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
|||||||
user_pref("webgl.enable-webgl2", false);
|
user_pref("webgl.enable-webgl2", false);
|
||||||
user_pref("media.navigator.enabled", false);
|
user_pref("media.navigator.enabled", false);
|
||||||
user_pref("dom.w3c_touch_events.enabled", false);
|
user_pref("dom.w3c_touch_events.enabled", false);
|
||||||
user_pref("fission.autostart", true);
|
user_pref("browser.privatebrowsing.autostart", false);
|
||||||
user_pref("gfx.webrender.all", false);
|
user_pref("browser.display.use_system_colors", false);
|
||||||
user_pref("privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts", false);
|
|
@@ -1,15 +1,18 @@
|
|||||||
//# Overrides
|
/*
|
||||||
//for Extension Preferences# Tor Browser Bundle# Do not edit this file.##This file is modified from a file included in the Tor Browser Bundle.##Copyright 2017 The Tor Project.See LICENSE.tor
|
Overrides#
|
||||||
//for licensing information.
|
for Extension Preferences# Tor Browser Bundle# Do not edit this file.##This file is modified from a file included in the Tor Browser Bundle.##Copyright 2017 The Tor Project.See LICENSE.tor#
|
||||||
|
for licensing information.
|
||||||
|
|
||||||
//# HTTPS Everywhere Preferences:
|
HTTPS Everywhere Preferences:
|
||||||
|
*/
|
||||||
user_pref("extensions.https_everywhere._observatory.popup_shown", true);
|
user_pref("extensions.https_everywhere._observatory.popup_shown", true);
|
||||||
user_pref("extensions.https_everywhere.toolbar_hint_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...
|
NoScript Preferences: #In order to disable all scripts by
|
||||||
//#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
|
default, uncomment the following line...#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
|
||||||
//and comment out the following line
|
and comment out the following line
|
||||||
|
*/
|
||||||
user_pref("capability.policy.maonoscript.javascript.enabled", "allAccess");
|
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("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.default", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
||||||
@@ -79,6 +82,9 @@ user_pref("extensions.torbutton.use_nontor_proxy", true);
|
|||||||
//user_pref("extensions.torlauncher.socks_port_use_ipc", );
|
//user_pref("extensions.torlauncher.socks_port_use_ipc", );
|
||||||
//user_pref("extensions.torlauncher.socks_ipc_path", "");
|
//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.start_tor", false);
|
||||||
//user_pref("extensions.torlauncher.default_bridge_type", "");
|
//user_pref("extensions.torlauncher.default_bridge_type", "");
|
||||||
user_pref("extensions.torlauncher.prompt_at_startup", false);
|
user_pref("extensions.torlauncher.prompt_at_startup", false);
|
||||||
@@ -102,7 +108,7 @@ user_pref("network.proxy.ftp_port", 4444);
|
|||||||
user_pref("network.proxy.socks", "127.0.0.1");
|
user_pref("network.proxy.socks", "127.0.0.1");
|
||||||
user_pref("network.proxy.socks_port", 4444);
|
user_pref("network.proxy.socks_port", 4444);
|
||||||
user_pref("network.proxy.share_proxy_settings", true);
|
user_pref("network.proxy.share_proxy_settings", true);
|
||||||
user_pref("browser.startup.homepage", "about:blank");
|
user_pref("browser.startup.homepage", "http://127.0.0.1:7657/home");
|
||||||
|
|
||||||
// Privacy-harden and disable irrelevant features.
|
// Privacy-harden and disable irrelevant features.
|
||||||
user_pref("app.normandy.api_url", "");
|
user_pref("app.normandy.api_url", "");
|
||||||
@@ -218,6 +224,5 @@ user_pref("webgl.min_capability_mode", true);
|
|||||||
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
||||||
user_pref("webgl.enable-webgl2", false);
|
user_pref("webgl.enable-webgl2", false);
|
||||||
user_pref("dom.w3c_touch_events.enabled", false);
|
user_pref("dom.w3c_touch_events.enabled", false);
|
||||||
user_pref("fission.autostart", true);
|
user_pref("browser.privatebrowsing.autostart", false);
|
||||||
user_pref("gfx.webrender.all", false);
|
user_pref("browser.display.use_system_colors", false);
|
||||||
user_pref("privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts", false);
|
|
@@ -1 +1 @@
|
|||||||
1.07.2
|
1.7.7
|
||||||
|
19
src/win/common.bat
Normal file
19
src/win/common.bat
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
SET MYPATH=%~dp0
|
||||||
|
|
||||||
|
set ProgramFiles64=%ProgramFiles: (x86)=%
|
||||||
|
set I2PData="%LocalAppData%\I2P\"
|
||||||
|
|
||||||
|
set I2PPath="%ProgramFiles%\I2P\"
|
||||||
|
if exist "%LocalAppData%\I2P\I2P.exe" (
|
||||||
|
set I2PPath="%LocalAppData%\I2P\"
|
||||||
|
)
|
||||||
|
|
||||||
|
if exist "%ProgramFiles64%\I2P\" (
|
||||||
|
set I2PPath="%ProgramFiles64%\I2P\"
|
||||||
|
)
|
||||||
|
|
||||||
|
if exist "%ProgramFiles(x86)%\I2P" (
|
||||||
|
set I2PPath="%ProgramFiles(x86)%\I2P\"
|
||||||
|
)
|
12
src/win/copy-config-profile.bat
Normal file
12
src/win/copy-config-profile.bat
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
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*"
|
12
src/win/copy-profile.bat
Normal file
12
src/win/copy-profile.bat
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
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,34 +1,14 @@
|
|||||||
@echo on
|
@echo on
|
||||||
|
|
||||||
set "I2PPath=%ProgramFiles%\I2P\"
|
SET MYPATH=%~dp0
|
||||||
if exist "%ProgramFiles%\I2P\" (
|
call "%MYPATH%common.bat"
|
||||||
set "I2PPath=%ProgramFiles%\I2P\"
|
|
||||||
)
|
|
||||||
|
|
||||||
if exist "%ProgramFiles(x86)%\I2P" (
|
call "%MYPATH%launchi2p.bat"
|
||||||
set "I2PPath=%ProgramFiles(x86)%\I2P"
|
|
||||||
)
|
|
||||||
|
|
||||||
netstat /o /a | find /i "listening" | find ":7657" >nul 2>nul && (
|
call "%MYPATH%copy-profile.bat"
|
||||||
echo I2P is already running
|
|
||||||
) || (
|
|
||||||
if exist "%ProgramFiles%\I2P\jpackaged" (
|
|
||||||
start "i2p" /D "%LOCALAPPDATA%\I2P" "%I2PPath%\i2p.exe"
|
|
||||||
) else (
|
|
||||||
start "i2p" "%I2PPath%\i2p.exe"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
timeout /t 3
|
timeout /t 3
|
||||||
|
|
||||||
if exist "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\" (
|
|
||||||
echo "profile is configured, updating extensions"
|
|
||||||
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
|
|
||||||
) else (
|
|
||||||
echo "configuring profile"
|
|
||||||
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p"
|
|
||||||
)
|
|
||||||
|
|
||||||
if exist "%USERPROFILE%/Desktop/Tor Browser/Browser/firefox.exe" (
|
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
|
start "i2pbrowser" "%USERPROFILE%/Desktop/Tor Browser/Browser/firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p" -private-window about:blank
|
||||||
exit
|
exit
|
||||||
|
@@ -1,37 +1,14 @@
|
|||||||
@echo on
|
@echo on
|
||||||
|
|
||||||
set "I2PPath=%ProgramFiles%\I2P\"
|
SET MYPATH=%~dp0
|
||||||
if exist "%ProgramFiles%\I2P\" (
|
call "%MYPATH%common.bat"
|
||||||
set "I2PPath=%ProgramFiles%\I2P\"
|
|
||||||
)
|
|
||||||
|
|
||||||
if exist "%ProgramFiles(x86)%\I2P" (
|
|
||||||
set "I2PPath=%ProgramFiles(x86)%\I2P"
|
|
||||||
)
|
|
||||||
|
|
||||||
netstat /o /a | find /i "listening" | find ":7657" >nul 2>nul && (
|
|
||||||
echo I2P is already running
|
|
||||||
) || (
|
|
||||||
if exist "%ProgramFiles%\I2P\jpackaged" (
|
|
||||||
start "i2p" /D "%LOCALAPPDATA%\I2P" "%I2PPath%\i2p.exe"
|
|
||||||
) else (
|
|
||||||
start "i2p" "%I2PPath%\i2p.exe"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
call "%MYPATH%launchi2p.bat"
|
||||||
|
|
||||||
|
call "%MYPATH%copy-profile.bat"
|
||||||
|
|
||||||
timeout /t 3
|
timeout /t 3
|
||||||
|
|
||||||
if exist "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\" (
|
|
||||||
echo "profile is configured, updating extensions"
|
|
||||||
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
|
|
||||||
) else (
|
|
||||||
echo "configuring profile"
|
|
||||||
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p"
|
|
||||||
)
|
|
||||||
|
|
||||||
if exist "%USERPROFILE%/Desktop/Tor Browser/Browser/firefox.exe" (
|
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
|
start "i2pbrowser" "%USERPROFILE%/Desktop/Tor Browser/Browser/firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p" -url %1
|
||||||
exit
|
exit
|
||||||
|
@@ -1,12 +1,9 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
if exist "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p\" (
|
SET MYPATH=%~dp0
|
||||||
echo "profile is configured"
|
call "%MYPATH%common.bat"
|
||||||
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
|
|
||||||
) else (
|
call "%MYPATH%copy-config-profile.bat"
|
||||||
echo "configuring profile"
|
|
||||||
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.config.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p"
|
|
||||||
)
|
|
||||||
|
|
||||||
if exist "%ProgramFiles%\Mozilla Firefox\firefox.exe" (
|
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
|
start "i2pbrowser" "%ProgramFiles%\Mozilla Firefox\firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p" -url %1
|
||||||
|
16
src/win/launchi2p.bat
Normal file
16
src/win/launchi2p.bat
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
@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 "4444" >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
|
||||||
|
)
|
||||||
|
|
||||||
|
|
8
src/win/test.bat
Normal file
8
src/win/test.bat
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
SET MYPATH=%~dp0
|
||||||
|
|
||||||
|
call "%MYPATH%common.bat"
|
||||||
|
|
||||||
|
set TEST=TEST
|
||||||
|
|
||||||
|
echo testing: %TEST% path to me: %MYPATH% path to I2P %I2PPath%
|
8
unsigned.sh
Normal file
8
unsigned.sh
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
./clean.sh
|
||||||
|
wsl make distclean
|
||||||
|
wsl make clean-extensions
|
||||||
|
wsl make extensions
|
||||||
|
./build.sh
|
||||||
|
wsl make
|
Reference in New Issue
Block a user