Compare commits

...

145 Commits

Author SHA1 Message Date
idk
c7bea957cb eliminate extra quote from launchi2p.bat 2022-06-06 00:23:47 -04:00
idk
e246159285 update router version 2022-05-23 16:48:11 -04:00
idk
a7c5151b56 make i2pIsRunning behavior consistent for both tests 2022-05-20 18:46:34 -04:00
idk
23ae110698 move i2pIsRunning further up in launcher 2022-05-20 18:44:39 -04:00
idk
46ef089acc check for router.ping to determine if there's another I2P running 2022-05-20 18:42:35 -04:00
idk
235b6444e7 check for 7657 instead of 4444 in launcher script 2022-05-20 18:21:49 -04:00
idk
d5b1291a30 \licenses\license\ 2022-05-20 13:11:45 -04:00
idk
f7fa344ea8 \is\are" 2022-05-20 13:02:30 -04:00
idk
698befcdda fix columns in license.index 2022-05-20 13:00:07 -04:00
idk
c9747734dc document license generation/display 2022-05-20 12:56:59 -04:00
idk
b4261675b0 change license generation/display 2022-05-20 12:53:42 -04:00
idk
b2b3ba75fb don't pull tags or checkout version since we're checking out the tags in one step 2022-05-19 20:42:03 -04:00
idk
8257ee6625 always change back to the source directory when running a new script 2022-05-19 19:50:31 -04:00
idk
e23db67782 fix mode of unsigned.sh 2022-05-19 19:36:57 -04:00
idk
ff733907c0 re-upload if we re-run daily 2022-05-18 22:51:32 -04:00
idk
a09da35170 re-upload if we re-run daily 2022-05-18 22:30:29 -04:00
idk
af5add3143 fix jpackage version in nsis installer 2022-05-18 21:32:42 -04:00
idk
0f5eb563eb make jpackage 2022-05-18 21:30:45 -04:00
idk
53dd311b58 clean before running daily.sh 2022-05-18 21:28:02 -04:00
idk
6fc7d9a7b4 clean before running daily.sh 2022-05-18 21:26:33 -04:00
idk
d283efdbf5 fix missing .sh on instructions in daily.sh 2022-05-18 21:25:27 -04:00
idk
de56966a51 fix date 2022-05-18 21:19:58 -04:00
idk
9b7f886e96 re-add nsi file 2022-05-18 21:17:26 -04:00
idk
ec94eee4e2 experiment with daily uploads 2022-05-18 21:16:27 -04:00
idk
17d3b9161f experiment with daily uploads 2022-05-18 21:11:11 -04:00
idk
b8d1a48961 experiment with daily uploads 2022-05-18 20:50:38 -04:00
idk
597207b425 experiment with daily uploads 2022-05-18 20:50:06 -04:00
idk
d851dec3c4 experiment with daily uploads 2022-05-18 19:48:42 -04:00
idk
1339df4ea6 conditionally include .version 2022-05-18 18:26:46 -04:00
idk
02ed695417 i2pversion or i2pversion_overrides automatically sets version no matter what 2022-05-18 18:19:06 -04:00
idk
0c0219c308 i2pversion or i2pversion_overrides automatically sets version no matter what 2022-05-18 18:17:26 -04:00
idk
d47a6c1234 fix unchecked-in copy change 2022-05-18 18:12:41 -04:00
idk
cc5f3052fa fix launch message 2022-05-18 18:07:52 -04:00
idk
c10cf6aaeb use netstat oan and findstr in router up check because it's magnitudes faster 2022-05-18 18:06:12 -04:00
idk
17f2c8bdae actually, do set the working directory to the exe path because it achieves the identical result and matches the i2p.i2p desktop shortcut behavior 2022-05-18 17:50:32 -04:00
idk
7627dd9742 Don't set working directory in start command so it can just have one 2022-05-18 17:44:53 -04:00
idk
d4f14fdae9 Don't set working directory in start command so it can just have one 2022-05-18 17:43:16 -04:00
idk
1e18aa8c0d Apparently *that* is how you suppress the copy-as-file notification from xcopy. 2022-05-18 17:16:25 -04:00
idk
88ba9dc96e more batch quoting madness 2022-05-18 17:09:10 -04:00
idk
3fda252a34 more batch quoting madness 2022-05-18 17:06:56 -04:00
idk
dbc8376ebd more batch quoting madness 2022-05-18 16:55:29 -04:00
idk
ed53efea8f more batch quoting madness 2022-05-18 16:51:21 -04:00
idk
a4d9d17306 more batch quoting madness 2022-05-18 16:48:57 -04:00
idk
42b2e78bbe don't echo in common.bat 2022-05-18 16:35:22 -04:00
idk
7fb9fd4e8d Cleanup quoting in common.bat 2022-05-18 16:28:39 -04:00
idk
6ca76277db Execute if statement outcomes on one line because batch. 2022-05-18 16:18:43 -04:00
idk
983813caaf Execute if statement outcomes on one line because batch. 2022-05-18 16:14:03 -04:00
idk
5d9cd3b669 Execute if statement outcomes on one line because batch. 2022-05-18 16:12:09 -04:00
idk
45a358bba4 Execute if statement outcomes on one line because batch. 2022-05-18 16:09:13 -04:00
idk
1b2985665a Execute if statement outcomes on one line because batch. 2022-05-18 15:59:04 -04:00
idk
a40a212774 Always get profile from data directory 2022-05-18 15:14:15 -04:00
idk
78e703fd92 enclose conditionals in copy-profile scripts to allow multi-line statements within them? Batch is weird 2022-05-18 15:10:49 -04:00
idk
7f2ef1d074 quote call statements in launcher scripts 2022-05-18 14:44:19 -04:00
idk
c2b2624388 delete wrapper script, won't need it 2022-05-18 14:26:01 -04:00
idk
c5dda34ef2 delete wrapper script, won't need it 2022-05-18 14:25:34 -04:00
idk
8c507478b6 delete wrapper script, won't need it 2022-05-18 14:16:41 -04:00
idk
574321a1ee fix path detection when NSIS overrides Windows Environment Variables 2022-05-18 14:06:05 -04:00
idk
28ad8fcb61 disable elevator callback 2022-05-18 13:43:47 -04:00
idk
af3e1696b8 detect admin installs even when installing in adminless mode 2022-05-18 12:35:55 -04:00
idk
ca4bf67e19 no one:
NSIS: a dozen different ways to store or reference a value, none of which have consistent behavior or semantics.
2022-05-18 12:05:18 -04:00
idk
451e5d0494 use a callback to elevate earlier in the process 2022-05-18 11:46:06 -04:00
idk
ea8788e1c8 Don't pass an ArgumentList unless an ArgumentList exists 2022-05-18 11:30:48 -04:00
idk
fa05c5f1cc More powershell elevator refinements 2022-05-18 11:13:28 -04:00
idk
3ab6464c54 Add script to build unsigned exes automatically before releases 2022-05-18 01:08:44 -04:00
idk
0d29cd2bff Simplify runas commands 2022-05-18 01:06:24 -04:00
idk
cf4017f212 Elevator has to use powershell 2022-05-17 18:31:44 -04:00
idk
10ca0ec281 Update exe signing procedure 2022-05-17 18:02:03 -04:00
idk
288007d6dd Update exe signing procedure 2022-05-17 17:49:33 -04:00
idk
0e7b25ad2c Update release procedure 2022-05-17 17:27:06 -04:00
idk
27082b713e Update exe signing procedure 2022-05-17 17:26:04 -04:00
idk
e16c7bca76 Update su3 signing procedure 2022-05-17 17:25:31 -04:00
idk
85fb43ca57 Update su3 signing procedure 2022-05-17 17:20:15 -04:00
idk
7a3598817d Update su3 signing procedure 2022-05-17 17:18:12 -04:00
idk
8e95435be0 fix missing variable 2022-05-17 17:12:26 -04:00
idk
9aba119a49 Also attempt to do it without the wrapper 2022-05-17 16:52:22 -04:00
idk
cf091c9e10 Don't launch I2P if it's already running 2022-05-17 16:43:41 -04:00
idk
1cbd3f6553 specify user:administrator to runas 2022-05-17 16:38:18 -04:00
idk
467512bd26 update version 2022-05-17 16:14:39 -04:00
idk
af9c2460e9 use jsign 2022-05-17 16:12:43 -04:00
idk
6ffd0dae9a bump the version, use an updated JNA_VERSION 2022-05-17 15:12:39 -04:00
idk
fb28051ba2 Minify phases of wrapper launcher 2022-05-17 14:30:23 -04:00
idk
8f19517167 Minify phases of wrapper launcher 2022-05-17 14:23:49 -04:00
idk
e55c57c6f8 add a wrapper to launch installer as correct user 2022-05-17 13:56:45 -04:00
idk
e722cb4bec add a wrapper to launch installer as correct user 2022-05-17 13:51:03 -04:00
idk
963d7e88b4 update examples in config.sh 2022-05-10 20:12:23 -04:00
idk
59baf37322 don't clean in build.sh 2022-05-10 19:26:06 -04:00
idk
b949fa8a84 show path and java home in build process 2022-05-10 19:14:05 -04:00
idk
12b762d595 set path and java home in config.sh 2022-05-10 19:12:25 -04:00
idk
aa2ab5bbe5 try adding ALL-UNNAMED to properties 2022-05-10 18:25:10 -04:00
idk
e3f42a42bd log launcher into a file before router starts, launcher.log. Get rid of system.out logging. 2022-05-10 18:11:45 -04:00
idk
3da8f56247 log launcher into a file before router starts, launcher.log. Get rid of system.out logging. 2022-05-10 18:00:21 -04:00
idk
31c60f74e1 log launcher into a file before router starts, launcher.log. Get rid of system.out logging. 2022-05-10 17:49:40 -04:00
idk
cd790ecae8 bump version 2022-05-08 22:31:34 -04:00
idk
cfbeae0ecb fix config file copy which was cleared by build 2022-05-08 22:27:33 -04:00
idk
b87e701ee0 fix config file copy which was cleared by build 2022-05-08 22:12:28 -04:00
idk
f8c84ba50a add some crude logging and a signtool example to the readme. 2022-05-08 20:24:33 -04:00
idk
5d3615a0c6 Update changelog 2022-05-08 19:39:44 -04:00
idk
ec98865d33 call common.bat on every script that requires variables set in that script 2022-05-08 13:06:18 -04:00
idk
978af1cb11 move more scripted prerequisites to separate files 2022-05-08 13:02:59 -04:00
idk
560f1c707a update version, get rid of profile version 2022-05-05 18:20:54 -04:00
idk
e29fdd95a1 run make clean in clean.sh 2022-05-05 18:18:20 -04:00
idk
39e1df1b10 update the changelog 2022-05-05 18:14:08 -04:00
idk
93b6bc4b3e bump version for a release, pull tags during build 2022-05-05 18:09:35 -04:00
idk
334e6525b1 bump version 2022-05-05 18:02:36 -04:00
idk
46c6fb77e2 Devise a way to test I2P router detection priorities more easily #17 2022-05-05 17:01:01 -04:00
idk
9305301bf5 Fix I2P router detection priorities in Windows launcher scripts #17 2022-05-05 16:21:20 -04:00
idk
d874204add Merge branch 'master' of i2pgit.org:i2p-hackers/i2p.firefox 2022-04-20 17:12:25 -04:00
idk
66864c317d Merge branch 'settable-paths' into 'master'
Enable updating to/from non `%ProgramFiles%` locations

