Compare commits
134 Commits
Author | SHA1 | Date | |
---|---|---|---|
fd0bfb8b3d | |||
6ac3a2eb55 | |||
50de466282 | |||
ad61d69be0 | |||
8b1e908bc1 | |||
19fb2f5378 | |||
e0d0a537e7 | |||
b4371dad07 | |||
fbbaffddb9 | |||
7f409bfc1f | |||
bdf9ca5548 | |||
397afe0cb7 | |||
0df0a380bb | |||
10887da2f7 | |||
3da4c9ee1e | |||
c24a0acea1 | |||
41a4e895cc | |||
ba6275008a | |||
f268f3b459 | |||
eb195f7dba | |||
bbd2fdeeec | |||
ecfc447125 | |||
238f3fd839 | |||
c01312a1a5 | |||
b72dd14310 | |||
64aac910a6 | |||
246c27627b | |||
d529f353e4 | |||
89cff0c444 | |||
ff19ea685b | |||
e5f6f335ee | |||
bcfbf90be2 | |||
63922c3880 | |||
35570a119d | |||
b877b6141d | |||
62f23d360d | |||
c78614fea5 | |||
44cc27b968 | |||
274748d08b | |||
b4840b7355 | |||
6072b8552e | |||
7c0070cd15 | |||
8083c6c652 | |||
d9d13fac70 | |||
75049fa08e | |||
113caaa922 | |||
bf1b923750 | |||
286122d492 | |||
9ebc0eae81 | |||
de6cdb7b42 | |||
fdeb86d356 | |||
b25cb2c9b3 | |||
515e52eeb2 | |||
616a839c8b | |||
da5ae47278 | |||
c37df87516 | |||
980c59d031 | |||
b8b5c45126 | |||
affc3e5d40 | |||
f225bbb35e | |||
6ed3aae543 | |||
aa54248eb8 | |||
9a5c2bbe42 | |||
fccccfedfa | |||
3b8baa4db4 | |||
31f1483aa7 | |||
1157eb666e | |||
c300648c22 | |||
267047f687 | |||
1f6c3348a3 | |||
47962f350b | |||
625d13d4a3 | |||
61aa5f4b1f | |||
d1d457a0fe | |||
cac93e0f48 | |||
e1401ea5d0 | |||
8ce0bd3f12 | |||
3c705909ea | |||
5db2119370 | |||
9f309457e6 | |||
1bab795f26 | |||
012e5d6d5b | |||
74f946bbe8 | |||
e606cd68bb | |||
a833bb30bd | |||
be5204bf76 | |||
7332ae013d | |||
7a008be8d7 | |||
4101a344a2 | |||
ff35bc7023 | |||
1249e78543 | |||
af1c32ccc1 | |||
50c2f33f55 | |||
6178b723f5 | |||
c71b30d5c1 | |||
7d66622db2 | |||
fe8616491a | |||
240b54d280 | |||
903da4bb7a | |||
ab936f08eb | |||
61431a027c | |||
8cca947702 | |||
ae888b9a06 | |||
e9c1d78a75 | |||
e930adf49d | |||
496db4a1f5 | |||
4cf2854896 | |||
9e3a834f88 | |||
8fd2874722 | |||
83f49f5b12 | |||
b7bb0b3da1 | |||
7d10266562 | |||
53a1e0ff0f | |||
524896c03f | |||
effe91b6f6 | |||
f0616b82d4 | |||
28153cc7a4 | |||
069f6fb107 | |||
6073584af8 | |||
a4ec776107 | |||
3b2c59f38c | |||
f0d9aad522 | |||
101d814777 | |||
ca5409b8b8 | |||
1397463841 | |||
fcfa56a4c9 | |||
8694c726c5 | |||
c2b4442e51 | |||
ac3b7163d8 | |||
14cd4268f4 | |||
db5f10764b | |||
f2895049f5 | |||
940808d3a2 | |||
1eb1b4c65f |
240
.github/workflows/ant.yml
vendored
Normal file
240
.github/workflows/ant.yml
vendored
Normal file
@ -0,0 +1,240 @@
|
||||
# Mostly copied from i2p.i2p, by way of: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-ant
|
||||
# zlatinb did it originally, now I maintain it(idk)
|
||||
|
||||
name: Java CI
|
||||
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: dependencies
|
||||
run: sudo apt install gettext golang-go git ant
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: '21'
|
||||
distribution: 'temurin'
|
||||
- name : Generate override.properties
|
||||
run: |
|
||||
rm -f override.properties
|
||||
echo "build.built-by=GitHub Actions" >> override.properties
|
||||
echo "noExe=true" >> override.properties
|
||||
- name: install crx3
|
||||
run: go install github.com/mediabuyerbot/go-crx3/crx3@latest
|
||||
- name: install dzip
|
||||
run: go install github.com/delicb/dzip@latest
|
||||
- name: install amo-version
|
||||
run: go install github.com/eyedeekay/amo-version@a4f4119eac453a14d6b6184b656320eb72b5da3c
|
||||
- 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
|
||||
- name: build with Ant
|
||||
run: |
|
||||
export PATH=$PATH:$(go env GOPATH)/bin
|
||||
ant distclean jpackage debian
|
||||
- name: Upload Firefox Profile Strict
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: i2p.firefox.base.profile.zip
|
||||
path: ./src/i2p.firefox.base.profile.zip
|
||||
- name: Upload Firefox Profile Usability
|
||||
uses: actions/upload-artifact@v4
|
||||
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:
|
||||
name: i2pfirefox.jar
|
||||
path: ./src/build/i2pfirefox.jar
|
||||
- name: Upload i2pfirefox-plugin.jar
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: i2pfirefox-plugin.jar
|
||||
path: ./src/build/i2pfirefox-plugin.jar
|
||||
- name: Upload i2pbrowser.tar.gz
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: i2pbrowser.tar.gz
|
||||
path: ./i2pbrowser.tar.gz
|
||||
- name: Upload i2pbrowser.deb
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: i2pbrowser_amd64.deb
|
||||
path: ./i2pbrowser_1.0.0_amd64.deb
|
||||
- name: build plugin with Ant
|
||||
run: |
|
||||
export PATH=$PATH:$(go env GOPATH)/bin
|
||||
ant distclean pluginzip
|
||||
- name: Upload i2pfirefox.zip (unsigned plugin)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: i2pfirefox.zip
|
||||
path: ./plugin.zip
|
||||
|
||||
|
||||
buildrpm:
|
||||
runs-on: ubuntu-latest
|
||||
container: fedora
|
||||
|
||||
steps:
|
||||
- name: dependencies
|
||||
run: sudo yum install -y gettext golang-go git ant jq wget curl gpg xz ca-certificates rpm-build
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: '21'
|
||||
distribution: 'temurin'
|
||||
- run: echo [Adoptium] >> /etc/yum.repos.d/adoptium.repo
|
||||
- run: echo name=Adoptium >> /etc/yum.repos.d/adoptium.repo
|
||||
- run: . /etc/os-release; echo baseurl=https://packages.adoptium.net/artifactory/rpm/fedora/$VERSION_ID/x86_64/ >> /etc/yum.repos.d/adoptium.repo
|
||||
- run: echo enabled=1 >> /etc/yum.repos.d/adoptium.repo
|
||||
- run: echo gpgcheck=1 >> /etc/yum.repos.d/adoptium.repo
|
||||
- run: echo gpgkey=https://packages.adoptium.net/artifactory/api/gpg/key/public >> /etc/yum.repos.d/adoptium.repo
|
||||
- run: dnf clean all && rm -r /var/cache/dnf && dnf upgrade -y && dnf update -y
|
||||
- run: dnf install -y temurin-21-jdk
|
||||
- name: Generate override.properties
|
||||
run: |
|
||||
rm -f override.properties
|
||||
echo "build.built-by=GitHub Actions" >> override.properties
|
||||
echo "noExe=true" >> override.properties
|
||||
- name: install crx3
|
||||
run: go install github.com/mediabuyerbot/go-crx3/crx3@latest
|
||||
- name: install dzip
|
||||
run: go install github.com/delicb/dzip@latest
|
||||
- name: install amo-version
|
||||
run: go install github.com/eyedeekay/amo-version@a4f4119eac453a14d6b6184b656320eb72b5da3c
|
||||
- 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
|
||||
- name: build with Ant
|
||||
run: |
|
||||
export PATH=$PATH:$(go env GOPATH)/bin
|
||||
ant distclean jpackage fedora
|
||||
find . -name '*.rpm'
|
||||
- name: Upload i2pbrowser.rpm
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: i2pbrowser.x86_64.rpm
|
||||
path: ./i2pbrowser-1.0.0-1.x86_64.rpm
|
||||
|
||||
|
||||
buildwin:
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: '21'
|
||||
distribution: 'temurin'
|
||||
- uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '1.21'
|
||||
- name : Generate override.properties
|
||||
run: |
|
||||
bash -c 'rm -f override.properties'
|
||||
bash -c 'echo "build.built-by=GitHub Actions" >> override.properties'
|
||||
bash -c 'echo "noExe=true" >> override.properties'
|
||||
- name: install crx3
|
||||
run: go install github.com/mediabuyerbot/go-crx3/crx3@latest
|
||||
- name: install dzip
|
||||
run: go install github.com/delicb/dzip@latest
|
||||
- name: install amo-version
|
||||
run: go install github.com/eyedeekay/amo-version@a4f4119eac453a14d6b6184b656320eb72b5da3c
|
||||
- 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
|
||||
- name: build exe with Ant
|
||||
run: |
|
||||
ant windows
|
||||
bash -c 'ls *.exe'
|
||||
- name: Upload Firefox Profile EXE Installer
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: i2pbrowser-1.0.0.exe
|
||||
path: ./i2pbrowser-1.0.0.exe
|
||||
- name: build msi with Ant
|
||||
run: |
|
||||
ant windows-msi
|
||||
bash -c 'ls *.msi'
|
||||
- name: Upload Firefox Profile MSI Installer
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: i2pbrowser-1.0.0.msi
|
||||
path: ./i2pbrowser-1.0.0.msi
|
||||
- name: build portable zip with Ant
|
||||
run: |
|
||||
ant windows-portable
|
||||
bash -c 'ls *.zip'
|
||||
- name: Upload Firefox Profile Portable Zip
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: i2pbrowser-portable.zip
|
||||
path: ./i2pbrowser-portable.zip
|
||||
|
||||
buildmac:
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: '21'
|
||||
distribution: 'temurin'
|
||||
- uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '1.21'
|
||||
- name : Generate override.properties
|
||||
run: |
|
||||
bash -c 'rm -f override.properties'
|
||||
bash -c 'echo "build.built-by=GitHub Actions" >> override.properties'
|
||||
bash -c 'echo "noExe=true" >> override.properties'
|
||||
- name: install crx3
|
||||
run: go install github.com/mediabuyerbot/go-crx3/crx3@latest
|
||||
- name: install dzip
|
||||
run: go install github.com/delicb/dzip@latest
|
||||
- name: install amo-version
|
||||
run: go install github.com/eyedeekay/amo-version@a4f4119eac453a14d6b6184b656320eb72b5da3c
|
||||
- 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
|
||||
- name: build dmg with Ant
|
||||
run: |
|
||||
ant macos
|
||||
bash -c 'ls *.dmg'
|
||||
- name: Upload Firefox Profile DMG Installer
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: i2pbrowser-1.0.0.dmg
|
||||
path: ./i2pbrowser-1.0.0.dmg
|
||||
- name: build pkg with Ant
|
||||
run: |
|
||||
ant macos-pkg
|
||||
bash -c 'ls *.pkg'
|
||||
- name: Upload Firefox Profile PKG Installer
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: i2pbrowser-1.0.0.pkg
|
||||
path: ./i2pbrowser-1.0.0.pkg
|
78
.github/workflows/release.yml
vendored
Normal file
78
.github/workflows/release.yml
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
name: Release
|
||||
|
||||
#on: [push]
|
||||
|
||||
on:
|
||||
push:
|
||||
# Sequence of patterns matched against refs/tags
|
||||
tags:
|
||||
- '*.*.*' # Release 1.2.3
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
sparse-checkout: |
|
||||
CHANGES.md
|
||||
sparse-checkout-cone-mode: false
|
||||
- name: sleep 15 minutes
|
||||
run: |
|
||||
echo "sleeping 15 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 14 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 13 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 12 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 11 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 10 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 9 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 8 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 7 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 6 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 5 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 4 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 3 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 2 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
echo "sleeping 1 minutes to wait for artifacts"
|
||||
sleep 1m
|
||||
- name: Download artifacts
|
||||
id: download-artifact
|
||||
uses: dawidd6/action-download-artifact@v3
|
||||
with:
|
||||
skip_unpack: true
|
||||
workflow: ant.yml
|
||||
if_no_artifact_found: fail
|
||||
# remove .zip file extension
|
||||
- run: for f in *.zip; do unzip "$f"; rm "$f"; done
|
||||
- run: echo "" | tee -a CHANGES.md
|
||||
- run: echo "## Checksums" | tee -a CHANGES.md
|
||||
- run: echo "" | tee -a CHANGES.md
|
||||
- run: echo '```' | tee -a CHANGES.md
|
||||
- run: sha256sum * | tee -a CHANGES.md
|
||||
- run: echo '```' | tee -a CHANGES.md
|
||||
- run: echo "" | tee -a CHANGES.md
|
||||
- run: echo '```' | tee -a CHANGES.md
|
||||
- run: file * | tee -a CHANGES.md
|
||||
- run: echo '```' | tee -a CHANGES.md
|
||||
- run: echo "" | tee -a CHANGES.md
|
||||
- name: Upload artifacts
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
artifacts: "*"
|
||||
bodyFile: "CHANGES.md"
|
31
CHANGES.html
31
CHANGES.html
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
docs/BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="docs/I2P-PLUGIN.html">
|
||||
docs/I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="docs/I2PBrowser.html">
|
||||
docs/I2PBrowser
|
||||
@ -146,6 +151,23 @@
|
||||
<a id="returnhome" href="/">
|
||||
/
|
||||
</a>
|
||||
<h2>
|
||||
Thu, March 7
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
re-implement Plugin functions with Destop GUI API.
|
||||
</li>
|
||||
<li>
|
||||
Fix several NPE’s
|
||||
</li>
|
||||
<li>
|
||||
Delete redundant code
|
||||
</li>
|
||||
<li>
|
||||
CI/CD improvements, packaging improvements
|
||||
</li>
|
||||
</ul>
|
||||
<h2>
|
||||
Tue, January 17
|
||||
</h2>
|
||||
@ -468,13 +490,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
57
CHANGES.md
57
CHANGES.md
@ -1,3 +1,18 @@
|
||||
Mon, July 8
|
||||
-----------
|
||||
|
||||
- Fix a bug which caused the profile manager to fail to detect Firefox on some systems
|
||||
- Fix a bug which caused the profile manager to use an unwritable directory on some systems
|
||||
- Fix a bug where if user tried to run it from the home directory, the application would make sure that no firefoxes existed in any subdirectory before running
|
||||
|
||||
Thu, March 7
|
||||
------------
|
||||
|
||||
- re-implement Plugin functions with Destop GUI API.
|
||||
- Fix several NPE's
|
||||
- Delete redundant code
|
||||
- CI/CD improvements, packaging improvements
|
||||
|
||||
Tue, January 17
|
||||
---------------
|
||||
|
||||
@ -161,4 +176,44 @@ Saturday, August 6
|
||||
|
||||
- Implemented firefox detection
|
||||
- Implemented directory setup
|
||||
- Implemented processBuilder generator
|
||||
- Implemented processBuilder generator
|
||||
## Checksums
|
||||
|
||||
```
|
||||
dc8797cfae23640e27ed7b32a3e6ccec232d24411d64cd9e5b107f8c5384a70a CHANGES.md
|
||||
9a36e15def2a95077027cd0db5f95b345a87a8edfe5e89ea7f83aaa3c94f5ebb i2p.chromium.base.profile.zip
|
||||
97ae21d621f813fd2d91f5921fe1eee95ec0d01782bf93db7b3689f959a9f3b8 i2p.chromium.usability.profile.zip
|
||||
5cd673bb27827e67796b52f26194b7b1504dddf1630ad9d9084ab6a318c6d20a i2p.firefox.base.profile.zip
|
||||
556fc2df825e64b1463e88ec77a5de46bce61516a475e1136110363d5badabd2 i2p.firefox.usability.profile.zip
|
||||
6d3882ac113116b8f40ce07985e779859a68f43f14278b40f1628ea5362acca5 i2pbrowser-1.0.0-1.x86_64.rpm
|
||||
aa7185799b17fd7893818fe7728f3e3cb6b4c8022e033fc0f33f6be81e7b2c2f i2pbrowser-1.0.0.dmg
|
||||
c307fb6556821258520a3d522cf7fbe2031aa421161fcac3e409f5ce20a1637a i2pbrowser-1.0.0.exe
|
||||
5eae853ff7f8b9a05c4c7111147882a54aabd1cf581d21396878055a54a3efc7 i2pbrowser-1.0.0.msi
|
||||
cda1bb2058048a4303bbc65543a0f340ade1c88881ee60704333e767bae10db6 i2pbrowser-1.0.0.pkg
|
||||
183197aa39e891d5763ef5449957b9d9790bdfaaa06760288526f6283b865d97 i2pbrowser-portable.zip
|
||||
f017951df66f2e3d2d57886085a95bd2463cc8f7d793683960da30b842b9b17b i2pbrowser.tar.gz
|
||||
4538172d9753967485566e52f064dbc06a5123971044d973766de28051d53eb1 i2pbrowser_1.0.0_amd64.deb
|
||||
6b5dd3e4ab1bcb3df4a5a758b5469239453c713bb6266bc5eea8b0d9ec7aa413 i2pfirefox-plugin.jar
|
||||
85ce64a3c03c72421947c777a72d42be6fc568c5317070927463accb347b703f i2pfirefox.jar
|
||||
9856613f8229a773ef54a9e7e2a37a6c788755d96393478afce8db7439404e42 plugin.zip
|
||||
```
|
||||
|
||||
```
|
||||
CHANGES.md: ASCII text
|
||||
i2p.chromium.base.profile.zip: Zip archive data, at least v2.0 to extract, compression method=store
|
||||
i2p.chromium.usability.profile.zip: Zip archive data, at least v2.0 to extract, compression method=store
|
||||
i2p.firefox.base.profile.zip: Zip archive data, at least v2.0 to extract, compression method=store
|
||||
i2p.firefox.usability.profile.zip: Zip archive data, at least v2.0 to extract, compression method=store
|
||||
i2pbrowser-1.0.0-1.x86_64.rpm: RPM v3.0 bin i386/x86_64
|
||||
i2pbrowser-1.0.0.dmg: zlib compressed data
|
||||
i2pbrowser-1.0.0.exe: PE32+ executable (GUI) x86-64, for MS Windows
|
||||
i2pbrowser-1.0.0.msi: Composite Document File V2 Document, Little Endian, Os: Windows, Version 6.2, MSI Installer, Code page: 1252, Title: Installation Database, Subject: i2pbrowser, Author: Unknown, Keywords: Installer, Comments: This installer database contains the logic and data required to install i2pbrowser., Template: x64;1033, Revision Number: {6D1D56D8-CB72-4709-BD0B-0FDBF71C6D32}, Create Time/Date: Sun Mar 10 06:04:32 2024, Last Saved Time/Date: Sun Mar 10 06:04:32 2024, Number of Pages: 200, Number of Words: 10, Name of Creating Application: Windows Installer XML Toolset (3.14.0.8606), Security: 2
|
||||
i2pbrowser-1.0.0.pkg: xar archive compressed TOC: 1244, SHA-1 checksum, contains zlib compressed data
|
||||
i2pbrowser-portable.zip: Zip archive data, at least v2.0 to extract, compression method=deflate
|
||||
i2pbrowser.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 725985280
|
||||
i2pbrowser_1.0.0_amd64.deb: Debian binary package (format 2.0), with control.tar.zs, data compression zst
|
||||
i2pfirefox-plugin.jar: Java archive data (JAR)
|
||||
i2pfirefox.jar: Java archive data (JAR)
|
||||
plugin.zip: Zip archive data, at least v1.0 to extract, compression method=store
|
||||
```
|
||||
|
||||
|
14
LICENSE.html
14
LICENSE.html
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
docs/BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="docs/I2P-PLUGIN.html">
|
||||
docs/I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="docs/I2PBrowser.html">
|
||||
docs/I2PBrowser
|
||||
@ -1035,13 +1040,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
25
README.md
25
README.md
@ -11,6 +11,28 @@ trackers, and jerks using off-the-shelf techniques and exploits. It is fundament
|
||||
to make changes which un-trust your browser vendor, your OS, your package manager or any
|
||||
other system that exists underneath it. **It is just a profile manager.**
|
||||
|
||||
**What is this?**
|
||||
|
||||
This is a browser profile manager which pre-configures a browser on the host system, usually
|
||||
Firefox or Tor Browser, for browsing I2P. When acting as an I2P Plugin, it adds GUI elements to
|
||||
I2P for launching the browser in a highly restricted "Safe" mode(the default) or a more permissive
|
||||
"Usability" mode.
|
||||
|
||||
This package expresses functionality that has existed in many places at many times, sometimes
|
||||
bundled with other software. As it has developed here, the border of where the Easy-Install
|
||||
ends and Firefox Profile Manager begins has become clearer. This repository contains the profile
|
||||
manager and it's buildsystem, the whole profile manager, and nothing but the profile manager.
|
||||
It can be used independently of other software, provided an I2P proxy on the host system somewhere.
|
||||
|
||||
However, in practice, most people probably get it alongside an I2P router, through the **I2P Easy-Install Bundle for Windows**.
|
||||
|
||||
**What version numbers should I pay attention to?**
|
||||
When I decided to port the `.bat` launcher scripts from the Easy-Install bundle to Java, this project
|
||||
was created and started using it's own version numbers. This was the practice up until version 1.5.0,
|
||||
which was the last version to use a different version number than I2P itself. Starting in April 2024,
|
||||
`i2p.plugins.firefox` will follow along with the Java I2P major and minor version numbers. Incremental
|
||||
changes may become differing point releases.
|
||||
|
||||
**All packages require a running I2P router.**
|
||||
|
||||
**[Windows users should see the Easy-Install Bundle](https://i2pgit.org/i2p-hackers/i2p.firefox)**
|
||||
@ -47,6 +69,7 @@ directory for Firefox, and the `src/i2p.chromium.*.profile/extensions/*.js/*` di
|
||||
|
||||
For platform specific instructions, see
|
||||
|
||||
- [I2P-PLUGIN.md](docs/I2P-PLUGIN.md)/[I2P-PLUGIN.html](docs/I2P-PLUGIN.html)
|
||||
- [LINUX.md](docs/LINUX.md)/[LINUX.html](docs/LINUX.html)
|
||||
- [OSX.md](docs/OSX.md)/[OSX.html](docs/OSX.html)
|
||||
- [WINDOWS.md](docs/WINDOWS.md)/[WINDOWS.html](docs/WINDOWS.html)
|
||||
@ -55,7 +78,7 @@ For platform specific instructions, see
|
||||
|
||||
```sh
|
||||
mkdir ~/tmp-i2pfirefox && cd ~/tmp-i2pfirefox
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.1.0/i2pfirefox.zip
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.3.0/i2pfirefox.zip
|
||||
unzip i2pfirefox.zip
|
||||
./i2pfirefox.cmd
|
||||
|
||||
|
43
VERSION.html
43
VERSION.html
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
docs/BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="docs/I2P-PLUGIN.html">
|
||||
docs/I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="docs/I2PBrowser.html">
|
||||
docs/I2PBrowser
|
||||
@ -153,28 +158,23 @@
|
||||
Firefox
|
||||
</h2>
|
||||
<pre><code class="language-md">i2p-in-private-browsing
|
||||
<<<<<<< HEAD
|
||||
1.44
|
||||
https://addons.mozilla.org/firefox/downloads/file/4020669/i2p_in_private_browsing-1.44.xpi
|
||||
=======
|
||||
1.48
|
||||
https://addons.mozilla.org/firefox/downloads/file/4123613/i2p_in_private_browsing-1.48.xpi
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
noscript
|
||||
11.4.24
|
||||
https://addons.mozilla.org/firefox/downloads/file/4131645/noscript-11.4.24.xpi
|
||||
11.4.29
|
||||
https://addons.mozilla.org/firefox/downloads/file/4206186/noscript-11.4.29.xpi
|
||||
localcdn-fork-of-decentraleyes
|
||||
2.6.52
|
||||
https://addons.mozilla.org/firefox/downloads/file/4129532/localcdn_fork_of_decentraleyes-2.6.52.xpi
|
||||
2.6.64
|
||||
https://addons.mozilla.org/firefox/downloads/file/4243456/localcdn_fork_of_decentraleyes-2.6.64.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.13
|
||||
https://addons.mozilla.org/firefox/downloads/file/4131644/javascript_restrictor-0.13.xpi
|
||||
0.17
|
||||
https://addons.mozilla.org/firefox/downloads/file/4190089/javascript_restrictor-0.17.xpi
|
||||
ublock-origin
|
||||
1.50.0
|
||||
https://addons.mozilla.org/firefox/downloads/file/4121906/ublock_origin-1.50.0.xpi
|
||||
1.56.0
|
||||
https://addons.mozilla.org/firefox/downloads/file/4237670/ublock_origin-1.56.0.xpi
|
||||
</code></pre>
|
||||
<h2>
|
||||
Chromium
|
||||
@ -186,13 +186,13 @@ NoScript
|
||||
11.4.18
|
||||
https://clients2.google.com/service/update2/crx
|
||||
LocalCDN
|
||||
2.6.51
|
||||
2.6.65
|
||||
https://clients2.google.com/service/update2/crx
|
||||
uBlock Origin
|
||||
1.50.0
|
||||
1.56.0
|
||||
https://clients2.google.com/service/update2/crx
|
||||
JShelter
|
||||
0.13
|
||||
__MSG_extensionName__
|
||||
0.17
|
||||
https://clients2.google.com/service/update2/crx
|
||||
</code></pre>
|
||||
<div id="sourcecode">
|
||||
@ -203,13 +203,8 @@ https://clients2.google.com/service/update2/crx
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
24
VERSION.md
24
VERSION.md
@ -9,20 +9,20 @@ i2p-in-private-browsing
|
||||
1.48
|
||||
https://addons.mozilla.org/firefox/downloads/file/4123613/i2p_in_private_browsing-1.48.xpi
|
||||
noscript
|
||||
11.4.28
|
||||
https://addons.mozilla.org/firefox/downloads/file/4178438/noscript-11.4.28.xpi
|
||||
11.4.29
|
||||
https://addons.mozilla.org/firefox/downloads/file/4206186/noscript-11.4.29.xpi
|
||||
localcdn-fork-of-decentraleyes
|
||||
2.6.59
|
||||
https://addons.mozilla.org/firefox/downloads/file/4197044/localcdn_fork_of_decentraleyes-2.6.59.xpi
|
||||
2.6.69
|
||||
https://addons.mozilla.org/firefox/downloads/file/4303757/localcdn_fork_of_decentraleyes-2.6.69.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.17
|
||||
https://addons.mozilla.org/firefox/downloads/file/4190089/javascript_restrictor-0.17.xpi
|
||||
0.18.1
|
||||
https://addons.mozilla.org/firefox/downloads/file/4310951/javascript_restrictor-0.18.1.xpi
|
||||
ublock-origin
|
||||
1.54.0
|
||||
https://addons.mozilla.org/firefox/downloads/file/4198829/ublock_origin-1.54.0.xpi
|
||||
1.58.0
|
||||
https://addons.mozilla.org/firefox/downloads/file/4290466/ublock_origin-1.58.0.xpi
|
||||
```
|
||||
|
||||
## Chromium
|
||||
@ -32,15 +32,15 @@ __MSG_extensionName__
|
||||
1.29
|
||||
https://clients2.google.com/service/update2/crx
|
||||
NoScript
|
||||
11.4.18
|
||||
11.4.30
|
||||
https://clients2.google.com/service/update2/crx
|
||||
LocalCDN
|
||||
2.6.59
|
||||
2.6.67
|
||||
https://clients2.google.com/service/update2/crx
|
||||
uBlock Origin
|
||||
1.54.0
|
||||
1.58.0
|
||||
https://clients2.google.com/service/update2/crx
|
||||
__MSG_extensionName__
|
||||
0.17
|
||||
0.18.1
|
||||
https://clients2.google.com/service/update2/crx
|
||||
```
|
||||
|
299
build.xml
299
build.xml
@ -175,6 +175,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
|
||||
|
||||
<target name="jar" depends="versionMd,i2pFirefoxBaseProfileZip,i2pFirefoxUsabilityProfileZip,i2pChromiumBaseProfileZip,i2pChromiumUsabilityProfileZip">
|
||||
<ant dir="src" target="jar" />
|
||||
<ant dir="src" target="pluginjar" />
|
||||
</target>
|
||||
|
||||
<target name="i2pFirefoxBaseProfileZip">
|
||||
@ -327,7 +328,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
|
||||
|
||||
<target name="buildNum">
|
||||
<buildnumber file="scripts/build.number" />
|
||||
<property name="release.number" value="1.1.0" />
|
||||
<property name="release.number" value="1.4.991" />
|
||||
<exec executable="echo" osfamily="unix">
|
||||
<arg value="${release.number}-${build.number}" />
|
||||
</exec>
|
||||
@ -339,6 +340,44 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="pluginzip" depends="all, buildNum">
|
||||
<delete>
|
||||
<!-- in installer but not update -->
|
||||
<fileset dir="plugin/" includes="i2ptunnel.config i2pfirefox.config eepsite/docroot/index.html eepsite/docroot/robots.txt" />
|
||||
</delete>
|
||||
<delete dir="plugin/eepsite/docroot/torrents/" />
|
||||
<!-- get version number -->
|
||||
|
||||
|
||||
<!-- make the update xpi2p -->
|
||||
<!-- this contains everything except i2ptunnel.config -->
|
||||
<copy file="LICENSE.md" todir="plugin/" overwrite="true" />
|
||||
<copy file="README.md" todir="plugin/" overwrite="true" />
|
||||
<copy file="CHANGES.md" todir="plugin/" overwrite="true" />
|
||||
<copy file="scripts/plugin.config" todir="plugin/" overwrite="true" />
|
||||
<mkdir dir="plugin/lib/" />
|
||||
<copy file="src/build/i2pfirefox-plugin.jar" todir="plugin/lib/" overwrite="true" />
|
||||
<exec executable="echo" osfamily="unix" failonerror="true" output="plugin/plugin.config" append="true">
|
||||
<arg value="update-only=true" />
|
||||
</exec>
|
||||
<exec executable="echo" osfamily="unix" failonerror="true" output="plugin/plugin.config" append="true">
|
||||
<arg value="version=${release.number}-${build.number}" />
|
||||
</exec>
|
||||
|
||||
<!-- make the install xpi2p -->
|
||||
<copy file="scripts/plugin.config" todir="plugin/" overwrite="true" />
|
||||
<!-- Files in installer but not update. Be sure to Add to delete fileset above and clean target below -->
|
||||
<copy file="scripts/i2ptunnel.config" todir="plugin/" overwrite="true" />
|
||||
<exec executable="echo" osfamily="unix" failonerror="true" output="plugin/plugin.config" append="true">
|
||||
<arg value="version=${release.number}-${build.number}" />
|
||||
</exec>
|
||||
<exec executable="zip">
|
||||
<arg value="-r"/>
|
||||
<arg value="plugin.zip"/>
|
||||
<arg value="plugin"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="plugin" depends="all, buildNum">
|
||||
<delete>
|
||||
<!-- in installer but not update -->
|
||||
@ -355,7 +394,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
|
||||
<copy file="CHANGES.md" todir="plugin/" overwrite="true" />
|
||||
<copy file="scripts/plugin.config" todir="plugin/" overwrite="true" />
|
||||
<mkdir dir="plugin/lib/" />
|
||||
<copy file="src/build/i2pfirefox.jar" todir="plugin/lib/" overwrite="true" />
|
||||
<copy file="src/build/i2pfirefox-plugin.jar" todir="plugin/lib/" overwrite="true" />
|
||||
<exec executable="echo" osfamily="unix" failonerror="true" output="plugin/plugin.config" append="true">
|
||||
<arg value="update-only=true" />
|
||||
</exec>
|
||||
@ -368,12 +407,6 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
|
||||
<equals arg1="${release.password.su3}" arg2=""/>
|
||||
</condition>
|
||||
</fail>
|
||||
<!-- this will fail if no su3 keys exist, as it needs the password twice -->
|
||||
<exec executable="scripts/makeplugin.sh" inputstring="${release.password.su3}" failonerror="true" >
|
||||
<arg value="plugin" />
|
||||
</exec>
|
||||
<move file="i2pfirefox.xpi2p" tofile="i2pfirefox-update.xpi2p" overwrite="true" />
|
||||
<move file="i2pfirefox.su3" tofile="i2pfirefox-update.su3" overwrite="true" />
|
||||
|
||||
<!-- make the install xpi2p -->
|
||||
<copy file="scripts/plugin.config" todir="plugin/" overwrite="true" />
|
||||
@ -382,14 +415,13 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
|
||||
<exec executable="echo" osfamily="unix" failonerror="true" output="plugin/plugin.config" append="true">
|
||||
<arg value="version=${release.number}-${build.number}" />
|
||||
</exec>
|
||||
|
||||
<exec executable="scripts/makeplugin.sh" inputstring="${release.password.su3}" failonerror="true" >
|
||||
<arg value="plugin" />
|
||||
</exec>
|
||||
<mkdir dir="i2p.plugins.firefox" />
|
||||
<copy file="i2pfirefox.su3" todir="i2p.plugins.firefox" overwrite="true" />
|
||||
<copy file="i2pfirefox-update.su3" todir="i2p.plugins.firefox" overwrite="true" />
|
||||
<copy file="i2pfirefox.xpi2p" todir="i2p.plugins.firefox" overwrite="true" />
|
||||
<copy file="i2pfirefox-update.xpi2p" todir="i2p.plugins.firefox" overwrite="true" />
|
||||
</target>
|
||||
<target name="torrent">
|
||||
<delete file="i2p.plugins.firefox.torrent" failonerror="false" />
|
||||
@ -427,7 +459,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
|
||||
<exec executable="clang-format">
|
||||
<arg value="-i"/>
|
||||
<arg value="src/java/net/i2p/i2pfirefox/I2PBrowser.java"/>
|
||||
<arg value="src/java/net/i2p/i2pfirefox/I2PBrowserPlugin.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"/>
|
||||
@ -513,17 +545,248 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
|
||||
</exec>
|
||||
</target>
|
||||
<target name="debian" depends="jar">
|
||||
<exec executable="bash" failonerror="true">
|
||||
<arg value="--verbose"/>
|
||||
<arg value="-c"/>
|
||||
<arg value="./debian.sh"/>
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<arg value="--type"/> <arg value="deb"/>
|
||||
<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-shortcut"/>
|
||||
<arg value="--license-file"/> <arg value="LICENSE.md"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="1.0.0"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="debian-release" depends="jar">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<arg value="--type"/> <arg value="deb"/>
|
||||
<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-shortcut"/>
|
||||
<arg value="--license-file"/> <arg value="LICENSE.md"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="${release.number}"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="fedora" depends="jar">
|
||||
<exec executable="bash" failonerror="true">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<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-shortcut"/>
|
||||
<arg value="--license-file"/> <arg value="LICENSE.md"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="1.0.0"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="fedora-release" depends="jar">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<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-shortcut"/>
|
||||
<arg value="--license-file"/> <arg value="LICENSE.md"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="${release.number}"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="windows" depends="jar">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<arg value="--verbose"/>
|
||||
<arg value="-c"/>
|
||||
<arg value="./fedora.sh"/>
|
||||
<arg value="--type"/> <arg value="exe"/>
|
||||
<arg value="--win-dir-chooser"/>
|
||||
<arg value="--win-help-url"/> <arg value="https://geti2p.net"/>
|
||||
<arg value="--win-menu"/>
|
||||
<arg value="--win-menu-group"/> <arg value="I2P Browser Configurer"/>
|
||||
<arg value="--win-shortcut"/>
|
||||
<arg value="--win-shortcut-prompt"/>
|
||||
<arg value="--win-per-user-install"/>
|
||||
<arg value="--license-file"/> <arg value="LICENSE.md"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="1.0.0"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="windows-release" depends="jar">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<arg value="--verbose"/>
|
||||
<arg value="--type"/> <arg value="exe"/>
|
||||
<arg value="--win-dir-chooser"/>
|
||||
<arg value="--win-help-url"/> <arg value="https://geti2p.net"/>
|
||||
<arg value="--win-menu"/>
|
||||
<arg value="--win-menu-group"/> <arg value="I2P Browser Configurer"/>
|
||||
<arg value="--win-shortcut"/>
|
||||
<arg value="--win-shortcut-prompt"/>
|
||||
<arg value="--win-per-user-install"/>
|
||||
<arg value="--license-file"/> <arg value="LICENSE.md"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="${release.number}"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="windows-msi" depends="jar">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<arg value="--verbose"/>
|
||||
<arg value="--type"/> <arg value="msi"/>
|
||||
<arg value="--win-dir-chooser"/>
|
||||
<arg value="--win-help-url"/> <arg value="https://geti2p.net"/>
|
||||
<arg value="--win-menu"/>
|
||||
<arg value="--win-menu-group"/> <arg value="I2P Browser Configurer"/>
|
||||
<arg value="--win-shortcut"/>
|
||||
<arg value="--win-shortcut-prompt"/>
|
||||
<arg value="--win-per-user-install"/>
|
||||
<arg value="--license-file"/> <arg value="LICENSE.md"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="1.0.0"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="windows-msi-release" depends="jar">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<arg value="--verbose"/>
|
||||
<arg value="--type"/> <arg value="msi"/>
|
||||
<arg value="--win-dir-chooser"/>
|
||||
<arg value="--win-help-url"/> <arg value="https://geti2p.net"/>
|
||||
<arg value="--win-menu"/>
|
||||
<arg value="--win-menu-group"/> <arg value="I2P Browser Configurer"/>
|
||||
<arg value="--win-shortcut"/>
|
||||
<arg value="--win-shortcut-prompt"/>
|
||||
<arg value="--win-per-user-install"/>
|
||||
<arg value="--license-file"/> <arg value="LICENSE.md"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="${release.number}"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="windows-portable" depends="jar">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<arg value="--verbose"/>
|
||||
<arg value="--type"/> <arg value="app-image"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser-portable"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="1.0.0"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
<copy file="LICENSE.md" todir="i2pbrowser-portable" overwrite="true"/>
|
||||
<delete file="i2pbrowser-portable.zip"/>
|
||||
<exec executable="powershell" failonerror="false">
|
||||
<arg value="Compress-Archive"/>
|
||||
<arg value="-LiteralPath"/> <arg value="i2pbrowser-portable"/>
|
||||
<arg value="-DestinationPath"/> <arg value="i2pbrowser-portable.zip"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="windows-portable-release" depends="jar">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<arg value="--verbose"/>
|
||||
<arg value="--type"/> <arg value="app-image"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser-portable"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="${release.number}"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
<copy file="LICENSE.md" todir="i2pbrowser-portable" overwrite="true"/>
|
||||
<delete file="i2pbrowser-portable.zip"/>
|
||||
<exec executable="powershell" failonerror="false">
|
||||
<arg value="Compress-Archive"/>
|
||||
<arg value="-LiteralPath"/> <arg value="i2pbrowser-portable"/>
|
||||
<arg value="-DestinationPath"/> <arg value="i2pbrowser-portable-${release.number}.zip"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="macos" depends="jar">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<arg value="--verbose"/>
|
||||
<arg value="--type"/> <arg value="dmg"/>
|
||||
<arg value="--mac-package-name"/> <arg value="I2P Browser"/>
|
||||
<arg value="--mac-app-category"/> <arg value="Reference"/>
|
||||
<arg value="--license-file"/> <arg value="LICENSE.md"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="1.0.0"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="macos-release" depends="jar">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<arg value="--verbose"/>
|
||||
<arg value="--type"/> <arg value="dmg"/>
|
||||
<arg value="--mac-package-name"/> <arg value="I2P Browser"/>
|
||||
<arg value="--mac-app-category"/> <arg value="Reference"/>
|
||||
<arg value="--license-file"/> <arg value="LICENSE.md"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="${release.number}"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="macos-pkg" depends="jar">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<arg value="--verbose"/>
|
||||
<arg value="--type"/> <arg value="pkg"/>
|
||||
<arg value="--mac-package-name"/> <arg value="I2P Browser"/>
|
||||
<arg value="--mac-app-category"/> <arg value="Reference"/>
|
||||
<arg value="--license-file"/> <arg value="LICENSE.md"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="1.0.0"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="macos-pkg-release" depends="jar">
|
||||
<exec executable="jpackage" failonerror="true">
|
||||
<arg value="--verbose"/>
|
||||
<arg value="--type"/> <arg value="pkg"/>
|
||||
<arg value="--mac-package-name"/> <arg value="I2P Browser"/>
|
||||
<arg value="--mac-app-category"/> <arg value="Reference"/>
|
||||
<arg value="--license-file"/> <arg value="LICENSE.md"/>
|
||||
<arg value="--name"/> <arg value="i2pbrowser"/>
|
||||
<arg value="--icon"/> <arg value="src/icon.png"/>
|
||||
<arg value="--app-version"/> <arg value="${release.number}"/>
|
||||
<arg value="--input"/> <arg value="src/build"/>
|
||||
<arg value="--main-jar"/> <arg value="i2pfirefox.jar"/>
|
||||
<arg value="--main-class"/> <arg value="net.i2p.i2pfirefox.I2PBrowser"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#! /usr/bin/env sh
|
||||
export GITHUB_USER=eyedeekay
|
||||
export GITHUB_REPO=i2p.plugins.firefox
|
||||
export GITHUB_NAME="Updates extensions, last version with old plugin style"
|
||||
export GITHUB_NAME="Updates extensions, plugin support temporarily removed(Stay on the old version)"
|
||||
export GITHUB_DESCRIPTION=$(cat CHANGES.md VERSION.md)
|
||||
export GITHUB_TAG=1.1.0
|
||||
export GITHUB_TAG=$(git describe --tags --abbrev=0)
|
17
debian.sh
17
debian.sh
@ -1,17 +0,0 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
. ./config.sh
|
||||
jpackage --verbose \
|
||||
--type deb \
|
||||
--linux-deb-maintainer hankhill19580@gmail.com \
|
||||
--linux-menu-group "Network;WebBrowser;P2P" \
|
||||
--linux-app-category "Network" \
|
||||
--linux-package-deps "firefox|chromium|brave|firefox-esr|librewolf|icecat" \
|
||||
--linux-shortcut \
|
||||
--license-file LICENSE.md \
|
||||
--name i2pbrowser \
|
||||
--icon src/icon.png \
|
||||
--app-version "$GITHUB_TAG" \
|
||||
--input src/build \
|
||||
--main-jar i2pfirefox.jar \
|
||||
--main-class net.i2p.i2pfirefox.I2PBrowser
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -152,6 +157,42 @@
|
||||
<h2>
|
||||
Build Dependencies
|
||||
</h2>
|
||||
<p>
|
||||
<strong>
|
||||
SHORTCUT:
|
||||
</strong>
|
||||
All the build artifacts can be produced by the description in the
|
||||
<code>
|
||||
.yaml
|
||||
</code>
|
||||
files in
|
||||
<code>
|
||||
.github/workflows
|
||||
</code>
|
||||
.
|
||||
These can be run on Github’s infrastructure, or on a local PC using
|
||||
<a href="https://github.com/nektos/act">
|
||||
https://github.com/nektos/act
|
||||
</a>
|
||||
.
|
||||
Windows targets will require a Windows PC!
|
||||
Doing things this way deals with all the dependency issues that Windows doesn’t really give you a good way to deal with automatically.
|
||||
It also guarantees that the same base container and environment gets used for every build no matter what machine it runs on.
|
||||
I highly recommend you use either Github CI or
|
||||
<code>
|
||||
nektos/act
|
||||
</code>
|
||||
for dev builds of this software, as it
|
||||
<strong>
|
||||
automates literally every one of the steps
|
||||
</strong>
|
||||
.
|
||||
CI-based builds follow the
|
||||
<code>
|
||||
WSL
|
||||
</code>
|
||||
version of the instructions.
|
||||
</p>
|
||||
<p>
|
||||
You will need
|
||||
<code>
|
||||
@ -542,13 +583,8 @@ if (i2pIsRunning()) {
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -2,6 +2,14 @@
|
||||
|
||||
## Build Dependencies
|
||||
|
||||
**SHORTCUT:** All the build artifacts can be produced by the description in the `.yaml` files in `.github/workflows`.
|
||||
These can be run on Github's infrastructure, or on a local PC using https://github.com/nektos/act.
|
||||
Windows targets will require a Windows PC!
|
||||
Doing things this way deals with all the dependency issues that Windows doesn't really give you a good way to deal with automatically.
|
||||
It also guarantees that the same base container and environment gets used for every build no matter what machine it runs on.
|
||||
I highly recommend you use either Github CI or `nektos/act` for dev builds of this software, as it **automates literally every one of the steps**.
|
||||
CI-based builds follow the `WSL` version of the instructions.
|
||||
|
||||
You will need `ant` and java `java` and for building the jar. You will need
|
||||
`jpackage` for many of the potential build targets. I've been using Java 18
|
||||
on Debian mostly, on Debian and Ubuntu, install the dependencies with:
|
||||
|
1106
docs/I2P-PLUGIN.html
Normal file
1106
docs/I2P-PLUGIN.html
Normal file
File diff suppressed because it is too large
Load Diff
23
docs/I2P-PLUGIN.md
Normal file
23
docs/I2P-PLUGIN.md
Normal file
@ -0,0 +1,23 @@
|
||||
### I2P Plugin Support
|
||||
|
||||
Since version `1.5.0`, this package has had basic plugin support in Java I2P.
|
||||
This means it can be integrated with your I2P installation or portable package, with
|
||||
the benefit of reduced size requirements, automatic updates, and integration with the I2P UI.
|
||||
Installation in this way is **platform-independent**, the same package is used for Linux, Windows, and OSX.
|
||||
In this type of installation, the profile manager install is entirely managed by I2P.
|
||||
Uninstalling I2P will also uninstall the profile manager.
|
||||
|
||||
#### Downloading the Plugin
|
||||
|
||||
Right now, the best way to download the plugin is from the Github releases page.
|
||||
First, download the `i2pfirefox.su3` file from [the latest release](https://github.com/eyedeekay/i2p.plugins.firefox/releases).
|
||||
Versions ending in `0` will always have a plugin release, starting with `1.5.0`.
|
||||
Dev builds will not have a reliable plugin release.
|
||||
|
||||
#### Install the plugin "From File"
|
||||
|
||||
Once you have downloaded the `i2pfirefox.su3` file, open [`http://127.0.0.1:7657/configplugins`](http://127.0.0.1:7657/configplugins) and scroll to the bottom of the page.
|
||||
Under the heading **Installation from File**, click the "Browse" button.
|
||||
In the window that appears, select the `i2pfirefox.su3` file you just downloaded.
|
||||
Finally, click the "Install plugin from File" button.
|
||||
The plugin will install and start shortly.
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -1191,13 +1196,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -1041,13 +1046,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -375,13 +380,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -348,13 +353,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -266,13 +271,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -960,13 +965,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -1132,13 +1137,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -473,13 +478,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -480,13 +485,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -270,13 +275,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -669,13 +674,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -166,11 +171,7 @@
|
||||
</code>
|
||||
</h4>
|
||||
<pre><code class="language-sh">mkdir ~/tmp-i2pbrowser && cd ~/tmp-i2pbrowser
|
||||
<<<<<<< HEAD
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.0.9/i2pbrowser.tar.gz
|
||||
=======
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.1.0/i2pbrowser.tar.gz
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.3.0/i2pbrowser.tar.gz
|
||||
tar xvzf i2pbrowser.tar.gz && cd i2pbrowser
|
||||
## THIS STEP IS OPTIONAL but it will force the system to use Tor Browser from within the i2pbrowser directory.
|
||||
# This probably offers better security than vanilla Firefox.
|
||||
@ -260,13 +261,8 @@ tar xvzf i2pbrowser.tar.gz && cd i2pbrowser
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -7,7 +7,7 @@ Linux. These packages are for the **`amd64`** architecture.
|
||||
|
||||
```sh
|
||||
mkdir ~/tmp-i2pbrowser && cd ~/tmp-i2pbrowser
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.1.0/i2pbrowser.tar.gz
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.3.0/i2pbrowser.tar.gz
|
||||
tar xvzf i2pbrowser.tar.gz && cd i2pbrowser
|
||||
## THIS STEP IS OPTIONAL but it will force the system to use Tor Browser from within the i2pbrowser directory.
|
||||
# This probably offers better security than vanilla Firefox.
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -159,11 +164,7 @@
|
||||
file with any Java greater than Java 8.
|
||||
</p>
|
||||
<pre><code class="language-sh">mkdir ~/tmp-i2pfirefox && cd ~/tmp-i2pfirefox
|
||||
<<<<<<< HEAD
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.0.9/i2pfirefox.zip
|
||||
=======
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.1.0/i2pfirefox.zip
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.3.0/i2pfirefox.zip
|
||||
unzip i2pfirefox.zip
|
||||
./cmd/i2pfirefox.cmd
|
||||
|
||||
@ -209,13 +210,8 @@ export JAVA_HOME=`/usr/libexec/java_home -v 17`
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -7,7 +7,7 @@ packages. You can use the `.jar` file with any Java greater than Java 8.
|
||||
|
||||
```sh
|
||||
mkdir ~/tmp-i2pfirefox && cd ~/tmp-i2pfirefox
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.1.0/i2pfirefox.zip
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.3.0/i2pfirefox.zip
|
||||
unzip i2pfirefox.zip
|
||||
./cmd/i2pfirefox.cmd
|
||||
|
||||
|
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2P-PLUGIN.html">
|
||||
I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="I2PBrowser.html">
|
||||
I2PBrowser
|
||||
@ -163,7 +168,7 @@
|
||||
</h4>
|
||||
<p>
|
||||
<strong>
|
||||
(Not Recommended! This functionality is already included in the Easy-Install Bundle for Windows)
|
||||
(Recommended for advanced users ONLY. Most people should be using Easy-Install Bundle for Windows)
|
||||
</strong>
|
||||
</p>
|
||||
<ol>
|
||||
@ -278,13 +283,8 @@
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -7,7 +7,7 @@ an unbundled I2P router with an external JVM.
|
||||
|
||||
#### Windows Jpackage: `.zip`
|
||||
|
||||
**(Not Recommended! This functionality is already included in the Easy-Install Bundle for Windows)**
|
||||
**(Recommended for advanced users ONLY. Most people should be using Easy-Install Bundle for Windows)**
|
||||
|
||||
1. Start your I2P Router
|
||||
2. Download the latest release `.zip` from [Github](https://github.com/eyedeekay/i2p.plugins.firefox/releases) and verify it's hash.
|
||||
|
Binary file not shown.
71
index.html
71
index.html
@ -3,8 +3,8 @@
|
||||
<title>
|
||||
i2p.plugins.fire...
|
||||
</title>
|
||||
<meta name="author" content="unknown" />
|
||||
<meta name="description" content="" />
|
||||
<meta name="author" content="eyedeekay" />
|
||||
<meta name="description" content="i2p.plugins.firefox" />
|
||||
<meta name="keywords" content="main" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
@ -55,6 +55,11 @@
|
||||
docs/BUILD
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="docs/I2P-PLUGIN.html">
|
||||
docs/I2P-PLUGIN
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="docs/I2PBrowser.html">
|
||||
docs/I2PBrowser
|
||||
@ -172,6 +177,48 @@
|
||||
It is just a profile manager.
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
What is this?
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
This is a browser profile manager which pre-configures a browser on the host system, usually
|
||||
Firefox or Tor Browser, for browsing I2P. When acting as an I2P Plugin, it adds GUI elements to
|
||||
I2P for launching the browser in a highly restricted “Safe” mode(the default) or a more permissive
|
||||
“Usability” mode.
|
||||
</p>
|
||||
<p>
|
||||
This package expresses functionality that has existed in many places at many times, sometimes
|
||||
bundled with other software. As it has developed here, the border of where the Easy-Install
|
||||
ends and Firefox Profile Manager begins has become clearer. This repository contains the profile
|
||||
manager and it’s buildsystem, the whole profile manager, and nothing but the profile manager.
|
||||
It can be used independently of other software, provided an I2P proxy on the host system somewhere.
|
||||
</p>
|
||||
<p>
|
||||
However, in practice, most people probably get it alongside an I2P router, through the
|
||||
<strong>
|
||||
I2P Easy-Install Bundle for Windows
|
||||
</strong>
|
||||
.
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
What version numbers should I pay attention to?
|
||||
</strong>
|
||||
When I decided to port the
|
||||
<code>
|
||||
.bat
|
||||
</code>
|
||||
launcher scripts from the Easy-Install bundle to Java, this project
|
||||
was created and started using it’s own version numbers. This was the practice up until version 1.5.0,
|
||||
which was the last version to use a different version number than I2P itself. Starting in April 2024,
|
||||
<code>
|
||||
i2p.plugins.firefox
|
||||
</code>
|
||||
will follow along with the Java I2P major and minor version numbers. Incremental
|
||||
changes may become differing point releases.
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
All packages require a running I2P router.
|
||||
@ -269,6 +316,15 @@
|
||||
For platform specific instructions, see
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="docs/I2P-PLUGIN.md">
|
||||
I2P-PLUGIN.md
|
||||
</a>
|
||||
/
|
||||
<a href="docs/I2P-PLUGIN.html">
|
||||
I2P-PLUGIN.html
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="docs/LINUX.md">
|
||||
LINUX.md
|
||||
@ -305,11 +361,7 @@
|
||||
and a non-bundled Java
|
||||
</h4>
|
||||
<pre><code class="language-sh">mkdir ~/tmp-i2pfirefox && cd ~/tmp-i2pfirefox
|
||||
<<<<<<< HEAD
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.0.9/i2pfirefox.zip
|
||||
=======
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.1.0/i2pfirefox.zip
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.3.0/i2pfirefox.zip
|
||||
unzip i2pfirefox.zip
|
||||
./i2pfirefox.cmd
|
||||
|
||||
@ -325,13 +377,8 @@ unzip i2pfirefox.zip
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<<<<<<< HEAD
|
||||
<a href="https://i2pgit.org/idk/i2p.plugins.firefox">
|
||||
Source Repository: (https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||
=======
|
||||
<a href="https://github.com/eyedeekay/i2p.plugins.firefox">
|
||||
Source Repository: (https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||
>>>>>>> 7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
30
plugin-upload.sh
Executable file
30
plugin-upload.sh
Executable file
@ -0,0 +1,30 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
. ./config.sh
|
||||
NUMLINE=`grep release.number build.xml | head -n 1`
|
||||
sed -i "s|${NUMLINE}| <property name=\"release.number\" value=\"$GITHUB_TAG\" />|g" build.xml
|
||||
ant distclean versionMd jar plugin
|
||||
|
||||
github-release release --user "${GITHUB_USER}" \
|
||||
--repo "${GITHUB_REPO}" \
|
||||
--name "${GITHUB_NAME}" \
|
||||
--description "${GITHUB_DESCRIPTION}" \
|
||||
--tag "${GITHUB_TAG}"; true
|
||||
sleep 2s
|
||||
susum=$(sha256sum i2pfirefox.su3)
|
||||
github-release upload --user "${GITHUB_USER}" \
|
||||
--replace \
|
||||
--repo "${GITHUB_REPO}" \
|
||||
--tag "${GITHUB_TAG}" \
|
||||
--label "I2P Browser launcher as an I2P Console Plugin. ${susum}" \
|
||||
--name "i2pfirefox.su3" \
|
||||
--file "i2pfirefox.su3"
|
||||
#susum=$(sha256sum i2pfirefox-update.su3)
|
||||
#github-release upload --user "${GITHUB_USER}" \
|
||||
# --replace \
|
||||
# --repo "${GITHUB_REPO}" \
|
||||
# --tag "${GITHUB_TAG}" \
|
||||
# --label "I2P Browser launcher as an I2P Console Plugin, update-only. ${susum}" \
|
||||
# --name "i2pfirefox-update.su3" \
|
||||
# --file "i2pfirefox-update.su3"
|
||||
echo "Uploaded su3 package"
|
@ -1,6 +1,5 @@
|
||||
clientApp.0.main=net.i2p.i2pfirefox.I2PBrowserPlugin
|
||||
clientApp.0.name=I2PBrowserPlugin
|
||||
clientApp.0.main=net.i2p.i2pfirefox.plugin.I2PBrowserPlugin
|
||||
clientApp.0.name=i2pfirefox
|
||||
clientApp.0.delay=0
|
||||
clientApp.0.startOnLoad=true
|
||||
# we also use i2p.jar and i2ptunnel.jar, they are in the standard router classpath
|
||||
clientApp.0.classpath=$PLUGIN/lib/i2pfirefox.jar,$I2P/lib/i2psnark.jar
|
||||
clientApp.0.classpath=$PLUGIN/lib/i2pfirefox-plugin.jar
|
@ -12,4 +12,4 @@ READMELINE=`grep 'i2p.plugins.firefox/releases/download' docs/OSX.md | grep i2pf
|
||||
sed -i "s|${READMELINE}|wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/${GITHUB_TAG}/i2pfirefox.zip|g" docs/OSX.md
|
||||
sed -i "s|${NUMLINE}| <property name=\"release.number\" value=\"$GITHUB_TAG\" />|g" build.xml
|
||||
edgar && git push --all
|
||||
ant distclean versionMd jar plugin torrent freeZip jpackage debian fedora tarball
|
||||
ant distclean versionMd jar plugin torrent freeZip jpackage debian tarball
|
||||
|
@ -1,7 +1,7 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
. ./config.sh
|
||||
./preprelease.sh
|
||||
#./preprelease.sh
|
||||
github-release release --user "${GITHUB_USER}" \
|
||||
--repo "${GITHUB_REPO}" \
|
||||
--name "${GITHUB_NAME}" \
|
||||
|
@ -1,6 +1,3 @@
|
||||
#Build Number for ANT. Do not edit!
|
||||
#Mon Dec 11 13:13:24 EST 2023
|
||||
=\=\=\=\=\=\=
|
||||
build.number=555
|
||||
>>>>>>>=7cdf84bb265e7fda5b98d2386dab1855de8383eb
|
||||
<<<<<<<=HEAD
|
||||
#Mon Jul 08 17:35:59 EDT 2024
|
||||
build.number=726
|
||||
|
@ -46,6 +46,26 @@
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<target name="pluginjar" depends="jar">
|
||||
<mkdir dir="./build" />
|
||||
<mkdir dir="./build/obj" />
|
||||
<javac
|
||||
srcdir="./plugin"
|
||||
debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
||||
destdir="./build/obj"
|
||||
includeAntRuntime="false"
|
||||
classpath="${i2plib}/i2p.jar:${i2plib}/i2ptunnel.jar:${i2plib}/i2psnark.jar:${i2plib}/mstreaming.jar:${i2plib}/systray.jar:${i2plib}/desktopgui.jar:${jettylib}/org.mortbay.jetty.jar:${jettylib}/jetty-util.jar:${jettylib}/jetty-xml.jar:./build/i2pfirefox.jar" >
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
</javac>
|
||||
<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>
|
||||
|
||||
<target name="jar" depends="builddep, compile">
|
||||
<jar destfile="build/i2pfirefox.jar" basedir="./build/obj" includes="**/*.class" >
|
||||
<fileset file="i2p.firefox.base.profile.zip" />
|
||||
|
@ -1,27 +1,6 @@
|
||||
package net.i2p.i2pfirefox;
|
||||
|
||||
/*import java.awt.AWTException;
|
||||
import java.awt.Component;
|
||||
import java.awt.Image;
|
||||
import java.awt.Menu;
|
||||
import java.awt.MenuItem;
|
||||
import java.awt.PopupMenu;
|
||||
import java.awt.SystemTray;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.TrayIcon;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;*/
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* I2PBrowser.java
|
||||
@ -53,29 +32,37 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
|
||||
public boolean usability = false;
|
||||
public int privateBrowsing = 0;
|
||||
private boolean outputConfig = false;
|
||||
private boolean useSystray = true;
|
||||
|
||||
private void launchFirefox(int privateWindow, String[] url) {
|
||||
logger.info("I2PFirefox" + privateWindow);
|
||||
public void launchFirefox(int privateWindow, String[] url) {
|
||||
String priv = privateWindow == 1 ? "private-window" : "long-profile";
|
||||
logger.info("I2PFirefox" + priv);
|
||||
i2pFirefox.usability = usability;
|
||||
if (url == null)
|
||||
url = new String[] {"about:blank"};
|
||||
if (outputConfig)
|
||||
i2pFirefox.storeFirefoxDefaults();
|
||||
i2pFirefox.launch(privateWindow, url);
|
||||
}
|
||||
private void launchChromium(int privateWindow, String[] url) {
|
||||
logger.info("I2PChromium" + privateWindow);
|
||||
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;
|
||||
if (url == null)
|
||||
url = new String[] {"about:blank"};
|
||||
if (privateWindowInt == 1)
|
||||
privateWindow = true;
|
||||
if (outputConfig)
|
||||
i2pGeneral.storeGenericDefaults();
|
||||
logger.info("I2PGeneric" + privateWindowInt);
|
||||
logger.info("I2PGeneric" + priv);
|
||||
i2pGeneral.launch(privateWindow, url);
|
||||
}
|
||||
|
||||
@ -85,7 +72,7 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
|
||||
*
|
||||
* @since 0.0.16
|
||||
*/
|
||||
public I2PBrowser() { }
|
||||
public I2PBrowser() {}
|
||||
|
||||
/**
|
||||
* Construct an I2PBrowser class which automatically determines which browser
|
||||
@ -93,9 +80,7 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
|
||||
*
|
||||
* @since 0.0.18
|
||||
*/
|
||||
public I2PBrowser(String browserPath) {
|
||||
this.BROWSER = browserPath;
|
||||
}
|
||||
public I2PBrowser(String browserPath) { this.BROWSER = browserPath; }
|
||||
|
||||
public void setBrowser(String browserPath) { this.BROWSER = browserPath; }
|
||||
|
||||
@ -143,21 +128,6 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
|
||||
* @since 0.0.17
|
||||
*/
|
||||
public void launch(int privateWindow, String[] url) {
|
||||
validateUserDirectory();
|
||||
if (generic) {
|
||||
this.launchGeneric(privateWindow, url);
|
||||
return;
|
||||
}
|
||||
if ((chromium && firefox) || (!chromium && !firefox)) {
|
||||
if (this.hasFirefox()) {
|
||||
this.launchFirefox(privateWindow, url);
|
||||
} else if (this.hasChromium()) {
|
||||
this.launchChromium(privateWindow, url);
|
||||
} else {
|
||||
this.launchGeneric(privateWindow, url);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (chromiumFirst) {
|
||||
if (chromium) {
|
||||
this.launchChromium(privateWindow, url);
|
||||
@ -203,6 +173,32 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
|
||||
*/
|
||||
public void launch() { launch(false); }
|
||||
|
||||
/**
|
||||
* Stop all running processes managed by the browser manager.
|
||||
*
|
||||
* @return true if successful, false if not
|
||||
*/
|
||||
public boolean stop() {
|
||||
boolean r = true;
|
||||
if (i2pFirefox != null)
|
||||
r = i2pFirefox.stop();
|
||||
if (i2pChromium != null)
|
||||
r = i2pChromium.stop();
|
||||
if (i2pGeneral != null)
|
||||
r = i2pGeneral.stop();
|
||||
return r;
|
||||
}
|
||||
|
||||
public boolean running() {
|
||||
if (i2pFirefox != null)
|
||||
return i2pFirefox.running();
|
||||
if (i2pChromium != null)
|
||||
return i2pChromium.running();
|
||||
if (i2pGeneral != null)
|
||||
return i2pGeneral.running();
|
||||
return false;
|
||||
}
|
||||
|
||||
private String ValidURL(String inUrl) {
|
||||
String[] schemes = {"http", "https"};
|
||||
for (String scheme : schemes) {
|
||||
@ -218,7 +214,6 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
|
||||
i2pBrowser.startup(args);
|
||||
}
|
||||
public ArrayList<String> parseArgs(String[] args) {
|
||||
validateUserDirectory();
|
||||
logger.info("I2PBrowser");
|
||||
ArrayList<String> visitURL = new ArrayList<String>();
|
||||
if (args != null) {
|
||||
@ -249,9 +244,6 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
|
||||
if (arg.equals("-outputconfig")) {
|
||||
outputConfig = true;
|
||||
}
|
||||
if (arg.equals("-nosystray")) {
|
||||
useSystray = false;
|
||||
}
|
||||
if (arg.equals("-noproxycheck")) {
|
||||
logger.info("zeroing out proxy check");
|
||||
this.setProxyTimeoutTime(0);
|
||||
@ -261,50 +253,22 @@ public class I2PBrowser extends I2PGenericUnsafeBrowser {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!this.chromium)
|
||||
this.firefox = true;
|
||||
}
|
||||
return visitURL;
|
||||
}
|
||||
public void startup(String[] args) {
|
||||
ArrayList<String> visitURL = parseArgs(args);
|
||||
try {
|
||||
if (useSystray) {
|
||||
Runtime.getRuntime().addShutdownHook(new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
}
|
||||
});
|
||||
}
|
||||
Runtime.getRuntime().addShutdownHook(new Thread() {
|
||||
@Override
|
||||
public void run() {}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
logger.warning(e.toString());
|
||||
}
|
||||
this.launch(this.privateBrowsing,
|
||||
visitURL.toArray(new String[visitURL.size()]));
|
||||
}
|
||||
protected boolean createSystrayRunningFile() {
|
||||
if (!systrayRunningExternally()) {
|
||||
try {
|
||||
File systrayIsRunningFile =
|
||||
new File(runtimeDirectory(""), "systray.running");
|
||||
FileWriter myWriter = new FileWriter(systrayIsRunningFile);
|
||||
myWriter.write("systray.running file created");
|
||||
myWriter.close();
|
||||
return true;
|
||||
} catch (IOException ioe) {
|
||||
logger.warning(ioe.toString());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
protected boolean systrayRunningExternally() {
|
||||
File systrayIsRunningFile =
|
||||
new File(runtimeDirectory(""), "systray.running");
|
||||
if (systrayIsRunningFile.exists()) {
|
||||
logger.info("Systray is already running in another process: " +
|
||||
systrayIsRunningFile.toString());
|
||||
return true;
|
||||
}
|
||||
logger.info("Systray does not appear to be running");
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,232 +0,0 @@
|
||||
package net.i2p.i2pfirefox;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.logging.FileHandler;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.logging.SimpleFormatter;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.app.ClientApp;
|
||||
import net.i2p.app.ClientAppManager;
|
||||
import net.i2p.app.ClientAppState;
|
||||
import net.i2p.util.EepGet;
|
||||
import net.i2p.app.MenuCallback;
|
||||
import net.i2p.app.MenuHandle;
|
||||
import net.i2p.app.MenuService;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
import net.i2p.desktopgui.ExternalMain;
|
||||
|
||||
|
||||
public class I2PBrowserPlugin extends I2PBrowser implements ClientApp {
|
||||
private final I2PAppContext context;
|
||||
private final ClientAppManager cam;
|
||||
private final String[] args;
|
||||
private volatile boolean got = false;
|
||||
private volatile boolean shutdown = false;
|
||||
public I2PBrowserPlugin(I2PAppContext context, ClientAppManager listener,
|
||||
String[] args) {
|
||||
this.cam = listener;
|
||||
cam.notify(this, ClientAppState.UNINITIALIZED,
|
||||
"Initializing Profile Manager Systray Plugin", null);
|
||||
this.context = context;
|
||||
this.args = args;
|
||||
cam.notify(this, ClientAppState.INITIALIZED,
|
||||
"Profile Manager Systray Plugin Initialized", null);
|
||||
}
|
||||
|
||||
private MenuService startTrayApp() {
|
||||
try {
|
||||
//if (isSystrayEnabled(context)) {
|
||||
System.setProperty("java.awt.headless", "false");
|
||||
ExternalMain dtg = new ExternalMain(context, cam, null);
|
||||
//MenuService dtg = new MenuService(context, cam, null);
|
||||
dtg.startup();
|
||||
return dtg;
|
||||
//}
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
private File threadLogFile() {
|
||||
validateUserDirectory();
|
||||
String userDir = System.getProperty("user.dir");
|
||||
File log = new File(userDir, "logs");
|
||||
if (!log.exists())
|
||||
log.mkdirs();
|
||||
return new File(log, "browserlauncherthreadlogger.log");
|
||||
}
|
||||
public String getDisplayName() { return "Browser Profile Manager"; }
|
||||
public String getName() { return "browserProfileManager"; }
|
||||
public void shutdown(String[] args) {
|
||||
//this.shutdownSystray();
|
||||
cam.notify(this, ClientAppState.STOPPING,
|
||||
"Shutting down up profile manager systray", null);
|
||||
got = true;
|
||||
shutdown = true;
|
||||
cam.unregister(this);
|
||||
cam.notify(this, ClientAppState.STOPPED,
|
||||
"Shutting down up profile manager systray", null);
|
||||
}
|
||||
private void downloadInBackground() throws IOException {
|
||||
try {
|
||||
Logger threadLogger = Logger.getLogger("browserlauncherupdatethread");
|
||||
FileHandler fh = new FileHandler(threadLogFile().toString());
|
||||
threadLogger.addHandler(fh);
|
||||
SimpleFormatter formatter = new SimpleFormatter();
|
||||
fh.setFormatter(formatter);
|
||||
got = downloadTorrent();
|
||||
while (!got) {
|
||||
threadLogger.info("Working to download updates in the background");
|
||||
if (shutdown) {
|
||||
break;
|
||||
}
|
||||
got = downloadTorrent();
|
||||
try {
|
||||
Thread.sleep(5000);
|
||||
} catch (InterruptedException err) {
|
||||
logger.warning(err.toString());
|
||||
}
|
||||
}
|
||||
|
||||
if (got) {
|
||||
try {
|
||||
File content = torrentFileContents();
|
||||
if (content.exists()) {
|
||||
content.delete();
|
||||
}
|
||||
} catch (IOException err) {
|
||||
threadLogger.warning(err.toString());
|
||||
}
|
||||
}
|
||||
} catch (IOException err) {
|
||||
// just re-throw here
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
public void startup() {
|
||||
shutdown = false;
|
||||
MenuService dtg = startTrayApp();
|
||||
cam.notify(this, ClientAppState.STARTING,
|
||||
"Starting up profile manager systray", null);
|
||||
Runnable r = new Runnable() {
|
||||
public void run() {
|
||||
logger.info("Downloading in background thread");
|
||||
try {
|
||||
downloadInBackground();
|
||||
} catch (IOException err) {
|
||||
err.printStackTrace();
|
||||
}
|
||||
}
|
||||
};
|
||||
new Thread(r).start();
|
||||
if (dtg != null)
|
||||
dtg.addMenu("Shutdown I2PBrowser", new StandaloneStopper(dtg));
|
||||
}
|
||||
|
||||
private File torrentDir() throws IOException {
|
||||
File configDir = context.getConfigDir();
|
||||
if (configDir == null) {
|
||||
throw new IOException("The I2P Config directory is null");
|
||||
}
|
||||
if (!configDir.exists()) {
|
||||
throw new IOException("The I2P Config directory does not exist");
|
||||
}
|
||||
File snarkDir = new File(configDir, "i2psnark");
|
||||
if (snarkDir == null) {
|
||||
throw new IOException("The Snark directory is null");
|
||||
}
|
||||
if (!snarkDir.exists()) {
|
||||
throw new IOException("The Snark directory does not exist");
|
||||
}
|
||||
return snarkDir;
|
||||
}
|
||||
private File torrentFile() throws IOException {
|
||||
try {
|
||||
File torrents = torrentDir();
|
||||
File torrent = new File(torrents, "i2p.plugins.firefox.torrent");
|
||||
if (torrent == null) {
|
||||
throw new IOException("Cannot download torrent, torrent file is null");
|
||||
}
|
||||
return torrent;
|
||||
} catch (IOException err) {
|
||||
logger.warning(err.toString());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private File torrentFileContents() throws IOException {
|
||||
try {
|
||||
File torrents = torrentDir();
|
||||
File torrent = new File(torrents, "i2p.plugins.firefox");
|
||||
if (torrent == null) {
|
||||
throw new IOException("Torrent directory contents are null");
|
||||
}
|
||||
return torrent;
|
||||
} catch (IOException err) {
|
||||
logger.warning(err.toString());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private boolean downloadTorrent() {
|
||||
try {
|
||||
String url =
|
||||
"http://idk.i2p/i2p.plugins.firefox/i2p.plugins.firefox.torrent";
|
||||
String name = torrentFile().getAbsolutePath();
|
||||
logger.info("Downloading " + url + " to " + name);
|
||||
EepGet eepGet =
|
||||
new EepGet(context, true, "127.0.0.1", 4444, 5, name, url);
|
||||
if (eepGet.getNotModified()) {
|
||||
return false;
|
||||
}
|
||||
return eepGet.fetch(60, 180, 60);
|
||||
} catch (IOException err) {
|
||||
logger.warning(err.toString());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public ClientAppState getState() {
|
||||
if (shutdown && !systrayRunningExternally()) {
|
||||
String msg = "Firefox profile manager systray is stopped";
|
||||
logger.info(msg);
|
||||
cam.notify(this, ClientAppState.STOPPED, msg, null);
|
||||
return ClientAppState.STOPPED;
|
||||
}
|
||||
if (systrayRunningExternally()) {
|
||||
String msg = "Firefox profile manager systray is running";
|
||||
logger.info(msg);
|
||||
cam.notify(this, ClientAppState.RUNNING, msg, null);
|
||||
return ClientAppState.RUNNING;
|
||||
}
|
||||
return ClientAppState.FORKED; // Used as a euphemism for unknown here.
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback when shutdown is clicked in systray
|
||||
* @since 0.9.60
|
||||
*/
|
||||
public class StandaloneStopper implements MenuCallback {
|
||||
private final MenuService _ms;
|
||||
|
||||
public StandaloneStopper(MenuService ms) { _ms = ms; }
|
||||
|
||||
public void clicked(MenuHandle menu) {
|
||||
_ms.disableMenu(menu);
|
||||
_ms.updateMenu("I2P Browser shutting down", menu);
|
||||
Thread t = new I2PAppThread(new StopperThread(), "Browser Stopper", true);
|
||||
t.start();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Threaded shutdown
|
||||
* @since 0.9.60
|
||||
*/
|
||||
public class StopperThread implements Runnable {
|
||||
public void run() {
|
||||
//shutdown(null);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -29,6 +29,7 @@ import java.util.stream.Stream;
|
||||
public class I2PChromium extends I2PChromiumProfileUnpacker {
|
||||
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
|
||||
@ -61,23 +62,23 @@ public class I2PChromium extends I2PChromiumProfileUnpacker {
|
||||
List<String> list = new ArrayList<String>();
|
||||
list = Arrays.asList(chromiumPathsWindows());
|
||||
getProperties().setProperty("chromium.paths.windows",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list = Arrays.asList(chromiumPathsUnix());
|
||||
getProperties().setProperty("chromium.paths.linux",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list = Arrays.asList(chromiumPathsOSX());
|
||||
getProperties().setProperty("chromium.paths.osx",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
|
||||
list = Arrays.asList(chromiumBinsWindows());
|
||||
getProperties().setProperty("chromium.bins.windows",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list = Arrays.asList(chromiumBinsUnix());
|
||||
getProperties().setProperty("chromium.bins.linux",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list = Arrays.asList(chromiumBinsUnix());
|
||||
getProperties().setProperty("chromium.bins.osx",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
try (OutputStream fos = new FileOutputStream(
|
||||
new File(runtimeDirectory(""), "browser.config"))) {
|
||||
getProperties().store(fos, "Chromium Configuration Section");
|
||||
@ -87,7 +88,8 @@ public class I2PChromium extends I2PChromiumProfileUnpacker {
|
||||
}
|
||||
|
||||
private String[] chromiumPathsUnix() {
|
||||
String chromiumPathsProp = getProperties().getProperty("chromium.paths.unix");
|
||||
String chromiumPathsProp =
|
||||
getProperties().getProperty("chromium.paths.unix");
|
||||
if (chromiumPathsProp != null)
|
||||
if (!chromiumPathsProp.equals(""))
|
||||
return chromiumPathsProp.split(",");
|
||||
@ -126,7 +128,8 @@ public class I2PChromium extends I2PChromiumProfileUnpacker {
|
||||
return exePath;
|
||||
}
|
||||
private String[] chromiumPathsOSX() {
|
||||
String chromiumPathsProp = getProperties().getProperty("chromium.paths.osx");
|
||||
String chromiumPathsProp =
|
||||
getProperties().getProperty("chromium.paths.osx");
|
||||
if (chromiumPathsProp != null)
|
||||
if (!chromiumPathsProp.equals(""))
|
||||
return chromiumPathsProp.split(",");
|
||||
@ -149,7 +152,8 @@ public class I2PChromium extends I2PChromiumProfileUnpacker {
|
||||
}
|
||||
|
||||
private String[] chromiumPathsWindows() {
|
||||
String chromiumPathsProp = getProperties().getProperty("chromium.paths.windows");
|
||||
String chromiumPathsProp =
|
||||
getProperties().getProperty("chromium.paths.windows");
|
||||
if (chromiumPathsProp != null)
|
||||
if (!chromiumPathsProp.equals(""))
|
||||
return chromiumPathsProp.split(",");
|
||||
@ -182,7 +186,8 @@ public class I2PChromium extends I2PChromiumProfileUnpacker {
|
||||
};
|
||||
}
|
||||
private String[] chromiumBinsWindows() {
|
||||
String chromiumPathsProp = getProperties().getProperty("chromium.bins.windows");
|
||||
String chromiumPathsProp =
|
||||
getProperties().getProperty("chromium.bins.windows");
|
||||
if (chromiumPathsProp != null)
|
||||
if (!chromiumPathsProp.equals(""))
|
||||
return chromiumPathsProp.split(",");
|
||||
@ -290,7 +295,7 @@ public class I2PChromium extends I2PChromiumProfileUnpacker {
|
||||
}
|
||||
// now, do the same thing, but with user.dir instead of plugin
|
||||
// list the directories in the user.dir directory
|
||||
File userDir = new File(System.getProperty("user.dir"));
|
||||
File userDir = userHomeDir();
|
||||
if (userDir.exists()) {
|
||||
if (isWindows()) {
|
||||
File searchResult = searchFile(userDir, "ungoogled-chromium.exe");
|
||||
@ -384,11 +389,13 @@ public class I2PChromium extends I2PChromiumProfileUnpacker {
|
||||
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 "";
|
||||
@ -764,6 +771,25 @@ public class I2PChromium extends I2PChromiumProfileUnpacker {
|
||||
*/
|
||||
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) {
|
||||
|
@ -9,11 +9,9 @@ import java.io.OutputStream;
|
||||
import java.net.Socket;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.Arrays;
|
||||
import java.util.Properties;
|
||||
import java.util.logging.FileHandler;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.logging.SimpleFormatter;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipInputStream;
|
||||
|
||||
@ -36,21 +34,14 @@ public class I2PCommonBrowser {
|
||||
private Properties prop = new Properties();
|
||||
public Logger logger = Logger.getLogger("browserlauncher");
|
||||
private FileHandler fh;
|
||||
private boolean validated = false;
|
||||
int CONFIGURED_TIMEOUT = 200;
|
||||
|
||||
public I2PCommonBrowser() {
|
||||
try {
|
||||
// This block configure the logger with handler and formatter
|
||||
fh = new FileHandler(logFile().toString());
|
||||
logger.addHandler(fh);
|
||||
SimpleFormatter formatter = new SimpleFormatter();
|
||||
fh.setFormatter(formatter);
|
||||
// the following statement is used to log any messages
|
||||
logger.info("Browser log");
|
||||
} catch (SecurityException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
loadPropertiesFile(new File(runtimeDirectory(""), "browser.config"));
|
||||
}
|
||||
@ -74,9 +65,7 @@ public class I2PCommonBrowser {
|
||||
*
|
||||
* @return the properties of the object
|
||||
*/
|
||||
public Properties getProperties() {
|
||||
return prop;
|
||||
}
|
||||
public Properties getProperties() { return prop; }
|
||||
|
||||
/**
|
||||
* Validates the user directory.
|
||||
@ -85,6 +74,8 @@ public class I2PCommonBrowser {
|
||||
* @return None No return value.
|
||||
*/
|
||||
public void validateUserDirectory() {
|
||||
if (validated)
|
||||
return;
|
||||
logger.info("Validating user directory");
|
||||
String userDir = System.getProperty("user.dir");
|
||||
String userHome = System.getProperty("user.home");
|
||||
@ -95,7 +86,8 @@ public class I2PCommonBrowser {
|
||||
logger.info("user.home: " + userHomeFile.getAbsolutePath());
|
||||
|
||||
if (!userDirFile.getAbsolutePath().contains("Program Files")) {
|
||||
if (!userDirFile.getAbsolutePath().equals(userHomeFile.getAbsolutePath())) {
|
||||
if (!userDirFile.getAbsolutePath().equals(
|
||||
userHomeFile.getAbsolutePath())) {
|
||||
logger.info("user.dir is not inconvenient");
|
||||
if (userDirFile.exists()) {
|
||||
logger.info("user.dir exists");
|
||||
@ -127,10 +119,12 @@ public class I2PCommonBrowser {
|
||||
defaultPathFile.mkdirs();
|
||||
}
|
||||
if (!defaultPathFile.isDirectory()) {
|
||||
logger.info("default path exists and is not a directory, get it out of the way");
|
||||
logger.info(
|
||||
"default path exists and is not a directory, get it out of the way");
|
||||
logger.info(defaultPathFile.getAbsolutePath());
|
||||
}
|
||||
System.setProperty("user.dir", defaultPathFile.getAbsolutePath());
|
||||
validated = true;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -169,7 +163,8 @@ public class I2PCommonBrowser {
|
||||
*/
|
||||
protected boolean isOSX() {
|
||||
String osName = System.getProperty("os.name").toLowerCase();
|
||||
return osName.contains("osx") || osName.contains("mac") || osName.contains("apple") || osName.contains("darwin");
|
||||
return osName.contains("osx") || osName.contains("mac") ||
|
||||
osName.contains("apple") || osName.contains("darwin");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -199,15 +194,17 @@ public class I2PCommonBrowser {
|
||||
*
|
||||
* @return the log file for the browser launcher
|
||||
*/
|
||||
private File logFile() {
|
||||
validateUserDirectory();
|
||||
String userDirectory = System.getProperty("user.dir");
|
||||
File logDirectory = new File(userDirectory, "logs");
|
||||
if (!logDirectory.exists()) {
|
||||
logDirectory.mkdirs();
|
||||
}
|
||||
return new File(logDirectory, "browserlauncher.log");
|
||||
}
|
||||
/*
|
||||
* private File logFile() {
|
||||
* // validateUserDirectory();
|
||||
* String userDirectory = System.getProperty("user.dir");
|
||||
* File logDirectory = new File(userDirectory, "logs");
|
||||
* if (!logDirectory.exists()) {
|
||||
* logDirectory.mkdirs();
|
||||
* }
|
||||
* return new File(logDirectory, "browserlauncher.log");
|
||||
* }
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the runtime directory, creating it if create=true.
|
||||
@ -229,7 +226,8 @@ public class I2PCommonBrowser {
|
||||
/**
|
||||
* Returns the runtime directory path based on the given override parameter.
|
||||
*
|
||||
* @param override the name of the environment variable to override the runtime
|
||||
* @param override the name of the environment variable to override the
|
||||
* runtime
|
||||
* directory
|
||||
* @return the runtime directory path as a string
|
||||
*/
|
||||
@ -272,7 +270,8 @@ public class I2PCommonBrowser {
|
||||
* @return true if the directory is valid, false otherwise
|
||||
*/
|
||||
private boolean isDirectoryValid(String directory) {
|
||||
return directory != null && !directory.isEmpty() && new File(directory).exists();
|
||||
return directory != null && !directory.isEmpty() &&
|
||||
new File(directory).exists();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -285,7 +284,8 @@ public class I2PCommonBrowser {
|
||||
* @return the profile directory, or null if it could not be created
|
||||
* @since 0.0.19
|
||||
*/
|
||||
protected String profileDirectory(String envVar, String browser, String base, boolean app) {
|
||||
protected String profileDirectory(String envVar, String browser, String base,
|
||||
boolean app) {
|
||||
String profileDir = System.getenv(envVar);
|
||||
if (profileDir != null && !profileDir.isEmpty()) {
|
||||
File profileDirFile = new File(profileDir);
|
||||
@ -306,9 +306,11 @@ public class I2PCommonBrowser {
|
||||
* @param app description of parameter
|
||||
* @return description of return value
|
||||
*/
|
||||
protected String profileDir(String file, String browser, String base, boolean app) {
|
||||
protected String profileDir(String file, String browser, String base,
|
||||
boolean app) {
|
||||
String appString = app ? ".app" : "";
|
||||
String profileDirName = String.format("i2p.%s.profile.%s%s", browser, base, appString);
|
||||
String profileDirName =
|
||||
String.format("i2p.%s.profile.%s%s", browser, base, appString);
|
||||
File profileDir = new File(file, profileDirName);
|
||||
return profileDir.getAbsolutePath();
|
||||
}
|
||||
@ -322,11 +324,12 @@ public class I2PCommonBrowser {
|
||||
* @return true if the profile was successfully unpacked, false otherwise
|
||||
*/
|
||||
protected boolean unpackProfile(String profileDirectory, String browser,
|
||||
String base) {
|
||||
String base) {
|
||||
logger.info("Unpacking base profile to " + profileDirectory);
|
||||
try {
|
||||
final InputStream resources = this.getClass().getClassLoader().getResourceAsStream(
|
||||
"i2p." + browser + "." + base + ".profile.zip");
|
||||
final InputStream resources =
|
||||
this.getClass().getClassLoader().getResourceAsStream(
|
||||
"i2p." + browser + "." + base + ".profile.zip");
|
||||
if (resources == null) {
|
||||
logger.info("Could not find resources");
|
||||
return false;
|
||||
@ -366,8 +369,8 @@ public class I2PCommonBrowser {
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy a directory from sourceDir to destDir, excluding certain files based on
|
||||
* browser and base.
|
||||
* Copy a directory from sourceDir to destDir, excluding certain files based
|
||||
* on browser and base.
|
||||
*
|
||||
* @param sourceDir directory to be copied from
|
||||
* @param destDir directory to be copied to
|
||||
@ -375,13 +378,16 @@ public class I2PCommonBrowser {
|
||||
* @param base the base name
|
||||
* @throws IOException if an I/O error occurs during copying
|
||||
*/
|
||||
protected void copyDirectory(File sourceDir, File destDir, String browser, String base) throws IOException {
|
||||
destDir = new File(destDir.toString().replace("i2p." + browser + "." + base + ".profile", ""));
|
||||
protected void copyDirectory(File sourceDir, File destDir, String browser,
|
||||
String base) throws IOException {
|
||||
destDir = new File(destDir.toString().replace(
|
||||
"i2p." + browser + "." + base + ".profile", ""));
|
||||
if (!destDir.exists()) {
|
||||
destDir.mkdir();
|
||||
}
|
||||
for (String file : sourceDir.list()) {
|
||||
copyDirectoryCompatibilityMode(new File(sourceDir, file), new File(destDir, file), browser, base);
|
||||
copyDirectoryCompatibilityMode(new File(sourceDir, file),
|
||||
new File(destDir, file), browser, base);
|
||||
}
|
||||
}
|
||||
|
||||
@ -394,8 +400,10 @@ public class I2PCommonBrowser {
|
||||
* @param base the base
|
||||
* @throws IOException if an I/O error occurs
|
||||
*/
|
||||
private void copyDirectoryCompatibilityMode(File sourceDirectory, File destinationDirectory, String browser,
|
||||
String base) throws IOException {
|
||||
private void copyDirectoryCompatibilityMode(File sourceDirectory,
|
||||
File destinationDirectory,
|
||||
String browser, String base)
|
||||
throws IOException {
|
||||
if (sourceDirectory.isDirectory()) {
|
||||
copyDirectory(sourceDirectory, destinationDirectory, browser, base);
|
||||
} else {
|
||||
@ -426,9 +434,10 @@ public class I2PCommonBrowser {
|
||||
* copied to
|
||||
* @throws IOException if an I/O error occurs during the file copy process
|
||||
*/
|
||||
private void copyFile(File sourceFile, File destinationFile) throws IOException {
|
||||
private void copyFile(File sourceFile, File destinationFile)
|
||||
throws IOException {
|
||||
try (InputStream in = new FileInputStream(sourceFile);
|
||||
OutputStream out = new FileOutputStream(destinationFile)) {
|
||||
OutputStream out = new FileOutputStream(destinationFile)) {
|
||||
byte[] buffer = new byte[1024];
|
||||
int length;
|
||||
while ((length = in.read(buffer)) > 0) {
|
||||
@ -466,9 +475,7 @@ public class I2PCommonBrowser {
|
||||
* @return true if the proxy is ready, false if it is not.
|
||||
* @since 0.0.1
|
||||
*/
|
||||
public boolean waitForProxy() {
|
||||
return waitForProxy(CONFIGURED_TIMEOUT);
|
||||
}
|
||||
public boolean waitForProxy() { return waitForProxy(CONFIGURED_TIMEOUT); }
|
||||
|
||||
/**
|
||||
* Waits for an HTTP proxy on port 4444 to be ready.
|
||||
@ -546,9 +553,7 @@ public class I2PCommonBrowser {
|
||||
*
|
||||
* @param time
|
||||
*/
|
||||
public void setProxyTimeoutTime(int time) {
|
||||
CONFIGURED_TIMEOUT = time;
|
||||
}
|
||||
public void setProxyTimeoutTime(int time) { CONFIGURED_TIMEOUT = time; }
|
||||
|
||||
/**
|
||||
* Joins the elements of the given string array into a single string.
|
||||
@ -585,6 +590,13 @@ public class I2PCommonBrowser {
|
||||
* @return the found file or null if not found
|
||||
*/
|
||||
public File searchFile(File directory, String search) {
|
||||
File hd = new File(System.getProperty("user.home"));
|
||||
if (hd != null) {
|
||||
if (directory.getAbsolutePath().equals(hd.getAbsolutePath()))
|
||||
return null;
|
||||
}
|
||||
if (directory == null || !directory.exists() || !directory.canRead())
|
||||
return null;
|
||||
if (directory.isDirectory()) {
|
||||
File[] files = directory.listFiles();
|
||||
for (File file : files) {
|
||||
@ -599,4 +611,18 @@ public class I2PCommonBrowser {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public File userHomeDir() {
|
||||
File rd = new File(System.getProperty("user.dir"));
|
||||
File hd = new File(System.getProperty("user.home"));
|
||||
if (rd == null || !rd.exists()) {
|
||||
if (hd == null || !hd.exists()) {
|
||||
if (rd.getAbsolutePath().equals(hd.getAbsolutePath()))
|
||||
return null;
|
||||
}
|
||||
return rd;
|
||||
}
|
||||
logger.info("Runtime directory discovered at: " + rd);
|
||||
return rd;
|
||||
}
|
||||
}
|
||||
|
@ -30,6 +30,7 @@ import java.util.stream.Stream;
|
||||
public class I2PFirefox extends I2PFirefoxProfileUnpacker {
|
||||
private final String[] FIREFOX_SEARCH_PATHS = FIREFOX_FINDER();
|
||||
private Process process = null;
|
||||
private String firefoxPath;
|
||||
public boolean usability = false;
|
||||
|
||||
private String baseMode() {
|
||||
@ -59,23 +60,23 @@ public class I2PFirefox extends I2PFirefoxProfileUnpacker {
|
||||
List<String> list = new ArrayList<String>();
|
||||
list = Arrays.asList(firefoxPathsWindows());
|
||||
getProperties().setProperty("firefox.paths.windows",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list = Arrays.asList(firefoxPathsUnix());
|
||||
getProperties().setProperty("firefox.paths.linux",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list = Arrays.asList(firefoxPathsOSX());
|
||||
getProperties().setProperty("firefox.paths.osx",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
|
||||
list = Arrays.asList(firefoxBinsWindows());
|
||||
getProperties().setProperty("firefox.bins.windows",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list = Arrays.asList(firefoxBinsUnix());
|
||||
getProperties().setProperty("firefox.bins.linux",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list = Arrays.asList(firefoxBinsUnix());
|
||||
getProperties().setProperty("firefox.bins.osx",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
try (OutputStream fos = new FileOutputStream(
|
||||
new File(runtimeDirectory(""), "browser.config"))) {
|
||||
getProperties().store(fos, "Firefox Configuration Section");
|
||||
@ -147,7 +148,8 @@ public class I2PFirefox extends I2PFirefoxProfileUnpacker {
|
||||
return exePath;
|
||||
}
|
||||
public String[] firefoxPathsWindows() {
|
||||
String firefoxPathsProp = getProperties().getProperty("firefox.paths.windows");
|
||||
String firefoxPathsProp =
|
||||
getProperties().getProperty("firefox.paths.windows");
|
||||
if (firefoxPathsProp != null)
|
||||
if (!firefoxPathsProp.equals(""))
|
||||
return firefoxPathsProp.split(",");
|
||||
@ -180,7 +182,8 @@ public class I2PFirefox extends I2PFirefoxProfileUnpacker {
|
||||
};
|
||||
}
|
||||
private String[] firefoxBinsWindows() {
|
||||
String firefoxPathsProp = getProperties().getProperty("firefox.bins.windows");
|
||||
String firefoxPathsProp =
|
||||
getProperties().getProperty("firefox.bins.windows");
|
||||
if (firefoxPathsProp != null)
|
||||
if (!firefoxPathsProp.equals(""))
|
||||
return firefoxPathsProp.split(",");
|
||||
@ -289,7 +292,7 @@ public class I2PFirefox extends I2PFirefoxProfileUnpacker {
|
||||
}
|
||||
// now, do the same thing, but with user.dir instead of plugin
|
||||
// list the directories in the user.dir directory
|
||||
File userDir = new File(System.getProperty("user.dir"));
|
||||
File userDir = userHomeDir();
|
||||
if (userDir.exists()) {
|
||||
if (isWindows()) {
|
||||
File searchResult = searchFile(userDir, "firefox-esr.exe");
|
||||
@ -377,6 +380,9 @@ public class I2PFirefox extends I2PFirefoxProfileUnpacker {
|
||||
* @since 0.0.1
|
||||
*/
|
||||
public String topFirefox() {
|
||||
if (firefoxPath != null) {
|
||||
return firefoxPath;
|
||||
}
|
||||
// get the FIREFOX environment variable
|
||||
String firefox = System.getenv("FIREFOX");
|
||||
// if it is not null and not empty
|
||||
@ -385,11 +391,13 @@ public class I2PFirefox extends I2PFirefoxProfileUnpacker {
|
||||
File firefoxFile = new File(firefox);
|
||||
if (firefoxFile.exists()) {
|
||||
// if it does, return it
|
||||
firefoxPath = firefox;
|
||||
return firefox;
|
||||
}
|
||||
}
|
||||
String[] firefoxes = onlyValidFirefoxes();
|
||||
if (firefoxes.length > 0) {
|
||||
firefoxPath = firefoxes[0];
|
||||
return firefoxes[0];
|
||||
} else {
|
||||
return "";
|
||||
@ -827,6 +835,25 @@ public class I2PFirefox extends I2PFirefoxProfileUnpacker {
|
||||
*/
|
||||
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 (process != null) {
|
||||
process.destroy();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean running() {
|
||||
if (process != null)
|
||||
return process.isAlive();
|
||||
return false;
|
||||
}
|
||||
|
||||
private String ValidURL(String inUrl) {
|
||||
String[] schemes = {"http", "https"};
|
||||
for (String scheme : schemes) {
|
||||
|
@ -39,7 +39,8 @@ public class I2PFirefoxProfileChecker extends I2PCommonBrowser {
|
||||
return;
|
||||
}
|
||||
profileChecker.logger.info("Profile directory: " + profileDirectory);
|
||||
boolean isProfileValid = profileChecker.validateProfileDirectory(profileDirectory);
|
||||
boolean isProfileValid =
|
||||
profileChecker.validateProfileDirectory(profileDirectory);
|
||||
if (isProfileValid) {
|
||||
profileChecker.logger.info("Profile directory is valid");
|
||||
} else {
|
||||
@ -65,7 +66,8 @@ public class I2PFirefoxProfileChecker extends I2PCommonBrowser {
|
||||
*/
|
||||
public boolean validateProfileDirectory(String profileDirectory) {
|
||||
File profileDir = new File(profileDirectory);
|
||||
if (!profileDir.exists() || !profileDir.isDirectory() || !profileDir.canRead() || !profileDir.canWrite()) {
|
||||
if (!profileDir.exists() || !profileDir.isDirectory() ||
|
||||
!profileDir.canRead() || !profileDir.canWrite()) {
|
||||
return false;
|
||||
}
|
||||
if (!validateFile(profileDir + "/prefs.js")) {
|
||||
@ -129,7 +131,8 @@ public class I2PFirefoxProfileChecker extends I2PCommonBrowser {
|
||||
*/
|
||||
private boolean undoHomepage(File fileToBeModified) {
|
||||
String oldStringToFind = "\"browser.startup.homepage\", true";
|
||||
String newStringToReplace = "\"browser.startup.homepage\", \"http://127.0.0.1:7657\"";
|
||||
String newStringToReplace =
|
||||
"\"browser.startup.homepage\", \"http://127.0.0.1:7657\"";
|
||||
try (Scanner scanner = new Scanner(fileToBeModified)) {
|
||||
while (scanner.hasNextLine()) {
|
||||
String line = scanner.nextLine();
|
||||
@ -153,7 +156,7 @@ public class I2PFirefoxProfileChecker extends I2PCommonBrowser {
|
||||
* @return true if the value was successfully undone, false otherwise
|
||||
*/
|
||||
public boolean undoValue(String oldString, String newString,
|
||||
File fileToBeModified) {
|
||||
File fileToBeModified) {
|
||||
String oldContent = "";
|
||||
BufferedReader reader = null;
|
||||
FileWriter writer = null;
|
||||
@ -190,7 +193,8 @@ public class I2PFirefoxProfileChecker extends I2PCommonBrowser {
|
||||
*/
|
||||
public boolean validateFile(String filePath) {
|
||||
File file = new File(filePath);
|
||||
if (!file.exists() || !file.isFile() || !file.canRead() || !file.canWrite()) {
|
||||
if (!file.exists() || !file.isFile() || !file.canRead() ||
|
||||
!file.canWrite()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -4,7 +4,6 @@ import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.net.Socket;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
@ -67,7 +66,7 @@ public class I2PGenericUnsafeBrowser extends I2PCommonBrowser {
|
||||
|
||||
list = Arrays.asList(browsers());
|
||||
getProperties().setProperty("generic.bins.unix",
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
list.stream().collect(Collectors.joining(",")));
|
||||
try (OutputStream fos = new FileOutputStream(
|
||||
new File(runtimeDirectory(""), "browser.config"))) {
|
||||
getProperties().store(fos, "Chromium Configuration Section");
|
||||
@ -404,6 +403,24 @@ public class I2PGenericUnsafeBrowser extends I2PCommonBrowser {
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 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"};
|
||||
|
@ -1,8 +1,5 @@
|
||||
package net.i2p.i2pfirefox;
|
||||
|
||||
import java.io.*;
|
||||
import javax.script.*;
|
||||
|
||||
/**
|
||||
* I2PLibreWolf.java
|
||||
* Copyright (C) 2022 idk <hankhill19580@gmail.com>
|
||||
@ -20,5 +17,5 @@ import javax.script.*;
|
||||
* @since 1.0.6
|
||||
*/
|
||||
public class I2PLibreWolf {
|
||||
//TODO: provide a librewolf updater here.
|
||||
// TODO: provide a librewolf updater here.
|
||||
}
|
||||
|
@ -0,0 +1,263 @@
|
||||
package net.i2p.i2pfirefox.plugin;
|
||||
|
||||
import java.awt.GraphicsEnvironment;
|
||||
import java.io.File;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.app.ClientApp;
|
||||
import net.i2p.app.ClientAppManager;
|
||||
import net.i2p.app.ClientAppState;
|
||||
import net.i2p.app.MenuCallback;
|
||||
import net.i2p.app.MenuHandle;
|
||||
import net.i2p.app.MenuService;
|
||||
import net.i2p.desktopgui.ExternalMain;
|
||||
import net.i2p.i2pfirefox.I2PBrowser;
|
||||
import net.i2p.i2pfirefox.I2PFirefox;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.SystemVersion;
|
||||
|
||||
/**
|
||||
* I2PBrowserPlugin.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.
|
||||
*
|
||||
* @description I2PBrowser is a class that is used to open a browser window to
|
||||
* the I2P network. It automatically detects the operating system and available
|
||||
* browsers, and selects the best one to use, with Tor Browser at the top for
|
||||
* Firefox and Brave at the top for Chrome.
|
||||
*
|
||||
* @author idk
|
||||
* @since 0.0.16
|
||||
*/
|
||||
public class I2PBrowserPlugin extends I2PBrowser implements ClientApp {
|
||||
private final I2PAppContext _context;
|
||||
private final Log _log;
|
||||
private final ClientAppManager _mgr;
|
||||
private final String _args[];
|
||||
private static final String PROP_DTG_ENABLED = "desktopgui.enabled";
|
||||
private final File pluginDir;
|
||||
private final File profileDir;
|
||||
private MenuHandle lmhs;
|
||||
private MenuHandle lmhf;
|
||||
/**
|
||||
* @since 1.4.0
|
||||
* @return
|
||||
*/
|
||||
public I2PBrowserPlugin() {
|
||||
_context = new I2PAppContext();
|
||||
_mgr = null;
|
||||
_args = new String[] {};
|
||||
_log = _context.logManager().getLog(I2PBrowserPlugin.class);
|
||||
pluginDir = new File(_context.getAppDir(), "plugins/i2pfirefox/");
|
||||
profileDir = new File(pluginDir, "profile/");
|
||||
}
|
||||
/**
|
||||
* @since 1.4.0
|
||||
* @return
|
||||
*/
|
||||
public I2PBrowserPlugin(I2PAppContext ctx, ClientAppManager mgr,
|
||||
String args[]) {
|
||||
_context = ctx;
|
||||
_mgr = mgr;
|
||||
_args = args;
|
||||
_log = ctx.logManager().getLog(I2PBrowserPlugin.class);
|
||||
pluginDir = new File(_context.getAppDir(), "plugins/i2pfirefox/");
|
||||
profileDir = new File(pluginDir, "profile/");
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.4.0
|
||||
* @return
|
||||
*/
|
||||
public String getDisplayName() { return "I2P Browser"; }
|
||||
/**
|
||||
* @since 1.4.0
|
||||
* @return
|
||||
*/
|
||||
public String getName() { return "I2P Browser"; }
|
||||
/**
|
||||
* @since 1.4.0
|
||||
* @return
|
||||
*/
|
||||
public ClientAppState getState() { return ClientAppState.STOPPED; }
|
||||
/**
|
||||
* @since 1.4.0
|
||||
* @return
|
||||
*/
|
||||
public void shutdown(String[] args) {
|
||||
if (!isSystrayEnabled()) {
|
||||
_log.info("I2P Browser tray manager not supported");
|
||||
} else {
|
||||
_log.info("I2P Browser tray manager shutting down");
|
||||
MenuService dtg = startTrayApp();
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException ie) {
|
||||
}
|
||||
if (dtg != null) {
|
||||
dtg.removeMenu(lmhs);
|
||||
dtg.removeMenu(lmhf);
|
||||
}
|
||||
}
|
||||
changeState(ClientAppState.STOPPED);
|
||||
}
|
||||
/**
|
||||
* @since 1.4.0
|
||||
* @return
|
||||
*/
|
||||
public void startup() {
|
||||
changeState(ClientAppState.STOPPED);
|
||||
if (!isSystrayEnabled()) {
|
||||
_log.info("I2P Browser tray manager not supported");
|
||||
try {
|
||||
I2PBrowser i2pBrowser = new I2PBrowser(profileDir.getAbsolutePath());
|
||||
String[] args = {"http://proxy.i2p"};
|
||||
i2pBrowser.launchFirefox(0, args);
|
||||
} catch (Exception e) {
|
||||
_log.error("Error starting I2P Browser", e);
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
_log.info(
|
||||
"Starting I2P Browser tray manager by testing http://proxy.i2p");
|
||||
MenuService dtg = startTrayApp();
|
||||
try {
|
||||
Thread.sleep(5000);
|
||||
} catch (InterruptedException ie) {
|
||||
}
|
||||
if (dtg != null) {
|
||||
_log.info("I2P Browser integrating with I2P tray manager");
|
||||
lmhs =
|
||||
dtg.addMenu("Launch I2P Browser (Safe Mode)", new Starter(dtg));
|
||||
dtg.showMenu(lmhs);
|
||||
dtg.enableMenu(lmhs);
|
||||
lmhf = dtg.addMenu("Launch I2P Browser (Flexible Mode)",
|
||||
new FlexStarter(dtg));
|
||||
dtg.showMenu(lmhf);
|
||||
dtg.enableMenu(lmhf);
|
||||
} else {
|
||||
_log.info("I2P Browser tray manager not found");
|
||||
}
|
||||
I2PBrowser i2pBrowser = new I2PBrowser(profileDir.getAbsolutePath());
|
||||
String[] args = {"http://proxy.i2p"};
|
||||
i2pBrowser.launchFirefox(0, args);
|
||||
} catch (Exception e) {
|
||||
_log.error("Error starting I2P Browser tray manager", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Copied directly from I2PSnark-standalone
|
||||
/**
|
||||
* @since 1.4.0
|
||||
* @return
|
||||
*/
|
||||
private MenuService startTrayApp() {
|
||||
try {
|
||||
if (isSystrayEnabled()) {
|
||||
System.setProperty("java.awt.headless", "false");
|
||||
ExternalMain dtg =
|
||||
new ExternalMain(_context, _context.clientAppManager(), null);
|
||||
dtg.startup();
|
||||
return dtg;
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Copied directly from I2PSnark-standalone where it is used to determine
|
||||
// whether to launchFirefox the tray app Our environment should basically
|
||||
// never be headless, that doesn't make any sense, but something tells me I
|
||||
// should leave that check in.
|
||||
/**
|
||||
* @since 1.4.0
|
||||
* @return
|
||||
*/
|
||||
private boolean isSystrayEnabled() {
|
||||
if (GraphicsEnvironment.isHeadless())
|
||||
return false;
|
||||
// default false except on OSX and Windows,
|
||||
// and on Linux KDE and LXDE.
|
||||
// Xubuntu XFCE works but doesn't look very good
|
||||
// Ubuntu Unity was far too buggy to enable
|
||||
// Ubuntu GNOME does not work, SystemTray.isSupported() returns false
|
||||
String xdg = System.getenv("XDG_CURRENT_DESKTOP");
|
||||
boolean dflt = SystemVersion.isWindows() || SystemVersion.isMac() ||
|
||||
//"XFCE".equals(xdg) ||
|
||||
"KDE".equals(xdg) || "LXDE".equals(xdg);
|
||||
return _context.getProperty(PROP_DTG_ENABLED, dflt);
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback when Start I2PBrowser is clicked in systray
|
||||
*
|
||||
* @since 1.4.0
|
||||
* @return
|
||||
*/
|
||||
public class Starter implements MenuCallback {
|
||||
private final MenuService _ms;
|
||||
public Starter(MenuService ms) { _ms = ms; }
|
||||
public void clicked(MenuHandle menu) {
|
||||
// Thread t = new I2PAppThread(new StarterThread(),
|
||||
//"I2PBrowser-Launcher start", true);
|
||||
// t.start();
|
||||
_log.info("I2P Browser starting up");
|
||||
try {
|
||||
I2PBrowser i2pBrowser = new I2PBrowser(profileDir.getAbsolutePath());
|
||||
String[] args = {"http://proxy.i2p"};
|
||||
i2pBrowser.launchFirefox(0, args);
|
||||
} catch (Exception e) {
|
||||
_log.error("Error starting I2P Browser", e);
|
||||
}
|
||||
_log.info("I2P Browser ran");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.4.0
|
||||
* @return
|
||||
*/
|
||||
public class FlexStarter implements MenuCallback {
|
||||
private final MenuService _ms;
|
||||
public FlexStarter(MenuService ms) { _ms = ms; }
|
||||
public void clicked(MenuHandle menu) {
|
||||
// Thread t = new I2PAppThread(new StarterThread(),
|
||||
//"I2PBrowser-Launcher start", true);
|
||||
// t.start();
|
||||
_log.info("I2P Browser starting up");
|
||||
try {
|
||||
I2PBrowser i2pBrowser = new I2PBrowser(profileDir.getAbsolutePath());
|
||||
i2pBrowser.usability = true;
|
||||
String[] args = {"http://proxy.i2p"};
|
||||
i2pBrowser.launchFirefox(0, args);
|
||||
} catch (Exception e) {
|
||||
_log.error("Error starting I2P Browser", e);
|
||||
}
|
||||
_log.info("I2P Browser ran");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.4.0
|
||||
* @return
|
||||
*/
|
||||
private synchronized void changeState(ClientAppState state) {
|
||||
if (_mgr != null)
|
||||
_mgr.notify(this, state, null, null);
|
||||
}
|
||||
public static void main(String[] args) {
|
||||
I2PBrowserPlugin plugin = new I2PBrowserPlugin();
|
||||
try {
|
||||
plugin.startup();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
#! /usr/bin/env sh
|
||||
. ./config.sh
|
||||
jpackage \
|
||||
--verbose \
|
||||
--type exe \
|
||||
--win-dir-chooser \
|
||||
--win-help-url "https://geti2p.net" \
|
||||
--win-menu \
|
||||
--win-menu-group "I2P Browser Configurer" \
|
||||
--win-shortcut \
|
||||
--win-shortcut-prompt \
|
||||
--win-per-user-install \
|
||||
--license-file LICENSE.md \
|
||||
--icon src/icon.png \
|
||||
--name i2pbrowser \
|
||||
--app-version "$GITHUB_TAG" \
|
||||
--input src/build \
|
||||
--main-jar i2pfirefox.jar \
|
||||
--main-class net.i2p.i2pfirefox.I2PBrowser
|
@ -1,19 +0,0 @@
|
||||
#! /usr/bin/env sh
|
||||
. ./config.sh
|
||||
mkdir -p tmp
|
||||
cp -v LICENSE.md tmp/LICENSE.md
|
||||
rm -rf i2pbrowser-portable
|
||||
jpackage \
|
||||
--verbose \
|
||||
--type app-image \
|
||||
--name i2pbrowser-portable \
|
||||
--app-version "$GITHUB_TAG" \
|
||||
--input src/build \
|
||||
--main-jar i2pfirefox.jar \
|
||||
--resource-dir tmp \
|
||||
--icon src/icon.png \
|
||||
--main-class net.i2p.i2pfirefox.I2PBrowser
|
||||
rm -rf tmp
|
||||
cp -v LICENSE.md i2pbrowser-portable/LICENSE.md
|
||||
rm i2pbrowser-portable.zip -f
|
||||
zip -r i2pbrowser-portable-${GITHUB_TAG}.zip i2pbrowser-portable
|
@ -4,9 +4,7 @@ git pull --all
|
||||
. ./config.sh
|
||||
. "${HOME}/github-release-config.sh"
|
||||
ant distclean jar
|
||||
./windows.sh
|
||||
./windows-exe.sh
|
||||
./windows-portable.sh
|
||||
ant windows-msi-release
|
||||
msisum=$(sha256sum "i2pbrowser-${GITHUB_TAG}.msi")
|
||||
github-release upload --user "${GITHUB_USER}" \
|
||||
--repo "${GITHUB_REPO}" \
|
||||
@ -16,6 +14,7 @@ github-release upload --user "${GITHUB_USER}" \
|
||||
--file "i2pbrowser-${GITHUB_TAG}.msi" \
|
||||
--replace
|
||||
echo "Uploaded MSI package"
|
||||
ant windows-exe-release
|
||||
exesum=$(sha256sum "i2pbrowser-${GITHUB_TAG}.exe")
|
||||
github-release upload --user "${GITHUB_USER}" \
|
||||
--repo "${GITHUB_REPO}" \
|
||||
@ -25,6 +24,7 @@ github-release upload --user "${GITHUB_USER}" \
|
||||
--file "i2pbrowser-${GITHUB_TAG}.exe" \
|
||||
--replace
|
||||
echo "Uploaded EXE package"
|
||||
ant windows-portable-release
|
||||
zipsum=$(sha256sum "i2pbrowser-portable-${GITHUB_TAG}.zip")
|
||||
github-release upload --user "${GITHUB_USER}" \
|
||||
--repo "${GITHUB_REPO}" \
|
||||
|
19
windows.sh
19
windows.sh
@ -1,19 +0,0 @@
|
||||
#! /usr/bin/env sh
|
||||
. ./config.sh
|
||||
jpackage \
|
||||
--verbose \
|
||||
--type msi \
|
||||
--win-dir-chooser \
|
||||
--win-help-url "https://geti2p.net" \
|
||||
--win-menu \
|
||||
--win-menu-group "I2P Browser Configurer" \
|
||||
--win-shortcut \
|
||||
--win-shortcut-prompt \
|
||||
--win-per-user-install \
|
||||
--license-file LICENSE.md \
|
||||
--icon src/icon.png \
|
||||
--name i2pbrowser \
|
||||
--app-version "$GITHUB_TAG" \
|
||||
--input src/build \
|
||||
--main-jar i2pfirefox.jar \
|
||||
--main-class net.i2p.i2pfirefox.I2PBrowser
|
Reference in New Issue
Block a user