Compare commits

...

9 Commits
2.8.1 ... main

Author SHA1 Message Date
8b1993fe4f pkg
Some checks failed
Java CI / build (push) Has been cancelled
Java CI / buildrpm (push) Has been cancelled
Java CI / buildwin (push) Has been cancelled
Java CI / buildmac (push) Has been cancelled
2025-06-04 23:07:18 -04:00
68c7274ffd more chromium purging 2025-05-20 20:22:52 -04:00
c8dd8625d1 Remove chromium CI and tests 2025-05-20 16:59:05 -04:00
cd1f966aed rip out chrome launchers 2025-05-20 16:01:36 -04:00
284e96ba2d remove chromium java files 2025-05-20 15:39:39 -04:00
b86abed873 rebuild 2025-04-11 22:56:44 -04:00
c89cc0a2d1 rebuild 2025-04-11 22:41:52 -04:00
88b6599011 rebuild 2025-04-11 22:19:44 -04:00
f16b33bf4a move extension scopes into affixed prefs.js 2025-04-11 20:50:34 -04:00
14 changed files with 68 additions and 1468 deletions

View File

@ -32,11 +32,11 @@ jobs:
- name: install manifest-json-version
run: go install github.com/eyedeekay/manifest-json-version@latest
- run: git clone https://github.com/i2p/i2p.i2p ../i2p.i2p
- run: cd ../i2p.i2p && ant builddep
- run: cd ../i2p.i2p && ant pkg; true
- name: build with Ant
run: |
export PATH=$PATH:$(go env GOPATH)/bin
ant distclean jpackage debian
ant distclean all jpackage debian
- name: Upload Firefox Profile Strict
uses: actions/upload-artifact@v4
with:
@ -47,16 +47,6 @@ jobs:
with:
name: i2p.firefox.usability.profile.zip
path: ./src/i2p.firefox.usability.profile.zip
- name: Upload Chromium Profile Strict
uses: actions/upload-artifact@v4
with:
name: i2p.chromium.base.profile.zip
path: ./src/i2p.chromium.base.profile.zip
- name: Upload Chromium Profile Usability
uses: actions/upload-artifact@v4
with:
name: i2p.chromium.usability.profile.zip
path: ./src/i2p.chromium.usability.profile.zip
- name: Upload i2pfirefox.jar
uses: actions/upload-artifact@v4
with:

View File

@ -6,26 +6,22 @@ Extension Versions
```md
i2p-in-private-browsing
2.7.0
https://addons.mozilla.org/firefox/downloads/file/4364373/i2p_in_private_browsing-2.7.0.xpi
2.8.2
https://addons.mozilla.org/firefox/downloads/file/4441161/i2p_in_private_browsing-2.8.2.xpi
noscript
12.1.1
https://addons.mozilla.org/firefox/downloads/file/4411102/noscript-12.1.1.xpi
13.0.6
https://addons.mozilla.org/firefox/downloads/file/4495120/noscript-13.0.6.xpi
localcdn-fork-of-decentraleyes
2.6.76
https://addons.mozilla.org/firefox/downloads/file/4401439/localcdn_fork_of_decentraleyes-2.6.76.xpi
2.6.79
https://addons.mozilla.org/firefox/downloads/file/4464649/localcdn_fork_of_decentraleyes-2.6.79.xpi
onion-in-container-browsing
0.82
https://addons.mozilla.org/firefox/downloads/file/3904685/onion_in_container_browsing-0.82.xpi
javascript-restrictor
0.19.1
https://addons.mozilla.org/firefox/downloads/file/4352350/javascript_restrictor-0.19.1.xpi
0.20.2
https://addons.mozilla.org/firefox/downloads/file/4485412/javascript_restrictor-0.20.2.xpi
ublock-origin
1.61.2
https://addons.mozilla.org/firefox/downloads/file/4391011/ublock_origin-1.61.2.xpi
1.64.0
https://addons.mozilla.org/firefox/downloads/file/4492375/ublock_origin-1.64.0.xpi
```
## Chromium
```md
```

View File

@ -1 +1 @@
arkenfox.number=105.0
arkenfox.number=135.0

255
build.xml
View File