Closes #13

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

10
.gitignore vendored
View File

@ -2,6 +2,7 @@ build
*.deb
*.tgz
./I2P/
I2P/
i2pversion_override
*.crl
*.crt
@ -9,3 +10,12 @@ i2pversion_override
*.p12
.stfolder
*.url
.vscode
.version
*.su3
*.su3.torrent
*.exe
*.log
cmd
*.so
*.jar

View File

@ -3,19 +3,23 @@
-include config.mk
preset=`rm .version; make .version`
preset=`rm .version; make version`
include .version
-include .version
PROFILE_VERSION=$(MAJOR).$(MINOR).$(BUILD)
all: .version prep install.exe
all: version prep install.exe
tag:
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
rm -f version.txt
make version.txt i2pbrowser-jpackage.nsi
version.txt:
@ -23,23 +27,39 @@ version.txt:
echo "$(PROFILE_VERSION)" > src/app-profile/version.txt
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 "$(SIGNER)"
@echo "$(I2P_VERSION)"
@echo "$(MAJOR).$(MINOR).$(BUILD)"
@echo "$(preset)"
prep: profile.tgz app-profile.tgz profile build/licenses build/I2P build/I2P/config launchers
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
echo "nsi1" >make.log
cp src/nsis/*.nsh build
echo "nsi2" >make.log
cp src/icons/*.ico build
install.exe:
install.exe: #build/licenses
cd build && makensis i2pbrowser-installer.nsi && cp I2P-Profile-Installer-*.exe ../ && echo "built windows installer"
export RES_DIR="../i2p.i2p.jpackage-build/installer/resources"
@ -66,7 +86,7 @@ src/I2P/config: build/I2P
cp -v $(RES_DIR)/i2ptunnel.config src/I2P/config/
cp -v $(RES_DIR)/wrapper.config src/I2P/config/
#grep -v 'router.updateURL' $(RES_DIR)/router.config > src/I2P/config/router.config
cat router.config >> src/I2P/config/router.config
cat router.config > src/I2P/config/router.config
cp -v $(RES_DIR)/hosts.txt src/I2P/config/hosts.txt
cp -R $(RES_DIR)/certificates src/I2P/config/certificates
cp -R $(RES_DIR)/eepsite src/I2P/config/eepsite
@ -89,10 +109,20 @@ build/licenses: build
mkdir -p build/licenses
cp license/* build/licenses
cp LICENSE.md build/licenses/MIT.txt
unix2dos build/licenses/LICENSE.index
cat build/licenses/LICENSE.index \
build/licenses/EPL.txt \
build/licenses/GPL+CLASSPATH.txt \
build/licenses/HTTPS-Everywhere.txt \
build/licenses/LICENSE.tor \
build/licenses/MIT.txt \
build/licenses/MPL2.txt \
build/licenses/NoScript.txt \
build/licenses/NSS.txt \
build/licenses/I2P.txt > build/licenses/LICENSE.txt
unix2dos build/licenses/LICENSE.txt
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
build:

View File

@ -4,22 +4,22 @@ I2P Browsing Profile for Firefox
Features:
---------
- Automatically select an up-to-date, secure Firefox or Tor Browser(On Windows) variant
- Automatically configure a profile for I2P
- Automatically block-list all non-I2P local destinations
- Enable first-party isolation, anti-fingerprinting, letterboxing
- Automatically sandbox I2P, Non-I2P, and I2P-Application cookiestores
- Automatically select an up-to-date, secure Firefox or Tor Browser(On Windows) variant
- Automatically configure a profile for I2P
- Automatically block-list all non-I2P local destinations
- Enable first-party isolation, anti-fingerprinting, letterboxing
- Automatically sandbox I2P, Non-I2P, and I2P-Application cookiestores
Build Dependencies:
-------------------
To build this, you will need the following software packages (all available in Debian) :
* make
* nsis
* dos2unix
* curl
* jq
- make
- nsis
- dos2unix
- curl
- jq
In addition, you will need the NSIS plugin "ShellExecAsUser" which you can get from the
[NSIS Wiki Page](https://nsis.sourceforge.io/ShellExecAsUser_plug-in). In order to install
@ -32,14 +32,13 @@ cp -rv Plugins/* /usr/share/nsis/Plugins/
To build a Debian package, you'll also need
* checkinstall
- checkinstall
Preparation
-----------
Before you build, run the targets
make clean-extensions
make extensions
@ -60,6 +59,14 @@ console wrapper.
install.exe - the windows installer, which sets up shortcuts to
launch Firefox on Windows.
When generating a Windows build it's important to make sure that the
licenses for all the bundled softare are included. This should happen
automatically. When bundling software, describe the terms and where
they are applied in the `LICENSE.index`, then add the full license
to the `licenses` directory. Then, add the full license to the `cat`
command in the `build/licenses` make target. The build/licenses
target is run automatically during the build process.
Unix Support
------------
@ -99,8 +106,8 @@ with `sudo service i2p start` then you can run the script:
/usr/local/bin/i2p-config-service-setup
Including a jpackaged I2P Router(EXPERIMENTAL)
----------------------------------------------
Including a jpackaged I2P Router
--------------------------------
In order to include a jpackaged(dependency-free) I2P router in the Profile
Bundle you will need to build the jpackaged I2P router as an "App Image" on
@ -168,6 +175,9 @@ you should select "Checkout as is, commit as is" and leave line-endings alone.
End-to-End Windows build process using Cygwin
---------------------------------------------
I highly recommend you look into the Chocolatey package manager, which makes it much
easier to configure these tools and keep them up to date.
**Prerequisites:** You need to have OpenJDK 14 or greater installed and configured
with your `%JAVA_HOME%` environment variable configured and `%JAVA_HOME%/bin` on
your `%PATH%`. You need to have Apache Ant installed and configured with `%ANT_HOME%`
@ -178,27 +188,26 @@ select "Checkout as is, commit as is" and leave line-endings alone.
TODO: Add links to the respective instructions for each of these.
1. Run the Cygwin `setup-$arch.exe` for your platform to set up new packages.
Select the `make` `jq` `dos2unix` and `curl` packages.
2. Open a cygwin terminal.
3. Clone `i2p.i2p` and `i2p.firefox`
1. Run the Cygwin `setup-$arch.exe` for your platform to set up new packages. Select the `make` `jq` `dos2unix` and `curl` packages.
2. Open a cygwin terminal.
3. Clone `i2p.i2p` and `i2p.firefox`
git clone https://github.com/i2p/i2p.i2p
git clone https://github.com/i2p/i2p.firefox
3. Move to the i2p.i2p directory. Build the .jar files required to build the App Image
4. Move to the i2p.i2p directory. Build the .jar files required to build the App Image
inside i2p.i2p. Return to home.
cd i2p.i2p
ant clean pkg
cd ..
4. Move into the i2p.firefox directory. Run the `./build.sh` script.
5. Move into the i2p.firefox directory. Run the `./build.sh` script.
cd i2p.firefox
./build.sh
5. Run `make` to build the installer.
6. Run `make` to build the installer.
Doing a Release
---------------
@ -208,25 +217,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
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 for automatically updating a Windows I2P router
requires you to also have Go installed in your Cygwin or WSL environment.
With WSL, you can do this using the command:
requires you to either be using linux, or have Go installed in your Cygwin or WSL environment.
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:
wsl make su3
to build the signing tool if necessary and then package the installer in a
to run the signing tool if necessary and then package the installer in a
signed update file.
It's also probably possible to do this with the Java I2P distribution and a
`.bat` script.
Docker Support
--------------
@ -265,5 +278,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:
- https://i2pgit.org/idk/I2P-in-Private-Browsing-Mode-Firefox
- https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox

View File

@ -27,22 +27,21 @@ fi
if [ "$JAVA" -lt "17" ]; then
echo "It is highly recommended that you use Java 17+ to build release packages"
fi
sleep 5s
if [ -z "${JAVA_HOME}" ]; then
JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
echo "Building with: $JAVA, $JAVA_HOME"
fi
echo "cleaning"
./clean.sh
if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
fi
echo "Building with: $JAVA, $JAVA_HOME"
sleep 5s
HERE="$PWD"
if [ ! -d "$HERE/../i2p.i2p.jpackage-build/" ]; then
git clone https://i2pgit.org/i2p-hackers/i2p.i2p "$HERE/../i2p.i2p.jpackage-build/"
git clone -b "$VERSION" https://i2pgit.org/i2p-hackers/i2p.i2p "$HERE/../i2p.i2p.jpackage-build/"
fi
cd "$HERE/../i2p.i2p.jpackage-build/"
git checkout "$VERSION"
for i in $COUNT; do
echo -n "$i...."; sleep 1s
done
@ -54,13 +53,25 @@ RES_DIR="$HERE/../i2p.i2p.jpackage-build/installer/resources"
I2P_JARS="$I2P_PKG/lib"
I2P_JBIGI="$HERE/../i2p.i2p.jpackage-build/installer/lib/jbigi"
echo "compiling custom launcher"
mkdir build
mkdir -p build
cp "$I2P_JARS"/*.jar build
if [ ! -f "$HERE/build/jna.jar" ]; then
wget -O "$HERE/build/jna.jar" "https://repo1.maven.org/maven2/net/java/dev/jna/jna/$JNA_VERSION/jna-$JNA_VERSION.jar"
fi
if [ ! -f "$HERE/build/jna-platform.jar" ]; then
wget -O "$HERE/build/jna-platform.jar" "https://repo1.maven.org/maven2/net/java/dev/jna/jna-platform/$JNA_VERSION/jna-platform-$JNA_VERSION.jar"
fi
cd java
"$JAVA_HOME"/bin/javac -d ../build -classpath "$HERE"/build/i2p.jar:"$HERE"/build/router.jar:"$HERE"/build/routerconsole.jar net/i2p/router/WinLauncher.java net/i2p/router/WindowsUpdatePostProcessor.java net/i2p/router/WinUpdateProcess.java
"$JAVA_HOME"/bin/javac -d ../build -classpath "$HERE/build/jna.jar":"$HERE/build/jna-platform.jar":"$HERE/build/i2p.jar":"$HERE/build/router.jar":"$HERE/build/routerconsole.jar" \
net/i2p/router/Elevator.java \
net/i2p/router/Shell32X.java \
net/i2p/router/WinLauncher.java \
net/i2p/router/WindowsUpdatePostProcessor.java \
net/i2p/router/WinUpdateProcess.java
cd ..
#echo "building launcher.jar"
@ -80,6 +91,11 @@ 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/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 \
--resource-dir build \
--input build --main-jar launcher.jar --main-class net.i2p.router.WinLauncher
cp "$I2P_PKG/licenses/"* license/
cp "$HERE/../i2p.i2p.jpackage-build/LICENSE.txt" license/I2P.txt

View File

@ -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
* This release fixes automatic update using Bittorrent within the I2P network
and the custom Update PostProcessor.

View File

@ -1,8 +1,13 @@
#! /usr/bin/env sh
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
cd "$SCRIPT_DIR" || exit 1
here=$(pwd)
cd ../i2p.i2p.jpackage-build/
ant distclean
git checkout .
git checkout master
cd "$here"
rm -rf \
build \
@ -18,4 +23,5 @@ rm -rf \
wrapper.log \
*.jar \
*.exe \
*.dmg
*.dmg
make clean

24
config.sh Normal file → Executable file
View File

@ -2,22 +2,29 @@
## If you need to use a different JVM, JDK, or other utility from
# build.sh, set it in this file, for example:
#export PATH="$PATH:/c/Program Files/Java/jdk-17.0.3/bin/"
#export JAVA_HOME="/c/Program Files/Java/jdk-17.0.3"
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):
#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 JAVA_HOME="/c/Program Files/Java/jdk-18.0.1"
#export PATH="$PATH:/c/Program Files/Eclipse Adoptium/jdk-17.0.2/bin/"
#export JAVA_HOME="/c/Program Files/Eclipse Adoptium/jdk-17.0.2"
#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/"
#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 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 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)
@ -37,4 +44,7 @@
# required to build this if you do not wish to edit your PATH across the entire
# Windows session, and for setting ANT_HOME
#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/"

41
daily.sh Executable file
View File

@ -0,0 +1,41 @@
#! /usr/bin/env sh
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
cd "$SCRIPT_DIR" || exit 1
### 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 -fd
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"

View File

@ -1,15 +1,20 @@
#! /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
# the tip of the master branch.
I2P_VERSION=1.7.4
export I2P_VERSION=1.7.4
VERSION=i2p-jpackage-1.7.1
export VERSION="$VERSION"
VERSIONMAJOR=1
VERSIONMINOR=8
VERSIONBUILD=0
I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
export I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
VERSION=i2p-1.8.0
export VERSION=i2p-1.8.0
#Uncomment this to build from the tip of the master.
#I2P_VERSION=1.7.0
#export I2P_VERSION=1.7.0
#I2P_VERSION=1.8.0
#export I2P_VERSION=1.8.0
#VERSION=master
#export VERSION="$VERSION"

View File

@ -0,0 +1,33 @@
package net.i2p.router;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.Kernel32Util;
public class Elevator {
public static void main(String... args) {
executeAsAdministrator("c:\\windows\\system32\\notepad.exe", "");
}
public static void executeAsAdministrator(String command, String args) {
if (command == "" || command == null) {
System.out.println("No command specified");
return;
}
Shell32X.SHELLEXECUTEINFO execInfo = new Shell32X.SHELLEXECUTEINFO();
execInfo.lpFile = new WString(command);
if (args != null)
execInfo.lpParameters = new WString(args);
execInfo.nShow = Shell32X.SW_SHOWDEFAULT;
execInfo.fMask = Shell32X.SEE_MASK_NOCLOSEPROCESS;
execInfo.lpVerb = new WString("runas");
boolean result = Shell32X.INSTANCE.ShellExecuteEx(execInfo);
if (!result) {
int lastError = Kernel32.INSTANCE.GetLastError();
String errorMessage = Kernel32Util.formatMessageFromLastErrorCode(lastError);
throw new RuntimeException("Error performing elevation: " + lastError + ": " + errorMessage + " (apperror="
+ execInfo.hInstApp + ")");
}
}
}

View File

@ -0,0 +1,111 @@
package net.i2p.router;
import java.util.*;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Shell32;
import com.sun.jna.platform.win32.WinDef.HINSTANCE;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.WinReg.HKEY;
import com.sun.jna.win32.W32APIOptions;
public interface Shell32X extends Shell32 {
Shell32X INSTANCE = (Shell32X) Native.loadLibrary("shell32", Shell32X.class, W32APIOptions.UNICODE_OPTIONS);
int SW_HIDE = 0;
int SW_MAXIMIZE = 3;
int SW_MINIMIZE = 6;
int SW_RESTORE = 9;
int SW_SHOW = 5;
int SW_SHOWDEFAULT = 10;
int SW_SHOWMAXIMIZED = 3;
int SW_SHOWMINIMIZED = 2;
int SW_SHOWMINNOACTIVE = 7;
int SW_SHOWNA = 8;
int SW_SHOWNOACTIVATE = 4;
int SW_SHOWNORMAL = 1;
/** File not found. */
int SE_ERR_FNF = 2;
/** Path not found. */
int SE_ERR_PNF = 3;
/** Access denied. */
int SE_ERR_ACCESSDENIED = 5;
/** Out of memory. */
int SE_ERR_OOM = 8;
/** DLL not found. */
int SE_ERR_DLLNOTFOUND = 32;
/** Cannot share an open file. */
int SE_ERR_SHARE = 26;
int SEE_MASK_NOCLOSEPROCESS = 0x00000040;
int ShellExecute(int i, String lpVerb, String lpFile, String lpParameters, String lpDirectory, int nShow);
boolean ShellExecuteEx(SHELLEXECUTEINFO lpExecInfo);
public static class SHELLEXECUTEINFO extends Structure {
/*
* DWORD cbSize;
* ULONG fMask;
* HWND hwnd;
* LPCTSTR lpVerb;
* LPCTSTR lpFile;
* LPCTSTR lpParameters;
* LPCTSTR lpDirectory;
* int nShow;
* HINSTANCE hInstApp;
* LPVOID lpIDList;
* LPCTSTR lpClass;
* HKEY hkeyClass;
* DWORD dwHotKey;
* union {
* HANDLE hIcon;
* HANDLE hMonitor;
* } DUMMYUNIONNAME;
* HANDLE hProcess;
*/
public int cbSize = size();
public int fMask;
public HWND hwnd;
public WString lpVerb;
public WString lpFile;
public WString lpParameters;
public WString lpDirectory;
public int nShow;
public HINSTANCE hInstApp;
public Pointer lpIDList;
public WString lpClass;
public HKEY hKeyClass;
public int dwHotKey;
/*
* Actually:
* union {
* HANDLE hIcon;
* HANDLE hMonitor;
* } DUMMYUNIONNAME;
*/
public HANDLE hMonitor;
public HANDLE hProcess;
protected List getFieldOrder() {
return Arrays.asList(new String[] {
"cbSize", "fMask", "hwnd", "lpVerb", "lpFile", "lpParameters",
"lpDirectory", "nShow", "hInstApp", "lpIDList", "lpClass",
"hKeyClass", "dwHotKey", "hMonitor", "hProcess",
});
}
}
}

