Compare commits
94 Commits
20220920.j
...
20230202
Author | SHA1 | Date | |
---|---|---|---|
dd47ffd902 | |||
b2f92840e5 | |||
0cffa15047 | |||
0a6dae1aac | |||
6e3fcd3285 | |||
57fa862f01 | |||
2225b47459 | |||
78989a8bbd | |||
e7025ae941 | |||
d7423eb595 | |||
4cb8febe3b | |||
039faf8280 | |||
3a17a3926d | |||
e09d2a41ec | |||
848fabd27c | |||
da58c26935 | |||
c84522a244 | |||
d8953824c5 | |||
b67235b2a9 | |||
00bf0f267e | |||
a1d07cffee | |||
c678c6eca2 | |||
2a162fb4c1 | |||
e594ce9bb5 | |||
4a312198ff | |||
f0fb375e13 | |||
f19a5ca002 | |||
45deb5ac28 | |||
7403cf2e8f | |||
046090ea11 | |||
00098cbf53 | |||
c4980a61f0 | |||
20b5ffdb17 | |||
4a6926fcbf | |||
5b12f20406 | |||
da29268898 | |||
79f016cb1c | |||
e19ce19368 | |||
2e4f110c30 | |||
1bb8238e68 | |||
6bfec5d6ef | |||
f7c6251f30 | |||
1a1e25a52f | |||
b8b19786b1 | |||
8c2c839337 | |||
f56771ac8a | |||
e0d5d61518 | |||
c4c40eee8f | |||
2db71e402d | |||
6e9df08473 | |||
b98b488f70 | |||
52b34a5d6a | |||
c1b20d4f2b | |||
c656b80674 | |||
4ceddb976d | |||
8f14378aee | |||
c5af86adfd | |||
9469293bcf | |||
44ce8335a1 | |||
8a9ce211f3 | |||
037250ae46 | |||
f93c4660da | |||
2f516f0c11 | |||
f3d871d64b | |||
51a82601f0 | |||
85e30d36d7 | |||
7e21d86ab4 | |||
6fbe64d8e2 | |||
91beec4f75 | |||
5f3a3d46f6 | |||
23d013765a | |||
b3ff2dfdbf | |||
d58aeb6b19 | |||
5d2e5dc69b | |||
8fd6d6f45f | |||
7f0d5eb0b2 | |||
cd8be4196e | |||
3548ea0ed6 | |||
730b9ed267 | |||
67e0b87d97 | |||
1424913447 | |||
c0cb68f972 | |||
52c91e1e65 | |||
9e6ea435af | |||
308055143f | |||
53f731f945 | |||
7ec56455cd | |||
c11f982088 | |||
58e1276072 | |||
20240c9e75 | |||
4079d6a8b1 | |||
8b893d1116 | |||
0d209bb2a8 | |||
186493b154 |
6
.gitignore
vendored
6
.gitignore
vendored
@ -21,4 +21,8 @@ cmd
|
||||
*.jar
|
||||
*.zip
|
||||
*.tar.gz
|
||||
config_override.sh
|
||||
config_override.sh
|
||||
i2pkeys
|
||||
onionkeys
|
||||
tlskeys
|
||||
tmp
|
99
GOALS.md
Normal file
99
GOALS.md
Normal file
@ -0,0 +1,99 @@
|
||||
Feature Goals
|
||||
=============
|
||||
|
||||
For information about the "Goals guiding the Goals" see: `[PRINCIPLES]`.
|
||||
|
||||
While Windows is the primary platform, some goals may represent cross-platform
|
||||
utility as well. Since a portable jpackage really only needs slightly different
|
||||
arguments on different platforms, cross-platform support is often low-cost.
|
||||
|
||||
- **See Also:**
|
||||
- *Browser Integrations are provided by browser extensions which are contained in their own repositories.*
|
||||
- Firefox:
|
||||
- [git.idk.i2p/idk/I2P-in-Private-Browsing-Mode-Firefox](http://git.idk.i2p/idk/I2P-in-Private-Browsing-Mode-Firefox/)
|
||||
- [i2pgit.org/idk/I2P-in-Private-Browsing-Mode-Firefox](https://i2pgit.org/idk/I2P-in-Private-Browsing-Mode-Firefox/)
|
||||
- [github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox](https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/)
|
||||
- Chromium:
|
||||
- [git.idk.i2p/idk/I2P-Configuration-For-Chromium](http://git.idk.i2p/idk/I2P-Configuration-For-Chromium/)
|
||||
- [i2pgit.org/idk/I2P-Configuration-For-Chromium](https://i2pgit.org/idk/I2P-Configuration-For-Chromium/)
|
||||
- [github.com/eyedeekay/I2P-Configuration-For-Chromium](https://github.com/eyedeekay/I2P-Configuration-For-Chromium/)
|
||||
- *Browser profile management are provided by a freestanding, cross-platform library which is contained in its own repository.*
|
||||
- [git.idk.i2p/idk/i2p.plugins.firefox](http://git.idk.i2p/idk/i2p.plugins.firefox)
|
||||
- [i2pgit.org/idk/i2p.plugins.firefox](https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
- [github.com/eyedeekay/i2p.plugins.firefox](https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
|
||||
Build Methods
|
||||
-------------
|
||||
|
||||
- `[X]` Cleanly separate jpackage generation phase from NSIS generation phase
|
||||
- `[X]` Enable archive builds for generating Windows `.exe`'s from Linux hosts
|
||||
|
||||
Installation Methods
|
||||
--------------------
|
||||
|
||||
- `[X]` NSIS installer
|
||||
- `[X]` Portable, directory-based install
|
||||
- `[ ]` Windows Service Support
|
||||
|
||||
Update Methods
|
||||
--------------
|
||||
|
||||
- `[X]` NSIS installer in Default Directory
|
||||
- `[X]` NSIS installer in Portable Directory
|
||||
- `[X]` Handle admin and non-admin updates automatically
|
||||
- `[ ]` Zip-Only portable updater
|
||||
|
||||
Launcher
|
||||
--------
|
||||
|
||||
- `[X]` Detect and handle un-bundled routers on the host system, policy of non-interference
|
||||
- `[X]` Wait for router console to be ready to launch router-console browser
|
||||
- `[X]` Wait for proxy to be ready to launch I2P Web Browser
|
||||
- `[X]` Launch browser instead of router when a repeat-launch is detected
|
||||
- `[X]` GUI component for launching each available component
|
||||
- `[X]` Introduce `browser.properties` for customization
|
||||
- `[ ]` Registry-based browser discovery [Firefox](http://git.idk.i2p/idk/i2p.plugins.firefox/-/issues/3) [Chromium](http://git.idk.i2p/idk/i2p.plugins.firefox/-/issues/4)
|
||||
|
||||
Browser Configuration All
|
||||
-------------------------
|
||||
|
||||
- `[X]` Use identical extensions in Firefox-based and Chromium-based browsers wherever possible
|
||||
- `[X]` Always use a dedicated, I2P Easy-Install specific profile directory
|
||||
- `[X]` Always configure an HTTP Proxy, and safe access to the router console
|
||||
- `[X]` Provide I2P-Specific integrations to the browser UI through WebExtensions
|
||||
- `[X]` Operate in "Strict" mode where the maximum level of defenses are up
|
||||
- `[X]` Operate in "Usability" mode where defense is balanced with utility
|
||||
- `[X]` Operate in "App" mode where we work as a single-purpose window where it is hard to access arbitrary, potentially malicious resources
|
||||
- `[X]` All I2P-Specific profiles should be possible to generate automatically, sight-unseen
|
||||
|
||||
Browser Configuration Firefox
|
||||
-----------------------------
|
||||
|
||||
- `[X]` When using Firefox, download extension updates automatically, from AMO, using an outproxy
|
||||
- `[X]` Integrate I2P in Private Browsing for to provide UI for I2P within Firefox
|
||||
- `[X]` Prevent WebRTC proxy escapes by setting mode `4` `disable_non_proxied_udp` or higher
|
||||
- `[X]` Customize panel for Firefox `App` mode(Not required for Chromiums)
|
||||
|
||||
Browser Configuration Chromium
|
||||
------------------------------
|
||||
|
||||
- `[X]` When using Chromium, load extensions from source and freeze them without updates to prevent unproxied updating.
|
||||
- `[X]` Integrate `I2PChrome.js` to provide UI for I2P within Chrome
|
||||
- `[X]` Prevent WebRTC proxy escapes by setting mode `4` `disable_non_proxied_udp`
|
||||
|
||||
Browser Configuration Strict Mode
|
||||
---------------------------------
|
||||
|
||||
- `[X]` Disable Javascript by default with NoScript
|
||||
- `[X]` Enforce HTTPS where available with HTTPS Everywhere **OR** HTTPS only Mode
|
||||
- `[ ]` Proactively enumerate and disable "Fine" fingerprinting vectors where possible(ongoing)
|
||||
- `[ ]` When running in Tor Browser, look as much like Tor Browser as possible but use an outproxy(ongoing)
|
||||
|
||||
Browser Configuration Usability Mode
|
||||
------------------------------------
|
||||
|
||||
- `[X]` Enable Javascript by default but limit it with jShelter
|
||||
- `[X]` Enforce HTTPS where available with HTTPS Everywhere **OR** HTTPS only Mode
|
||||
- `[X]` Limit attempts to fetch useless junk like advertising with an up-to-date uBlock Origin
|
||||
- `[X]` Limit attempts to reach clearnet CDN's with LocalCDN
|
||||
- `[X]` Isolate `.onion` traffic from `outproxy` traffic and `.i2p` traffic using Onion in Container Tabs
|
90
Makefile
90
Makefile
@ -7,27 +7,18 @@ preset=`rm .version; make version`
|
||||
|
||||
-include .version
|
||||
|
||||
PROFILE_VERSION=$(MAJOR).$(MINOR).$(BUILD)
|
||||
PROFILE_VERSION=$(VERSIONMAJOR).$(VERSIONMINOR).$(VERSIONBUILD)
|
||||
|
||||
all: version prep install.exe
|
||||
all: version install.exe
|
||||
|
||||
fmt:
|
||||
find . -name '*.java' -exec clang-format -i {} \;
|
||||
|
||||
tag:
|
||||
git tag $(PROFILE_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:
|
||||
echo "$(PROFILE_VERSION)" > src/profile/version.txt
|
||||
echo "$(PROFILE_VERSION)" > src/app-profile/version.txt
|
||||
|
||||
i2pbrowser-jpackage.nsi:
|
||||
echo "!define I2P_VERSION $(PROFILE_VERSION)" > src/nsis/i2pbrowser-jpackage.nsi
|
||||
./buildscripts/version.sh
|
||||
|
||||
jpackage: version I2P build/I2P/config all
|
||||
|
||||
@ -38,58 +29,26 @@ help: version
|
||||
@echo "$(MAJOR).$(MINOR).$(BUILD)"
|
||||
@echo "$(preset)"
|
||||
|
||||
prep: #launchers build/licenses profile.tgz app-profile.tgz profile build/I2P build/I2P/config #
|
||||
make build/licenses
|
||||
echo "licenses" >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
|
||||
prep:
|
||||
|
||||
install.exe: #build/licenses
|
||||
cd build && makensis i2pbrowser-installer.nsi && cp I2P-Easy-Install-Bundle-*.exe ../ && echo "built windows installer"
|
||||
install.exe:
|
||||
./buildscripts/nsis.sh
|
||||
|
||||
export RES_DIR="../i2p.i2p.jpackage-build/installer/resources"
|
||||
export PKG_DIR="../i2p.i2p.jpackage-build/pkg-temp"
|
||||
export I2P_JBIGI="../i2p.i2p.jpackage-build/installer/lib/jbigi"
|
||||
#export I2P_JBIGI="../i2p.i2p.jpackage-build/installer/lib/jbigi"
|
||||
|
||||
distclean: clean
|
||||
rm -rf I2P
|
||||
|
||||
I2P:
|
||||
./build.sh
|
||||
./buildscripts/build.sh
|
||||
|
||||
build/I2P: I2P build
|
||||
rm -rf build/I2P
|
||||
cp -rv I2P build/I2P ; true
|
||||
cp "$(I2P_JBIGI)"/*windows*.dll build/I2P/runtime/lib; true
|
||||
|
||||
src/I2P/config:
|
||||
mkdir -p src/I2P/config
|
||||
rm -rf src/I2P/config/geoip src/I2P/config/webapps src/I2P/config/certificates
|
||||
echo true | tee src/I2P/config/jpackaged
|
||||
cp -v $(RES_DIR)/clients.config src/I2P/config/
|
||||
cp -v $(RES_DIR)/wrapper.config src/I2P/config/
|
||||
#grep -v 'router.updateURL' $(RES_DIR)/router.config > src/I2P/config/router.config
|
||||
cat router.config > src/I2P/config/router.config
|
||||
cat i2ptunnel.config > src/I2P/config/i2ptunnel.config
|
||||
cp -v $(RES_DIR)/hosts.txt src/I2P/config/hosts.txt
|
||||
cp -R $(RES_DIR)/certificates src/I2P/config/certificates
|
||||
cp -R $(RES_DIR)/eepsite src/I2P/config/eepsite
|
||||
mkdir -p src/I2P/config/geoip
|
||||
cp -v $(RES_DIR)/GeoLite2-Country.mmdb.gz src/I2P/config/geoip/GeoLite2-Country.mmdb.gz
|
||||
cp -R "$(PKG_DIR)"/webapps src/I2P/config/webapps
|
||||
cd src/I2P/config/geoip && gunzip GeoLite2-Country.mmdb.gz; cd ../../..
|
||||
|
||||
build/I2P/config: src/I2P/config build/I2P
|
||||
cp -rv src/I2P/config build/I2P/config
|
||||
# cp -rv build/I2P/* I2P/
|
||||
# cp -rv src/I2P/config build/I2P/.i2p
|
||||
|
||||
#
|
||||
# Warning: a displayed license file of more than 28752 bytes
|
||||
@ -97,24 +56,10 @@ build/I2P/config: src/I2P/config build/I2P
|
||||
# Possibly related: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=895064
|
||||
#
|
||||
build/licenses: build
|
||||
mkdir -p build/licenses
|
||||
cp license/* build/licenses
|
||||
cp LICENSE.md build/licenses/MIT.txt
|
||||
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
|
||||
./buildscripts/licenses.sh
|
||||
|
||||
clean:
|
||||
rm -rf build app-profile-*.tgz profile-*.tgz I2P-Easy-Install-Bundle-*.exe *.deb src/I2P/config *.su3 .version *.url make.log
|
||||
git clean -fdx src build
|
||||
./buildscripts/clean.sh
|
||||
|
||||
build:
|
||||
@echo "creating build directory"
|
||||
@ -124,12 +69,13 @@ include makefiles/su.mk
|
||||
|
||||
include makefiles/su-unsigned.mk
|
||||
|
||||
include makefiles/debian.mk
|
||||
|
||||
I2P_DATE=`date +%Y-%m-%d`
|
||||
|
||||
MAGNET=`bttools torrent printinfo i2pwinupdate.su3.torrent | grep 'MagNet' | sed 's|MagNet: ||g' | sed 's|%3A|:|g'| sed 's|%2F|/|g'`
|
||||
MAGNET_TESTING=`bttools torrent printinfo i2pwinupdate-testing.su3.torrent | grep 'MagNet' | sed 's|MagNet: ||g' | sed 's|%3A|:|g'| sed 's|%2F|/|g'`
|
||||
MAGNET=`bttools torrent dumpinfo i2pwinupdate.su3.torrent | grep 'Magnet' | sed 's|Magnet: ||g' | sed 's|%3A|:|g'| sed 's|%2F|/|g'`
|
||||
MAGNET_TESTING=`bttools torrent dumpinfo i2pwinupdate-testing.su3.torrent | grep 'MagNet' | sed 's|MagNet: ||g' | sed 's|%3A|:|g'| sed 's|%2F|/|g'`
|
||||
|
||||
magnet:
|
||||
echo "$(MAGNET)"
|
||||
|
||||
BLANK=`awk '! NF { print NR; exit }' changelog.txt`
|
||||
|
||||
|
123
PRINCIPLES.md
Normal file
123
PRINCIPLES.md
Normal file
@ -0,0 +1,123 @@
|
||||
Guidance
|
||||
========
|
||||
|
||||
This document explains the ideas which are guiding the development of
|
||||
features specific to the I2P Easy-Install bundle.
|
||||
|
||||
The general idea is that it is possible, on most platforms, to make I2P
|
||||
post-install configuration much simpler and much less error-prone. Each
|
||||
section of this document has guidance for a different "Meta-Feature" of
|
||||
the I2P Easy-Install Bundle. For granular, specific information about
|
||||
goals both achieved and un-achieved see `[GOALS]`.
|
||||
|
||||
- **Sections:**
|
||||
|
||||
1. Guidance for Browser Profile Configuration
|
||||
|
||||
Guidance for Browser Profile Configuration
|
||||
------------------------------------------
|
||||
|
||||
- **See also:**
|
||||
- [git.idk.i2p/idk/i2p.plugins.firefox](http://git.idk.i2p/idk/i2p.plugins.firefox)
|
||||
- [i2pgit.org/idk/i2p.plugins.firefox](https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
- [github.com/eyedeekay/i2p.plugins.firefox](https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
|
||||
The I2P Easy-Install Bundle for Windows considers basic configuration tasks
|
||||
"Features" when they can be automated. The quintessential example of this
|
||||
is **``Browser Profile Configuration``** where it injects settings into a
|
||||
pre-existing browser from the host system. Solving this problem pre-dates
|
||||
the evolution of `i2p.firefox` into a fully-fledged I2P router distribution
|
||||
and has been the defining goal of this project for its entire existence.
|
||||
|
||||
However, what good browser profile configuration is, is as complicated as
|
||||
how to deploy it. I2P has a unique opportunity to decide how it will handle
|
||||
problems related to browsing in its own context while the network grows
|
||||
and synthesize a useful number of safe browser configurations while also
|
||||
reducing existing browser config fragmentation.
|
||||
|
||||
Easy-Install attempts to limit the number of "Coarse Fingerprints" which it will
|
||||
produce by default to a predictable number. A Coarse Fingerprint is basically
|
||||
a fingerprint "That we know we're making" by offering the ability to configure
|
||||
something differently.
|
||||
|
||||
- **That means:**
|
||||
|
||||
1. It considers the browser integral to the interactive use of the I2P network by a large fraction of users.
|
||||
2. It considers effective browser configuration **impossible for a single user to achieve** because effective browser configuration must have the characteristic of being reflected en-masse(anti-fingerprinting measures are only remotely effective when widely used).
|
||||
3. The browser profile it injects inherits the runtime security characteristics of the **host browser**.
|
||||
4. The browser profile it injects obtains runtime privacy characteristics of the **easy-install bundle**
|
||||
5. The number of coarse browser fingerprint sets is reduced from indeterminately large to `[supported browsers]*[variant configurations]`
|
||||
6. It attempts to balance flexibility with privacy, and accommodate people's preferences where possible.
|
||||
7. It considers browser vendors better at providing browser updates than the I2P Project
|
||||
|
||||
Browser Configurations and Coarse Fingerprints
|
||||
----------------------------------------------
|
||||
|
||||
At this time it offers configuration for Tor Browser, Firefox, Waterfox, and
|
||||
LibreWolf for Firefox-based browsers, and Ungoogled-Chromium, Chromium, Brave,
|
||||
Chrome, and Edgium configuration for Chromium-based browsers. That is a total
|
||||
of **Nine(9)** main browsers. There are **Two(2)** variant configurations,
|
||||
which correspond to "Strict" and "Usability" Modes. That makes a total of
|
||||
**Eighteen(18)** coarse browser fingerprints produced by this bundle. It also
|
||||
has the ability to launch in a "Restricted to Apps" mode where it is only
|
||||
possible to visit I2P sites using links on the I2P application interface(router
|
||||
console, hidden services manager) itself.
|
||||
|
||||
### Strict Mode
|
||||
|
||||
This is not on its face as good as having an almost entirely unified browser
|
||||
fingerprint like Tor Browser attempts to have. It is a simple fact that 18
|
||||
is greater than one. Every active attempt to gain granularity from a browser
|
||||
outside of off-the-shelf Fingerprinting techniques is classified as "Fine"
|
||||
fingerprinting. It is unpredictable, and harder to defend against, more likely
|
||||
to exhibit novelty, and more likely to be affected by the host browser's
|
||||
security. When fingerprinters get this creative disabling Javascript by default
|
||||
is the most complete defense. This is the primary characteristic of Strict Mode,
|
||||
it disables Javascript by default with NoScript. **Strict Mode is the only**
|
||||
**partial defense against fine-fingerprinting offered by this product.** Even
|
||||
disabling Javascript does not close all fine fingerprinting vectors, but it
|
||||
does close most of them and reduce attack surface significantly. It is recommended
|
||||
in combination with Tor Browser, and attempts to be somewhat closer to Tor Browser
|
||||
than Usability Mode. It is the default mode of operation.
|
||||
|
||||
### Usability Mode
|
||||
|
||||
In contrast to Strict Mode, Usability mode offers the greatest agreeable number
|
||||
of browser features enabled by default, including a restricted subset of Javascript.
|
||||
It makes no attempt at all to look like Tor Browser, even when using Tor Browser
|
||||
as a host browser. It does attempt to optimize the browser for use within I2P, including
|
||||
specific optimizations to keep traffic in-network or even retrieve information which is
|
||||
stored on the localhost(while avoiding cache timing attacks). It does this by deploying
|
||||
an alternative loadout of extensions, including ones which block advertising by default
|
||||
and which include a cache of CDN resources in local browser storage.
|
||||
|
||||
### Firefox-Based Browsers
|
||||
|
||||
Because of the relatively high configurability of Firefox-based browser
|
||||
telemetry, Firefox-based browsers are preferred over Chromium-based browsers.
|
||||
Chromium-based browsers will be used by default **only** if a Firefox based
|
||||
browser is unavailable. Only Firefox-variant releases of the Extended Support
|
||||
Release or of the latest stable release are supportable. If a variant lags
|
||||
behind Firefox releases, it will be dropped. The primary reason for the default
|
||||
"Ordering" of Firefox Profile Selection is the speed at which updates can be
|
||||
expected to be applied.
|
||||
|
||||
### Chromium-Based Browsers
|
||||
|
||||
Chromium-based browser selection is more subjective and slightly more ad-hoc.
|
||||
Chromium browsers are chosen based on the variant's stated goals and perceived
|
||||
efficacy in pursuing those goals. For example, if a Chromium distribution is
|
||||
focused on removing telemetry or providing anti-fingerprinting, it is chosen
|
||||
before a Chromium that is provided by Google or integrated tightly with the
|
||||
host OS. This is a matter of judgement on my part and if you disagree you should
|
||||
open an issue and argue with me. I'm not infallible, I'll listen.
|
||||
|
||||
### All other browsers
|
||||
|
||||
With all other browsers attempts at anti-fingerprinting are a moot point. It offers
|
||||
limited configuration options using widely-supported generic browser configuration
|
||||
means. If it doesn't recognize a Firefox or Chromium browser on the host, then it
|
||||
sets the common proxy environment variables `http_proxy` `https_proxy` `ALL_PROXY`
|
||||
and `NO_PROXY` to their appropriate values before launching the browser configuration
|
||||
and attempts to set a directory for the runtime configuration(Profile) by changing
|
||||
to the profile directory.
|
28
README.md
28
README.md
@ -57,7 +57,7 @@ The Windows build tools listed above must be installed on the Windows host machi
|
||||
TODO: Add links to the respective instructions for each of these.
|
||||
|
||||
**Note that after the dependencies are installed, this step is automated**
|
||||
**with `./build.sh`.**
|
||||
**with `./buildscripts/build.sh`.**
|
||||
|
||||
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
|
||||
@ -127,10 +127,10 @@ Ubuntu in WSL.
|
||||
ant clean pkg
|
||||
cd ..
|
||||
|
||||
7. Move into the i2p.firefox directory. Run the `./build.sh` script.
|
||||
7. Move into the i2p.firefox directory. Run the `./buildscripts/build.sh` script.
|
||||
|
||||
cd i2p.firefox
|
||||
./build.sh
|
||||
./buildscripts/build.sh
|
||||
|
||||
8. Compile the NSIS installer using WSL.
|
||||
|
||||
@ -143,18 +143,9 @@ I highly recommend you look into the Chocolatey package manager, which makes it
|
||||
easier to configure these tools and keep them up to date.
|
||||
|
||||
**Prerequisites:** In addition to the other prerequisites, you will need to to have
|
||||
`make` installed with `cygwin`. If you are using this method, you cannot use the
|
||||
automated build scripts without a hack. You will need to create a file called `wsl`
|
||||
in a place that is in the path used by `git-bash.exe` sessions, with the content:
|
||||
|
||||
```
|
||||
#! /usr/bin/env bash
|
||||
$@
|
||||
```
|
||||
|
||||
For our purposes, as long as everything else is set up and you're using git bash,
|
||||
that is enough to make the scripts compatible with `cygwin`. Cygwin builds without
|
||||
git bash are not likely to work.
|
||||
`make` installed with `cygwin`. For our purposes, as long as everything else is
|
||||
set up and you're using git bash, that is enough to make the scripts compatible with
|
||||
`cygwin`. Cygwin builds without git bash are not likely to work.
|
||||
|
||||
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.
|
||||
@ -170,10 +161,10 @@ git bash are not likely to work.
|
||||
ant clean pkg
|
||||
cd ..
|
||||
|
||||
5. Move into the i2p.firefox directory. Run the `./build.sh` script.
|
||||
5. Move into the i2p.firefox directory. Run the `./buildscripts/unsigned.sh` script.
|
||||
|
||||
cd i2p.firefox
|
||||
./build.sh
|
||||
./buildscripts/unsigned.sh
|
||||
|
||||
6. Run `make` to build the installer.
|
||||
|
||||
@ -234,7 +225,8 @@ testing.
|
||||
|
||||
**The only remotely interesting Unix functionality that remains in this**
|
||||
**repository is the construction of a portable. You can use `targz.sh` to**
|
||||
**generate that.**
|
||||
**generate that. Once generated, `cd I2P && ./lib/torbrowser.sh` to complete**
|
||||
**setup, and `./bin/I2P` to run it.**
|
||||
|
||||
Issues
|
||||
------
|
||||
|
@ -1,4 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
curl -s "https://addons.mozilla.org/api/v5/addons/addon/$1/versions/?page_size=1" | jq '.results | .[0] | .file | .url' | tr -d '"'
|
||||
|
47
build.sh
47
build.sh
@ -1,47 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
|
||||
if [ -f i2pversion_override ]; then
|
||||
. "$SCRIPT_DIR/i2pversion_override"
|
||||
fi
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f config_overide.sh ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
. "$SCRIPT_DIR/launcher.sh"
|
||||
|
||||
if [ -z $I2P_VERSION ]; then
|
||||
I2P_VERSION=$("$JAVA_HOME"/bin/java -cp build/router.jar net.i2p.router.RouterVersion | sed "s/.*: //" | head -n 1 | sed 's|-|.|g')
|
||||
fi
|
||||
echo "preparing to invoke jpackage for I2P version $I2P_VERSION"
|
||||
|
||||
rm -rf I2P
|
||||
|
||||
make src/I2P/config
|
||||
|
||||
"$JAVA_HOME"/bin/jpackage --type app-image --name I2P --app-version "$I2P_VERSION" \
|
||||
--verbose \
|
||||
--java-options "-Xmx512m" \
|
||||
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/sun.nio.fs=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.nio=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
||||
$JPACKAGE_OPTS \
|
||||
--resource-dir build \
|
||||
--app-content src/I2P/config \
|
||||
--app-content src/icons/windowsUIToopie2.png \
|
||||
--app-content src/icons/ui2pbrowser_icon.ico \
|
||||
--icon src/icons/windowsUIToopie2.png \
|
||||
--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
|
83
buildscripts/build.sh
Executable file
83
buildscripts/build.sh
Executable file
@ -0,0 +1,83 @@
|
||||
#! /usr/bin/env bash
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
|
||||
if [ -f i2pversion_override ]; then
|
||||
. "$SCRIPT_DIR/i2pversion_override"
|
||||
fi
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f config_overide.sh ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
"$SCRIPT_DIR"/buildscripts/version.sh
|
||||
"$SCRIPT_DIR"/buildscripts/licenses.sh
|
||||
|
||||
if [ -z $machine ]; then
|
||||
unameOut="$(uname -s)"
|
||||
case "${unameOut}" in
|
||||
Linux*) machine=Linux;;
|
||||
Darwin*) machine=Mac;;
|
||||
*) machine="UNKNOWN:${unameOut}"
|
||||
esac
|
||||
fi
|
||||
|
||||
ICON="$SCRIPT_DIR/src/icons/ui2pbrowser_icon.ico"
|
||||
|
||||
if [ "$machine" = "Mac" ]; then
|
||||
rm -rf I2P
|
||||
"$SCRIPT_DIR"/buildscripts/getprebuilt.sh
|
||||
exit 0
|
||||
elif [ "$machine" = "Linux" ]; then
|
||||
rm -rf I2P
|
||||
"$SCRIPT_DIR"/buildscripts/getprebuilt.sh
|
||||
exit 0
|
||||
elif [ "$machine" = "unix" ]; then
|
||||
ICON="$SCRIPT_DIR"/src/icons/windowsUIToopie2.png
|
||||
export EXTRACODE="unix"
|
||||
export EXTRA=" public final static String EXTRA = \"-$EXTRACODE\";"
|
||||
fi
|
||||
|
||||
. "$SCRIPT_DI"$SCRIPT_DIR"/buildscripts/launcher.sh"
|
||||
|
||||
if [ -z $I2P_VERSION ]; then
|
||||
I2P_VERSION=$("$JAVA_HOME"/bin/java -cp $SCRIPT_DIR/build/router.jar net.i2p.router.RouterVersion | sed "s/.*: //" | head -n 1 | sed 's|-|.|g')
|
||||
fi
|
||||
|
||||
echo "preparing to invoke jpackage for I2P version $I2P_VERSION"
|
||||
|
||||
rm -rf I2P
|
||||
|
||||
if [ ! -d "I2P" ]; then
|
||||
"$JAVA_HOME"/bin/jpackage --type app-image --name I2P --app-version "$I2P_VERSION" \
|
||||
--verbose \
|
||||
--java-options "-Xmx512m" \
|
||||
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/sun.nio.fs=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.nio=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
||||
$JPACKAGE_OPTS \
|
||||
--resource-dir $SCRIPT_DIR/build \
|
||||
--app-content "$SCRIPT_DIR"/src/I2P/config \
|
||||
--app-content "$SCRIPT_DIR"/src/unix/torbrowser.sh \
|
||||
--app-content "$SCRIPT_DIR"/src/win/torbrowser-windows.sh \
|
||||
--app-content "$SCRIPT_DIR"/src/icons/windowsUIToopie2.png \
|
||||
--app-content "$SCRIPT_DIR"/src/icons/ui2pbrowser_icon.ico \
|
||||
--icon "${ICON}" \
|
||||
--input $SCRIPT_DIR/build --main-jar launcher.jar --main-class net.i2p.router.WinLauncher
|
||||
fi
|
||||
|
||||
cp "$I2P_PKG/licenses/"* license/
|
||||
cp "$SCRIPT_DIR/../i2p.i2p.jpackage-build/LICENSE.txt" license/I2P.txt
|
||||
|
||||
|
||||
mkdir -p "$SCRIPT_DIR"/build/I2P
|
||||
cp -rv "$SCRIPT_DIR"/I2P/* "$SCRIPT_DIR"/build/I2P
|
||||
cp -rv src/I2P/config build/I2P/config
|
@ -1,6 +1,6 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
@ -31,4 +31,5 @@ rm -rf \
|
||||
*.jar \
|
||||
*.exe \
|
||||
*.dmg
|
||||
make clean
|
||||
rm -rf build app-profile-*.tgz profile-*.tgz I2P-Easy-Install-Bundle-*.exe *.deb src/I2P/config *.su3 .version *.url make.log
|
||||
git clean -fdx src build onionkeys tlskeys i2pkeys
|
@ -1,6 +1,6 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
@ -25,7 +25,7 @@ fi
|
||||
# GITHUB_USERNAME=your github username
|
||||
git clean -fd
|
||||
git checkout .
|
||||
./targz.sh
|
||||
"$SCRIPT_DIR"/buildscripts/targz.sh
|
||||
|
||||
. "$HOME/github-release-config.sh"
|
||||
|
||||
@ -50,3 +50,4 @@ sleep 2s
|
||||
ZIPCHECKSUM=$(sha256sum "I2P.tar.gz")
|
||||
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.tar.gz" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.tar.gz"
|
||||
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.tar.gz" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.tar.gz"
|
||||
|
52
buildscripts/daily-portable-windows.sh
Executable file
52
buildscripts/daily-portable-windows.sh
Executable file
@ -0,0 +1,52 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
|
||||
if [ -f i2pversion_override ]; then
|
||||
. "$SCRIPT_DIR/i2pversion_override"
|
||||
fi
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f config_overide.sh ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
### 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 .
|
||||
|
||||
. "$HOME/github-release-config.sh"
|
||||
|
||||
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
|
||||
===================================================
|
||||
|
||||
These builds are automatically built on a daily basis and may have serious bugs.
|
||||
They are intended for testing purposes only, use them at your own risk.
|
||||
"
|
||||
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"
|
||||
|
||||
"$SCRIPT_DIR"/buildscripts/zip.sh
|
||||
WINZIPCHECKSUM=$(sha256sum "I2P-windows-portable.zip")
|
||||
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P-windows-portable.zip" -l "$WINZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P-windows-portable.zip"
|
||||
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P-windows-portable.zip" -l "$WINZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P-windows-portable.zip"
|
@ -1,6 +1,6 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
cp -v "$SCRIPT_DIR/config_override.example.sh" config_override.sh
|
||||
@ -25,7 +25,7 @@ fi
|
||||
git clean -fd
|
||||
git checkout .
|
||||
cp -v "$SCRIPT_DIR/config_override.example.sh" config_override.sh
|
||||
./unsigned.sh
|
||||
"$SCRIPT_DIR"/buildscripts/unsigned.sh
|
||||
|
||||
. "$HOME/github-release-config.sh"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
@ -22,7 +22,7 @@ mv "$SCRIPT_DIR/config_override.sh" "$SCRIPT_DIR/config_override.sh.bak"
|
||||
# GITHUB_USERNAME=your github username
|
||||
git clean -fd
|
||||
git checkout .
|
||||
./unsigned.sh
|
||||
"$SCRIPT_DIR"/buildscripts/unsigned.sh
|
||||
|
||||
. "$HOME/github-release-config.sh"
|
||||
|
||||
@ -51,7 +51,6 @@ powershell Compress-Archive -force I2P I2P.zip
|
||||
ZIPCHECKSUM=$(sha256sum "I2P.zip")
|
||||
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.zip" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.zip"
|
||||
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.zip" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.zip"
|
||||
|
||||
TARCHECKSUM=$(sha256sum "../i2p.i2p.jpackage-build.tar.gz")
|
||||
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "../i2p.i2p.jpackage-build.tar.gz" -l "Upstream I2P Router source code $TARCHECKSUM" -t "$TODAYSDATE" -n "i2p.i2p.jpackage-build.tar.gz"
|
||||
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "../i2p.i2p.jpackage-build.tar.gz" -l "Upstream I2P Router source code $TARCHECKSUM" -t "$TODAYSDATE" -n "i2p.i2p.jpackage-build.tar.gz"
|
@ -1,6 +1,6 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
cp -v "$SCRIPT_DIR/config_override.example.sh" config_override.sh
|
@ -1,6 +1,6 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
@ -2,7 +2,8 @@
|
||||
|
||||
## EXPERIMENTAL. PROBABLY WON'T SEE THE LIGHT OF DAY BUT MAYBE I GET LUCKY.
|
||||
|
||||
# Motivation
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. ./config.sh
|
||||
. ./i2pversion
|
||||
@ -16,10 +17,10 @@ jpackage --name I2P-EXE --app-version "$I2P_VERSION" \
|
||||
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
||||
$JPACKAGE_OPTS \
|
||||
--app-content src/I2P/config \
|
||||
--app-content src/icons/windowsUIToopie2.png \
|
||||
--icon src/icons/windowsUIToopie2.png \
|
||||
--input build \
|
||||
--app-content "$SCRIPT_DIR"/src/I2P/config \
|
||||
--app-content "$SCRIPT_DIR"/src/icons/windowsUIToopie2.png \
|
||||
--icon "$SCRIPT_DIR"/src/icons/windowsUIToopie2.png \
|
||||
--input "$SCRIPT_DIR/build" \
|
||||
--verbose \
|
||||
--type exe \
|
||||
--win-dir-chooser \
|
16
buildscripts/experimental.sh
Executable file
16
buildscripts/experimental.sh
Executable file
@ -0,0 +1,16 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
"$SCRIPT_DIR"/buildscripts/clean.sh
|
||||
"$SCRIPT_DIR"/buildscripts/version.sh
|
||||
"$SCRIPT_DIR"/buildscripts/licenses.sh
|
||||
"$SCRIPT_DIR"/buildscripts/build.sh
|
||||
"$SCRIPT_DIR"/buildscripts/nsis.sh
|
64
buildscripts/getprebuilt.sh
Executable file
64
buildscripts/getprebuilt.sh
Executable file
@ -0,0 +1,64 @@
|
||||
#! /usr/bin/env bash
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
|
||||
if [ -f i2pversion_override ]; then
|
||||
. "$SCRIPT_DIR/i2pversion_override"
|
||||
fi
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f config_overide.sh ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
"$SCRIPT_DIR"/buildscripts/version.sh
|
||||
echo "version set"
|
||||
"$SCRIPT_DIR"/buildscripts/licenses.sh
|
||||
echo "licenses generated"
|
||||
. "$HOME/github-release-config.sh"
|
||||
|
||||
if [ -z $TODAYSDATE ]; then
|
||||
TODAYSDATE=$(date -d '-1 day' '+%Y%m%d')
|
||||
fi
|
||||
|
||||
if [ ! -f I2P.zip ]; then
|
||||
echo github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "I2P.zip" -t "$TODAYSDATE"
|
||||
github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "I2P.zip" -t "$TODAYSDATE"
|
||||
fi
|
||||
unzip -FF I2P.zip || true
|
||||
echo "unzipped prebuilt router"
|
||||
sleep 3
|
||||
|
||||
echo "moved prebuilt router"
|
||||
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
export I2P_PKG="$SCRIPT_DIR/../i2p.i2p.jpackage-build/pkg-temp"
|
||||
export RES_DIR="$SCRIPT_DIR/../i2p.i2p.jpackage-build/installer/resources"
|
||||
export I2P_JARS="$I2P_PKG/lib"
|
||||
export I2P_JBIGI="$SCRIPT_DIR/../i2p.i2p.jpackage-build/installer/lib/jbigi"
|
||||
export I2P_JBIGI_JAR="$SCRIPT_DIR/../i2p.i2p.jpackage-build/build/jbigi.jar"
|
||||
|
||||
mkdir -p "$SCRIPT_DIR/src/I2P/config"
|
||||
rm -rf "$SCRIPT_DIR/src/I2P/config/geoip" "$SCRIPT_DIR/src/I2P/config/webapps" "$SCRIPT_DIR/src/I2P/config/certificates"
|
||||
cp -v "$RES_DIR/clients.config" "$SCRIPT_DIR/src/I2P/config/"
|
||||
cp -v "$RES_DIR/wrapper.config" "$SCRIPT_DIR/src/I2P/config/"
|
||||
#grep -v 'router.updateURL' $(RES_DIR)/router.config > "$SCRIPT_DIR"/src/I2P/config/router.config
|
||||
cat router.config > "$SCRIPT_DIR/src/I2P/config/router.config"
|
||||
cat i2ptunnel.config > "$SCRIPT_DIR/src/I2P/config/i2ptunnel.config"
|
||||
cp -v "$RES_DIR/hosts.txt" "$SCRIPT_DIR/src/I2P/config/hosts.txt"
|
||||
cp -r "$RES_DIR/certificates" "$SCRIPT_DIR/src/I2P/config/certificates"
|
||||
cp -r "$RES_DIR/eepsite" "$SCRIPT_DIR/src/I2P/config/eepsite"
|
||||
mkdir -p "$SCRIPT_DIR/src/I2P/config/geoip"
|
||||
cp -v "$RES_DIR/GeoLite2-Country.mmdb.gz" "$SCRIPT_DIR/src/I2P/config/geoip/GeoLite2-Country.mmdb.gz"
|
||||
#cp -r "$I2P_PKG/webapps" "$SCRIPT_DIR/src/I2P/config/webapps"
|
||||
cd "$SCRIPT_DIR/src/I2P/config/geoip" && gunzip GeoLite2-Country.mmdb.gz; cd "$SCRIPT_DIR"
|
||||
|
||||
mkdir -p "$SCRIPT_DIR"/build/I2P
|
||||
cp -rv "$SCRIPT_DIR"/I2P/* "$SCRIPT_DIR"/build/I2P
|
||||
cp -rv "$SCRIPT_DIR"/src/I2P/config "$SCRIPT_DIR"/build/I2P/config
|
124
buildscripts/launcher.sh
Executable file
124
buildscripts/launcher.sh
Executable file
@ -0,0 +1,124 @@
|
||||
#! /usr/bin/env bash
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
|
||||
if [ -f i2pversion_override ]; then
|
||||
. "$SCRIPT_DIR/i2pversion_override"
|
||||
fi
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
COUNT="Ten Nine Eight Seven Six Five Four Three Two One"
|
||||
|
||||
which java
|
||||
export JAVA=$(java --version | tr -d 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\n' | cut -d ' ' -f 2 | cut -d '.' -f 1 | tr -d '\n\t\- ')
|
||||
|
||||
if [ "$JAVA" -lt "14" ]; then
|
||||
echo "Java 14+ must be used to compile with jpackage, java is $JAVA"
|
||||
exit 1
|
||||
fi
|
||||
if [ "$JAVA" -lt "17" ]; then
|
||||
echo "It is highly recommended that you use Java 17+ to build release packages"
|
||||
fi
|
||||
|
||||
if [ -z "${JAVA_HOME}" ]; then
|
||||
export JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
|
||||
fi
|
||||
if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
|
||||
export JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
|
||||
fi
|
||||
echo "Building with: $JAVA, $JAVA_HOME"
|
||||
sleep 5s
|
||||
|
||||
"$SCRIPT_DIR"/buildscripts/version.sh
|
||||
"$SCRIPT_DIR"/buildscripts/licenses.sh
|
||||
|
||||
#SCRIPT_DIR="$PWD"
|
||||
export I2P_PKG="$SCRIPT_DIR/../i2p.i2p.jpackage-build/pkg-temp"
|
||||
export RES_DIR="$SCRIPT_DIR/../i2p.i2p.jpackage-build/installer/resources"
|
||||
export I2P_JARS="$I2P_PKG/lib"
|
||||
export I2P_JBIGI="$SCRIPT_DIR/../i2p.i2p.jpackage-build/installer/lib/jbigi"
|
||||
export I2P_JBIGI_JAR="$SCRIPT_DIR/../i2p.i2p.jpackage-build/build/jbigi.jar"
|
||||
if [ ! -d "$SCRIPT_DIR/../i2p.i2p.jpackage-build/" ]; then
|
||||
git clone --depth=1 -b "$VERSION" https://i2pgit.org/i2p-hackers/i2p.i2p "$SCRIPT_DIR/../i2p.i2p.jpackage-build/"
|
||||
fi
|
||||
cd "$SCRIPT_DIR/../i2p.i2p.jpackage-build/"
|
||||
OLDEXTRA=$(find . -name RouterVersion.java -exec grep 'String EXTRA' {} \;)
|
||||
if [ -z "$EXTRA" ]; then
|
||||
export EXTRACODE="win"
|
||||
export EXTRA=" public final static String EXTRA = \"-$EXTRACODE\";"
|
||||
fi
|
||||
find . -name RouterVersion.java -exec sed -i "s|$OLDEXTRA|$EXTRA|g" {} \;
|
||||
git checkout -b "i2p-$VERSION-$EXTRACODE" && git commit -am "i2p-$VERSION-$EXTRACODE"
|
||||
git pull --tags
|
||||
git archive --format=tar.gz --output="$SCRIPT_DIR/../i2p.firefox/i2p.i2p.jpackage-build.tar.gz" "i2p-$VERSION-$EXTRACODE"
|
||||
|
||||
for i in $COUNT; do
|
||||
echo -n "$i...."; sleep 1s
|
||||
done
|
||||
ant distclean pkg || true
|
||||
ant jbigi
|
||||
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
mkdir -p "$SCRIPT_DIR/src/I2P/config"
|
||||
rm -rf "$SCRIPT_DIR/src/I2P/config/geoip" "$SCRIPT_DIR/src/I2P/config/webapps" "$SCRIPT_DIR/src/I2P/config/certificates"
|
||||
cp -v "$RES_DIR/clients.config" "$SCRIPT_DIR/src/I2P/config/"
|
||||
cp -v "$RES_DIR/wrapper.config" "$SCRIPT_DIR/src/I2P/config/"
|
||||
#grep -v 'router.updateURL' $(RES_DIR)/router.config > "$SCRIPT_DIR"/src/I2P/config/router.config
|
||||
cat router.config > "$SCRIPT_DIR/src/I2P/config/router.config"
|
||||
cat i2ptunnel.config > "$SCRIPT_DIR/src/I2P/config/i2ptunnel.config"
|
||||
cp -v "$RES_DIR/hosts.txt" "$SCRIPT_DIR/src/I2P/config/hosts.txt"
|
||||
cp -R "$RES_DIR/certificates" "$SCRIPT_DIR/src/I2P/config/certificates"
|
||||
cp -R "$RES_DIR/eepsite" "$SCRIPT_DIR/src/I2P/config/eepsite"
|
||||
mkdir -p "$SCRIPT_DIR/src/I2P/config/geoip"
|
||||
cp -v "$RES_DIR/GeoLite2-Country.mmdb.gz" "$SCRIPT_DIR/src/I2P/config/geoip/GeoLite2-Country.mmdb.gz"
|
||||
cp -R "$I2P_PKG/webapps" "$SCRIPT_DIR/src/I2P/config/webapps"
|
||||
cd "$SCRIPT_DIR/src/I2P/config/geoip" && gunzip GeoLite2-Country.mmdb.gz; cd ../../..
|
||||
|
||||
echo "compiling custom launcher"
|
||||
mkdir -p "$SCRIPT_DIR/build"
|
||||
cp "$I2P_JARS"/*.jar "$SCRIPT_DIR/build"
|
||||
cp "$I2P_JBIGI_JAR" "$SCRIPT_DIR/build"
|
||||
if [ ! -f "$SCRIPT_DIR/build/jna.jar" ]; then
|
||||
wget -O "$SCRIPT_DIR/build/jna.jar" "https://repo1.maven.org/maven2/net/java/dev/jna/jna/$JNA_VERSION/jna-$JNA_VERSION.jar"
|
||||
fi
|
||||
|
||||
if [ ! -f "$SCRIPT_DIR/build/jna-platform.jar" ]; then
|
||||
wget -O "$SCRIPT_DIR/build/jna-platform.jar" "https://repo1.maven.org/maven2/net/java/dev/jna/jna-platform/$JNA_VERSION/jna-platform-$JNA_VERSION.jar"
|
||||
fi
|
||||
|
||||
if [ ! -f "$SCRIPT_DIR/build/i2pfirefox.jar" ]; then
|
||||
wget -O "$SCRIPT_DIR/build/i2pfirefox.jar" "https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/$I2PFIREFOX_VERSION/i2pfirefox.jar"
|
||||
fi
|
||||
|
||||
for dll in "$I2P_JBIGI/"*windows*.dll; do
|
||||
jar uf "$SCRIPT_DIR/build/jbigi.jar" "$dll"
|
||||
done
|
||||
|
||||
cd "$SCRIPT_DIR"/java
|
||||
"$JAVA_HOME"/bin/javac -d ../build -classpath "$SCRIPT_DIR/build/i2pfirefox.jar:$SCRIPT_DIR/build/jna.jar":"$SCRIPT_DIR/build/jna-platform.jar":"$SCRIPT_DIR/build/i2p.jar":"$SCRIPT_DIR/build/router.jar":"$SCRIPT_DIR/build/routerconsole.jar":"$SCRIPT_DIR/build/jbigi.jar" \
|
||||
net/i2p/router/CopyConfigDir.java \
|
||||
net/i2p/router/Elevator.java \
|
||||
net/i2p/router/Shell32X.java \
|
||||
net/i2p/router/WindowsServiceUtil.java \
|
||||
net/i2p/router/WinLauncher.java \
|
||||
net/i2p/router/WindowsUpdatePostProcessor.java \
|
||||
net/i2p/router/WinUpdateProcess.java \
|
||||
net/i2p/router/WindowsServiceUtil.java \
|
||||
net/i2p/router/ZipUpdateProcess.java
|
||||
|
||||
cd ..
|
||||
|
||||
#echo "building launcher.jar"
|
||||
cd "$SCRIPT_DIR/build"
|
||||
"$JAVA_HOME"/bin/jar -cf launcher.jar net
|
||||
cd ..
|
31
buildscripts/licenses.sh
Executable file
31
buildscripts/licenses.sh
Executable file
@ -0,0 +1,31 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
|
||||
if [ -f i2pversion_override ]; then
|
||||
. "$SCRIPT_DIR/i2pversion_override"
|
||||
fi
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
mkdir -p "$SCRIPT_DIR"/build/licenses
|
||||
cp "$SCRIPT_DIR"/license/* "$SCRIPT_DIR"/build/licenses
|
||||
cp "$SCRIPT_DIR"/LICENSE.md "$SCRIPT_DIR"/build/licenses/MIT.txt
|
||||
cat "$SCRIPT_DIR"/build/licenses/LICENSE.index \
|
||||
"$SCRIPT_DIR"/build/licenses/EPL.txt \
|
||||
"$SCRIPT_DIR"/build/licenses/GPL+CLASSPATH.txt \
|
||||
"$SCRIPT_DIR"/build/licenses/HTTPS-Everywhere.txt \
|
||||
"$SCRIPT_DIR"/build/licenses/LICENSE.tor \
|
||||
"$SCRIPT_DIR"/build/licenses/MIT.txt \
|
||||
"$SCRIPT_DIR"/build/licenses/MPL2.txt \
|
||||
"$SCRIPT_DIR"/build/licenses/NoScript.txt \
|
||||
"$SCRIPT_DIR"/build/licenses/NSS.txt \
|
||||
"$SCRIPT_DIR"/build/licenses/I2P.txt > "$SCRIPT_DIR"/build/licenses/LICENSE.txt
|
||||
unix2dos "$SCRIPT_DIR"/build/licenses/LICENSE.txt
|
@ -2,12 +2,13 @@
|
||||
|
||||
## EXPERIMENTAL. PROBABLY WON'T SEE THE LIGHT OF DAY BUT MAYBE I GET LUCKY.
|
||||
|
||||
# Motivation
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. ./config.sh
|
||||
. ./i2pversion
|
||||
|
||||
./build.sh
|
||||
"$SCRIPT_DIR"/buildscripts/build.sh
|
||||
jpackage --name I2P-MSI --app-version "$I2P_VERSION" \
|
||||
--verbose \
|
||||
--java-options "-Xmx512m" \
|
||||
@ -17,10 +18,10 @@ jpackage --name I2P-MSI --app-version "$I2P_VERSION" \
|
||||
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
||||
$JPACKAGE_OPTS \
|
||||
--app-content src/I2P/config \
|
||||
--app-content src/icons/windowsUIToopie2.png \
|
||||
--icon src/icons/windowsUIToopie2.png \
|
||||
--input build \
|
||||
--app-content "$SCRIPT_DIR"/src/I2P/config \
|
||||
--app-content "$SCRIPT_DIR"/src/icons/windowsUIToopie2.png \
|
||||
--icon "$SCRIPT_DIR"/src/icons/windowsUIToopie2.png \
|
||||
--input "$SCRIPT_DIR/build" \
|
||||
--verbose \
|
||||
--type msi \
|
||||
--win-dir-chooser \
|
26
buildscripts/nsis.sh
Executable file
26
buildscripts/nsis.sh
Executable file
@ -0,0 +1,26 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
|
||||
if [ -f i2pversion_override ]; then
|
||||
. "$SCRIPT_DIR/i2pversion_override"
|
||||
fi
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
MAKENSIS=$(which makensis)
|
||||
if [ -z "$MAKENSIS" ]; then
|
||||
MAKENSIS="wsl makensis"
|
||||
fi
|
||||
|
||||
cp "$SCRIPT_DIR"/src/nsis/*.nsi "$SCRIPT_DIR"/build
|
||||
cp "$SCRIPT_DIR"/src/nsis/*.nsh "$SCRIPT_DIR"/build
|
||||
cp "$SCRIPT_DIR"/src/icons/*.ico "$SCRIPT_DIR"/build
|
||||
cd "$SCRIPT_DIR"/build && $MAKENSIS i2pbrowser-installer.nsi && cp I2P-Easy-Install-Bundle-*.exe ../ && echo "built windows installer"
|
@ -1,6 +1,6 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
@ -9,5 +9,5 @@ if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
./unsigned.sh
|
||||
./sign.sh
|
||||
"$SCRIPT_DIR"/buildscripts/unsigned.sh
|
||||
"$SCRIPT_DIR"/buildscripts/sign.sh
|
@ -1,6 +1,6 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
@ -40,6 +40,8 @@ if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
|
||||
linuxsign I2P-Easy-Install-Bundle-$I2P_VERSION.exe
|
||||
cp "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" "I2P-Easy-Install-Bundle-$I2P_VERSION-signed.exe"
|
||||
else
|
||||
signtool.exe sign -a "I2P-Easy-Install-Bundle-$I2P_VERSION.exe"
|
||||
#signtool.exe sign -a "I2P-Easy-Install-Bundle-$I2P_VERSION.exe"
|
||||
echo "WARNING: Signing is temporarily disabled for the installer."
|
||||
sleep 5s
|
||||
cp "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" "I2P-Easy-Install-Bundle-$I2P_VERSION-signed.exe"
|
||||
fi
|
32
buildscripts/targz.sh
Executable file
32
buildscripts/targz.sh
Executable file
@ -0,0 +1,32 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
export machine=unix
|
||||
"$SCRIPT_DIR"/buildscripts/clean.sh
|
||||
wsl "$SCRIPT_DIR"/buildscripts/clean.sh
|
||||
"$SCRIPT_DIR"/buildscripts/build.sh
|
||||
cd "$SCRIPT_DIR/I2P" || exit 1
|
||||
|
||||
TORSOCKS=$(which torsocks)
|
||||
if [ -f "${TORSOCKS}" ]; then
|
||||
. "${TORSOCKS}" on
|
||||
fi
|
||||
"$SCRIPT_DIR"/src/unix/torbrowser.sh
|
||||
version="$(curl -s https://aus1.torproject.org/torbrowser/update_3/release/downloads.json | jq -r ".version")"
|
||||
. "${TORSOCKS}" off
|
||||
locale="en-US" # mention your locale. default = en-US
|
||||
if [ -d /etc/default/locale ]; then
|
||||
. /etc/default/locale
|
||||
locale=$(echo "${LANG}" | cut -d . -f1)
|
||||
fi
|
||||
rm -vrf "tor-browser_${locale}"
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
tar czvf I2P.tar.gz I2P
|
15
buildscripts/unsigned.sh
Executable file
15
buildscripts/unsigned.sh
Executable file
@ -0,0 +1,15 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
"$SCRIPT_DIR"/buildscripts/clean.sh
|
||||
wsl "$SCRIPT_DIR"/buildscripts/clean.sh
|
||||
"$SCRIPT_DIR"/buildscripts/build.sh
|
||||
"$SCRIPT_DIR"/buildscripts/nsis.sh
|
26
buildscripts/version.sh
Executable file
26
buildscripts/version.sh
Executable file
@ -0,0 +1,26 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
|
||||
if [ -f i2pversion_override ]; then
|
||||
. "$SCRIPT_DIR/i2pversion_override"
|
||||
fi
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
echo "!define VERSIONMAJOR $VERSIONMAJOR" > "$SCRIPT_DIR"/src/nsis/i2pbrowser-version.nsi
|
||||
echo "!define VERSIONMINOR $VERSIONMINOR" >> "$SCRIPT_DIR"/src/nsis/i2pbrowser-version.nsi
|
||||
echo "!define VERSIONBUILD $VERSIONBUILD" >> "$SCRIPT_DIR"/src/nsis/i2pbrowser-version.nsi
|
||||
echo "!define I2P_VERSION $PROFILE_VERSION" > "$SCRIPT_DIR"/src/nsis/i2pbrowser-jpackage.nsi
|
||||
|
||||
mkdir -p "$SCRIPT_DIR"/build
|
||||
echo "$PROFILE_VERSION" > "$SCRIPT_DIR"/build/version.txt
|
||||
echo "$PROFILE_VERSION" > "$SCRIPT_DIR"/build/version.txt
|
||||
sed 's|!define VERSION||g' "$SCRIPT_DIR"/src/nsis/i2pbrowser-version.nsi | sed 's| |=|g' > .version
|
33
buildscripts/zip.sh
Executable file
33
buildscripts/zip.sh
Executable file
@ -0,0 +1,33 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
"$SCRIPT_DIR"/buildscripts/clean.sh
|
||||
wsl "$SCRIPT_DIR"/buildscripts/clean.sh
|
||||
"$SCRIPT_DIR"/buildscripts/build.sh
|
||||
cd "$SCRIPT_DIR/I2P" || exit 1
|
||||
|
||||
TORSOCKS=$(which torsocks)
|
||||
if [ -f "${TORSOCKS}" ]; then
|
||||
. "${TORSOCKS}" on
|
||||
fi
|
||||
"$SCRIPT_DIR"/src/win/torbrowser-windows.sh
|
||||
version="$(curl -s https://aus1.torproject.org/torbrowser/update_3/release/downloads.json | jq -r ".version")"
|
||||
. "${TORSOCKS}" off
|
||||
locale="en-US" # mention your locale. default = en-US
|
||||
if [ -d /etc/default/locale ]; then
|
||||
. /etc/default/locale
|
||||
locale=$(echo "${LANG}" | cut -d . -f1)
|
||||
fi
|
||||
rm -vrf "tor-browser_${locale}"
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
rm -rf I2P-portable && cp -r I2P I2P-portable
|
||||
#powershell Compress-Archive -force I2P-portable I2P-windows-portable.zip
|
||||
zip -r I2P-windows-portable.zip I2P-portable
|
@ -1,3 +1,7 @@
|
||||
2022-01-23 idk
|
||||
* Move build scripts to their own directory and make them use correct paths when moved
|
||||
* Add EXTRA to router when generating embedded router jars.
|
||||
|
||||
2022-09-20 idk
|
||||
* improve compatibility with local service installs and with un-bundled installs side-by-side with bundled intalls
|
||||
* version 1.9.7
|
||||
|
24
config.sh
24
config.sh
@ -10,17 +10,21 @@ uname=$(uname)
|
||||
# to use it for Oracle OpenJDK18
|
||||
|
||||
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
|
||||
PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
export PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
export JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
PATH="/c/Program Files/Java/jdk-19/bin/:$PATH:/c/Program Files/Java/jdk-19/bin/"
|
||||
export PATH="/c/Program Files/Java/jdk-19/bin/:$PATH:/c/Program Files/Java/jdk-19/bin/"
|
||||
JAVA_HOME="/c/Program Files/Java/jdk-19"
|
||||
export JAVA_HOME="/c/Program Files/Java/jdk-19"
|
||||
HOST=win32
|
||||
export HOST=win32
|
||||
fi
|
||||
|
||||
if [ "${uname}" != "Linux" ]; then
|
||||
PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
export PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
export JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
PATH="/c/Program Files/Java/jdk-19/bin/:$PATH:/c/Program Files/Java/jdk-19/bin/"
|
||||
export PATH="/c/Program Files/Java/jdk-19/bin/:$PATH:/c/Program Files/Java/jdk-19/bin/"
|
||||
JAVA_HOME="/c/Program Files/Java/jdk-19"
|
||||
export JAVA_HOME="/c/Program Files/Java/jdk-19"
|
||||
HOST=win32
|
||||
export HOST=win32
|
||||
fi
|
||||
|
||||
|
||||
@ -74,9 +78,13 @@ fi
|
||||
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
|
||||
PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
export PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
PATH="$PATH:C:\Users\user\Downloads\m4-1.4.14-1-bin\bin"
|
||||
export PATH="$PATH:C:\Users\user\Downloads\m4-1.4.14-1-bin\bin"
|
||||
fi
|
||||
|
||||
if [ "${uname}" != "Linux" ]; then
|
||||
PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
export PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
PATH="$PATH:C:\Users\user\Downloads\m4-1.4.14-1-bin\bin"
|
||||
export PATH="$PATH:C:\Users\user\Downloads\m4-1.4.14-1-bin\bin"
|
||||
fi
|
@ -1 +0,0 @@
|
||||
A browser profile and accompanying script for launching it. Used to combine I2P with Firefox in a reasonably safe way.
|
@ -1,15 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
./clean.sh
|
||||
wsl make distclean
|
||||
./build.sh
|
||||
wsl make
|
@ -21,7 +21,7 @@ tunnel.0.type=httpclient
|
||||
tunnel.0.sharedClient=false
|
||||
tunnel.0.interface=127.0.0.1
|
||||
tunnel.0.listenPort=4444
|
||||
tunnel.0.proxyList=false.i2p
|
||||
tunnel.0.proxyList=exit.stormycloud.i2p
|
||||
tunnel.0.i2cpHost=127.0.0.1
|
||||
tunnel.0.i2cpPort=7654
|
||||
tunnel.0.option.inbound.nickname=HTTP Proxy
|
||||
@ -31,7 +31,7 @@ tunnel.0.option.i2cp.reduceIdleTime=900000
|
||||
tunnel.0.option.i2cp.reduceOnIdle=true
|
||||
tunnel.0.option.i2cp.reduceQuantity=1
|
||||
tunnel.0.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=false.i2p
|
||||
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=exit.stormycloud.i2p
|
||||
tunnel.0.option.inbound.length=3
|
||||
tunnel.0.option.inbound.lengthVariance=0
|
||||
tunnel.0.option.outbound.length=3
|
||||
|
19
i2pversion
19
i2pversion
@ -1,16 +1,15 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
JNA_VERSION=5.11.0
|
||||
export JNA_VERSION=5.11.0
|
||||
I2PFIREFOX_VERSION=0.0.36
|
||||
export I2PFIREFOX_VERSION=0.0.36
|
||||
JNA_VERSION=5.12.1
|
||||
export JNA_VERSION=5.12.1
|
||||
I2PFIREFOX_VERSION=1.0.7
|
||||
export I2PFIREFOX_VERSION=1.0.7
|
||||
# Comment this out to build from an alternate branch or
|
||||
# the tip of the master branch.
|
||||
VERSIONMAJOR=1
|
||||
VERSIONMINOR=9
|
||||
VERSIONBUILD=7
|
||||
VERSIONMAJOR=2
|
||||
VERSIONMINOR=1
|
||||
VERSIONBUILD=0
|
||||
I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
||||
export I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
||||
VERSION=i2p-jpackage-1.9.4
|
||||
export VERSION=i2p-jpackage-1.9.4
|
||||
|
||||
VERSION=i2p-2.1.0
|
||||
export VERSION=i2p-2.1.0
|
@ -46,7 +46,7 @@ public class CopyConfigDir extends WindowsServiceUtil {
|
||||
if (copyDirectory(file, new File(newPath)))
|
||||
return false;
|
||||
if (file.isFile())
|
||||
if (!copyFile(file, new File(newPath), true))
|
||||
if (0 == copyFile(file, new File(newPath), true))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -61,37 +61,52 @@ public class CopyConfigDir extends WindowsServiceUtil {
|
||||
if (file.isDirectory())
|
||||
if (!copyConfigDirectory(file, new File(newPath)))
|
||||
return false;
|
||||
if (file.isFile())
|
||||
if (!copyFileNeverOverwrite(
|
||||
file,
|
||||
new File(newPath))) // new File(workDir, file.toString())))
|
||||
if (file.isFile()) {
|
||||
int cnr = copyFileNeverOverwrite(file, new File(newPath));
|
||||
if (0 == cnr)
|
||||
return false;
|
||||
if (1 == cnr) {
|
||||
logger.info(
|
||||
"using jpackaged configs in a jpackaged install, creating jpackaged file");
|
||||
File jpackagedConfigsInUse = new File(appImageHome(), "jpackaged");
|
||||
if (!jpackagedConfigsInUse.exists()) {
|
||||
try {
|
||||
jpackagedConfigsInUse.createNewFile();
|
||||
} catch (IOException e) {
|
||||
logger.warning(
|
||||
"Error creating jpackaged file, delete config files manually when uninstalling");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (-1 == cnr) {
|
||||
logger.info(
|
||||
"not overwriting existing config file, not creating jpackaged file");
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean copyFileNeverOverwrite(String basePath,
|
||||
String workPath) {
|
||||
public static int copyFileNeverOverwrite(String basePath, String workPath) {
|
||||
File baseFile = new File(basePath);
|
||||
File workFile = new File(workPath);
|
||||
return copyFileNeverOverwrite(baseFile, workFile);
|
||||
}
|
||||
|
||||
public static boolean copyFileNeverOverwrite(File basePath, File workPath) {
|
||||
public static int copyFileNeverOverwrite(File basePath, File workPath) {
|
||||
return copyFile(basePath, workPath, false);
|
||||
}
|
||||
|
||||
public static boolean copyFile(File basePath, File workPath,
|
||||
boolean overWrite) {
|
||||
public static int copyFile(File basePath, File workPath, boolean overWrite) {
|
||||
if (!basePath.exists()) {
|
||||
logger.info(basePath.getAbsolutePath() + " doesn't exist, not copying");
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!overWrite && workPath.exists()) {
|
||||
logger.info(workPath.getAbsolutePath() +
|
||||
" already exists, not overwriting");
|
||||
return true;
|
||||
return -1;
|
||||
}
|
||||
|
||||
File workDir = workPath.getParentFile();
|
||||
@ -111,12 +126,12 @@ public class CopyConfigDir extends WindowsServiceUtil {
|
||||
}
|
||||
in.close();
|
||||
out.close();
|
||||
return true;
|
||||
return 1;
|
||||
} catch (Throwable e) {
|
||||
logger.warning(e.toString());
|
||||
logger.warning("failed to copy " + basePath.getAbsolutePath() + " to " +
|
||||
workPath.getAbsolutePath());
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,7 @@ public class WinLauncher extends CopyConfigDir {
|
||||
public static void main(String[] args) {
|
||||
setupLauncher();
|
||||
initLogger();
|
||||
boolean privateBrowsing = false;
|
||||
int privateBrowsing = 0;
|
||||
boolean usabilityMode = false;
|
||||
boolean chromiumFirst = false;
|
||||
int proxyTimeoutTime = 200;
|
||||
@ -46,7 +46,7 @@ public class WinLauncher extends CopyConfigDir {
|
||||
if (args.length > 0) {
|
||||
for (String arg : args) {
|
||||
if (arg.equals("-private")) {
|
||||
privateBrowsing = true;
|
||||
privateBrowsing = 1;
|
||||
logger.info(
|
||||
"Private browsing is true, profile will be discarded at end of session.");
|
||||
} else if (arg.equals("-chromium")) {
|
||||
@ -88,7 +88,9 @@ public class WinLauncher extends CopyConfigDir {
|
||||
File programs = programFile();
|
||||
File home = homeDir();
|
||||
|
||||
System.setProperty("i2p.dir.base", programs.getAbsolutePath());
|
||||
System.setProperty(
|
||||
"i2p.dir.base",
|
||||
new File(programs.getAbsolutePath(), "config").getAbsolutePath());
|
||||
System.setProperty("i2p.dir.config", home.getAbsolutePath());
|
||||
System.setProperty("router.pid",
|
||||
String.valueOf(ProcessHandle.current().pid()));
|
||||
@ -153,15 +155,27 @@ public class WinLauncher extends CopyConfigDir {
|
||||
}
|
||||
|
||||
private static void fixServiceConfig() {
|
||||
if (osName() != "windows")
|
||||
return;
|
||||
// If the user installed the Easy bundle before installing the
|
||||
// regulalr bundle, then they have a config file which contains the
|
||||
// IzPack installer, then they have a config file which contains the
|
||||
// wrong update URL. Check for it, and change it back if necessary.
|
||||
// closes #23
|
||||
i2pRouter = new Router(routerConfig(), System.getProperties());
|
||||
String routerconf = routerConfig();
|
||||
if (routerconf != null) {
|
||||
File routerconffile = new File(routerconf);
|
||||
if (!routerconffile.exists()) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
if (isInstalled("i2p") || checkProgramFilesInstall()) {
|
||||
i2pRouter = new Router(routerconf, System.getProperties());
|
||||
String newsURL = i2pRouter.getConfigSetting("router.newsURL");
|
||||
if (newsURL != null) {
|
||||
if (newsURL.contains("win/beta")) {
|
||||
if (newsURL.contains(
|
||||
"http://dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka.b32.i2p/news/win/beta/news.su3")) {
|
||||
logger.info(
|
||||
"checked router.newsURL config, containes win/beta in a service install, invalid update type");
|
||||
if (i2pRouter.saveConfig("router.newsURL", ServiceUpdaterString())) {
|
||||
@ -172,7 +186,8 @@ public class WinLauncher extends CopyConfigDir {
|
||||
}
|
||||
String backupNewsURL = i2pRouter.getConfigSetting("router.backupNewsURL");
|
||||
if (backupNewsURL != null) {
|
||||
if (backupNewsURL.contains("win/beta")) {
|
||||
if (backupNewsURL.contains(
|
||||
"http://tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq.b32.i2p/win/beta/news.su3")) {
|
||||
logger.info(
|
||||
"checked router.backupNewsURL config, containes win/beta in a service install, invalid update type");
|
||||
if (i2pRouter.saveConfig("router.backupNewsURL",
|
||||
@ -184,9 +199,10 @@ public class WinLauncher extends CopyConfigDir {
|
||||
}
|
||||
String updateURL = i2pRouter.getConfigSetting("router.updateURL");
|
||||
if (updateURL != null) {
|
||||
if (updateURL.contains("i2pwinupdate.su3")) {
|
||||
if (updateURL.contains(
|
||||
"http://ekm3fu6fr5pxudhwjmdiea5dovc3jdi66hjgop4c7z7dfaw7spca.b32.i2p/i2pwinupdate.su3")) {
|
||||
logger.info(
|
||||
"checked router.updateURL config, containes win/beta in a service install, invalid update type");
|
||||
"checked router.updateURL config, containes easy-intall update in a service install, invalid update type");
|
||||
if (i2pRouter.saveConfig("router.updateURL",
|
||||
ServiceStaticUpdaterString())) {
|
||||
logger.info("updated routerconsole.browser config " +
|
||||
@ -230,7 +246,7 @@ public class WinLauncher extends CopyConfigDir {
|
||||
return home;
|
||||
}
|
||||
|
||||
private static boolean launchBrowser(boolean privateBrowsing,
|
||||
private static boolean launchBrowser(int privateBrowsing,
|
||||
boolean usabilityMode,
|
||||
boolean chromiumFirst,
|
||||
int proxyTimeoutTime,
|
||||
@ -299,6 +315,12 @@ public class WinLauncher extends CopyConfigDir {
|
||||
logger.info(e.toString());
|
||||
}
|
||||
}
|
||||
Runtime.getRuntime().addShutdownHook(new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
setNotStarting();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static boolean checkStarting() {
|
||||
|
@ -62,13 +62,22 @@ class WinUpdateProcess implements Runnable {
|
||||
env.put("RESTART_I2P", "true");
|
||||
|
||||
try {
|
||||
pb.directory(workingDir)
|
||||
.redirectErrorStream(true)
|
||||
.redirectOutput(logFile)
|
||||
.start();
|
||||
Process p = pb.directory(workingDir)
|
||||
.redirectErrorStream(true)
|
||||
.redirectOutput(logFile)
|
||||
.start();
|
||||
exitCode = p.waitFor();
|
||||
if (exitCode != 0)
|
||||
_log.error("Update failed with exit code " + exitCode + " see " +
|
||||
logFile.getAbsolutePath() + " for more details");
|
||||
} catch (IOException ex) {
|
||||
_log.error(
|
||||
"Unable to run update-program in background. Update will fail.");
|
||||
"Unable to run update program in background. Update will fail.",
|
||||
ex);
|
||||
} catch (InterruptedException ex) {
|
||||
_log.error(
|
||||
"Unable to run update program in background. Update will fail.",
|
||||
ex);
|
||||
}
|
||||
} else {
|
||||
// If we cant write to the log file and we're on Windows, use the elevator
|
||||
|
@ -39,14 +39,27 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
String version, File file)
|
||||
throws IOException {
|
||||
_log.info("Got an update to post-process");
|
||||
if (SystemVersion.isWindows()) {
|
||||
if (type != UpdateType.ROUTER_SIGNED_SU3 &&
|
||||
type != UpdateType.ROUTER_DEV_SU3) {
|
||||
_log.warn("Unsupported update type " + type);
|
||||
return;
|
||||
}
|
||||
if (fileType != SU3File.TYPE_ZIP) {
|
||||
this.positionedFile = moveUpdateInstaller(file);
|
||||
this.version = version;
|
||||
|
||||
if (type != UpdateType.ROUTER_SIGNED_SU3 &&
|
||||
type != UpdateType.ROUTER_DEV_SU3) {
|
||||
_log.warn("Unsupported update type " + type);
|
||||
if (!hook.compareAndSet(false, true)) {
|
||||
_log.info("shutdown hook was already set");
|
||||
return;
|
||||
}
|
||||
|
||||
_log.info("adding shutdown hook");
|
||||
|
||||
ctx.addFinalShutdownTask(
|
||||
new ZipUpdateProcess(ctx, this::getVersion, this::getFile));
|
||||
}
|
||||
if (SystemVersion.isWindows()) {
|
||||
|
||||
if (fileType != SU3File.TYPE_EXE) {
|
||||
_log.warn("Unsupported file type " + fileType);
|
||||
return;
|
||||
|
112
java/net/i2p/router/ZipUpdateProcess.java
Normal file
112
java/net/i2p/router/ZipUpdateProcess.java
Normal file
@ -0,0 +1,112 @@
|
||||
package net.i2p.router;
|
||||
|
||||
import java.io.*;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.function.*;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipInputStream;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.router.*;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
public class ZipUpdateProcess implements Runnable {
|
||||
private final RouterContext ctx;
|
||||
private final Supplier<String> versionSupplier;
|
||||
private final Supplier<File> fileSupplier;
|
||||
private final Log _log;
|
||||
|
||||
ZipUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier,
|
||||
Supplier<File> fileSupplier) {
|
||||
this.ctx = ctx;
|
||||
this.versionSupplier = versionSupplier;
|
||||
this.fileSupplier = fileSupplier;
|
||||
this._log = ctx.logManager().getLog(ZipUpdateProcess.class);
|
||||
}
|
||||
|
||||
private File workDir() throws IOException {
|
||||
if (ctx != null) {
|
||||
File workDir =
|
||||
new File(ctx.getConfigDir().getAbsolutePath(), "i2p_update_zip");
|
||||
if (workDir.exists()) {
|
||||
if (workDir.isFile())
|
||||
throw new IOException(workDir +
|
||||
" exists but is a file, get it out of the way");
|
||||
return workDir;
|
||||
} else {
|
||||
workDir.mkdirs();
|
||||
}
|
||||
return workDir;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void unzipUpdateInstaller() throws IOException {
|
||||
String version = versionSupplier.get();
|
||||
File file = fileSupplier.get();
|
||||
if (file == null)
|
||||
return;
|
||||
|
||||
File workingDir = workDir();
|
||||
File zipFile = new File(workingDir, "i2pupdate_portable.zip");
|
||||
File destDir = ctx.getConfigDir();
|
||||
|
||||
String errors = unzip(zipFile.getAbsolutePath(), destDir.getAbsolutePath());
|
||||
_log.error(errors);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
unzipUpdateInstaller();
|
||||
} catch (IOException ioe) {
|
||||
_log.error("Error running updater, update may fail." + ioe);
|
||||
}
|
||||
}
|
||||
|
||||
// copied wholesale from this example:
|
||||
// https://www.digitalocean.com/community/tutorials/java-unzip-file-example
|
||||
// It doesn't check for zip-slips, but that's fine because if somebody's able
|
||||
// to deliver a malicious update then they can just run code anyway so there's
|
||||
// no point.
|
||||
private static String unzip(String zipFilePath, String destDir) {
|
||||
File dir = new File(destDir);
|
||||
// create output directory if it doesn't exist
|
||||
if (!dir.exists())
|
||||
dir.mkdirs();
|
||||
FileInputStream fis;
|
||||
// buffer for read and write data to file
|
||||
byte[] buffer = new byte[1024];
|
||||
try {
|
||||
fis = new FileInputStream(zipFilePath);
|
||||
ZipInputStream zis = new ZipInputStream(fis);
|
||||
ZipEntry ze = zis.getNextEntry();
|
||||
while (ze != null) {
|
||||
String fileName = ze.getName();
|
||||
File newFile = new File(destDir + File.separator + fileName);
|
||||
System.out.println("Unzipping to " + newFile.getAbsolutePath());
|
||||
// create directories for sub directories in zip
|
||||
new File(newFile.getParent()).mkdirs();
|
||||
FileOutputStream fos = new FileOutputStream(newFile);
|
||||
int len;
|
||||
while ((len = zis.read(buffer)) > 0) {
|
||||
fos.write(buffer, 0, len);
|
||||
}
|
||||
fos.close();
|
||||
// close this ZipEntry
|
||||
zis.closeEntry();
|
||||
ze = zis.getNextEntry();
|
||||
}
|
||||
// close last ZipEntry
|
||||
zis.closeEntry();
|
||||
zis.close();
|
||||
fis.close();
|
||||
} catch (IOException e) {
|
||||
return e.toString();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
88
launcher.sh
88
launcher.sh
@ -1,88 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/i2pversion"
|
||||
|
||||
if [ -f i2pversion_override ]; then
|
||||
. "$SCRIPT_DIR/i2pversion_override"
|
||||
fi
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
COUNT="Ten Nine Eight Seven Six Five Four Three Two One"
|
||||
|
||||
which java
|
||||
export JAVA=$(java --version | tr -d 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\n' | cut -d ' ' -f 2 | cut -d '.' -f 1 | tr -d '\n\t\- ')
|
||||
|
||||
if [ "$JAVA" -lt "14" ]; then
|
||||
echo "Java 14+ must be used to compile with jpackage, java is $JAVA"
|
||||
exit 1
|
||||
fi
|
||||
if [ "$JAVA" -lt "17" ]; then
|
||||
echo "It is highly recommended that you use Java 17+ to build release packages"
|
||||
fi
|
||||
|
||||
if [ -z "${JAVA_HOME}" ]; then
|
||||
export JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
|
||||
fi
|
||||
if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
|
||||
export 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 -b "$VERSION" https://i2pgit.org/i2p-hackers/i2p.i2p "$HERE/../i2p.i2p.jpackage-build/"
|
||||
tar --exclude="$HERE/../i2p.i2p.jpackage-build/.git" -cvzf i2p.i2p.jpackage-build.tar.gz "$HERE/../i2p.i2p.jpackage-build/"
|
||||
fi
|
||||
cd "$HERE/../i2p.i2p.jpackage-build/"
|
||||
for i in $COUNT; do
|
||||
echo -n "$i...."; sleep 1s
|
||||
done
|
||||
ant distclean pkg || true
|
||||
|
||||
cd "$HERE"
|
||||
export I2P_PKG="$HERE/../i2p.i2p.jpackage-build/pkg-temp"
|
||||
export RES_DIR="$HERE/../i2p.i2p.jpackage-build/installer/resources"
|
||||
export I2P_JARS="$I2P_PKG/lib"
|
||||
export I2P_JBIGI="$HERE/../i2p.i2p.jpackage-build/installer/lib/jbigi"
|
||||
|
||||
echo "compiling custom launcher"
|
||||
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
|
||||
|
||||
if [ ! -f "$HERE/build/i2pfirefox.jar" ]; then
|
||||
wget -O "$HERE/build/i2pfirefox.jar" "https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/$I2PFIREFOX_VERSION/i2pfirefox.jar"
|
||||
fi
|
||||
|
||||
cd java
|
||||
"$JAVA_HOME"/bin/javac -d ../build -classpath "$HERE/build/i2pfirefox.jar:$HERE/build/jna.jar":"$HERE/build/jna-platform.jar":"$HERE/build/i2p.jar":"$HERE/build/router.jar":"$HERE/build/routerconsole.jar" \
|
||||
net/i2p/router/CopyConfigDir.java \
|
||||
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 \
|
||||
net/i2p/router/WindowsServiceUtil.java
|
||||
|
||||
cd ..
|
||||
|
||||
#echo "building launcher.jar"
|
||||
cd build
|
||||
"$JAVA_HOME"/bin/jar -cf launcher.jar net
|
||||
cd ..
|
@ -1,4 +0,0 @@
|
||||
orig:
|
||||
tar --exclude=debian --exclude=.git -cvzf ../i2p-firefox-profile_$(PROFILE_VERSION).orig.tar.gz .
|
||||
|
||||
## HOWTO: Don't bother. See http://i2pgit.org/idk/i2p.plugins.firefox debian jpackages.
|
@ -1 +0,0 @@
|
||||
# DEPRECATED: see https://i2pgit.org/idk/i2p.plugins.firefox for much better replacement.
|
@ -1 +0,0 @@
|
||||
#DEPRECATED moved to i2p.plugins.firefox as "Base/Strict Mode"
|
@ -1,39 +0,0 @@
|
||||
install:
|
||||
install -D -m644 src/unix/i2pbrowserrc /etc/i2pbrowser/i2pbrowserrc
|
||||
install -D -m644 src/unix/i2pbrowserdebianrc /etc/i2pbrowser/i2pbrowserdebianrc
|
||||
install -D -m755 build/profile/i2pbrowser.sh /usr/local/bin/i2pbrowser
|
||||
install -D -m755 build/app-profile/i2pconfig.sh /usr/local/bin/i2pconfig
|
||||
install -D -m755 src/unix/i2p-config-service-setup.sh /usr/local/bin/i2p-config-service-setup
|
||||
cp -vr build/profile /var/lib/i2pbrowser/profile
|
||||
cp -vr build/app-profile /var/lib/i2pbrowser/app-profile
|
||||
cp -vr src/icons /var/lib/i2pbrowser/icons
|
||||
cp src/unix/desktop/i2pbrowser.desktop /usr/share/applications
|
||||
cp src/unix/desktop/i2pconfig.desktop /usr/share/applications
|
||||
|
||||
uninstall:
|
||||
rm -rfv /etc/i2pbrowser \
|
||||
/var/lib/i2pbrowser \
|
||||
/etc/i2pbrowser/i2pbrowserrc \
|
||||
/usr/local/bin/i2pbrowser \
|
||||
/usr/local/bin/i2pconfig \
|
||||
/usr/local/bin/i2p-config-service-setup \
|
||||
/usr/share/applications/i2pbrowser.desktop \
|
||||
/usr/share/applications/i2pconfig.desktop
|
||||
|
||||
checkinstall: .version
|
||||
checkinstall \
|
||||
--default \
|
||||
--install=no \
|
||||
--fstrans=yes \
|
||||
--pkgname=i2p-firefox \
|
||||
--pkgversion=$(PROFILE_VERSION) \
|
||||
--pkggroup=net \
|
||||
--pkgrelease=1 \
|
||||
--pkgsource="https://i2pgit.org/i2p-hackers/i2p.firefox" \
|
||||
--maintainer="$(SIGNER)" \
|
||||
--requires="firefox,wget" \
|
||||
--suggests="i2p,i2p-router,syndie,tor,tsocks" \
|
||||
--nodoc \
|
||||
--deldoc=yes \
|
||||
--deldesc=yes \
|
||||
--backup=no
|
@ -1 +0,0 @@
|
||||
#DEPRECATED moved to i2p.plugins.firefox as "Usability Mode"
|
@ -7,11 +7,11 @@ $(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools:
|
||||
go mod vendor && go build
|
||||
|
||||
prepupdate:
|
||||
cp -v "I2P-Profile-Installer-$(PROFILE_VERSION)-signed.su3" i2pwinupdate.su3
|
||||
cp -v "I2P-Easy-Install-Bundle-$(PROFILE_VERSION)-signed.su3" i2pwinupdate.su3
|
||||
|
||||
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" $(PROFILE_VERSION) $(SIGNER)
|
||||
$(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools -name "I2P-Easy-Install-Bundle-$(PROFILE_VERSION)-signed" -signer "$(SIGNER)" -version "$(PROFILE_VERSION)"
|
||||
java -cp "$(HOME)/i2p/lib/*" net.i2p.crypto.SU3File sign -c ROUTER -f EXE I2P-Easy-Install-Bundle-$(PROFILE_VERSION)-signed.exe I2P-Easy-Install-Bundle-$(PROFILE_VERSION)-signed.su3 "$(HOME)/.i2p-plugin-keys/news-su3-keystore.ks" $(PROFILE_VERSION) $(SIGNER)
|
||||
|
||||
i2pwinupdate.su3.torrent: prepupdate su3
|
||||
mktorrent \
|
||||
|
@ -1,19 +0,0 @@
|
||||
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
||||
<!-- This is an automatically generated file.
|
||||
It will be read and overwritten.
|
||||
DO NOT EDIT! -->
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
||||
<TITLE>Bookmarks</TITLE>
|
||||
<H1>Bookmarks Menu</H1>
|
||||
|
||||
<DL><p>
|
||||
<DT><A HREF="place:type=6&sort=14&maxResults=10" ADD_DATE="1539649423" LAST_MODIFIED="1539649424">Recent Tags</A>
|
||||
<HR> <DT><A HREF="http://legwork.i2p/yacysearch.html?query=%s&verify=cacheonly&contentdom=text&nav=location%2Chosts%2Cauthors%2Cnamespace%2Ctopics%2Cfiletype%2Cprotocol%2Clanguage&startRecord=0&indexof=off&meanCount=5&resource=global&prefermaskfilter=&maximumRecords=10&timezoneOffset=0" ADD_DATE="1539652098" LAST_MODIFIED="1539652098" SHORTCUTURL="legwork.i2p">Search YaCy 'legwork': Search Page</A>
|
||||
<DD>Software HTTP Freeware Home Page
|
||||
<DT><H3 ADD_DATE="1539649419" LAST_MODIFIED="1539649423" PERSONAL_TOOLBAR_FOLDER="true">Bookmarks Toolbar</H3>
|
||||
<DL><p>
|
||||
<DT><A HREF="place:sort=8&maxResults=10" ADD_DATE="1539649423" LAST_MODIFIED="1539649423">Most Visited</A>
|
||||
<DT><A HREF="http://i2p-projekt.i2p/" ADD_DATE="1538511080" LAST_MODIFIED="1538511080">I2P Anonymous Network</A>
|
||||
<DD>Anonymous peer-to-peer distributed communication layer built with open source tools and designed to run any traditional Internet service such as email, IRC or web hosting.
|
||||
</DL><p>
|
||||
</DL>
|
@ -1,45 +0,0 @@
|
||||
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
|
||||
|
||||
/* only needed once */
|
||||
|
||||
@namespace html url("http://www.w3.org/1999/xhtml");
|
||||
#PersonalToolbar,
|
||||
#PanelUI-Button,
|
||||
#PanelUI-menu-button,
|
||||
#star-button,
|
||||
#forward-button,
|
||||
#home-button,
|
||||
#bookmarks-toolbar-button,
|
||||
#library-button,
|
||||
#sidebar-button,
|
||||
#pocket-button,
|
||||
#fxa-toolbar-menu-button,
|
||||
#reader-mode-button,
|
||||
#identity-icon {
|
||||
visibility: collapse;
|
||||
}
|
||||
|
||||
#urlbar-background {
|
||||
background-color: black !important;
|
||||
}
|
||||
|
||||
|
||||
/* Remove back button circle */
|
||||
|
||||
#back-button:not(:hover),
|
||||
#back-button:not(:hover)>.toolbarbutton-icon {
|
||||
background: transparent !important;
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
#back-button:hover,
|
||||
#back-button:hover>.toolbarbutton-icon {
|
||||
border: none !important;
|
||||
border-radius: 2px !important;
|
||||
}
|
||||
|
||||
#urlbar-container,
|
||||
#nav-bar {
|
||||
visibility: collapse !important
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
user_pref("extensions.https_everywhere._observatory.enabled", false);
|
||||
user_pref("extensions.https_everywhere.options.autoUpdateRulesets", false);
|
||||
user_pref("extensions.https_everywhere.globalEnabled", false);
|
||||
user_pref("extensions.https_everywhere._observatory.submit_during_tor", false);
|
||||
user_pref("extensions.https_everywhere._observatory.submit_during_nontor", false);
|
||||
user_pref("extensions.https_everywhere._observatory.use_custom_proxy", true);
|
||||
user_pref("extensions.https_everywhere._observatory.proxy_host", "127.0.0.1");
|
||||
user_pref("extensions.https_everywhere._observatory.proxy_port", 4444);
|
||||
|
||||
user_pref("extensions.torbutton.use_nontor_proxy", true);
|
||||
|
||||
//For socket conversion: in the future, I'll need to make TBB communicate with
|
||||
//i2p over a unix socket. Fortunately, this is how you do that. It will be
|
||||
//configurable in a similar way to the host:port configuration when that happens.
|
||||
//user_pref("extensions.torlauncher.socks_port_use_ipc", );
|
||||
//user_pref("extensions.torlauncher.socks_ipc_path", "");
|
||||
|
||||
user_pref("extensions.torlauncher.start_tor", false);
|
||||
//user_pref("extensions.torlauncher.default_bridge_type", "");
|
||||
user_pref("extensions.torlauncher.prompt_at_startup", false);
|
||||
|
||||
// Resist-fingerprinting and first-party isolation enable
|
||||
|
||||
user_pref("privacy.resistFingerprinting", true);
|
||||
user_pref("privacy.firstparty.isolate", true);
|
||||
|
||||
// Use i2p http proxy for all connections and set homepage to safe local form.
|
||||
|
||||
// DON'T allow access to the admin panel from the profile we browse i2p with.
|
||||
user_pref("network.proxy.no_proxies_on", "127.0.0.1:7657,localhost:7657,127.0.0.1:7662,localhost:7662,127.0.0.1:7669,localhost:7669");
|
||||
user_pref("network.proxy.type", 1);
|
||||
user_pref("network.proxy.http", "127.0.0.1");
|
||||
user_pref("network.proxy.http_port", 4444);
|
||||
user_pref("network.proxy.ssl", "127.0.0.1");
|
||||
user_pref("network.proxy.ssl_port", 4444);
|
||||
user_pref("network.proxy.ftp", "127.0.0.1");
|
||||
user_pref("network.proxy.ftp_port", 4444);
|
||||
user_pref("network.proxy.socks", "127.0.0.1");
|
||||
user_pref("network.proxy.socks_port", 4444);
|
||||
user_pref("network.proxy.share_proxy_settings", true);
|
||||
user_pref("browser.startup.homepage", "about:blank");
|
||||
user_pref("dom.security.https_only_mode", false);
|
||||
user_pref("keyword.enabled", false);
|
||||
user_pref("extensions.allowPrivateBrowsingByDefault", true);
|
||||
user_pref("extensions.PrivateBrowsing.notification", false);
|
||||
|
||||
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
|
||||
user_pref("extensions.pocket.enabled", false);
|
||||
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
|
||||
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
|
||||
user_pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
|
||||
user_pref("browser.newtabpage.activity-stream.default.sites", "http://127.0.0.1:7657/home,http://127.0.0.1:7657/i2psnark/,http://127.0.0.1:7657/susimail/");
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true);
|
||||
user_pref("ui.use_standins_for_native_colors", true);
|
||||
user_pref("webgl.disable-extensions", true);
|
||||
user_pref("webgl.min_capability_mode", true);
|
||||
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
||||
user_pref("webgl.enable-webgl2", false);
|
||||
user_pref("media.navigator.enabled", false);
|
||||
user_pref("dom.w3c_touch_events.enabled", false);
|
||||
user_pref("browser.display.use_system_colors", false);
|
||||
user_pref("extensions.autoDisableScopes", 0);
|
||||
user_pref("extensions.enabledScopes", 1);
|
Binary file not shown.
@ -1,229 +0,0 @@
|
||||
/*
|
||||
Overrides#
|
||||
for Extension Preferences# Tor Browser Bundle# Do not edit this file.##This file is modified from a file included in the Tor Browser Bundle.##Copyright 2017 The Tor Project.See LICENSE.tor#
|
||||
for licensing information.
|
||||
|
||||
HTTPS Everywhere Preferences:
|
||||
*/
|
||||
user_pref("extensions.https_everywhere._observatory.popup_shown", true);
|
||||
user_pref("extensions.https_everywhere.toolbar_hint_shown", true);
|
||||
|
||||
/*
|
||||
NoScript Preferences: #In order to disable all scripts by
|
||||
default, uncomment the following line...#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
|
||||
and comment out the following line
|
||||
*/
|
||||
user_pref("capability.policy.maonoscript.javascript.enabled", "allAccess");
|
||||
user_pref("capability.policy.maonoscript.sites", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
||||
user_pref("noscript.default", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
||||
user_pref("noscript.mandatory", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
||||
user_pref("noscript.ABE.enabled", false);
|
||||
user_pref("noscript.ABE.notify", false);
|
||||
user_pref("noscript.ABE.wanIpAsLocal", false);
|
||||
user_pref("noscript.confirmUnblock", false);
|
||||
user_pref("noscript.contentBlocker", true);
|
||||
user_pref("noscript.firstRunRedirection", false);
|
||||
user_pref("noscript.global", true);
|
||||
user_pref("noscript.gtemp", "");
|
||||
user_pref("noscript.opacizeObject", 3);
|
||||
user_pref("noscript.forbidWebGL", true);
|
||||
user_pref("noscript.forbidFonts", true);
|
||||
user_pref("noscript.options.tabSelectedIndexes", "5,0,0");
|
||||
user_pref("noscript.policynames", "");
|
||||
user_pref("noscript.secureCookies", true);
|
||||
user_pref("noscript.showAllowPage", false);
|
||||
user_pref("noscript.showBaseDomain", false);
|
||||
user_pref("noscript.showDistrust", false);
|
||||
user_pref("noscript.showRecentlyBlocked", false);
|
||||
user_pref("noscript.showTemp", false);
|
||||
user_pref("noscript.showTempToPerm", false);
|
||||
user_pref("noscript.showUntrusted", false);
|
||||
user_pref("noscript.STS.enabled", false);
|
||||
user_pref("noscript.subscription.lastCheck", -142148139);
|
||||
user_pref("noscript.temp", "");
|
||||
user_pref("noscript.untrusted", "");
|
||||
user_pref("noscript.forbidMedia", true);
|
||||
user_pref("noscript.allowWhitelistUpdates", false);
|
||||
user_pref("noscript.fixLinks", false);
|
||||
// Now handled by plugins.click_to_play // Not in this one.
|
||||
user_pref("noscript.forbidFlash", true);
|
||||
user_pref("noscript.forbidSilverlight", true);
|
||||
user_pref("noscript.forbidJava", true);
|
||||
user_pref("noscript.forbidPlugins", true);
|
||||
// Usability tweaks
|
||||
user_pref("noscript.showPermanent", false);
|
||||
user_pref("noscript.showTempAllowPage", true);
|
||||
user_pref("noscript.showRevokeTemp", true);
|
||||
user_pref("noscript.notify", false);
|
||||
user_pref("noscript.autoReload", true);
|
||||
user_pref("noscript.autoReload.allTabs", false);
|
||||
user_pref("noscript.cascadePermissions", true);
|
||||
user_pref("noscript.restrictSubdocScripting", true);
|
||||
user_pref("noscript.showVolatilePrivatePermissionsToggle", false);
|
||||
user_pref("noscript.volatilePrivatePermissions", true);
|
||||
user_pref("noscript.clearClick", 0);
|
||||
|
||||
user_pref("intl.locale.matchOS", false);
|
||||
|
||||
user_pref("extensions.https_everywhere._observatory.enabled", false);
|
||||
user_pref("extensions.https_everywhere.options.autoUpdateRulesets", false);
|
||||
user_pref("extensions.https_everywhere.globalEnabled", false);
|
||||
user_pref("extensions.https_everywhere._observatory.submit_during_tor", false);
|
||||
user_pref("extensions.https_everywhere._observatory.submit_during_nontor", false);
|
||||
user_pref("extensions.https_everywhere._observatory.use_custom_proxy", true);
|
||||
user_pref("extensions.https_everywhere._observatory.proxy_host", "127.0.0.1");
|
||||
user_pref("extensions.https_everywhere._observatory.proxy_port", 4444);
|
||||
|
||||
user_pref("extensions.torbutton.use_nontor_proxy", true);
|
||||
|
||||
//For socket conversion: in the future, I'll need to make TBB communicate with
|
||||
//i2p over a unix socket. Fortunately, this is how you do that. It will be
|
||||
//configurable in a similar way to the host:port configuration when that happens.
|
||||
//user_pref("extensions.torlauncher.socks_port_use_ipc", );
|
||||
//user_pref("extensions.torlauncher.socks_ipc_path", "");
|
||||
|
||||
// TODO: this is a Tor Browser specific setting which is ignored on Firefox. If
|
||||
// I make it true, the SOCKS outproxy will have something to connect to. But I
|
||||
// need to test more to find out if that's prudent.
|
||||
user_pref("extensions.torlauncher.start_tor", false);
|
||||
//user_pref("extensions.torlauncher.default_bridge_type", "");
|
||||
user_pref("extensions.torlauncher.prompt_at_startup", false);
|
||||
|
||||
// Resist-fingerprinting and first-party isolation enable
|
||||
|
||||
user_pref("privacy.resistFingerprinting", true);
|
||||
user_pref("privacy.firstparty.isolate", true);
|
||||
|
||||
// Use i2p http proxy for all connections and set homepage to safe local form.
|
||||
|
||||
// DON'T allow access to the admin panel from the profile we browse i2p with.
|
||||
user_pref("network.proxy.no_proxies_on", "127.0.0.1:7657,localhost:7657,127.0.0.1:7662,localhost:7662,127.0.0.1:7669,localhost:7669");
|
||||
user_pref("network.proxy.type", 1);
|
||||
user_pref("network.proxy.http", "127.0.0.1");
|
||||
user_pref("network.proxy.http_port", 4444);
|
||||
user_pref("network.proxy.ssl", "127.0.0.1");
|
||||
user_pref("network.proxy.ssl_port", 4444);
|
||||
user_pref("network.proxy.ftp", "127.0.0.1");
|
||||
user_pref("network.proxy.ftp_port", 4444);
|
||||
user_pref("network.proxy.socks", "127.0.0.1");
|
||||
user_pref("network.proxy.socks_port", 4444);
|
||||
user_pref("network.proxy.share_proxy_settings", true);
|
||||
user_pref("browser.startup.homepage", "http://127.0.0.1:7657/home");
|
||||
|
||||
// Privacy-harden and disable irrelevant features.
|
||||
user_pref("app.normandy.api_url", "");
|
||||
user_pref("app.normandy.enabled", false);
|
||||
user_pref("app.update.auto", false);
|
||||
user_pref("app.update.enabled", false);
|
||||
user_pref("beacon.enabled", false);
|
||||
user_pref("browser.aboutHomeSnippets.updateUrl", "");
|
||||
user_pref("browser.cache.disk_cache_ssl", false);
|
||||
user_pref("browser.cache.disk.enable", false);
|
||||
user_pref("browser.cache.offline.enable", false);
|
||||
user_pref("browser.disableResetPrompt", true);
|
||||
user_pref("browser.display.use_document_fonts", 0);
|
||||
user_pref("browser.fixup.alternate.enabled", false);
|
||||
user_pref("browser.formfill.enable", false);
|
||||
user_pref("browser.library.activity-stream.enabled", false);
|
||||
user_pref("browser.newtabpage.activity-stream.disableSnippets", true);
|
||||
user_pref("browser.newtabpage.activity-stream.enabled", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.snippets", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", false);
|
||||
user_pref("browser.newtabpage.activity-stream.prerender", false);
|
||||
user_pref("browser.newtabpage.activity-stream.showSearch", false);
|
||||
user_pref("browser.newtabpage.enhanced", false);
|
||||
user_pref("browser.newtabpage.introShown", true);
|
||||
user_pref("browser.newtab.preload", false);
|
||||
user_pref("browser.onboarding.enabled", false);
|
||||
user_pref("browser.pagethumbnails.capturing_disabled", true);
|
||||
user_pref("browser.safebrowsing.appRepURL", "");
|
||||
user_pref("browser.safebrowsing.blockedURIs.enabled", false);
|
||||
user_pref("browser.safebrowsing.downloads.enabled", false);
|
||||
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
|
||||
user_pref("browser.safebrowsing.downloads.remote.url", "");
|
||||
user_pref("browser.safebrowsing.enabled", false);
|
||||
user_pref("browser.safebrowsing.malware.enabled", false);
|
||||
user_pref("browser.safebrowsing.phishing.enabled", false);
|
||||
user_pref("browser.search.geoip.timeout", 1);
|
||||
user_pref("browser.search.suggest.enabled", false);
|
||||
user_pref("browser.selfsupport.url", "");
|
||||
user_pref("browser.send_pings", false);
|
||||
user_pref("browser.shell.checkDefaultBrowser", false);
|
||||
user_pref("browser.startup.homepage_override.mstone", "ignore");
|
||||
user_pref("browser.startup.page", 0);
|
||||
user_pref("browser.toolbarbuttons.introduced.pocket-button", true);
|
||||
user_pref("browser.urlbar.speculativeConnect.enabled", false);
|
||||
user_pref("browser.urlbar.trimURLs", false);
|
||||
user_pref("datareporting.healthreport.uploadEnabled", false);
|
||||
user_pref("datareporting.policy.dataSubmissionEnabled", false);
|
||||
user_pref("dom.battery.enabled", false);
|
||||
user_pref("dom.enable_performance", false);
|
||||
user_pref("dom.enable_performance_navigation_timing", false);
|
||||
user_pref("dom.enable_resource_timing", false);
|
||||
user_pref("dom.event.clipboardevents.enabled", false);
|
||||
user_pref("dom.gamepad.enabled", false);
|
||||
user_pref("dom.indexedDB.enabled", false);
|
||||
user_pref("dom.min_timeout_value", 400);
|
||||
user_pref("dom.push.connection.enabled", false);
|
||||
user_pref("dom.push.enabled", false);
|
||||
user_pref("dom.serviceWorkers.enabled", false);
|
||||
user_pref("dom.serviceWorkers.interception.enabled", false);
|
||||
user_pref("dom.storage.enabled", false);
|
||||
user_pref("dom.webaudio.enabled", false);
|
||||
user_pref("extensions.autoDisableScopes", 0);
|
||||
user_pref("extensions.enabledScopes", 1);
|
||||
user_pref("extensions.getAddons.cache.enabled", false);
|
||||
user_pref("extensions.getAddons.showPane", false);
|
||||
user_pref("extensions.pocket.enabled", false);
|
||||
user_pref("extensions.screenshots.disabled", true);
|
||||
user_pref("extensions.webservice.discoverURL", "");
|
||||
user_pref("geo.enabled", false);
|
||||
user_pref("geo.wifi.uri", "");
|
||||
user_pref("gfx.downloadable_fonts.disable_cache", true);
|
||||
user_pref("javascript.options.shared_memory", false);
|
||||
user_pref("layout.css.visited_links_enabled", false);
|
||||
user_pref("media.autoplay.enabled", false);
|
||||
user_pref("media.cache_size", 0);
|
||||
user_pref("media.navigator.enabled", false);
|
||||
user_pref("media.peerconnection.ice.no_host", true);
|
||||
user_pref("media.video_stats.enabled", false);
|
||||
user_pref("captivedetect.canonicalURL", "");
|
||||
user_pref("network.captive-portal-service.enabled", false);
|
||||
user_pref("network.cookie.cookieBehavior", 1);
|
||||
user_pref("network.cookie.lifetimePolicy", 2);
|
||||
user_pref("network.dns.disablePrefetch", true);
|
||||
user_pref("network.http.referer.spoofSource", true);
|
||||
user_pref("network.http.referer.trimmingPolicy", 2);
|
||||
user_pref("network.http.referer.XOriginPolicy", 2);
|
||||
user_pref("network.prefetch-next", false);
|
||||
user_pref("privacy.donottrackheader.enabled", true);
|
||||
user_pref("privacy.donottrackheader.value", 1);
|
||||
user_pref("toolkit.telemetry.archive.enabled", false);
|
||||
user_pref("toolkit.telemetry.coverage.opt-out", true);
|
||||
user_pref("toolkit.telemetry.enabled", false);
|
||||
user_pref("toolkit.telemetry.server", "");
|
||||
user_pref("toolkit.telemetry.unified", false);
|
||||
user_pref("webgl.disabled", true);
|
||||
user_pref("browser.chrome.errorReporter.infoURL", "");
|
||||
user_pref("breakpad.reportURL", "");
|
||||
//user_pref("browser.newtabpage.activity-stream.default.sites", "");
|
||||
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
|
||||
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
|
||||
user_pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored", false);
|
||||
user_pref("browser.newtabpage.enabled", true);
|
||||
user_pref("browser.newtabpage.activity-stream.default.sites", "http://planet.i2p/,http://legwork.i2p/,http://i2pwiki.i2p/,http://i2pforums.i2p/,http://zzz.i2p/");
|
||||
user_pref("dom.security.https_only_mode", false);
|
||||
user_pref("keyword.enabled", false);
|
||||
user_pref("extensions.allowPrivateBrowsingByDefault", true);
|
||||
user_pref("extensions.PrivateBrowsing.notification", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true);
|
||||
user_pref("ui.use_standins_for_native_colors", true);
|
||||
user_pref("webgl.disable-extensions", true);
|
||||
user_pref("webgl.min_capability_mode", true);
|
||||
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
||||
user_pref("webgl.enable-webgl2", false);
|
||||
user_pref("dom.w3c_touch_events.enabled", false);
|
||||
user_pref("browser.privatebrowsing.autostart", false);
|
||||
user_pref("browser.display.use_system_colors", false);
|
File diff suppressed because it is too large
Load Diff
@ -1 +0,0 @@
|
||||
1.9.7
|
Binary file not shown.
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 67 KiB |
@ -11,13 +11,126 @@
|
||||
|
||||
!ifndef FindProcess
|
||||
!define FindProcess '!insertmacro FindProcess'
|
||||
|
||||
!ifndef un.FindProcess
|
||||
!define un.FindProcess '!insertmacro un.FindProcess'
|
||||
|
||||
!macro FindProcess ProcessList BoolReturn
|
||||
Push '${ProcessList}'
|
||||
Call FindProcess
|
||||
Pop ${BoolReturn}
|
||||
!macroend
|
||||
|
||||
!macro un.FindProcess ProcessList BoolReturn
|
||||
Push '${ProcessList}'
|
||||
Call un.FindProcess
|
||||
Pop ${BoolReturn}
|
||||
!macroend
|
||||
|
||||
Function un.FindProcess
|
||||
# return True if any process in ProcessList is active
|
||||
Exch $0 ; get ProcessList, save $0
|
||||
Push $1
|
||||
Push $2
|
||||
Push $R0
|
||||
Push $R1
|
||||
Push $R2
|
||||
|
||||
StrCpy $2 "$0," ; $2 = ProcessList
|
||||
|
||||
Push 0 ; set return value = False
|
||||
|
||||
# method based upon one by Phoenix1701@gmail.com 1/27/07
|
||||
|
||||
System::Alloc 1024
|
||||
Pop $R0 ; process list buffer
|
||||
|
||||
# get an array of all process ids
|
||||
System::Call "Psapi::EnumProcesses(i R0, i 1024, *i .R1)i .r0"
|
||||
${Unless} $0 = 0
|
||||
|
||||
IntOp $R1 $R1 / 4 ; Divide by sizeof(DWORD) to get $R1 process count
|
||||
IntOp $R1 $R1 - 1 ; decr for 0 base loop
|
||||
|
||||
ClearErrors
|
||||
${For} $R2 0 $R1
|
||||
# get a PID from the array
|
||||
IntOp $0 $R2 << 2
|
||||
IntOp $0 $0 + $R0 ; buffer.dword[i]
|
||||
System::Call "*$0(i .r0)" ; Get next PID
|
||||
|
||||
${Unless} $0 = 0
|
||||
Push $0
|
||||
Call un.GetProcessName
|
||||
Pop $1
|
||||
|
||||
# is this process one we are looking for?
|
||||
${WordFind} '$2' ',' 'E/$1' $0
|
||||
${Unless} ${Errors}
|
||||
# yes, change return value
|
||||
Pop $0 ; discard old result
|
||||
Push 1 ; set return True
|
||||
|
||||
# exit the loop
|
||||
${Break}
|
||||
${EndUnless}
|
||||
${EndUnless}
|
||||
${Next}
|
||||
|
||||
${EndUnless}
|
||||
|
||||
System::Free $R0
|
||||
|
||||
Pop $0 ; get return value
|
||||
Pop $R2 ; restore registers
|
||||
Pop $R1
|
||||
Pop $R0
|
||||
Pop $2
|
||||
Pop $1
|
||||
Exch $0
|
||||
FunctionEnd
|
||||
|
||||
Function un.GetProcessName
|
||||
# ( Pid -- ProcessName )
|
||||
Exch $2 ; get Pid, save $2
|
||||
Push $0
|
||||
Push $1
|
||||
Push $3
|
||||
Push $R0
|
||||
|
||||
System::Call "Kernel32::OpenProcess(i 1040, i 0, i r2)i .r3"
|
||||
|
||||
StrCpy $2 "<unknown>" ; set return value
|
||||
|
||||
${Unless} $3 = 0 ; $3 is hProcess
|
||||
# get hMod array
|
||||
System::Alloc 1024
|
||||
Pop $R0
|
||||
|
||||
# params: Pid, &hMod, sizeof(hMod), &cb
|
||||
System::Call "Psapi::EnumProcessModules(i r3, i R0, i 1024, *i .r1)i .r0"
|
||||
|
||||
${Unless} $0 = 0
|
||||
# get first hMod
|
||||
System::Call "*$R0(i .r0)"
|
||||
|
||||
# get BaseName; params: Pid, hMod, szBuffer, sizeof(szBuffer)
|
||||
System::Call "Psapi::GetModuleBaseName(i r3, i r0, t .r2, i 256)i .r0"
|
||||
${EndUnless}
|
||||
|
||||
System::Free $R0
|
||||
System::Call "kernel32::CloseHandle(i r3)"
|
||||
${EndUnless}
|
||||
|
||||
Pop $R0 ; restore registers
|
||||
Pop $3
|
||||
Pop $1
|
||||
Pop $0
|
||||
Exch $2 ; save process name
|
||||
FunctionEnd
|
||||
!endif
|
||||
|
||||
|
||||
Function FindProcess
|
||||
# return True if any process in ProcessList is active
|
||||
Exch $0 ; get ProcessList, save $0
|
||||
@ -119,4 +232,4 @@ Function GetProcessName
|
||||
Pop $0
|
||||
Exch $2 ; save process name
|
||||
FunctionEnd
|
||||
!endif
|
||||
!endif
|
||||
|
@ -4,7 +4,7 @@ UniCode true
|
||||
!define APPNAME "I2PBrowser-Launcher"
|
||||
!define COMPANYNAME "I2P"
|
||||
!define DESCRIPTION "This is a tool which contains an I2P router, a bundled JVM, and a tool for automatically configuring a browser to use with I2P."
|
||||
!define I2P_MESSAGE "Could not find I2P. Installing portable Jpackaged I2P."
|
||||
!define I2P_MESSAGE "Please choose a directory."
|
||||
!define LAUNCH_TEXT "Start I2P?"
|
||||
!define LICENSE_TITLE "Many Licenses"
|
||||
!define CONSOLE_URL "http://127.0.0.1:7657/home"
|
||||
@ -13,12 +13,12 @@ UniCode true
|
||||
!include i2pbrowser-jpackage.nsi
|
||||
!include FindProcess.nsh
|
||||
|
||||
var I2PINSTEXE
|
||||
#var INSTDIR
|
||||
|
||||
SetOverwrite on
|
||||
|
||||
!define I2PINSTEXE
|
||||
!define I2PINSTEXE_USERMODE "$LOCALAPPDATA\i2p"
|
||||
!define INSTDIR
|
||||
!define I2PINSTEXE_USERMODE "$LOCALAPPDATA\i2peasy"
|
||||
|
||||
!define RAM_NEEDED_FOR_64BIT 0x80000000
|
||||
|
||||
@ -122,18 +122,20 @@ PageEx license
|
||||
PageExEnd
|
||||
PageEx directory
|
||||
dirtext "${I2P_MESSAGE}"
|
||||
dirvar $I2PINSTEXE
|
||||
dirvar $INSTDIR
|
||||
PageCallbacks routerDetect
|
||||
PageExEnd
|
||||
Page instfiles
|
||||
|
||||
Function .onInit
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE_USERMODE}"
|
||||
# Note: This is all redundant and I know it.
|
||||
# Admin installs have been migrated to user-mode installs.
|
||||
# But I'm leaving it because I might need it again if I support service installs.
|
||||
StrCpy $INSTDIR "${I2PINSTEXE_USERMODE}"
|
||||
UserInfo::GetAccountType
|
||||
pop $0
|
||||
${If} $0 != "admin"
|
||||
StrCpy $INSTDIR "$LOCALAPPDATA\${COMPANYNAME}\${APPNAME}"
|
||||
StrCpy $I2PINSTEXE "${I2PINSTEXE_USERMODE}"
|
||||
StrCpy $INSTDIR "${I2PINSTEXE_USERMODE}"
|
||||
${EndIf}
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
#Call ShouldInstall64Bit
|
||||
@ -141,34 +143,22 @@ Function .onInit
|
||||
FunctionEnd
|
||||
|
||||
Function routerDetect
|
||||
createDirectory $I2PINSTEXE
|
||||
SetOutPath $I2PINSTEXE\app
|
||||
createDirectory $INSTDIR
|
||||
SetOutPath $INSTDIR\app
|
||||
File /a /r "I2P\app\"
|
||||
SetOutPath $I2PINSTEXE\runtime
|
||||
SetOutPath $INSTDIR\runtime
|
||||
File /a /r "I2P\runtime\"
|
||||
SetOutPath $I2PINSTEXE
|
||||
SetOutPath $INSTDIR\config
|
||||
File /a /r "I2P\config\"
|
||||
SetOutPath $INSTDIR
|
||||
File /a /r "I2P\I2P.exe"
|
||||
# The NSIS Installer uses an ico icon, the jpackage-only ones use png
|
||||
File /a /r "I2P\ui2pbrowser_icon.ico"
|
||||
File "I2P\config\jpackaged"
|
||||
|
||||
createDirectory "$I2PINSTEXE\"
|
||||
SetOutPath "$I2PINSTEXE\"
|
||||
IfFileExists $I2PINSTEXE\router.config +2 0
|
||||
File /a /r "I2P/config/router.config"
|
||||
IfFileExists $I2PINSTEXE\clients.config +2 0
|
||||
File /a /r "I2P/config/clients.config"
|
||||
IfFileExists $I2PINSTEXE\wrapper.config +2 0
|
||||
File /a /r "I2P/config/wrapper.config"
|
||||
IfFileExists $I2PINSTEXE\hosts.txt +2 0
|
||||
File /a /r "I2P/config/hosts.txt"
|
||||
IfFileExists $I2PINSTEXE\eepsite +2 0
|
||||
File /a /r "I2P/config/eepsite"
|
||||
IfFileExists $I2PINSTEXE\webapps +2 0
|
||||
File /a /r "I2P/config/webapps"
|
||||
createDirectory "$INSTDIR\"
|
||||
SetOutPath "$INSTDIR\"
|
||||
File /a /r "I2P/config/certificates"
|
||||
File /a /r "I2P/config/geoip"
|
||||
File /a /r "I2P/config/i2ptunnel.config"
|
||||
FunctionEnd
|
||||
|
||||
Function installerFunction
|
||||
@ -178,62 +168,51 @@ Function installerFunction
|
||||
Sleep 500
|
||||
${LoopWhile} $0 <> 0
|
||||
${EndIf}
|
||||
# delete the jpackaged file for safety. Remove this IMMEDIATELY after the next release.
|
||||
# early-adopters and daily-build users may have to manually delete config files if they
|
||||
# uninstall.
|
||||
# RELATED: line 246
|
||||
Delete "$INSTDIR\jpackaged"
|
||||
|
||||
# set the installation directory as the destination for the following actions
|
||||
createDirectory $INSTDIR
|
||||
SetOutPath $INSTDIR
|
||||
File ui2pbrowser_icon.ico
|
||||
|
||||
# Update jpackaged I2P router, if it exists
|
||||
${If} ${FileExists} "$I2PINSTEXE\jpackaged"
|
||||
createDirectory $I2PINSTEXE
|
||||
SetOutPath $I2PINSTEXE
|
||||
|
||||
${If} ${Silent}
|
||||
ReadEnvStr $0 OLD_I2P_VERSION
|
||||
${If} $0 < ${I2P_VERSION}
|
||||
call routerDetect
|
||||
|
||||
${EndIf}
|
||||
${Else}
|
||||
call routerDetect
|
||||
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
# Update jpackaged I2P router
|
||||
call routerDetect
|
||||
|
||||
# Install the launcher scripts
|
||||
createDirectory "$INSTDIR"
|
||||
#SetOutPath "$INSTDIR"
|
||||
#File "win/*"
|
||||
|
||||
# Install the licenses
|
||||
createDirectory "$INSTDIR\licenses"
|
||||
SetOutPath "$INSTDIR\licenses"
|
||||
File /a /r "licenses/*"
|
||||
|
||||
SetOutPath "$I2PINSTEXE"
|
||||
SetOutPath "$INSTDIR"
|
||||
createDirectory "$SMPROGRAMS\${APPNAME}"
|
||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P.lnk" "$I2PINSTEXE\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P - Temporary Identity.lnk" "$I2PINSTEXE\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P.lnk" "$INSTDIR\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P - Temporary Identity.lnk" "$INSTDIR\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
|
||||
CreateShortCut "$DESKTOP\Browse I2P.lnk" "$I2PINSTEXE\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
CreateShortCut "$DESKTOP\Browse I2P - Temporary Identity.lnk" "$I2PINSTEXE\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
CreateShortCut "$DESKTOP\Browse I2P.lnk" "$INSTDIR\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
CreateShortCut "$DESKTOP\Browse I2P - Temporary Identity.lnk" "$INSTDIR\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Uninstall I2P Easy-Install Bundle.lnk" "$INSTDIR\uninstall-i2pbrowser.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
SetShellVarContext current
|
||||
|
||||
IfFileExists "$LOCALAPPDATA\I2P\eepsite\docroot" +2 0
|
||||
IfFileExists "$INSTDIR\eepsite\docroot" +2 0
|
||||
File /a /r "I2P\eepsite"
|
||||
|
||||
createDirectory "$I2PINSTEXE"
|
||||
SetOutPath "$I2PINSTEXE"
|
||||
createDirectory "$INSTDIR"
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
# create the uninstaller
|
||||
WriteUninstaller "$INSTDIR\uninstall-i2pbrowser.exe"
|
||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Uninstall I2P Easy-Install Bundle.lnk" "$INSTDIR\uninstall-i2pbrowser.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
|
||||
# create a shortcut to the uninstaller
|
||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Uninstall-${APPNAME}.lnk" "$INSTDIR\uninstall-i2pbrowser.exe"
|
||||
FunctionEnd
|
||||
|
||||
|
||||
@ -244,13 +223,23 @@ SectionEnd
|
||||
|
||||
# uninstaller section start
|
||||
Section "uninstall"
|
||||
# Uninstall the launcher scripts
|
||||
Delete $INSTDIR\*
|
||||
rmDir /r "$INSTDIR\"
|
||||
${If} ${FileExists} "$I2PINSTEXE\jpackaged"
|
||||
Delete $I2PINSTEXE\*
|
||||
rmDir /r "$I2PINSTEXE"
|
||||
# Don't try to uninstall until the router is fully shut down.
|
||||
${un.FindProcess} "I2P.exe" $0
|
||||
${If} $0 <> 0
|
||||
MessageBox MB_OK "I2P is still running, uninstaller is paused. Uninstaller will continue after I2P has shut down."
|
||||
${Do}
|
||||
${un.FindProcess} "I2P.exe" $0
|
||||
Sleep 500
|
||||
${LoopWhile} $0 <> 0
|
||||
${EndIf}
|
||||
|
||||
# Uninstall the launcher scripts
|
||||
rmDir /r "$INSTDIR\app"
|
||||
rmDir /r "$INSTDIR\config"
|
||||
rmDir /r "$INSTDIR\runtime"
|
||||
Delete "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
Delete "$INSTDIR\windowsUItoopie2.png"
|
||||
Delete "$INSTDIR\I2P.exe"
|
||||
|
||||
# Remove shortcuts and folders
|
||||
Delete "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk"
|
||||
@ -262,16 +251,27 @@ Section "uninstall"
|
||||
Delete "$DESKTOP\${APPNAME}.lnk"
|
||||
Delete "$DESKTOP\Private Browsing-${APPNAME}.lnk"
|
||||
rmDir /r "$SMPROGRAMS\${APPNAME}"
|
||||
rmDir /r "$INSTDIR\firefox.profile.i2p\extensions"
|
||||
rmDir /r "$INSTDIR\firefox.profile.i2p"
|
||||
rmDir /r "$LOCALAPPDATA\${APPNAME}"
|
||||
rmDir /r "$INSTDIR"
|
||||
|
||||
#### SUPER SUPER EXTRA IMPORTANT!
|
||||
### RELATED: line 169
|
||||
## IF YOU DO THIS WRONG YOU WILL BREAK CONFIGS:
|
||||
## The purpose of the `jpackaged` file has changed, as has the point
|
||||
## where it is created.
|
||||
# 1. The jpackaged file is now created only **after** the jpackage itself
|
||||
# has migrated default configs into the $INSTDIR. IF THEY ALREADY EXIST,
|
||||
# it WILL NOT BE CREATED, even if there is a jpackage present. This is
|
||||
# intentional behavior.
|
||||
# 2. The jpackaged file now indicates that the configurations were created
|
||||
# by running the jpackage, and not by an un-bundled router. If it is not
|
||||
# present, then we have already deleted everything we are responsible for
|
||||
# and don't need to do the section below.
|
||||
${If} ${FileExists} "$INSTDIR\jpackaged"
|
||||
Delete $INSTDIR\*
|
||||
rmDir /r "$INSTDIR"
|
||||
${EndIf}
|
||||
# delete the uninstaller
|
||||
Delete "$INSTDIR\uninstall-i2pbrowser.exe"
|
||||
|
||||
# uninstaller section end
|
||||
|
||||
SectionEnd
|
||||
|
||||
!define MUI_FINISHPAGE_RUN
|
||||
@ -280,8 +280,8 @@ SectionEnd
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
Function LaunchLink
|
||||
SetOutPath "$I2PINSTEXE"
|
||||
StrCpy $OUTDIR $I2PINSTEXE
|
||||
SetOutPath "$INSTDIR"
|
||||
StrCpy $OUTDIR $INSTDIR
|
||||
${If} ${Silent}
|
||||
ReadEnvStr $0 RESTART_I2P
|
||||
${If} $0 != ""
|
||||
|
@ -1 +1 @@
|
||||
!define I2P_VERSION 1.9.7
|
||||
!define I2P_VERSION
|
||||
|
@ -1,3 +1,3 @@
|
||||
!define VERSIONMAJOR 1
|
||||
!define VERSIONMINOR 9
|
||||
!define VERSIONBUILD 7
|
||||
!define VERSIONMAJOR 2
|
||||
!define VERSIONMINOR 1
|
||||
!define VERSIONBUILD 0
|
||||
|
@ -1,19 +0,0 @@
|
||||
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
||||
<!-- This is an automatically generated file.
|
||||
It will be read and overwritten.
|
||||
DO NOT EDIT! -->
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
||||
<TITLE>Bookmarks</TITLE>
|
||||
<H1>Bookmarks Menu</H1>
|
||||
|
||||
<DL><p>
|
||||
<DT><A HREF="place:type=6&sort=14&maxResults=10" ADD_DATE="1539649423" LAST_MODIFIED="1539649424">Recent Tags</A>
|
||||
<HR> <DT><A HREF="http://legwork.i2p/yacysearch.html?query=%s&verify=cacheonly&contentdom=text&nav=location%2Chosts%2Cauthors%2Cnamespace%2Ctopics%2Cfiletype%2Cprotocol%2Clanguage&startRecord=0&indexof=off&meanCount=5&resource=global&prefermaskfilter=&maximumRecords=10&timezoneOffset=0" ADD_DATE="1539652098" LAST_MODIFIED="1539652098" SHORTCUTURL="legwork.i2p">Search YaCy 'legwork': Search Page</A>
|
||||
<DD>Software HTTP Freeware Home Page
|
||||
<DT><H3 ADD_DATE="1539649419" LAST_MODIFIED="1539649423" PERSONAL_TOOLBAR_FOLDER="true">Bookmarks Toolbar</H3>
|
||||
<DL><p>
|
||||
<DT><A HREF="place:sort=8&maxResults=10" ADD_DATE="1539649423" LAST_MODIFIED="1539649423">Most Visited</A>
|
||||
<DT><A HREF="http://i2p-projekt.i2p/" ADD_DATE="1538511080" LAST_MODIFIED="1538511080">I2P Anonymous Network</A>
|
||||
<DD>Anonymous peer-to-peer distributed communication layer built with open source tools and designed to run any traditional Internet service such as email, IRC or web hosting.
|
||||
</DL><p>
|
||||
</DL>
|
@ -1,65 +0,0 @@
|
||||
user_pref("extensions.https_everywhere._observatory.enabled", false);
|
||||
user_pref("extensions.https_everywhere.options.autoUpdateRulesets", false);
|
||||
user_pref("extensions.https_everywhere.globalEnabled", false);
|
||||
user_pref("extensions.https_everywhere._observatory.submit_during_tor", false);
|
||||
user_pref("extensions.https_everywhere._observatory.submit_during_nontor", false);
|
||||
user_pref("extensions.https_everywhere._observatory.use_custom_proxy", true);
|
||||
user_pref("extensions.https_everywhere._observatory.proxy_host", "127.0.0.1");
|
||||
user_pref("extensions.https_everywhere._observatory.proxy_port", 4444);
|
||||
|
||||
user_pref("extensions.torbutton.use_nontor_proxy", true);
|
||||
|
||||
//For socket conversion: in the future, I'll need to make TBB communicate with
|
||||
//i2p over a unix socket. Fortunately, this is how you do that. It will be
|
||||
//configurable in a similar way to the host:port configuration when that happens.
|
||||
//user_pref("extensions.torlauncher.socks_port_use_ipc", );
|
||||
//user_pref("extensions.torlauncher.socks_ipc_path", "");
|
||||
|
||||
user_pref("extensions.torlauncher.start_tor", false);
|
||||
//user_pref("extensions.torlauncher.default_bridge_type", "");
|
||||
user_pref("extensions.torlauncher.prompt_at_startup", false);
|
||||
|
||||
// Resist-fingerprinting and first-party isolation enable
|
||||
|
||||
user_pref("privacy.resistFingerprinting", true);
|
||||
user_pref("privacy.firstparty.isolate", true);
|
||||
|
||||
// Use i2p http proxy for all connections and set homepage to safe local form.
|
||||
|
||||
// DON'T allow access to the admin panel from the profile we browse i2p with.
|
||||
user_pref("network.proxy.no_proxies_on", "127.0.0.1:7657,localhost:7657,127.0.0.1:7662,localhost:7662,127.0.0.1:7669,localhost:7669");
|
||||
user_pref("network.proxy.type", 1);
|
||||
user_pref("network.proxy.http", "127.0.0.1");
|
||||
user_pref("network.proxy.http_port", 4444);
|
||||
user_pref("network.proxy.ssl", "127.0.0.1");
|
||||
user_pref("network.proxy.ssl_port", 4444);
|
||||
user_pref("network.proxy.ftp", "127.0.0.1");
|
||||
user_pref("network.proxy.ftp_port", 4444);
|
||||
user_pref("network.proxy.socks", "127.0.0.1");
|
||||
user_pref("network.proxy.socks_port", 4444);
|
||||
user_pref("network.proxy.share_proxy_settings", true);
|
||||
user_pref("browser.startup.homepage", "about:blank");
|
||||
user_pref("dom.security.https_only_mode", false);
|
||||
user_pref("keyword.enabled", false);
|
||||
user_pref("extensions.allowPrivateBrowsingByDefault", true);
|
||||
user_pref("extensions.PrivateBrowsing.notification", false);
|
||||
user_pref("extensions.pocket.enabled", false);
|
||||
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
|
||||
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
|
||||
user_pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
|
||||
user_pref("browser.newtabpage.activity-stream.default.sites", "http://planet.i2p/,http://legwork.i2p/,http://i2pwiki.i2p/,http://i2pforums.i2p/,http://zzz.i2p/");
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true);
|
||||
user_pref("ui.use_standins_for_native_colors", true);
|
||||
user_pref("webgl.disable-extensions", true);
|
||||
user_pref("webgl.min_capability_mode", true);
|
||||
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
||||
user_pref("webgl.enable-webgl2", false);
|
||||
user_pref("media.navigator.enabled", false);
|
||||
user_pref("dom.w3c_touch_events.enabled", false);
|
||||
user_pref("browser.privatebrowsing.autostart", false);
|
||||
user_pref("browser.display.use_system_colors", false);
|
||||
user_pref("dom.image-lazy-loading.enabled", false)
|
||||
user_pref("extensions.autoDisableScopes", 0);
|
||||
user_pref("extensions.enabledScopes", 1);
|
Binary file not shown.
@ -1,229 +0,0 @@
|
||||
/*
|
||||
Overrides#
|
||||
for Extension Preferences# Tor Browser Bundle# Do not edit this file.##This file is modified from a file included in the Tor Browser Bundle.##Copyright 2017 The Tor Project.See LICENSE.tor#
|
||||
for licensing information.
|
||||
|
||||
HTTPS Everywhere Preferences:
|
||||
*/
|
||||
user_pref("extensions.https_everywhere._observatory.popup_shown", true);
|
||||
user_pref("extensions.https_everywhere.toolbar_hint_shown", true);
|
||||
|
||||
/*
|
||||
NoScript Preferences: #In order to disable all scripts by
|
||||
default, uncomment the following line...#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
|
||||
and comment out the following line
|
||||
*/
|
||||
user_pref("capability.policy.maonoscript.javascript.enabled", "allAccess");
|
||||
user_pref("capability.policy.maonoscript.sites", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
||||
user_pref("noscript.default", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
||||
user_pref("noscript.mandatory", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
||||
user_pref("noscript.ABE.enabled", false);
|
||||
user_pref("noscript.ABE.notify", false);
|
||||
user_pref("noscript.ABE.wanIpAsLocal", false);
|
||||
user_pref("noscript.confirmUnblock", false);
|
||||
user_pref("noscript.contentBlocker", true);
|
||||
user_pref("noscript.firstRunRedirection", false);
|
||||
user_pref("noscript.global", true);
|
||||
user_pref("noscript.gtemp", "");
|
||||
user_pref("noscript.opacizeObject", 3);
|
||||
user_pref("noscript.forbidWebGL", true);
|
||||
user_pref("noscript.forbidFonts", true);
|
||||
user_pref("noscript.options.tabSelectedIndexes", "5,0,0");
|
||||
user_pref("noscript.policynames", "");
|
||||
user_pref("noscript.secureCookies", true);
|
||||
user_pref("noscript.showAllowPage", false);
|
||||
user_pref("noscript.showBaseDomain", false);
|
||||
user_pref("noscript.showDistrust", false);
|
||||
user_pref("noscript.showRecentlyBlocked", false);
|
||||
user_pref("noscript.showTemp", false);
|
||||
user_pref("noscript.showTempToPerm", false);
|
||||
user_pref("noscript.showUntrusted", false);
|
||||
user_pref("noscript.STS.enabled", false);
|
||||
user_pref("noscript.subscription.lastCheck", -142148139);
|
||||
user_pref("noscript.temp", "");
|
||||
user_pref("noscript.untrusted", "");
|
||||
user_pref("noscript.forbidMedia", true);
|
||||
user_pref("noscript.allowWhitelistUpdates", false);
|
||||
user_pref("noscript.fixLinks", false);
|
||||
// Now handled by plugins.click_to_play // Not in this one.
|
||||
user_pref("noscript.forbidFlash", true);
|
||||
user_pref("noscript.forbidSilverlight", true);
|
||||
user_pref("noscript.forbidJava", true);
|
||||
user_pref("noscript.forbidPlugins", true);
|
||||
// Usability tweaks
|
||||
user_pref("noscript.showPermanent", false);
|
||||
user_pref("noscript.showTempAllowPage", true);
|
||||
user_pref("noscript.showRevokeTemp", true);
|
||||
user_pref("noscript.notify", false);
|
||||
user_pref("noscript.autoReload", true);
|
||||
user_pref("noscript.autoReload.allTabs", false);
|
||||
user_pref("noscript.cascadePermissions", true);
|
||||
user_pref("noscript.restrictSubdocScripting", true);
|
||||
user_pref("noscript.showVolatilePrivatePermissionsToggle", false);
|
||||
user_pref("noscript.volatilePrivatePermissions", true);
|
||||
user_pref("noscript.clearClick", 0);
|
||||
|
||||
user_pref("intl.locale.matchOS", false);
|
||||
|
||||
user_pref("extensions.https_everywhere._observatory.enabled", false);
|
||||
user_pref("extensions.https_everywhere.options.autoUpdateRulesets", false);
|
||||
user_pref("extensions.https_everywhere.globalEnabled", false);
|
||||
user_pref("extensions.https_everywhere._observatory.submit_during_tor", false);
|
||||
user_pref("extensions.https_everywhere._observatory.submit_during_nontor", false);
|
||||
user_pref("extensions.https_everywhere._observatory.use_custom_proxy", true);
|
||||
user_pref("extensions.https_everywhere._observatory.proxy_host", "127.0.0.1");
|
||||
user_pref("extensions.https_everywhere._observatory.proxy_port", 4444);
|
||||
|
||||
user_pref("extensions.torbutton.use_nontor_proxy", true);
|
||||
|
||||
//For socket conversion: in the future, I'll need to make TBB communicate with
|
||||
//i2p over a unix socket. Fortunately, this is how you do that. It will be
|
||||
//configurable in a similar way to the host:port configuration when that happens.
|
||||
//user_pref("extensions.torlauncher.socks_port_use_ipc", );
|
||||
//user_pref("extensions.torlauncher.socks_ipc_path", "");
|
||||
|
||||
// TODO: this is a Tor Browser specific setting which is ignored on Firefox. If
|
||||
// I make it true, the SOCKS outproxy will have something to connect to. But I
|
||||
// need to test more to find out if that's prudent.
|
||||
user_pref("extensions.torlauncher.start_tor", false);
|
||||
//user_pref("extensions.torlauncher.default_bridge_type", "");
|
||||
user_pref("extensions.torlauncher.prompt_at_startup", false);
|
||||
|
||||
// Resist-fingerprinting and first-party isolation enable
|
||||
|
||||
user_pref("privacy.resistFingerprinting", true);
|
||||
user_pref("privacy.firstparty.isolate", true);
|
||||
|
||||
// Use i2p http proxy for all connections and set homepage to safe local form.
|
||||
|
||||
// DON'T allow access to the admin panel from the profile we browse i2p with.
|
||||
user_pref("network.proxy.no_proxies_on", "127.0.0.1:7657,localhost:7657,127.0.0.1:7662,localhost:7662,127.0.0.1:7669,localhost:7669");
|
||||
user_pref("network.proxy.type", 1);
|
||||
user_pref("network.proxy.http", "127.0.0.1");
|
||||
user_pref("network.proxy.http_port", 4444);
|
||||
user_pref("network.proxy.ssl", "127.0.0.1");
|
||||
user_pref("network.proxy.ssl_port", 4444);
|
||||
user_pref("network.proxy.ftp", "127.0.0.1");
|
||||
user_pref("network.proxy.ftp_port", 4444);
|
||||
user_pref("network.proxy.socks", "127.0.0.1");
|
||||
user_pref("network.proxy.socks_port", 4444);
|
||||
user_pref("network.proxy.share_proxy_settings", true);
|
||||
user_pref("browser.startup.homepage", "http://127.0.0.1:7657/home");
|
||||
|
||||
// Privacy-harden and disable irrelevant features.
|
||||
user_pref("app.normandy.api_url", "");
|
||||
user_pref("app.normandy.enabled", false);
|
||||
user_pref("app.update.auto", false);
|
||||
user_pref("app.update.enabled", false);
|
||||
user_pref("beacon.enabled", false);
|
||||
user_pref("browser.aboutHomeSnippets.updateUrl", "");
|
||||
user_pref("browser.cache.disk_cache_ssl", false);
|
||||
user_pref("browser.cache.disk.enable", false);
|
||||
user_pref("browser.cache.offline.enable", false);
|
||||
user_pref("browser.disableResetPrompt", true);
|
||||
user_pref("browser.display.use_document_fonts", 0);
|
||||
user_pref("browser.fixup.alternate.enabled", false);
|
||||
user_pref("browser.formfill.enable", false);
|
||||
user_pref("browser.library.activity-stream.enabled", false);
|
||||
user_pref("browser.newtabpage.activity-stream.disableSnippets", true);
|
||||
user_pref("browser.newtabpage.activity-stream.enabled", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.snippets", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", false);
|
||||
user_pref("browser.newtabpage.activity-stream.prerender", false);
|
||||
user_pref("browser.newtabpage.activity-stream.showSearch", false);
|
||||
user_pref("browser.newtabpage.enhanced", false);
|
||||
user_pref("browser.newtabpage.introShown", true);
|
||||
user_pref("browser.newtab.preload", false);
|
||||
user_pref("browser.onboarding.enabled", false);
|
||||
user_pref("browser.pagethumbnails.capturing_disabled", true);
|
||||
user_pref("browser.safebrowsing.appRepURL", "");
|
||||
user_pref("browser.safebrowsing.blockedURIs.enabled", false);
|
||||
user_pref("browser.safebrowsing.downloads.enabled", false);
|
||||
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
|
||||
user_pref("browser.safebrowsing.downloads.remote.url", "");
|
||||
user_pref("browser.safebrowsing.enabled", false);
|
||||
user_pref("browser.safebrowsing.malware.enabled", false);
|
||||
user_pref("browser.safebrowsing.phishing.enabled", false);
|
||||
user_pref("browser.search.geoip.timeout", 1);
|
||||
user_pref("browser.search.suggest.enabled", false);
|
||||
user_pref("browser.selfsupport.url", "");
|
||||
user_pref("browser.send_pings", false);
|
||||
user_pref("browser.shell.checkDefaultBrowser", false);
|
||||
user_pref("browser.startup.homepage_override.mstone", "ignore");
|
||||
user_pref("browser.startup.page", 0);
|
||||
user_pref("browser.toolbarbuttons.introduced.pocket-button", true);
|
||||
user_pref("browser.urlbar.speculativeConnect.enabled", false);
|
||||
user_pref("browser.urlbar.trimURLs", false);
|
||||
user_pref("datareporting.healthreport.uploadEnabled", false);
|
||||
user_pref("datareporting.policy.dataSubmissionEnabled", false);
|
||||
user_pref("dom.battery.enabled", false);
|
||||
user_pref("dom.enable_performance", false);
|
||||
user_pref("dom.enable_performance_navigation_timing", false);
|
||||
user_pref("dom.enable_resource_timing", false);
|
||||
user_pref("dom.event.clipboardevents.enabled", false);
|
||||
user_pref("dom.gamepad.enabled", false);
|
||||
user_pref("dom.indexedDB.enabled", false);
|
||||
user_pref("dom.min_timeout_value", 400);
|
||||
user_pref("dom.push.connection.enabled", false);
|
||||
user_pref("dom.push.enabled", false);
|
||||
user_pref("dom.serviceWorkers.enabled", false);
|
||||
user_pref("dom.serviceWorkers.interception.enabled", false);
|
||||
user_pref("dom.storage.enabled", false);
|
||||
user_pref("dom.webaudio.enabled", false);
|
||||
user_pref("extensions.autoDisableScopes", 0);
|
||||
user_pref("extensions.enabledScopes", 1);
|
||||
user_pref("extensions.getAddons.cache.enabled", false);
|
||||
user_pref("extensions.getAddons.showPane", false);
|
||||
user_pref("extensions.pocket.enabled", false);
|
||||
user_pref("extensions.screenshots.disabled", true);
|
||||
user_pref("extensions.webservice.discoverURL", "");
|
||||
user_pref("geo.enabled", false);
|
||||
user_pref("geo.wifi.uri", "");
|
||||
user_pref("gfx.downloadable_fonts.disable_cache", true);
|
||||
user_pref("javascript.options.shared_memory", false);
|
||||
user_pref("layout.css.visited_links_enabled", false);
|
||||
user_pref("media.autoplay.enabled", false);
|
||||
user_pref("media.cache_size", 0);
|
||||
user_pref("media.navigator.enabled", false);
|
||||
user_pref("media.peerconnection.ice.no_host", true);
|
||||
user_pref("media.video_stats.enabled", false);
|
||||
user_pref("captivedetect.canonicalURL", "");
|
||||
user_pref("network.captive-portal-service.enabled", false);
|
||||
user_pref("network.cookie.cookieBehavior", 1);
|
||||
user_pref("network.cookie.lifetimePolicy", 2);
|
||||
user_pref("network.dns.disablePrefetch", true);
|
||||
user_pref("network.http.referer.spoofSource", true);
|
||||
user_pref("network.http.referer.trimmingPolicy", 2);
|
||||
user_pref("network.http.referer.XOriginPolicy", 2);
|
||||
user_pref("network.prefetch-next", false);
|
||||
user_pref("privacy.donottrackheader.enabled", true);
|
||||
user_pref("privacy.donottrackheader.value", 1);
|
||||
user_pref("toolkit.telemetry.archive.enabled", false);
|
||||
user_pref("toolkit.telemetry.coverage.opt-out", true);
|
||||
user_pref("toolkit.telemetry.enabled", false);
|
||||
user_pref("toolkit.telemetry.server", "");
|
||||
user_pref("toolkit.telemetry.unified", false);
|
||||
user_pref("webgl.disabled", true);
|
||||
user_pref("browser.chrome.errorReporter.infoURL", "");
|
||||
user_pref("breakpad.reportURL", "");
|
||||
//user_pref("browser.newtabpage.activity-stream.default.sites", "");
|
||||
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
|
||||
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
|
||||
user_pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored", false);
|
||||
user_pref("browser.newtabpage.enabled", true);
|
||||
user_pref("browser.newtabpage.activity-stream.default.sites", "http://planet.i2p/,http://legwork.i2p/,http://i2pwiki.i2p/,http://i2pforums.i2p/,http://zzz.i2p/");
|
||||
user_pref("dom.security.https_only_mode", false);
|
||||
user_pref("keyword.enabled", false);
|
||||
user_pref("extensions.allowPrivateBrowsingByDefault", true);
|
||||
user_pref("extensions.PrivateBrowsing.notification", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true);
|
||||
user_pref("ui.use_standins_for_native_colors", true);
|
||||
user_pref("webgl.disable-extensions", true);
|
||||
user_pref("webgl.min_capability_mode", true);
|
||||
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
||||
user_pref("webgl.enable-webgl2", false);
|
||||
user_pref("dom.w3c_touch_events.enabled", false);
|
||||
user_pref("browser.privatebrowsing.autostart", false);
|
||||
user_pref("browser.display.use_system_colors", false);
|
1353
src/profile/user.js
1353
src/profile/user.js
File diff suppressed because it is too large
Load Diff
@ -1 +0,0 @@
|
||||
1.9.7
|
@ -1,9 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Exec=/usr/bin/i2pbrowser.sh
|
||||
Name=I2P Browser
|
||||
Categories=Network;WebBrowser;
|
||||
Icon=/var/lib/i2pbrowser/icons/ui2pbrowser_icon.ico
|
@ -1,9 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Exec=/usr/local/bin/i2pbrowser
|
||||
Name=I2P Browser
|
||||
Categories=Network;WebBrowser;
|
||||
Icon=/var/lib/i2pbrowser/icons/ui2pbrowser_icon.ico
|
@ -1,9 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Exec=/usr/bin/i2pconfig.sh
|
||||
Name=I2P Configuration
|
||||
Categories=Network;WebBrowser;
|
||||
Icon=/var/lib/i2pbrowser/icons/ui2pbrowser_icon.ico
|
@ -1,9 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Exec=/usr/local/bin/i2pconfig
|
||||
Name=I2P Configuration
|
||||
Categories=Network;WebBrowser;
|
||||
Icon=/var/lib/i2pbrowser/icons/ui2pbrowser_icon.ico
|
@ -1,21 +0,0 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
# Works for Debian service installs. Sets up minified, custom profile for configuring I2P console.
|
||||
|
||||
if grep '^i2psvc:' /etc/passwd; then
|
||||
I2P_HOME=$(grep '^i2psvc:' /etc/passwd | sed 's|i2psvc:x:||g' | sed 's|:/usr/sbin/nologin||g' | tr -d ':1234567890' | sed 's|ip|i2p|g')
|
||||
ROUTER_CONFIG=$(sudo -u i2psvc ls $I2P_HOME/i2p-config/router.config)
|
||||
fi
|
||||
|
||||
installer(){
|
||||
|
||||
if [ $(sudo -u i2psvc ls $I2P_HOME/i2p-config/router.config) ]; then
|
||||
echo $I2P_HOME $ROUTER_CONFIG $0
|
||||
if ! sudo -u i2psvc grep -R 'routerconsole.browser' "$I2P_HOME/i2p-config/router.config" ; then
|
||||
echo "routerconsole.browser=/usr/local/bin/i2pconfig" | sudo tee -a "$I2P_HOME/i2p-config/router.config"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
installer
|
@ -1,44 +0,0 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
if [ -f "/etc/i2pbrowser/i2pbrowserrc" ]; then
|
||||
. /etc/i2pbrowser/i2pbrowserrc
|
||||
fi
|
||||
|
||||
if [ ! -z $I2PROUTER ]; then
|
||||
"$I2PROUTER" start
|
||||
fi
|
||||
|
||||
if [ -z $BROWSING_PROFILE ]; then
|
||||
BROWSING_PROFILE="."
|
||||
fi
|
||||
|
||||
if [ ! -d "$BROWSING_PROFILE" ]; then
|
||||
mkdir -p "$BROWSING_PROFILE"
|
||||
cp -vr /var/lib/i2pbrowser/profile/* "$BROWSING_PROFILE"
|
||||
fi
|
||||
|
||||
if [ ! -f "$BROWSING_PROFILE/user.js" ]; then
|
||||
echo "user.js not present in $BROWSING_PROFILE, this is not a Firefox profile"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z $FIREFOX ]; then
|
||||
if [ -f "firefox/firefox" ]; then
|
||||
FIREFOX="./firefox/firefox"
|
||||
fi
|
||||
FIREFOX=$(which firefox-esr)
|
||||
if [ -z $FIREFOX ]; then
|
||||
FIREFOX=$(which firefox)
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z $FIREFOX ]; then
|
||||
echo "Firefox does not appear to be in your \$PATH."
|
||||
echo "Please install Firefox via a package manager, or"
|
||||
echo "or set the FIREFOX variable in your shell to the"
|
||||
echo "location of a Firefox executable."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo $FIREFOX --profile "$BROWSING_PROFILE" $@
|
||||
$FIREFOX --profile "$BROWSING_PROFILE" $@
|
@ -1,17 +0,0 @@
|
||||
|
||||
I2PROUTER=$(which i2prouter)
|
||||
|
||||
if [ -z $I2PROUTER ]; then
|
||||
I2PROUTER=/usr/sbin/i2prouter
|
||||
fi
|
||||
|
||||
if [ ! -f $I2PROUTER ]; then
|
||||
I2PROUTER="$HOME/i2p/i2prouter"
|
||||
fi
|
||||
|
||||
if [ ! -f $I2PROUTER ]; then
|
||||
I2PROUTER=""
|
||||
fi
|
||||
|
||||
wget -q -O - "http://localhost:7657" >/dev/null && I2PROUTER=""
|
||||
echo "$I2PROUTER"
|
@ -1,8 +0,0 @@
|
||||
|
||||
if [ -f /etc/i2pbrowser/i2pbrowserdebianrc ]; then
|
||||
. /etc/i2pbrowser/i2pbrowserdebianrc
|
||||
fi
|
||||
|
||||
CONFIGURING_PROFILE=$HOME/i2p/firefox/webapps
|
||||
BROWSING_PROFILE=$HOME/i2p/firefox/browsing
|
||||
ROUTER_CONSOLE="127.0.0.1:7657"
|
@ -1,60 +0,0 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
if [ -f "/etc/i2pbrowser/i2pbrowserrc" ]; then
|
||||
. /etc/i2pbrowser/i2pbrowserrc
|
||||
fi
|
||||
|
||||
if [ ! -z $I2PROUTER ]; then
|
||||
"$I2PROUTER" start
|
||||
fi
|
||||
|
||||
if [ -f "$HOME/.i2p/router.config" ]; then
|
||||
if [ "$0" = "/usr/local/bin/i2pconfig" ]; then
|
||||
if ! grep -R 'routerconsole.browser' "$HOME/.i2p/router.config" ; then
|
||||
echo "routerconsole.browser=$0" | tee -a "$HOME/.i2p/router.config"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z $CONFIGURING_PROFILE ]; then
|
||||
CONFIGURING_PROFILE="."
|
||||
fi
|
||||
|
||||
if [ -z $ROUTER_CONSOLE ]; then
|
||||
ROUTER_CONSOLE="$1"
|
||||
if [ -z $1 ]; then
|
||||
ROUTER_CONSOLE="http://127.0.0.1:7657"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -d "$CONFIGURING_PROFILE" ]; then
|
||||
mkdir -p "$CONFIGURING_PROFILE"
|
||||
cp -vr /var/lib/i2pbrowser/app-profile/* "$CONFIGURING_PROFILE"
|
||||
fi
|
||||
|
||||
if [ ! -f "$CONFIGURING_PROFILE/user.js" ]; then
|
||||
echo "user.js not present in $CONFIGURING_PROFILE, this is not a Firefox profile"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z $FIREFOX ]; then
|
||||
if [ -f "firefox/firefox" ]; then
|
||||
FIREFOX="./firefox/firefox"
|
||||
fi
|
||||
FIREFOX=$(which firefox-esr)
|
||||
if [ -z $FIREFOX ]; then
|
||||
FIREFOX=$(which firefox)
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z $FIREFOX ]; then
|
||||
echo "Firefox does not appear to be in your \$PATH."
|
||||
echo "Please install Firefox via a package manager, or"
|
||||
echo "or set the FIREFOX variable in your shell to the"
|
||||
echo "location of a Firefox executable."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo $FIREFOX --profile "$CONFIGURING_PROFILE" "$ROUTER_CONSOLE" $@
|
||||
|
||||
$FIREFOX --profile "$CONFIGURING_PROFILE" "$ROUTER_CONSOLE" $@
|
27
src/unix/torbrowser.sh
Executable file
27
src/unix/torbrowser.sh
Executable file
@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
|
||||
TORSOCKS=$(which torsocks)
|
||||
if [ -f "${TORSOCKS}" ]; then
|
||||
. "${TORSOCKS}" on
|
||||
fi
|
||||
|
||||
version="$(curl -s https://aus1.torproject.org/torbrowser/update_3/release/downloads.json | jq -r ".version")"
|
||||
locale="en-US" # mention your locale. default = en-US
|
||||
if [ -d /etc/default/locale ]; then
|
||||
. /etc/default/locale
|
||||
locale=$(echo "${LANG}" | cut -d . -f1)
|
||||
fi
|
||||
|
||||
if [ ! -f ./tor.keyring ]; then
|
||||
gpg --auto-key-locate nodefault,wkd --locate-keys torbrowser@torproject.org
|
||||
gpg --output ./tor.keyring --export torbrowser@torproject.org
|
||||
fi
|
||||
|
||||
if [ ! -f "tor-browser-linux64-${version}_${locale}.tar.xz" ]; then
|
||||
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/tor-browser-linux64-${version}_${locale}.tar.xz"
|
||||
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/tor-browser-linux64-${version}_${locale}.tar.xz.asc"
|
||||
fi
|
||||
|
||||
gpgv --keyring ./tor.keyring "tor-browser-linux64-${version}_${locale}.tar.xz.asc" "tor-browser-linux64-${version}_${locale}.tar.xz"
|
||||
|
||||
tar xvJf "tor-browser-linux64-${version}_${locale}.tar.xz"
|
38
src/win/torbrowser-windows.sh
Executable file
38
src/win/torbrowser-windows.sh
Executable file
@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
|
||||
TORSOCKS=$(which torsocks)
|
||||
#if [ -f "${TORSOCKS}" ]; then
|
||||
# . "${TORSOCKS}" on
|
||||
#fi
|
||||
|
||||
version="$(curl -s https://aus1.torproject.org/torbrowser/update_3/release/downloads.json | jq -r ".version")"
|
||||
locale="en-US" # mention your locale. default = en-US
|
||||
if [ -d /etc/default/locale ]; then
|
||||
. /etc/default/locale
|
||||
locale=$(echo "${LANG}" | cut -d . -f1)
|
||||
fi
|
||||
|
||||
if [ ! -f ./tor.keyring ]; then
|
||||
gpg --auto-key-locate nodefault,wkd --locate-keys torbrowser@torproject.org
|
||||
gpg --output ./tor.keyring --export torbrowser@torproject.org
|
||||
fi
|
||||
|
||||
if [ ! -f "tor-browser-linux64-${version}_${locale}.exe" ]; then
|
||||
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/torbrowser-install-win64-${version}_${locale}.exe"
|
||||
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/torbrowser-install-win64-${version}_${locale}.exe.asc"
|
||||
fi
|
||||
|
||||
gpgv --keyring ./tor.keyring "torbrowser-install-win64-${version}_${locale}.exe.asc" "torbrowser-install-win64-${version}_${locale}.exe"
|
||||
|
||||
#tar xvJf "torbrowser-install-win64-${version}_${locale}.exe"
|
||||
#for n in `seq 1 2000`; do echo $n; dd ibs=256 if="torbrowser-install-win64-${version}_${locale}.exe" count=2 skip=$n | file - ; done 2>/dev/null |less
|
||||
#zip -FF "torbrowser-install-win64-${version}_${locale}.exe" --out extracted.zip
|
||||
WINE=$(which wine)
|
||||
if [ -z "$WINE" ]; then
|
||||
"./torbrowser-install-win64-${version}_${locale}.exe" /S #/D .
|
||||
cp -vr "$HOME/Desktop/Tor Browser/" "Tor Browser"
|
||||
else
|
||||
export WINEPREFIX=$(pwd)/../tmp
|
||||
$WINE "torbrowser-install-win64-${version}_${locale}.exe" /S #/D .
|
||||
cp -vr "$WINEPREFIX/drive_c/users/idk/Desktop/Tor Browser/" "Tor Browser"
|
||||
fi
|
15
targz.sh
15
targz.sh
@ -1,15 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
./clean.sh
|
||||
wsl make distclean
|
||||
./build.sh
|
||||
tar czvf I2P.tar.gz I2P
|
15
unsigned.sh
15
unsigned.sh
@ -1,15 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
./clean.sh
|
||||
wsl make distclean
|
||||
./build.sh
|
||||
wsl make
|
Reference in New Issue
Block a user