@ -2,7 +2,7 @@
<project basedir="." default="all" name="i2pfirefox">
<property file="override.properties"/>
<target name="all" depends="clean,versionMd,i2pFirefoxBaseProfileZip,i2pChromiumBaseProfileZip,jar" />
<target name="all" depends="clean,versionMd,jar" />
<target name="tarball">
<exec executable="git">
@ -127,53 +127,9 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="Chromium in Persistent Mode" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```sh" />
</exec>
<exec executable="cat">
<redirector output="USAGE.md" append="true"/>
<arg value="i2pchromium.cmd" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="Chromium in Private Browsing Mode" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```sh" />
</exec>
<exec executable="cat">
<redirector output="USAGE.md" append="true"/>
<arg value="i2pchromium-private.cmd" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```" />
</exec>
</target>
<target name="jar" depends="versionMd,i2pFirefoxBaseProfileZip,i2pFirefoxUsabilityProfileZip,i2pChromiumBaseProfileZip,i2pChromiumUsabilityProfileZip">
<target name="jar" depends="versionMd,i2pFirefoxBaseProfileZip,i2pFirefoxUsabilityProfileZip">
<ant dir="src" target="jar" />
<ant dir="src" target="pluginjar" />
</target>
@ -202,30 +158,6 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
</exec>
</target>
<target name="i2pChromiumBaseProfileZip">
<exec executable="rm" failonerror="false" dir="src">
<arg value="-rf" />
<arg value="i2p.chromium.base.profile.zip" />
</exec>
<exec executable="dzip" failonerror="true" dir="src">
<arg value="-O"/>
<arg value="i2p.chromium.base.profile.zip"/>
<arg value="i2p.chromium.base.profile"/>
</exec>
</target>
<target name="i2pChromiumUsabilityProfileZip">
<exec executable="rm" failonerror="false" dir="src">
<arg value="-rf" />
<arg value="i2p.chromium.usability.profile.zip" />
</exec>
<exec executable="dzip" failonerror="true" dir="src">
<arg value="-O"/>
<arg value="i2p.chromium.usability.profile.zip"/>
<arg value="i2p.chromium.usability.profile"/>
</exec>
</target>
<target name="freeZip" depends="jar">
<exec executable="rm" failonerror="false" dir="src">
<arg value="-rf" />
@ -285,13 +217,34 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<arg value="checkout" />
<arg value="${arkenfox.number}" />
</exec>
<exec executable="grep" osfamily="unix" output="user.js/tmp.user.js">
<arg value="-v" />
<arg value="autoDisableScopes" />
<arg value="user.js/user.js" />
</exec>
<exec executable="grep" osfamily="unix" output="user.js/user.js">
<arg value="-v" />
<arg value="enabledScopes" />
<arg value="user.js/tmp.user.js" />
</exec>
<copy file="user.js/user.js" tofile="src/i2p.firefox.usability.profile/user.js"/>
</target>
<target name="userJs" depends="i2pFirefoxBaseUserJs,i2pFirefoxUsabilityUserJs">
</target>
<target name="i2pFirefoxBaseUserJs" depends="arkenfoxCheckout">
<exec executable="grep" osfamily="unix" output="user.js/user.js">
<arg value="-v" />
<arg value="autoDisableScopes" />
<arg value="user.js/user.js" />
</exec>
<exec executable="grep" osfamily="unix" output="user.js/user.js">
<arg value="-v" />
<arg value="enabledScopes" />
<arg value="user.js/user.js" />
</exec>
<copy file="user.js/user.js" tofile="src/i2p.firefox.base.profile/user.js"/>
<exec executable="sed" osfamily="unix">
<!--<exec executable="sed" osfamily="unix">
<arg value="-i" />
<arg value='s|user_pref("extensions.autoDisableScopes", 15);|user_pref("extensions.autoDisableScopes", 0);|g' />
<arg value="src/i2p.firefox.base.profile/user.js" />
@ -300,7 +253,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<arg value="-i" />
<arg value='s|user_pref("extensions.enabledScopes", 5);|user_pref("extensions.enabledScopes", 1);|g' />
<arg value="src/i2p.firefox.base.profile/user.js" />
</exec>
</exec>-->
<exec executable="sed" osfamily="unix">
<arg value="-i" />
<arg value='s|user_pref("dom.security.https_only_mode", true);|user_pref("dom.security.https_only_mode", false);|g' />
@ -308,8 +261,18 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
</exec>
</target>
<target name="i2pFirefoxUsabilityUserJs" depends="arkenfoxCheckout">
<exec executable="grep" osfamily="unix" output="user.js/tmp.user.js">
<arg value="-v" />
<arg value="autoDisableScopes" />
<arg value="user.js/user.js" />
</exec>
<exec executable="grep" osfamily="unix" output="user.js/user.js">
<arg value="-v" />
<arg value="enabledScopes" />
<arg value="user.js/tmp.user.js" />
</exec>
<copy file="user.js/user.js" tofile="src/i2p.firefox.usability.profile/user.js"/>
<exec executable="sed" osfamily="unix">
<!--<exec executable="sed" osfamily="unix">
<arg value="-i" />
<arg value='s|user_pref("extensions.autoDisableScopes", 15);|user_pref("extensions.autoDisableScopes", 0);|g' />
<arg value="src/i2p.firefox.usability.profile/user.js" />
@ -318,7 +281,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<arg value="-i" />
<arg value='s|user_pref("extensions.enabledScopes", 5);|user_pref("extensions.enabledScopes", 1);|g' />
<arg value="src/i2p.firefox.usability.profile/user.js" />
</exec>
</exec>-->
<exec executable="sed" osfamily="unix">
<arg value="-i" />
<arg value='s|user_pref("dom.security.https_only_mode", true);|user_pref("dom.security.https_only_mode", false);|g' />
@ -461,10 +424,6 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<arg value="src/java/net/i2p/i2pfirefox/I2PBrowser.java"/>
<arg value="src/plugin/net/i2p/i2pfirefox/plugin/plugin/I2PBrowserPlugin.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PChromium.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PChromiumProfileBuilder.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PChromiumProfileChecker.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PChromiumProfileUnpacker.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PFirefox.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PLibreWolf.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java"/>
@ -485,10 +444,6 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<delete dir="i2p.firefox.usability.profile" />
<delete dir="i2p.firefox.profile" />
<delete dir="src/i2p.firefox.profile.zip" />
<delete dir="i2p.chromium.base.profile" />
<delete dir="i2p.chromium.usability.profile" />
<delete dir="i2p.chromium.profile" />
<delete dir="src/i2p.chromium.profile.zip" />
<delete file="plugin/i2ptunnel.config" />
<delete file="plugin/plugin.config" />
<delete file="plugin/i2pfirefox.config" />
@ -551,7 +506,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<arg value="--linux-deb-maintainer"/> <arg value="hankhill19580@gmail.com"/>
<arg value="--linux-menu-group"/> <arg value="Network;WebBrowser;P2P"/>
<arg value="--linux-app-category"/> <arg value="Network"/>
<arg value="--linux-package-deps"/> <arg value="firefox|chromium|brave|firefox-esr|librewolf|icecat"/>
<arg value="--linux-package-deps"/> <arg value="firefox|firefox-esr|librewolf|icecat"/>
<arg value="--linux-shortcut"/>
<arg value="--license-file"/> <arg value="LICENSE.md"/>
<arg value="--name"/> <arg value="i2pbrowser"/>
@ -569,7 +524,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<arg value="--linux-deb-maintainer"/> <arg value="hankhill19580@gmail.com"/>
<arg value="--linux-menu-group"/> <arg value="Network;WebBrowser;P2P"/>
<arg value="--linux-app-category"/> <arg value="Network"/>
<arg value="--linux-package-deps"/> <arg value="firefox|chromium|brave|firefox-esr|librewolf|icecat"/>
<arg value="--linux-package-deps"/> <arg value="firefox|firefox-esr|librewolf|icecat"/>
<arg value="--linux-shortcut"/>
<arg value="--license-file"/> <arg value="LICENSE.md"/>
<arg value="--name"/> <arg value="i2pbrowser"/>
@ -586,7 +541,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<arg value="--type"/> <arg value="rpm"/>
<arg value="--linux-menu-group"/> <arg value="Network;WebBrowser;P2P"/>
<arg value="--linux-app-category"/> <arg value="Network"/>
<arg value="--linux-package-deps"/> <arg value="firefox|chromium|brave|firefox-esr|librewolf|icecat"/>
<arg value="--linux-package-deps"/> <arg value="firefox|firefox-esr|librewolf|icecat"/>
<arg value="--linux-shortcut"/>
<arg value="--license-file"/> <arg value="LICENSE.md"/>
<arg value="--name"/> <arg value="i2pbrowser"/>
@ -603,7 +558,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<arg value="--type"/> <arg value="rpm"/>
<arg value="--linux-menu-group"/> <arg value="Network;WebBrowser;P2P"/>
<arg value="--linux-app-category"/> <arg value="Network"/>
<arg value="--linux-package-deps"/> <arg value="firefox|chromium|brave|firefox-esr|librewolf|icecat"/>
<arg value="--linux-package-deps"/> <arg value="firefox|firefox-esr|librewolf|icecat"/>
<arg value="--linux-shortcut"/>
<arg value="--license-file"/> <arg value="LICENSE.md"/>
<arg value="--name"/> <arg value="i2pbrowser"/>
@ -615,7 +570,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<arg value="--add-launcher"/> <arg value="i2pbrowser-usability=src/usability.properties"/>
</exec>
</target>
<target name="windows" depends="jar">
<target name="windows" depends="all">
<exec executable="jpackage" failonerror="true">
<arg value="--verbose"/>
<arg value="--type"/> <arg value="exe"/>
@ -805,7 +760,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
</exec>
</target>
<target name="versionMd" depends="i2pFirefoxBaseProfile, i2pFirefoxUsabilityProfile, i2pChromiumBaseProfile, i2pChromiumUsabilityProfile">
<target name="versionMd" depends="i2pFirefoxBaseProfile, i2pFirefoxUsabilityProfile">
<delete file="VERSION.md"></delete>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
@ -873,129 +828,9 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value=""/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="## Chromium"/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value=""/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="```md"/>
</exec>
<!--<exec executable="manifest-json-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-mf"/>
<arg value="src/i2p.chromium.base.profile/extensions/i2pchrome.js/manifest.json"/>
</exec>
<exec executable="manifest-json-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-mf"/>
<arg value="src/i2p.chromium.base.profile/extensions/noscript.js/manifest.json"/>
</exec>
<exec executable="manifest-json-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-mf"/>
<arg value="src/i2p.chromium.usability.profile/extensions/localcdn.js/manifest.json"/>
</exec>
<exec executable="manifest-json-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-mf"/>
<arg value="src/i2p.chromium.usability.profile/extensions/ublock.js/manifest.json"/>
</exec>
<exec executable="manifest-json-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-mf"/>
<arg value="src/i2p.chromium.usability.profile/extensions/jshelter.js/manifest.json"/>
</exec>-->
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="```"/>
</exec>
</target>
<target name="i2pChromiumBaseProfile">
<mkdir dir="src/i2p.chromium.base.profile/extensions/" />
<!--<exec executable="crx3" failonerror="true">
<arg value="download"/>
<arg value="ikdjcmomgldfciocnpekfndklkfgglpe" />
<arg value="-u=true"/>
<arg value="-o" />
<arg value="src/i2p.chromium.base.profile/extensions/i2pchrome.js.crx" />
</exec>-->
<!--<exec executable="crx3" failonerror="true">
<arg value="download"/>
<arg value="doojmbjmlfjjnbmnoijecmcbfeoakpjm" />
<arg value="-u=true"/>
<arg value="-o" />
<arg value="src/i2p.chromium.base.profile/extensions/noscript.js.crx" />
</exec>-->
<exec executable="echo" failonerror="true" append="false" output="src/i2p.chromium.base.profile/version.md">
<arg value="Profile Version" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.base.profile/version.md">
<arg value="===============" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.base.profile/version.md">
<arg value="" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.base.profile/version.md">
<arg value="${release.number}-${build.number}" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.base.profile/version.md">
<arg value="" />
</exec>
</target>
<target name="i2pChromiumUsabilityProfile">
<mkdir dir="src/i2p.chromium.usability.profile/extensions/" />
<!--<exec executable="crx3" failonerror="true">
<arg value="download"/>
<arg value="ikdjcmomgldfciocnpekfndklkfgglpe" />
<arg value="-u=true"/>
<arg value="-o" />
<arg value="src/i2p.chromium.usability.profile/extensions/i2pchrome.js.crx" />
</exec>
<exec executable="crx3" failonerror="true">
<arg value="download"/>
<arg value="cjpalhdlnbpafiamejdnhcphjbkeiagm" />
<arg value="-u=true"/>
<arg value="-o" />
<arg value="src/i2p.chromium.usability.profile/extensions/ublock.js.crx" />
</exec>
<exec executable="crx3" failonerror="true">
<arg value="download"/>
<arg value="ammoloihpcbognfddfjcljgembpibcmb" />
<arg value="-u=true"/>
<arg value="-o" />
<arg value="src/i2p.chromium.usability.profile/extensions/jshelter.js.crx" />
</exec>
<exec executable="crx3" failonerror="true">
<arg value="download"/>
<arg value="njdfdhgcmkocbgbhcioffdbicglldapd" />
<arg value="-u=true"/>
<arg value="-o" />
<arg value="src/i2p.chromium.usability.profile/extensions/localcdn.js.crx" />
</exec>-->
<exec executable="echo" failonerror="true" append="false" output="src/i2p.chromium.usability.profile/version.md">
<arg value="Profile Version" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.usability.profile/version.md">
<arg value="===============" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.usability.profile/version.md">
<arg value="" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.usability.profile/version.md">
<arg value="${release.number}-${build.number}" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.usability.profile/version.md">
<arg value="" />
</exec>
</target>
<target name="i2pFirefoxBaseProfile" depends="buildNum">
<target name="i2pFirefoxBaseProfile" depends="buildNum,i2pFirefoxBaseUserJs">
<mkdir dir="src/i2p.firefox.base.profile/extensions/" />
<copy file="src/prefs.js" tofile="src/i2p.firefox.base.profile/prefs.js" />
<copy file="src/user-overrides.js" tofile="src/i2p.firefox.base.profile/user-overrides.js" />
@ -1031,7 +866,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
</exec>
</target>
<target name="i2pFirefoxUsabilityProfile" depends="buildNum">
<target name="i2pFirefoxUsabilityProfile" depends="buildNum, i2pFirefoxUsabilityUserJs">
<mkdir dir="src/i2p.firefox.usability.profile/extensions/" />
<copy file="src/prefs.js" tofile="src/i2p.firefox.usability.profile/prefs.js" />
<copy file="src/user-overrides.js" tofile="src/i2p.firefox.usability.profile/user-overrides.js" />