View File

@ -1,7 +1,12 @@
package net.i2p.router;
import java.io.*;
import java.net.InetAddress;
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.*;
@ -26,12 +31,29 @@ 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;
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()) {
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);
}
@ -39,18 +61,23 @@ public class WinLauncher {
if (!home.exists())
home.mkdirs();
else if (!home.isDirectory()) {
System.err.println(home + " exists but is not a directory. Please get it out of the way");
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()));
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"));
// wupp.i2pRouter = new Router(System.getProperties());
System.out.println("Router is configured");
logger.info("Router is configured");
Thread registrationThread = new Thread(REGISTER_UPP);
registrationThread.setName("UPP Registration");
@ -61,6 +88,29 @@ public class WinLauncher {
RouterLaunch.main(args);
}
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;
}
}
try {
InetAddress localhost = InetAddress.getLocalHost();
Socket s = new Socket(localhost, 7657);
s.close();
return true;
} catch (IOException e) {
return false;
}
}
private static final Runnable REGISTER_UPP = () -> {
// first wait for the RouterContext to appear
@ -96,33 +146,60 @@ public class WinLauncher {
}
private static File selectHome() { // throws Exception {
String path_override = System.getenv("I2P_CONFIG");
if (path_override != null) {
File path = new File(path_override);
if (path != null && path.exists()) {
if (path.isDirectory())
return path.getAbsoluteFile();
else
throw new RuntimeException("I2P_CONFIG is not a directory: " + path);
}
}
if (SystemVersion.isWindows()) {
File home = new File(System.getProperty("user.home"));
File appData = new File(home, "AppData");
File local = new File(appData, "Local");
File i2p;
i2p = new File(local, "I2P");
System.out.println("Windows jpackage wrapper started, using: " + i2p + " as base config");
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");
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();
}
}
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();
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();
} else {
File jrehome = new File(System.getProperty("java.home"));
File programs = new File(jrehome.getParentFile().getParentFile(), "i2p");
System.out.println("Linux portable jpackage wrapper found, using: " + programs + " as working config");
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");
}
}