View File

@ -9,7 +9,7 @@ jpackage --verbose \
--type rpm \
--linux-menu-group "Network;WebBrowser;P2P" \
--linux-app-category "Network" \
--linux-package-deps "firefox|chromium|brave|firefox-esr|librewolf|icecat" \
--linux-package-deps "firefox|firefox-esr|librewolf|icecat" \
--linux-shortcut \
--license-file LICENSE.md \
--name i2pbrowser \

View File

@ -1,3 +1,3 @@
#Build Number for ANT. Do not edit!
#Tue Jan 07 18:04:41 EST 2025
build.number=805
#Tue May 20 20:19:14 EDT 2025
build.number=827

View File

@ -60,8 +60,6 @@
<jar destfile="build/i2pfirefox-plugin.jar" basedir="./build/obj" includes="**/*.class" >
<fileset file="i2p.firefox.base.profile.zip" />
<fileset file="i2p.firefox.usability.profile.zip" />
<fileset file="i2p.chromium.base.profile.zip" />
<fileset file="i2p.chromium.usability.profile.zip" />
<fileset file="icon.png" />
</jar>
</target>
@ -70,8 +68,6 @@
<jar destfile="build/i2pfirefox.jar" basedir="./build/obj" includes="**/*.class" >
<fileset file="i2p.firefox.base.profile.zip" />
<fileset file="i2p.firefox.usability.profile.zip" />
<fileset file="i2p.chromium.base.profile.zip" />
<fileset file="i2p.chromium.usability.profile.zip" />
<fileset file="icon.png" />
</jar>
</target>

View File

@ -22,13 +22,10 @@ import java.util.ArrayList;
*/
public class I2PBrowser extends I2PGenericUnsafeBrowser {
private final I2PFirefox i2pFirefox = new I2PFirefox();
private final I2PChromium i2pChromium = new I2PChromium();
private final I2PGenericUnsafeBrowser i2pGeneral =
new I2PGenericUnsafeBrowser();
public boolean firefox = false;
public boolean chromium = false;
public boolean firefox = true;
public boolean generic = false;
public boolean chromiumFirst = false;
public boolean usability = false;
public int privateBrowsing = 0;
private boolean outputConfig = false;
@ -43,16 +40,6 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
i2pFirefox.storeFirefoxDefaults();
i2pFirefox.launch(privateWindow, url);
}
public void launchChromium(int privateWindow, String[] url) {
String priv = privateWindow == 1 ? "private-window" : "long-profile";
logger.info("I2PChromium" + priv);
i2pChromium.usability = usability;
if (url == null)
url = new String[] {"about:blank"};
if (outputConfig)
i2pChromium.storeChromiumDefaults();
i2pChromium.launch(privateWindow, url);
}
private void launchGeneric(int privateWindowInt, String[] url) {
String priv = privateWindowInt == 1 ? "private-window" : "long-profile";
boolean privateWindow = false;
@ -84,23 +71,6 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
public void setBrowser(String browserPath) { this.BROWSER = browserPath; }
/**
* Return true if there is a Chromium available
*
* @return true if Chromium is available, false otherwise
* @since 0.0.16
*/
public boolean hasChromium() {
String chrome = i2pChromium.topChromium();
if (chrome == null) {
return false;
}
if (chrome.isEmpty()) {
return false;
}
return true;
}
/**
* Return true if there is a Firefox variant available
*
@ -128,20 +98,8 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
* @since 0.0.17
*/
public void launch(int privateWindow, String[] url) {
if (chromiumFirst) {
if (chromium) {
this.launchChromium(privateWindow, url);
} else if (firefox) {
this.launchFirefox(privateWindow, url);
} else {
this.launchGeneric(privateWindow, url);
}
return;
}
if (firefox) {
this.launchFirefox(privateWindow, url);
} else if (chromium) {
this.launchChromium(privateWindow, url);
} else {
this.launchGeneric(privateWindow, url);
}
@ -182,8 +140,6 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
boolean r = true;
if (i2pFirefox != null)
r = i2pFirefox.stop();
if (i2pChromium != null)
r = i2pChromium.stop();
if (i2pGeneral != null)
r = i2pGeneral.stop();
return r;
@ -192,8 +148,6 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
public boolean running() {
if (i2pFirefox != null)
return i2pFirefox.running();
if (i2pChromium != null)
return i2pChromium.running();
if (i2pGeneral != null)
return i2pGeneral.running();
return false;
@ -222,9 +176,6 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
if (arg.equals("-private")) {
this.privateBrowsing = 1;
}
if (arg.equals("-chromium")) {
this.chromium = true;
}
if (arg.equals("-firefox")) {
this.firefox = true;
}
@ -253,8 +204,6 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
}
}
}
if (!this.chromium)
this.firefox = true;
}
return visitURL;
}

View File