View File

@ -11,11 +11,13 @@ class WinUpdateProcess implements Runnable {
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);
}
private File workDir() throws IOException {
@ -24,7 +26,7 @@ class WinUpdateProcess implements Runnable {
if (workDir.exists()) {
if (workDir.isFile())
throw new IOException(workDir + " exists but is a file, get it out of the way");
return null;
return workDir;
} else {
workDir.mkdirs();
}
@ -42,20 +44,29 @@ class WinUpdateProcess implements Runnable {
var workingDir = workDir();
var logFile = new File(workingDir, "log-" + version + ".txt");
ProcessBuilder pb = new ProcessBuilder(file.getAbsolutePath());
var env = pb.environment();
env.put("OLD_I2P_VERSION", version);
env.remove("RESTART_I2P");
if (logFile.canWrite()) {
// check if we can write to the log file. If we can, use the ProcessBuilder to
// run the installer.
ProcessBuilder pb = new ProcessBuilder(file.getAbsolutePath(), "/S", "/D=" + workingDir.getAbsolutePath());
var env = pb.environment();
env.put("OLD_I2P_VERSION", version);
env.remove("RESTART_I2P");
int exitCode = ctx.router().scheduledGracefulExitCode();
if (exitCode == Router.EXIT_HARD_RESTART || exitCode == Router.EXIT_GRACEFUL_RESTART)
env.put("RESTART_I2P", "true");
int exitCode = ctx.router().scheduledGracefulExitCode();
if (exitCode == Router.EXIT_HARD_RESTART || exitCode == Router.EXIT_GRACEFUL_RESTART)
env.put("RESTART_I2P", "true");
try {
pb.directory(workingDir).redirectErrorStream(true).redirectOutput(logFile).start();
} catch (IOException ex) {
System.out.println("Unable to run update-program in background. Update will fail.");
try {
pb.directory(workingDir).redirectErrorStream(true).redirectOutput(logFile).start();
} catch (IOException ex) {
_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
@ -63,7 +74,7 @@ class WinUpdateProcess implements Runnable {
try {
runUpdateInstaller();
} catch (IOException ioe) {
System.out.println("Error running updater, update may fail." + ioe);
_log.error("Error running updater, update may fail." + ioe);
}
}
}

View File

@ -43,28 +43,30 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
public void updateDownloadedandVerified(UpdateType type, int fileType, String version, File file)
throws IOException {
_log.info("Got an update to post-process");
if (SystemVersion.isWindows()) {
if (type != UpdateType.ROUTER_SIGNED_SU3 && type != UpdateType.ROUTER_DEV_SU3) {
_log.warn("Unsupported update type " + type);
return;
if (type != UpdateType.ROUTER_SIGNED_SU3 && type != UpdateType.ROUTER_DEV_SU3) {
_log.warn("Unsupported update type " + type);
return;
}
if (fileType != SU3File.TYPE_EXE) {
_log.warn("Unsupported file type " + fileType);
return;
}
this.positionedFile = moveUpdateInstaller(file);
this.version = version;
if (!hook.compareAndSet(false, true)) {
_log.info("shutdown hook was already set");
return;
}
_log.info("adding shutdown hook");
ctx.addFinalShutdownTask(new WinUpdateProcess(ctx, this::getVersion, this::getFile));
}
if (fileType != SU3File.TYPE_EXE) {
_log.warn("Unsupported file type " + fileType);
return;
}
this.positionedFile = moveUpdateInstaller(file);
this.version = version;
if (!hook.compareAndSet(false, true)) {
_log.info("shutdown hook was already set");
return;
}
_log.info("adding shutdown hook");
ctx.addFinalShutdownTask(new WinUpdateProcess(ctx, this::getVersion, this::getFile));
}
private File moveUpdateInstaller(File file) throws IOException {

View File

@ -5,11 +5,38 @@ and they are distributed with this package in the "licenses" directory.
1. MIT License
* all original material in this repository
2. Mozilla Public License 2.0(From Mozilla Installer)
* ./i2pbrowser-mozcompat.nsi
* ./src/win/i2pbrowser-mozcompat.nsi
3. Modified BSD License(From Tor Browser Bundle)
* ./firefox.profile.i2p/user.js
* ./src/*/user.js
4. GNU General Public License 2.0(NoScript and HTTPS Everywhere)
* ./firefox.profile.i2p/extensions/
* ./src/*/extensions/
5. GNU General Public License 3.0(Part of HTTPS Everywhere)
* ./firefox.profike.i2p/extensions/https-everywhere@eff.org.xpi
* ./src/*/extensions/
6. GNU GPLv2 With Classpath Exception(Java libraries included via Jpackage)
* ./I2P
Additionally, the Jpackaged I2P Router contains software which is licensed
under multiple Free/Open Source Software Licenses.
ABOUT-Jetty.html LICENSE-ECLIPSE-1.0.html
LICENSE-Addressbook.txt LICENSE-ElGamalDSA.txt
LICENSE-Apache2.0.txt LICENSE-FatCowIcons.txt
LICENSE-BlockFile.txt LICENSE-Feather.txt
LICENSE-Boost.txt LICENSE-fontawesome.txt
LICENSE-BSD.txt LICENSE-forked-subprocess.swift.txt
LICENSE-CC0-1.0-Universal.txt LICENSE-Foxtrot.txt
LICENSE-Cryptix.txt LICENSE-FugueIcons.txt
LICENSE-DesktopGUI.txt LICENSE-GPLv2.txt
LICENSE-GPLv3.txt LICENSE-LGPLv2.1.txt
LICENSE-Launch4j.txt LICENSE-SilkIcons.txt
LICENSE-HashCash.txt LICENSE-LGPLv3.txt
LICENSE-I2PTunnel.txt LICENSE-Ministreaming.txt
LICENSE-Identicon.txt LICENSE-NDT.txt
LICENSE-InstallCert.txt LICENSE-Noise.txt
LICENSE-jBCrypt.txt LICENSE-sbt-wrapper.txt
LICENSE-JGoodies-Forms.txt LICENSE-Scala.md
LICENSE-JGoodies-Looks.txt LICENSE-SHA256.txt
NOTICE-Tomcat.txt NOTICE-Jetty.html
LICENSE-UPnP.txt LICENSE-SNTP.txt
LICENSE-Wrapper.txt LICENSE-Undraw.txt
LICENSE-XStream.txt NOTICE-Commons-Logging.txt

View File

@ -7,13 +7,25 @@ build/profile: build
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
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
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
launchers: build/win build/win/i2pbrowser.bat build/win/i2pbrowser-private.bat build/win/i2pconfig.bat

View File

@ -11,7 +11,7 @@ prepupdate:
su3: $(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools
$(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools -name "I2P-Profile-Installer-$(PROFILE_VERSION)-signed" -signer "$(SIGNER)" -version "$(I2P_VERSION)"
java -cp "$(HOME)/i2p/lib/*" net.i2p.crypto.SU3File sign -c ROUTER -f EXE I2P-Profile-Installer-$(PROFILE_VERSION)-signed.exe I2P-Profile-Installer-$(PROFILE_VERSION)-signed.su3 "$(HOME)/.i2p-plugin-keys/news-su3-keystore.ks" "$(I2P_VERSION)" $(SIGNER)
java -cp "$(HOME)/i2p/lib/*" net.i2p.crypto.SU3File sign -c ROUTER -f EXE I2P-Profile-Installer-$(PROFILE_VERSION)-signed.exe I2P-Profile-Installer-$(PROFILE_VERSION)-signed.su3 "$(HOME)/.i2p-plugin-keys/news-su3-keystore.ks" $(PROFILE_VERSION) $(SIGNER)
i2pwinupdate.su3.torrent: prepupdate su3
mktorrent \
@ -22,11 +22,11 @@ i2pwinupdate.su3.torrent: prepupdate su3
torrent: i2pwinupdate.su3.torrent
releases.json: torrent
releases.json:
@echo "[" | tee ../i2p.newsxml/data/win/beta/releases.json
@echo " {" | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"date\": \"$(I2P_DATE)\"," | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"version\": \"$(I2P_VERSION)\"," | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"version\": \"$(PROFILE_VERSION)\"," | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"minVersion\": \"1.5.0\"," | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"minJavaVersion\": \"1.8\"," | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"updates\": {" | tee -a ../i2p.newsxml/data/win/beta/releases.json

7
release.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
cd "$SCRIPT_DIR" || exit 1
./unsigned.sh
./sign.sh

45
sign.sh Executable file
View File

@ -0,0 +1,45 @@
#!/bin/bash
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
cd "$SCRIPT_DIR" || exit 1
. 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

View File

@ -60,3 +60,4 @@ user_pref("webgl.disable-fail-if-major-performance-caveat", true);
user_pref("webgl.enable-webgl2", false);
user_pref("media.navigator.enabled", false);
user_pref("dom.w3c_touch_events.enabled", false);
user_pref("browser.display.use_system_colors", false);

View File

@ -1,19 +1,18 @@
# Overrides for Extension Preferences
# Tor Browser Bundle
# Do not edit this file.
#
# This file is modified from a file included in the Tor Browser Bundle.
#
# Copyright 2017 The Tor Project. See LICENSE.tor for licensing information.
/*
Overrides#
for Extension Preferences# Tor Browser Bundle# Do not edit this file.##This file is modified from a file included in the Tor Browser Bundle.##Copyright 2017 The Tor Project.See LICENSE.tor#
for licensing information.
# HTTPS Everywhere Preferences:
HTTPS Everywhere Preferences:
*/
user_pref("extensions.https_everywhere._observatory.popup_shown", true);
user_pref("extensions.https_everywhere.toolbar_hint_shown", true);
# NoScript Preferences:
# In order to disable all scripts by default, uncomment the following line...
# user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");
# and comment out the following line
/*
NoScript Preferences: #In order to disable all scripts by
default, uncomment the following line...#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
and comment out the following line
*/
user_pref("capability.policy.maonoscript.javascript.enabled", "allAccess");
user_pref("capability.policy.maonoscript.sites", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
user_pref("noscript.default", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
@ -106,7 +105,7 @@ user_pref("network.proxy.ftp_port", 4444);
user_pref("network.proxy.socks", "127.0.0.1");
user_pref("network.proxy.socks_port", 4444);
user_pref("network.proxy.share_proxy_settings", true);
user_pref("browser.startup.homepage", "about:blank");
user_pref("browser.startup.homepage", "http://127.0.0.1:7657/home");
// Privacy-harden and disable irrelevant features.
user_pref("app.normandy.api_url", "");
@ -222,3 +221,4 @@ user_pref("webgl.min_capability_mode", true);
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
user_pref("webgl.enable-webgl2", false);
user_pref("dom.w3c_touch_events.enabled", false);
user_pref("browser.display.use_system_colors", false);

View File

@ -1 +1 @@
1.07.2
1.8.0

View File

@ -17,6 +17,7 @@ UniCode true
var FFINSTEXE
var FFNONTORINSTEXE
var I2PINSTEXE
Var PARENTOPTIONS
SetOverwrite on
!define FFINSTEXE
@ -27,22 +28,25 @@ SetOverwrite on
!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}"
# rtf or txt file - remember if it is txt, it must be in the DOS text format (\r\n)
LicenseData "licenses\LICENSE.index"
LicenseData "licenses\LICENSE.txt"
# This will be in the installer/uninstaller's title bar
Name "${COMPANYNAME} - ${APPNAME}"
Icon ui2pbrowser_icon.ico
OutFile "I2P-Profile-Installer-${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}.exe"
RequestExecutionLevel admin
RequestExecutionLevel user
!include LogicLib.nsh
!include x64.nsh
!include FileFunc.nsh
!define MUI_ICON ui2pbrowser_icon.ico
!define MUI_FINISHPAGE
!include "MUI2.nsh"
@ -125,7 +129,8 @@ RequestExecutionLevel admin
PageEx license
licensetext "${LICENSE_TITLE}"
licensedata "licenses\LICENSE.index"
licensedata "licenses\LICENSE.txt"
#PageCallbacks elevatorCallback
PageExEnd
PageEx directory
dirtext "${FIREFOX_MESSAGE}"
@ -140,10 +145,22 @@ PageEx directory
PageExEnd
Page instfiles
!include i2pbrowser-mozcompat.nsi
Function .onInit
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
UserInfo::GetAccountType
pop $0
${If} $0 != "admin"
StrCpy $INSTDIR "$LOCALAPPDATA\${COMPANYNAME}\${APPNAME}"
StrCpy $I2PINSTEXE "${I2PINSTEXE_USERMODE}"
${EndIf}
${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
@ -172,13 +189,7 @@ Function .onInit
StrCpy $FFINSTEXE "$PROFILE\Desktop\Tor Browser\Browser\"
${EndIf}
${EndIf}
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
${If} ${FileExists} "${I2PINSTEXE32}\i2p.exe"
StrCpy $I2PINSTEXE "${I2PINSTEXE32}"
${EndIf}
${If} ${FileExists} "${I2PINSTEXE64}\i2p.exe"
StrCpy $I2PINSTEXE "${I2PINSTEXE64}"
${EndIf}
# look for user installs
FunctionEnd
Function firefoxDetect
@ -205,10 +216,8 @@ Function routerDetect
${EndIf}
FunctionEnd
# start default section
Section Install
${If} ${Silent}
Function installerFunction
${If} ${Silent}
${Do}
${FindProcess} "I2P.exe" $0
Sleep 500
@ -330,20 +339,38 @@ Section Install
# create a shortcut to the uninstaller
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
# uninstaller section start
Section "uninstall"
# Remove the licenses
rmDir /r "$INSTDIR\"
# Uninstall the launcher scripts
Delete $INSTDIR\i2pbrowser.bat
Delete $INSTDIR\i2pconfig.bat
Delete $INSTDIR\i2pbrowser-private.bat
Delete $INSTDIR\ui2pbrowser_icon.ico
Delete $INSTDIR\*
rmDir /r "$INSTDIR\"
${If} ${FileExists} "$I2PINSTEXE\jpackaged"
Delete $I2PINSTEXE\*
rmDir /r "$I2PINSTEXE"
${EndIf}
# Remove shortcuts and folders
Delete "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk"
@ -354,15 +381,12 @@ Section "uninstall"
Delete "$DESKTOP\Browse I2P.lnk"
Delete "$DESKTOP\${APPNAME}.lnk"
Delete "$DESKTOP\Private Browsing-${APPNAME}.lnk"
rmDir "$SMPROGRAMS\${APPNAME}"
rmDir "$INSTDIR\firefox.profile.i2p\extensions"
rmDir "$INSTDIR\firefox.profile.i2p"
rmDir "$LOCALAPPDATA\${APPNAME}"
rmDir "$INSTDIR"
rmDir /r "$SMPROGRAMS\${APPNAME}"
rmDir /r "$INSTDIR\firefox.profile.i2p\extensions"
rmDir /r "$INSTDIR\firefox.profile.i2p"
rmDir /r "$LOCALAPPDATA\${APPNAME}"
rmDir /r "$INSTDIR"
${If} ${FileExists} "$I2PINSTEXE\jpackaged"
rmDir "$I2PINSTEXE"
${EndIf}
# delete the uninstaller
Delete "$INSTDIR\uninstall-i2pbrowser.exe"

View File

@ -1 +1 @@
!define I2P_VERSION 1.7.0
!define I2P_VERSION 1.8.0

View File

@ -1,3 +1,3 @@
!define VERSIONMAJOR 1
!define VERSIONMINOR 7
!define VERSIONBUILD 4
!define VERSIONMINOR 8
!define VERSIONBUILD 0

View File

@ -58,6 +58,5 @@ user_pref("webgl.disable-fail-if-major-performance-caveat", true);
user_pref("webgl.enable-webgl2", false);
user_pref("media.navigator.enabled", false);
user_pref("dom.w3c_touch_events.enabled", false);
user_pref("fission.autostart", true);
user_pref("gfx.webrender.all", false);
user_pref("privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts", false);
user_pref("browser.privatebrowsing.autostart", false);
user_pref("browser.display.use_system_colors", false);

View File

@ -1,15 +1,18 @@
//# Overrides
//for Extension Preferences# Tor Browser Bundle# Do not edit this file.##This file is modified from a file included in the Tor Browser Bundle.##Copyright 2017 The Tor Project.See LICENSE.tor
//for licensing information.
/*
Overrides#
for Extension Preferences# Tor Browser Bundle# Do not edit this file.##This file is modified from a file included in the Tor Browser Bundle.##Copyright 2017 The Tor Project.See LICENSE.tor#
for licensing information.
//# HTTPS Everywhere Preferences:
HTTPS Everywhere Preferences:
*/
user_pref("extensions.https_everywhere._observatory.popup_shown", true);
user_pref("extensions.https_everywhere.toolbar_hint_shown", true);
//# NoScript Preferences: #In order to disable all scripts by
//default, uncomment the following line...
//#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
//and comment out the following line
/*
NoScript Preferences: #In order to disable all scripts by
default, uncomment the following line...#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
and comment out the following line
*/
user_pref("capability.policy.maonoscript.javascript.enabled", "allAccess");
user_pref("capability.policy.maonoscript.sites", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
user_pref("noscript.default", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
@ -79,6 +82,9 @@ user_pref("extensions.torbutton.use_nontor_proxy", true);
//user_pref("extensions.torlauncher.socks_port_use_ipc", );
//user_pref("extensions.torlauncher.socks_ipc_path", "");
// TODO: this is a Tor Browser specific setting which is ignored on Firefox. If
// I make it true, the SOCKS outproxy will have something to connect to. But I
// need to test more to find out if that's prudent.
user_pref("extensions.torlauncher.start_tor", false);
//user_pref("extensions.torlauncher.default_bridge_type", "");
user_pref("extensions.torlauncher.prompt_at_startup", false);
@ -102,7 +108,7 @@ user_pref("network.proxy.ftp_port", 4444);
user_pref("network.proxy.socks", "127.0.0.1");
user_pref("network.proxy.socks_port", 4444);
user_pref("network.proxy.share_proxy_settings", true);
user_pref("browser.startup.homepage", "about:blank");
user_pref("browser.startup.homepage", "http://127.0.0.1:7657/home");
// Privacy-harden and disable irrelevant features.
user_pref("app.normandy.api_url", "");
@ -218,6 +224,5 @@ user_pref("webgl.min_capability_mode", true);
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
user_pref("webgl.enable-webgl2", false);
user_pref("dom.w3c_touch_events.enabled", false);
user_pref("fission.autostart", true);
user_pref("gfx.webrender.all", false);
user_pref("privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts", false);
user_pref("browser.privatebrowsing.autostart", false);
user_pref("browser.display.use_system_colors", false);

View File

@ -1 +1 @@
1.07.2
1.8.0

19
src/win/common.bat Normal file
View 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\"
)

View 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
View 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*"

View File

@ -1,34 +1,14 @@
@echo on
set "I2PPath=%ProgramFiles%\I2P\"
if exist "%ProgramFiles%\I2P\" (
set "I2PPath=%ProgramFiles%\I2P\"
)
SET MYPATH=%~dp0
call "%MYPATH%common.bat"
if exist "%ProgramFiles(x86)%\I2P" (
set "I2PPath=%ProgramFiles(x86)%\I2P"
)
call "%MYPATH%launchi2p.bat"
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%copy-profile.bat"
timeout /t 3
if exist "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\" (
echo "profile is configured, updating extensions"
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
) else (
echo "configuring profile"
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p"
)
if exist "%USERPROFILE%/Desktop/Tor Browser/Browser/firefox.exe" (
start "i2pbrowser" "%USERPROFILE%/Desktop/Tor Browser/Browser/firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p" -private-window about:blank
exit

View File

@ -1,37 +1,14 @@
@echo on
set "I2PPath=%ProgramFiles%\I2P\"
if exist "%ProgramFiles%\I2P\" (
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"
)
)
SET MYPATH=%~dp0
call "%MYPATH%common.bat"
call "%MYPATH%launchi2p.bat"
call "%MYPATH%copy-profile.bat"
timeout /t 3
if exist "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\" (
echo "profile is configured, updating extensions"
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
) else (
echo "configuring profile"
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p"
)
if exist "%USERPROFILE%/Desktop/Tor Browser/Browser/firefox.exe" (
start "i2pbrowser" "%USERPROFILE%/Desktop/Tor Browser/Browser/firefox.exe" -no-remote -profile "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p" -url %1
exit

View File

@ -1,12 +1,9 @@
@echo off
if exist "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p\" (
echo "profile is configured"
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.i2p\extensions" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.i2p\extensions"
) else (
echo "configuring profile"
xcopy /s /i /y "%ProgramFiles%\I2P\I2PBrowser-Launcher\firefox.profile.config.i2p" "%LOCALAPPDATA%\I2PBrowser-Launcher\firefox.profile.config.i2p"
)
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

17
src/win/launchi2p.bat Normal file
View File

@ -0,0 +1,17 @@
@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
)

8
src/win/test.bat Normal file
View 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%

11
unsigned.sh Executable file
View File

@ -0,0 +1,11 @@
#!/bin/bash
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
cd "$SCRIPT_DIR" || exit 1
./clean.sh
wsl make distclean
wsl make clean-extensions
wsl make extensions
./build.sh
wsl make