@ -1,842 +0,0 @@
package net.i2p.i2pfirefox;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* I2PChromium.java
* Copyright (C) 2022 idk <hankhill19580@gmail.com>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the MIT License. See LICENSE.md for details.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*
* @author idk
* @since 0.0.1
*/
public class I2PChromium extends I2PChromiumProfileBuilder {
private final String[] CHROMIUM_SEARCH_PATHS = CHROMIUM_FINDER();
private Process p = null;
private String chromePath;
/**
* Construct an I2PChromium class which manages an instance of Chromium and
* an accompanying Chromium profile. This version includes Chromium variants
* and forks.
*
* @since 0.0.1
*/
public I2PChromium() {
for (String path : CHROMIUM_SEARCH_PATHS) {
File f = new File(path);
if (f.exists()) {
logger.info("Found Chromium at " + path);
return;
}
}
}
public I2PChromium(boolean usability) {
for (String path : CHROMIUM_SEARCH_PATHS) {
File f = new File(path);
if (f.exists()) {
logger.info("Found Chromium at " + path);
return;
}
}
this.usability = true;
}
public void storeChromiumDefaults() {
List<String> list = new ArrayList<String>();
list = Arrays.asList(chromiumPathsWindows());
getProperties().setProperty("chromium.paths.windows",
list.stream().collect(Collectors.joining(",")));
list = Arrays.asList(chromiumPathsUnix());
getProperties().setProperty("chromium.paths.linux",
list.stream().collect(Collectors.joining(",")));
list = Arrays.asList(chromiumPathsOSX());
getProperties().setProperty("chromium.paths.osx",
list.stream().collect(Collectors.joining(",")));
list = Arrays.asList(chromiumBinsWindows());
getProperties().setProperty("chromium.bins.windows",
list.stream().collect(Collectors.joining(",")));
list = Arrays.asList(chromiumBinsUnix());
getProperties().setProperty("chromium.bins.linux",
list.stream().collect(Collectors.joining(",")));
list = Arrays.asList(chromiumBinsUnix());
getProperties().setProperty("chromium.bins.osx",
list.stream().collect(Collectors.joining(",")));
try (OutputStream fos = new FileOutputStream(
new File(runtimeDirectory(""), "browser.config"))) {
getProperties().store(fos, "Chromium Configuration Section");
} catch (IOException ioe) {
logger.warning(ioe.toString());
}
}
private String[] chromiumPathsUnix() {
String chromiumPathsProp =
getProperties().getProperty("chromium.paths.unix");
if (chromiumPathsProp != null)
if (!chromiumPathsProp.equals(""))
return chromiumPathsProp.split(",");
return new String[] {"/usr/bin", "/usr/local/bin", "/opt/chromium/bin",
"/snap/bin"};
}
private String[] chromiumBinsUnix() {
String chromiumPathsProp;
if (isOSX()) {
chromiumPathsProp = getProperties().getProperty("chromium.bins.osx");
if (chromiumPathsProp != null)
if (!chromiumPathsProp.equals(""))
return chromiumPathsProp.split(",");
}
chromiumPathsProp = getProperties().getProperty("chromium.bins.unix");
if (chromiumPathsProp != null)
if (!chromiumPathsProp.equals(""))
return chromiumPathsProp.split(",");
return new String[] {
"ungoogled-chromium", "chromium", "brave", "edge", "msedge", "chrome"};
}
private String[] FIND_CHROMIUM_SEARCH_PATHS_UNIX() {
String[] path = chromiumPathsUnix();
String[] exes = chromiumBinsUnix();
String[] exePath = new String[path.length * exes.length];
int i = 0;
for (String s : path) {
for (String exe : exes) {
exePath[i] = s + "/" + exe;
i++;
}
}
return exePath;
}
private String[] chromiumPathsOSX() {
String chromiumPathsProp =
getProperties().getProperty("chromium.paths.osx");
if (chromiumPathsProp != null)
if (!chromiumPathsProp.equals(""))
return chromiumPathsProp.split(",");
return new String[] {"/Applications/Chromium.app/Contents/MacOS",
"/Applications/Chrome.app/Contents/MacOS",
"/Applications/Brave.app/Contents/MacOS"};
}
private String[] FIND_CHROMIUM_SEARCH_PATHS_OSX() {
String[] path = chromiumPathsOSX();
String[] exes = chromiumBinsUnix();
String[] exePath = new String[path.length * exes.length];
int i = 0;
for (String s : path) {
for (String exe : exes) {
exePath[i] = s + "/" + exe;
i++;
}
}
return exePath;
}
private String[] chromiumPathsWindows() {
String chromiumPathsProp =
getProperties().getProperty("chromium.paths.windows");
if (chromiumPathsProp != null)
if (!chromiumPathsProp.equals(""))
return chromiumPathsProp.split(",");
String programFiles = System.getenv("ProgramFiles");
String localAppData = System.getenv("LOCALAPPDATA");
String programFiles86 = System.getenv("ProgramFiles(x86)");
if (programFiles == null)
programFiles = "C:/Program Files/";
if (programFiles86 == null)
programFiles86 = "C:/Program Files (x86)/";
if (!isWindows())
localAppData = "C:/Users/user/AppData/Local/";
return new String[] {
new File(localAppData, "/Google/Chrome/Application/").toString(),
new File(programFiles, "/Google/Chrome/Application/").toString(),
new File(programFiles86, "/Google/Chrome/Application/").toString(),
new File(localAppData, "/Chromium/Application/").toString(),
new File(programFiles, "/Chromium/Application/").toString(),
new File(programFiles86, "/Chromium/Application/").toString(),
new File(localAppData, "/BraveSoftware/Brave Browser/Application/")
.toString(),
new File(programFiles, "/BraveSoftware/Brave Browser/Application/")
.toString(),
new File(programFiles86, "/BraveSoftware/Brave Browser/Application/")
.toString(),
new File(programFiles86, "/Microsoft/Edge/Application/").toString(),
new File(programFiles, "/Microsoft/Edge/Application/").toString(),
};
}
private String[] chromiumBinsWindows() {
String chromiumPathsProp =
getProperties().getProperty("chromium.bins.windows");
if (chromiumPathsProp != null)
if (!chromiumPathsProp.equals(""))
return chromiumPathsProp.split(",");
return new String[] {"ungoogled-chromium.exe",
"chromium.exe",
"brave.exe",
"edge.exe",
"msedge.exe",
"chrome.exe"};
}
private String[] FIND_CHROMIUM_SEARCH_PATHS_WINDOWS() {
String[] path = chromiumPathsWindows();
String[] exes = chromiumBinsWindows();
String[] exePath = new String[path.length * exes.length];
int i = 0;
for (String s : path) {
for (String exe : exes) {
exePath[i] = s + "\\" + exe;
i++;
}
}
return exePath;
}
private String[] FIND_ALL_CHROMIUM_SEARCH_PATHS() {
String[] Unix = FIND_CHROMIUM_SEARCH_PATHS_UNIX();
String[] Windows = FIND_CHROMIUM_SEARCH_PATHS_WINDOWS();
String[] Mac = FIND_CHROMIUM_SEARCH_PATHS_OSX();
String[] exePath = new String[Unix.length + Windows.length + Mac.length];
int i = 0;
for (String s : Unix) {
exePath[i] = s;
i++;
}
for (String s : Windows) {
exePath[i] = s;
i++;
}
for (String s : Mac) {
exePath[i] = s;
i++;
}
return exePath;
}
private String[] FIND_CHROMIUM_SEARCH_PATHS() {
switch (getOperatingSystem()) {
case "Windows":
return FIND_CHROMIUM_SEARCH_PATHS_WINDOWS();
case "Linux":
return FIND_CHROMIUM_SEARCH_PATHS_UNIX();
case "Mac":
return FIND_CHROMIUM_SEARCH_PATHS_OSX();
case "BSD":
return FIND_CHROMIUM_SEARCH_PATHS_UNIX();
default:
return FIND_ALL_CHROMIUM_SEARCH_PATHS();
}
}
private String[] NEARBY_CHROMIUM_SEARCH_PATHS() {
// obtain the PLUGIN environment variable
String plugin = System.getenv("PLUGIN");
if (plugin != null && !plugin.isEmpty()) {
File pluginDir = new File(plugin);
if (pluginDir.exists()) {
if (isWindows()) {
File searchResult = searchFile(pluginDir, "ungoogled-chromium.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "brave.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "chromium.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "edge.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "msedge.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "chrome.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
} else {
File searchResult = searchFile(pluginDir, "ungoogled-chromium");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "brave");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "chromium");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "edge");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "msedge");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "chrome");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
}
}
}
// now, do the same thing, but with user.dir instead of plugin
// list the directories in the user.dir directory
File userDir = userHomeDir();
if (userDir.exists()) {
if (isWindows()) {
File searchResult = searchFile(userDir, "ungoogled-chromium.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "brave.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "chromium.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "edge.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "msedge.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "chrome.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
} else {
File searchResult = searchFile(userDir, "ungoogled-chromium");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "brave");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "chromium");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "edge");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "msedge");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "chrome");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
}
}
return new String[] {};
}
private String[] CHROMIUM_FINDER() {
String[] nearby = NEARBY_CHROMIUM_SEARCH_PATHS();
String[] all = FIND_CHROMIUM_SEARCH_PATHS();
if (nearby != null && nearby.length > 0) {
return nearby;
} else if (all != null && all.length > 0) {
return all;
} else {
return new String[] {};
}
}
/**
* Check our list of chrome paths for a valid chrome binary.
* Just an existence check for now, but should check versions
* in the future.
*
* @return a list of usable Chromiums, or an empty list if none are found.
* @since 0.0.1
*/
public String[] onlyValidChromiums() {
String[] chromees = CHROMIUM_FINDER();
ArrayList<String> validChromiums = new ArrayList<String>();
for (String chrome : chromees) {
File chromeFile = new File(chrome);
if (chromeFile.exists()) {
logger.info("Found valid chromium at " + chrome);
validChromiums.add(chrome);
}
logger.info("chrome at " + chrome + "does not exist");
}
return validChromiums.toArray(new String[validChromiums.size()]);
}
/**
* Return the best available Chromium from the list of Chromiums we have.
*
* @return the path to the best available Chromium, or null if none are found.
* @since 0.0.1
*/
public String topChromium() {
// get the CHROMIUM environment variable
String chrome = System.getenv("CHROMIUM");
// if it is not null and not empty
if (chrome != null && !chrome.isEmpty()) {
// check if the file exists
File chromeFile = new File(chrome);
if (chromeFile.exists()) {
// if it does, return it
chromePath = chrome;
return chrome;
}
}
String[] chromees = onlyValidChromiums();
if (chromees.length > 0) {
chromePath = chromees[0];
return chromees[0];
} else {
return "";
}
}
/**
* Return the best available Chromium from the list of Chromiums we have.
* if override is passed it will be validated and if it validates, it will
* be used.
*
* @param override the path to a valid Chromium binary to use.
* @return the path to the best available Chromium, or null if none are found.
* @since 0.0.1
*/
public String topChromium(String overrideChromium) {
if (overrideChromium != null && !overrideChromium.isEmpty()) {
File chromeFile = new File(overrideChromium);
if (chromeFile.exists()) {
return overrideChromium;
}
}
return topChromium();
}
/**
* Build a ProcessBuilder for the top Chromium binary and
* the default profile.
*
* @return a ProcessBuilder for the top Chromium binary and
* the default profile.
* @since 0.0.1
*/
public ProcessBuilder defaultProcessBuilder() {
return processBuilder(new String[] {});
}
/**
* Build a ProcessBuilder for the top Chromium binary and
* the default profile.
*
* @args the arguments to pass to the Chromium binary
* @return a ProcessBuilder for the top Chromium binary and
* the default profile.
* @since 0.0.1
*/
public ProcessBuilder defaultProcessBuilder(String[] args) {
return processBuilder(args);
}
/**
* Build a ProcessBuilder for the top Chromium binary and
* the default profile.
*
* @return a ProcessBuilder for the top Chromium binary and
* the default profile. Always passes the --incognito flag.
* @since 0.0.1
*/
public ProcessBuilder privateProcessBuilder() {
return processBuilder(new String[] {"--incognito"});
}
/**
* Build a ProcessBuilder for the top Chromium binary and
* the default profile.
*
* @param args the arguments to pass to the Chromium binary.
* @return a ProcessBuilder for the top Chromium binary and
* the default profile. Always passes the --incognito flag.
* @since 0.0.1
*/
public ProcessBuilder privateProcessBuilder(String[] args) {
// return processBuilder(new String[]{});
ArrayList<String> argList = new ArrayList<String>();
argList.add("--incognito");
if (args != null) {
if (args.length > 0) {
for (String arg : args) {
argList.add(arg);
}
}
}
return processBuilder(argList.toArray(new String[argList.size()]));
}
/**
* Build a ProcessBuilder for the top Chromium binary and
* the default profile.
*
* @return a ProcessBuilder for the top Chromium binary and
* the default profile. Always passes the --app flag.
* @since 0.0.1
*/
public ProcessBuilder appProcessBuilder() {
return processBuilder(new String[] {"--app=http://127.0.0.1:7657"});
}
/**
* Build a ProcessBuilder for the top Chromium binary and
* the default profile.
*
* @param args the arguments to pass to the Chromium binary.
* @return a ProcessBuilder for the top Chromium binary and
* the default profile. Always passes the --app flag.
* @since 0.0.1
*/
public ProcessBuilder appProcessBuilder(String[] args) {
ArrayList<String> argList = new ArrayList<String>();
argList.add("--app=http://127.0.0.1:7657");
// argList.add("http://127.0.0.1:7657");
if (args != null) {
if (args.length > 0) {
for (String arg : args) {
argList.add(arg);
}
}
}
return processBuilder(argList.toArray(new String[argList.size()]));
}
/**
1 --user-data-dir="$CHROMIUM_I2P" \
2 --proxy-server="http://127.0.0.1:4444" \
3 --proxy-bypass-list=127.0.0.1:7657 \
4 --user-data-dir=$HOME/WebApps/i2padmin \
5 --safebrowsing-disable-download-protection \
6 --disable-client-side-phishing-detection \
7 --disable-3d-apis \
8 --disable-accelerated-2d-canvas \
9 --disable-remote-fonts \
10 --disable-sync-preferences \
11 --disable-sync \
12 --disable-speech \
13 --disable-webgl \
14 --disable-reading-from-canvas \
15 --disable-gpu \
16 --disable-32-apis \
17 --disable-auto-reload \
18 --disable-background-networking \
19 --disable-d3d11 \
20 --disable-file-system \
*/
/**
* Build a ProcessBuilder for the top Chromium binary and
* the default profile, with a specific set of extended
* arguments.
*
* @param args the extended arguments to pass to the Chromium binary.
* @return a ProcessBuilder for the top Chromium binary and
* default profile, with a specific set of extended arguments.
* @since 0.0.1
*/
public ProcessBuilder processBuilder(String[] args) {
String chrome = topChromium();
if (!chrome.isEmpty()) {
int arglength = 0;
if (args != null)
arglength = args.length;
String[] newArgs = new String[arglength + 32];
newArgs[0] = chrome;
newArgs[1] =
"--user-data-dir=" + this.profileDirectory(this.usabilityMode());
newArgs[2] = "--proxy-server=http://127.0.0.1:4444";
newArgs[3] =
"--proxy-bypass-list=http://localhost:7657,http://127.0.0.1:7657";
newArgs[4] = "--safebrowsing-disable-download-protection";
newArgs[5] = "--disable-client-side-phishing-detection";
newArgs[6] = "--disable-3d-apis";
newArgs[7] = "--disable-accelerated-2d-canvas";
newArgs[8] = "--disable-remote-fonts";
newArgs[9] = "--disable-sync-preferences";
newArgs[10] = "--disable-sync";
newArgs[11] = "--disable-speech";
newArgs[12] = "--disable-webgl";
newArgs[13] = "--disable-reading-from-canvas";
newArgs[14] = "--disable-gpu";
newArgs[15] = "--disable-auto-reload";
newArgs[16] = "--disable-background-networking";
newArgs[17] = "--disable-d3d11";
newArgs[18] = "--disable-file-system";
newArgs[19] = "--reset-variation-state";
newArgs[20] = "--disable-beforeunload";
newArgs[21] = "--disable-grease-tls";
newArgs[22] = "--disable-search-engine-collection";
newArgs[23] = "--fingerprinting-canvas-image-data-noise";
newArgs[24] = "--fingerprinting-canvas-measuretext-noise";
newArgs[25] = "--fingerprinting-client-rects-noise";
newArgs[26] = "--omnibox-autocomplete-filtering";
newArgs[27] = "--popups-to-tabs";
newArgs[28] = "--referrer-directive=noreferrers";
newArgs[29] = "--force-punycode-hostnames";
newArgs[30] = "--disable-sharing-hub";
if (!this.usability) {
newArgs[31] =
"--load-extension=" +
new File(this.profileDirectory("base"), "extensions/i2pchrome.js")
.getAbsolutePath() +
"," +
new File(this.profileDirectory("base"),
"extensions/https-everywhere.js")
.getAbsolutePath() +
"," +
new File(this.profileDirectory("base"), "extensions/noscript.js")
.getAbsolutePath();
} else {
newArgs[31] =
"--load-extension=" +
new File(this.profileDirectory("usability"),
"extensions/i2pchrome.js")
.getAbsolutePath() +
"," +
new File(this.profileDirectory("usability"),
"extensions/https-everywhere.js")
.getAbsolutePath() +
"," +
new File(this.profileDirectory("usability"),
"extensions/jshelter.js")
.getAbsolutePath() +
"," +
new File(this.profileDirectory("usability"),
"extensions/localcdn.js")
.getAbsolutePath() +
"," +
new File(this.profileDirectory("usability"), "extensions/ublock.js")
.getAbsolutePath();
}
if (args != null) {
if (arglength > 0) {
for (int i = 0; i < arglength; i++) {
newArgs[i + 32] = args[i];
}
}
}
if (isOSX()) {
String[] fg = {""};
String[] lastArgs =
Stream.concat(Arrays.stream(newArgs), Arrays.stream(fg))
.toArray(String[] ::new);
// String[] finalArgs = Stream.concat(Arrays.stream(initArgs),
// Arrays.stream(lastArgs)).toArray(String[]::new);
File bashScript = new File("i2pchromium.sh");
if (bashScript.exists()) {
bashScript.delete();
}
try {
FileWriter bWriter = new FileWriter(bashScript);
PrintWriter bpWriter = new PrintWriter(bWriter);
bpWriter.println("#! /usr/bin/env sh");
bpWriter.println(join(lastArgs));
bpWriter.close();
bWriter.close();
if (!bashScript.canExecute()) {
bashScript.setExecutable(true);
}
return new ProcessBuilder(bashScript.getAbsolutePath())
.directory(this.runtimeDirectory(true));
} catch (IOException e) {
logger.warning(e.toString());
}
} else {
return new ProcessBuilder(newArgs).directory(
this.runtimeDirectory(true));
}
}
logger.info("No Chromium found.");
return new ProcessBuilder(args);
}
public Process launchAndDetatch(boolean privateWindow, String[] url) {
int privateWindowInt = 0;
if (privateWindow)
privateWindowInt = 1;
return launchAndDetatch(privateWindowInt, url);
}
public Process launchAndDetatch(int privateWindow, String[] url) {
validateUserDirectory();
if (waitForProxy()) {
String profileDirectory = this.profileDirectory(this.usabilityMode());
if (this.validateProfileDirectory(profileDirectory)) {
logger.info("Valid profile directory: " + profileDirectory);
} else {
logger.info("Invalid profile directory: " + profileDirectory +
" rebuilding...");
if (!this.copyBaseProfiletoProfile()) {
logger.info("Failed to rebuild profile directory: " +
profileDirectory);
return null;
} else {
logger.info("Rebuilt profile directory: " + profileDirectory);
}
}
if (validateProfileFirstRun(profileDirectory))
return null;
ProcessBuilder pb = null;
switch (privateWindow) {
case 0:
pb = this.defaultProcessBuilder(url);
break;
case 1:
pb = this.privateProcessBuilder(url);
break;
case 2:
pb = this.appProcessBuilder(url);
break;
default:
pb = this.defaultProcessBuilder(url);
break;
}
try {
logger.info(pb.command().toString());
p = pb.start();
sleep(2000);
return p;
} catch (Throwable e) {
logger.info(e.toString());
}
}
return null;
}
/**
* Populates a profile directory with a proxy configuration.
* Waits for an HTTP proxy on the port 4444 to be ready.
* Launches Chromium with the profile directory.
*
* @param bool if true, the profile will be ephemeral(i.e. a --private-window
* profile).
* @param String[] a list of URL's to pass to the browser window
* @since 0.0.17
*/
public void launch(boolean privateWindow, String[] url) {
int privateWindowInt = 0;
if (privateWindow)
privateWindowInt = 1;
launch(privateWindowInt, url);
}
public void launch(int privateWindow, String[] url) {
if (waitForProxy()) {
p = launchAndDetatch(privateWindow, url);
if (p == null)
return;
logger.info("I2PChromium");
try {
logger.info("Waiting for I2PChromium to close...");
int exit = p.waitFor();
logger.info("I2PChromium exited with value: " + exit);
} catch (Exception e) {
logger.info("Error: " + e.getMessage());
}
}
}
/**
* Populates a profile directory with a proxy configuration.
* Waits for an HTTP proxy on the port 4444 to be ready.
* Launches Chromium with the profile directory.
*
* @param bool if true, the profile will be ephemeral(i.e. a --private-window
* profile).
* @since 0.0.1
*/
public void launch(boolean privateWindow) { launch(privateWindow, null); }
/**
* Populates a profile directory with a proxy configuration.
* Waits for an HTTP proxy on the port 4444 to be ready.
* Launches Chromium with the profile directory.
*
* @since 0.0.1
*/
public void launch() { launch(false); }
/**
* Stop all running processes managed by the browser manager.
*
* @return true if successful, false if not
*/
public boolean stop() {
if (p != null) {
p.destroy();
return true;
}
return false;
}
public boolean running() {
if (p != null)
return p.isAlive();
return false;
}
private String ValidURL(String inUrl) {
String[] schemes = {"http", "https"};
for (String scheme : schemes) {
if (inUrl.startsWith(scheme)) {
return inUrl;
}
}
return "";
}
public static void main(String[] args) {
int privateBrowsing = 0;
I2PChromium i2pChromium = new I2PChromium();
i2pChromium.validateUserDirectory();
i2pChromium.logger.info("I2PChromium");
i2pChromium.logger.info("checking for private browsing");
ArrayList<String> visitURL = new ArrayList<String>();
if (args != null) {
if (args.length > 0) {
for (String arg : args) {
if (arg.equals("-private")) {
privateBrowsing = 1;
i2pChromium.logger.info(
"private browsing is true, profile will be discarded at end of session");
}
if (arg.equals("-usability")) {
i2pChromium.usability = true;
}
if (arg.equals("-app")) {
privateBrowsing = 2;
i2pChromium.usability = true;
}
if (arg.equals("-noproxycheck")) {
i2pChromium.logger.info("zeroing out proxy check");
i2pChromium.setProxyTimeoutTime(0);
}
if (!arg.startsWith("-")) {
// check if it's a URL
if (privateBrowsing == 2)
visitURL.add("--app=" + i2pChromium.ValidURL(arg));
else
visitURL.add(i2pChromium.ValidURL(arg));
}
}
}
}
i2pChromium.launch(privateBrowsing,
visitURL.toArray(new String[visitURL.size()]));
}
}

View File

@ -1,150 +0,0 @@
package net.i2p.i2pfirefox;
import java.io.File;
/**
* I2PChromiumProfileBuilder.java
* Copyright (C) 2022 idk <hankhill19580@gmail.com>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the MIT License. See LICENSE.md for details.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* I2PChromiumProfileBuilder is a class that builds a profile directory which
* contains the I2P browser profile for the Chromium browser family. It manages
* the base profile directory and copies it's contents to the active profile
* directory, which is actually used by Chromium.
*
* @author idk
* @since 0.0.1
*/
public class I2PChromiumProfileBuilder extends I2PChromiumProfileChecker {
public boolean usability;
private String baseProfileDir(String file, String mode) {
File profileDir = new File(file, "i2p.chromium." + mode + ".profile");
// make sure the directory exists
if (profileDir.exists()) {
return profileDir.getAbsolutePath();
} else {
// create the directory
if (!this.unpackProfile(profileDir.getAbsolutePath(), "chromium", mode)) {
return null;
}
return profileDir.getAbsolutePath();
}
}
/**
* get the base profile directory, creating it if necessary
*
* @return the base profile directory, or null if it could not be created
*/
/*public String baseProfileDirectory() {
return baseProfileDirectory("base");
}*/
public String baseProfileDirectory(String mode) {
String pd = System.getenv("I2P_CHROMIUM_BASE_PROFILE");
if (pd != null && !pd.isEmpty()) {
File pdf = new File(pd);
if (pdf.exists() && pdf.isDirectory()) {
return pd;
} else {
if (!this.unpackProfile(pdf.getAbsolutePath(), "chromium", mode)) {
return null;
}
}
}
String rtd = runtimeDirectory();
return baseProfileDir(rtd, mode);
}
/**
* get the runtime directory, creating it if create=true
*
* @param create if true, create the runtime directory if it does not exist
* @return the runtime directory, or null if it could not be created
* @since 0.0.1
*/
public File runtimeDirectory(boolean create) {
String rtd = runtimeDirectory();
return runtimeDirectory(create, rtd);
}
/**
* get the correct runtime directory
*
* @return the runtime directory, or null if it could not be created or found
* @since 0.0.1
*/
public String runtimeDirectory() {
// get the I2P_CHROMIUM_DIR environment variable
String rtd = System.getenv("I2P_CHROMIUM_DIR");
// if it is not null and not empty
if (rtd != null && !rtd.isEmpty()) {
// check if the file exists
File rtdFile = new File(rtd);
if (rtdFile.exists()) {
// if it does, return it
return runtimeDirectory(rtd);
}
}
return runtimeDirectory("");
}
public String usabilityMode() {
if (usability)
return "usability";
return "base";
}
/**
* Copy the inert base profile directory to the runtime profile directory
*
* @since 0.0.1
*/
public boolean copyBaseProfiletoProfile() {
String baseProfile = baseProfileDirectory(usabilityMode());
String profile = profileDirectory(usabilityMode());
logger.info("Copying base profile to profile directory: " + baseProfile +
" -> " + profile);
if (baseProfile.isEmpty() || profile.isEmpty()) {
return false;
}
File baseProfileDir = new File(baseProfile);
File profileDir = new File(profile);
if (!profileDir.exists()) {
try {
logger.info("Copying base profile to profile directory");
copyDirectory(baseProfileDir, profileDir, "chromium", usabilityMode());
} catch (Exception e) {
logger.info("Error copying base profile to profile" + e);
return false;
}
}
logger.info("Copied base profile to profile directory");
return true;
}
/**
* Construct a new Profile Builder
*
* @since 0.0.1
*/
public I2PChromiumProfileBuilder() {
// I2PChromiumProfileBuilder.strict = false;
}
/**
* Construct a new Profile Builder
* @param strict if true, the strict overrides will be copied to the profile
*
* @since 0.0.1
*/
public I2PChromiumProfileBuilder(boolean strict) {
// I2PChromiumProfileBuilder.strict = strict;
}
}

View File

@ -1,139 +0,0 @@
package net.i2p.i2pfirefox;
import java.io.File;
/**
* I2PChromiumProfileChecker.java
* Copyright (C) 2022 idk <hankhill19580@gmail.com>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the MIT License. See LICENSE.md for details.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* I2PChromiumProfileChecker is a class that checks if the Chromium profile
* directory exists and is valid.
*
* @author idk
* @since 0.0.1
*/
public class I2PChromiumProfileChecker extends I2PCommonBrowser {
/**
* Output feedback if the profile directory is valid or invalid
*
* @description Output feedback if the profile directory is valid or invalid
* @args unused
* @since 0.0.1
*/
public static void main(String[] args) {
I2PChromiumProfileChecker pc = new I2PChromiumProfileChecker();
String profileDirectory = pc.profileDirectory("base");
if (profileDirectory == null) {
pc.logger.info("No profile directory found");
return;
}
pc.logger.info("Profile directory: " + profileDirectory);
boolean ok = pc.validateProfileDirectory(profileDirectory);
if (ok) {
pc.logger.info("Profile directory is valid");
} else {
pc.logger.info("Profile directory is invalid");
}
}
/**
* get the profile directory, creating it if necessary
*
* @return the profile directory, or null if it could not be created
*/
public String profileDirectory(String base) {
return profileDirectory("I2P_CHROMIUM_PROFILE", "chromium", base, false);
}
/**
* Return true if the profile directory is valid.
*
* @param profileDirectory the profile directory to check
* @return true if the profile directory is valid, false otherwise
* @since 0.0.1
*/
public boolean validateProfileDirectory(String profileDirectory) {
File profileDir = new File(profileDirectory);
if (!profileDir.exists()) {
logger.info("Profile directory does not exist");
return false;
}
if (!profileDir.isDirectory()) {
logger.info("Profile directory is not a directory");
return false;
}
if (!profileDir.canRead()) {
logger.info("Profile directory is not readable");
return false;
}
if (!profileDir.canWrite()) {
logger.info("Profile directory is not writable");
return false;
}
if (!validateExtensionDirectory(profileDir + "/extensions")) {
logger.info("extensions directory is invalid");
return false;
}
return true;
}
/**
* Return true if the file is valid.
*
* @param file the file to check
* @return true if the file is valid, false otherwise
* @since 0.0.1
*/
public boolean validateFile(String file) {
File f = new File(file);
if (!f.exists()) {
logger.info("User JavaScript file does not exist");
return false;
}
if (!f.isFile()) {
logger.info("User JavaScript file is not a file");
return false;
}
if (!f.canRead()) {
logger.info("User JavaScript file is not readable");
return false;
}
if (!f.canWrite()) {
logger.info("User JavaScript file is not writable");
return false;
}
return true;
}
/**
* Return true if the extension directory is valid.
*
* @param extensionDirectory the extension directory to check
* @return true if the extension directory is valid, false otherwise
* @since 0.0.1
*/
public boolean validateExtensionDirectory(String extensionDirectory) {
File extensionDir = new File(extensionDirectory);
if (!extensionDir.exists()) {
logger.info("Extension directory does not exist");
return false;
}
if (!extensionDir.isDirectory()) {
logger.info("Extension directory is not a directory");
return false;
}
if (!extensionDir.canRead()) {
logger.info("Extension directory is not readable");
return false;
}
if (!extensionDir.canWrite()) {
logger.info("Extension directory is not writable");
return false;
}
return true;
}
}

View File

@ -46,3 +46,7 @@ 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("browser.fixup.domainsuffixwhitelist.i2p", true);
// Allow extensions ONLY from the profile directory
user_pref("extensions.enabledScopes", 1); // [HIDDEN PREF]
user_pref("extensions.autoDisableScopes", 0); // [HIDDEN PREF]

View File

@ -172,8 +172,6 @@ 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);
@ -240,8 +238,6 @@ 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);
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", false);
user_pref("dom.security.https_only_mode", false);

View File

@ -1,35 +0,0 @@
#! /usr/bin/env sh
ant distclean
ant jar
rm -rf i2p.chromium.base.profile i2p.chromium.profile i2p.firefox.base.profile i2p.firefox.profile i2p.firefox.usability.profile tor-browser_en-US
echo "Testing Chromium with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium 2> chrome.1.err 1> chrome.1.log
echo "Testing Chromium with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium "http://127.0.0.1:7657" 2> chrome.1.err 1> chrome.1.log
echo "Testing Chromium with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium "http://idk.i2p" 2> chrome.2.err 1> chrome.2.log
echo "Testing Chromium with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium "http://127.0.0.1:7657" "http://idk.i2p" 2> fox.3.err 1> fox.3.log
echo "Testing Chromium with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium -private "http://127.0.0.1:7657" 2> chrome.4.err 1> chrome.4.log
echo "Chromium tests completed"
sleep 2s
rm -rf i2p.chromium.base.profile i2p.chromium.profile
echo "Testing Chromium with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium -usability 2> chrome.1.err 1> chrome.1.log
echo "Testing Chromium with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium -usability "http://127.0.0.1:7657" 2> chrome.1.err 1> chrome.1.log
echo "Testing Chromium with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium -usability "http://idk.i2p" 2> chrome.2.err 1> chrome.2.log
echo "Testing Chromium with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium -usability "http://127.0.0.1:7657" "http://idk.i2p" 2> fox.3.err 1> fox.3.log
echo "Testing Chromium with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium -usability -private "http://127.0.0.1:7657" 2> chrome.4.err 1> chrome.4.log
echo "Chromium Usability-Mode tests completed"
rm -rf i2p.chromium.base.profile i2p.chromium.profile i2p.firefox.base.profile i2p.firefox.profile i2p.firefox.usability.profile