Compare commits

...

1093 Commits
0.0.8 ... 1.0.9

Author SHA1 Message Date
idk
047a07a144 page generation update for: 2023-02-12 20:34:11.592702259 +0000 UTC m=+16.220661611 2023-02-12 20:34:11 +00:00
idk
bf0e479172 bump version, update changelog 2023-02-12 20:30:36 +00:00
idk
9ae73cedc1 fix reference to release.number 2023-02-12 20:17:57 +00:00
idk
46be5415bb debian build which automatically configures Tor Browser. I do not think that it has write permission to it's own directory, making Tor Browser updates probably impossible. Don't use it yet. 2023-01-18 06:38:48 +00:00
idk
2e07457135 page generation update for: 2023-01-18 06:17:44.771572675 +0000 UTC m=+90.303360112 2023-01-18 06:17:45 +00:00
idk
408b36c213 page generation update for: 2023-01-18 06:01:48.23392843 +0000 UTC m=+169.394923216 2023-01-18 06:01:49 +00:00
idk
1b77245998 fixup the scripts 2023-01-18 05:57:35 +00:00
idk
5c7bbace94 page generation update for: 2023-01-18 05:21:43.123519064 +0000 UTC m=+59.342657973 2023-01-18 05:21:43 +00:00
idk
00fa22cb0d bump for release 2023-01-18 05:07:54 +00:00
idk
8d9a4551fc remove HTTPS everywhere from all profiles. Generate a Tor Browser install to go inside the Linux jpackage portables/ 2023-01-18 04:35:53 +00:00
idk
98bf6889b8 post-release script tweaks 2023-01-01 05:27:14 +00:00
idk
34b97f706c page generation update for: 2023-01-01 02:58:42.839639106 +0000 UTC m=+16.359383969 2023-01-01 02:58:42 +00:00
idk
5c33d8b86e create zip of the torrent contents and release it 2023-01-01 02:56:07 +00:00
idk
20c481b59a create zip of the torrent contents 2023-01-01 02:50:36 +00:00
idk
60303ae33c add cmd script(valid in both batch and bash) to plugin directory, allowing it to be launched by adding it to routerconsole.browser 2023-01-01 02:43:52 +00:00
idk
cdc51127e0 bump versions 2023-01-01 02:37:26 +00:00
idk
9698715117 remove a bunch of static reference bull 2023-01-01 01:45:50 +00:00
idk
fed53350cb page generation update for: 2022-12-31 22:23:00.823477148 +0000 UTC m=+14.444190363 2022-12-31 22:23:00 +00:00
idk
09bd2fe4b2 page generation update for: 2022-12-31 22:20:56.231132457 +0000 UTC m=+15.828487886 2022-12-31 22:20:56 +00:00
idk
ccff3df856 add mozilla working directories to .gitignore 2022-12-31 22:20:12 +00:00
idk
b0da8bd494 optimizations for running in Tor Browser, optimizations to keep I2P TLD out of search engines 2022-12-31 22:12:12 +00:00
idk
82cb3da2fe build adjustments 2022-12-31 21:31:06 +00:00
idk
0b9d784810 page generation update for: 2022-12-31 20:03:28.979605024 +0000 UTC m=+15.020834097 2022-12-31 20:03:29 +00:00
idk
cacf832cb6 page generation update for: 2022-12-31 20:01:50.557119275 +0000 UTC m=+15.437837517 2022-12-31 20:01:50 +00:00
idk
a06fe41b25 add docs 2022-12-31 20:00:56 +00:00
idk
8acde05618 Only try to set env vars when using nearby shell 2022-12-23 19:41:55 +00:00
idk
13b5aeb9ee Set HOME to avoid creating .mozilla directory in the real HOME 2022-12-23 18:36:04 +00:00
idk
2035e590c2 set portable envars when running firefox 2022-12-23 06:20:42 +00:00
idk
331b8a4864 set portable envars when running firefox 2022-12-23 06:20:09 +00:00
idk
7d0a3145f0 releaser script fixups 2022-12-23 01:44:01 +00:00
idk
99bb79b214 page generation update for: 2022-12-23 01:26:07.31422539 +0000 UTC m=+12.030369717 2022-12-23 01:26:07 +00:00
idk
55944cca20 page generation update for: 2022-12-23 01:15:20.7617095 +0000 UTC m=+12.282960383 2022-12-23 01:15:20 +00:00
idk
eeac9d8fe8 page generation update for: 2022-12-23 01:11:22.751329045 +0000 UTC m=+12.309404336 2022-12-23 01:11:22 +00:00
idk
fa71b80c89 page generation update for: 2022-12-23 00:50:58.3605385 +0000 UTC m=+12.660061715 2022-12-23 00:50:58 +00:00
idk
125ed9bdda switch to caching more packages in docker build 2022-12-23 00:37:28 +00:00
idk
9a5c4275a6 page generation update for: 2022-12-22 22:49:59.436679945 +0000 UTC m=+11.947591846 2022-12-22 22:49:59 +00:00
idk
de99b8a7a6 update fedora buildscript 2022-12-22 22:46:14 +00:00
idk
cb19e43dcf page generation update for: 2022-12-22 22:08:59.97002705 +0000 UTC m=+12.523295563 2022-12-22 22:09:00 +00:00
idk
efe4521b1c update license.txt file in the plugin 2022-12-22 22:05:15 +00:00
idk
52e066692f Remove templates from plugin 2022-12-22 22:03:48 +00:00
idk
5337a45848 remove some irrelevant stuff from the plugin 2022-12-22 21:58:01 +00:00
idk
140b0ffc16 remove some irrelevant stuff from the plugin 2022-12-22 21:57:24 +00:00
idk
16ef918fc1 fix build.md 2022-12-22 05:30:01 +00:00
idk
2f7f18513b fix build.md 2022-12-22 05:28:09 +00:00
idk
39a6ac282f fix build.md 2022-12-22 05:22:09 +00:00
idk
d80c000e21 page generation update for: 2022-12-22 05:18:40.375596838 +0000 UTC m=+16.337373273 2022-12-22 05:18:40 +00:00
idk
f12930b6f0 fix build.md 2022-12-22 05:14:02 +00:00
idk
0fae88de8b fix build.md 2022-12-22 05:11:45 +00:00
idk
b3f0834fa2 fix build.md 2022-12-22 05:01:15 +00:00
idk
e0150b3fab fix build.md 2022-12-22 04:57:52 +00:00
idk
755e5d99a6 page generation update for: 2022-12-22 04:57:20.180990518 +0000 UTC m=+18.029179108 2022-12-22 04:57:20 +00:00
idk
73e7542d9e fix build.md 2022-12-22 04:56:52 +00:00
idk
13b1d100af work on torrent updates 2022-12-22 04:54:49 +00:00
idk
e019560638 work on torrent updates 2022-12-22 04:53:48 +00:00
idk
6ea0ab8973 work on torrent updates 2022-12-22 04:53:07 +00:00
idk
bf1dfe7a84 work on torrent updates 2022-12-22 04:50:51 +00:00
idk
a704aaed47 work on torrent updates 2022-12-22 04:47:04 +00:00
idk
28ff4fc81a work on torrent updates 2022-12-22 04:44:35 +00:00
idk
9a3a4f6738 work on torrent updates 2022-12-22 04:44:15 +00:00
idk
33f39f53f8 work on torrent updates 2022-12-22 04:43:00 +00:00
idk
622c75d28f work on torrent updates 2022-12-22 04:36:09 +00:00
idk
cb99141d8e work on torrent updates 2022-12-22 04:35:09 +00:00
idk
4525d904b3 work on torrent updates 2022-12-22 04:34:54 +00:00
idk
3dcb4fe9f9 work on torrent updates 2022-12-22 04:27:44 +00:00
idk
fea3511c48 work on torrent updates 2022-12-22 04:17:41 +00:00
idk
5279b59d3c work on torrent updates 2022-12-22 04:16:46 +00:00
idk
01b8a41fdb work on torrent updates 2022-12-22 04:14:30 +00:00
idk
854d38288a work on torrent updates 2022-12-22 04:04:47 +00:00
idk
1fcc0101e6 work on torrent updates 2022-12-22 04:04:36 +00:00
idk
2da9e0ae60 work on torrent updates 2022-12-22 04:04:16 +00:00
idk
d701f52403 work on torrent updates 2022-12-22 04:01:56 +00:00
idk
9586f534f0 work on torrent updates 2022-12-22 03:59:39 +00:00
idk
b9254a6be0 work on torrent updates 2022-12-22 03:59:25 +00:00
idk
6c0c7f5ca8 work on torrent updates 2022-12-22 03:55:06 +00:00
idk
a10d134c04 work on torrent updates 2022-12-22 03:53:56 +00:00
idk
e931b01a54 work on torrent updates 2022-12-22 03:53:12 +00:00
idk
8553e4969f work on torrent updates 2022-12-22 03:49:16 +00:00
idk
63808a2c01 work on torrent updates 2022-12-22 03:48:04 +00:00
idk
a70efa599c work on torrent updates 2022-12-22 03:41:52 +00:00
idk
de61c4faea work on torrent updates 2022-12-22 03:40:34 +00:00
idk
32beb67de8 work on torrent updates 2022-12-22 03:40:25 +00:00
idk
8969392e0f work on torrent updates 2022-12-22 02:49:14 +00:00
idk
87ff908dcf work on torrent updates 2022-12-22 00:50:19 +00:00
idk
b059186b90 work on torrent updates 2022-12-22 00:48:11 +00:00
idk
ac677fbe61 work on torrent updates 2022-12-22 00:45:13 +00:00
idk
4d69b8af54 work on torrent updates 2022-12-22 00:43:32 +00:00
idk
274691abee work on torrent updates 2022-12-22 00:43:22 +00:00
idk
79a24df3ba work on torrent updates 2022-12-22 00:42:55 +00:00
idk
b57f5d7e11 work on torrent updates 2022-12-22 00:36:52 +00:00
idk
93e99423e5 work on torrent updates 2022-12-21 23:48:15 +00:00
idk
ca06293cea work on torrent updates 2022-12-21 23:41:39 +00:00
idk
c7e4199f53 work on torrent updates 2022-12-21 23:41:01 +00:00
idk
656ce18d82 work on torrent updates 2022-12-21 23:23:32 +00:00
idk
9c9481f7f9 work on torrent updates 2022-12-21 23:20:14 +00:00
idk
746ec3aae5 work on torrent updates 2022-12-21 23:20:05 +00:00
idk
f64d0eb1b4 work on torrent updates 2022-12-21 23:18:51 +00:00
idk
36f0a7d35c work on torrent updates 2022-12-21 23:17:59 +00:00
idk
d97ab702f1 work on torrent updates 2022-12-21 23:17:33 +00:00
idk
191e69ea76 work on torrent updates 2022-12-21 23:14:52 +00:00
idk
ca965bdc83 work on torrent updates 2022-12-21 23:13:40 +00:00
idk
8d603ba8d2 update menu order 2022-12-21 05:33:27 +00:00
idk
b4b7e385c2 Start LibreWolf Updater thingy 2022-12-21 05:06:06 +00:00
idk
3c9a34bc5f page generation update for: 2022-12-21 03:12:01.026757623 +0000 UTC m=+36.210261960 2022-12-21 03:12:01 +00:00
idk
5e049686b5 update gitignore 2022-12-21 03:05:39 +00:00
idk
9f010cef37 page generation update for: 2022-12-21 03:02:31.534532444 +0000 UTC m=+37.692257647 2022-12-21 03:02:32 +00:00
idk
a06c90095b move platform-specic pages to docs 2022-12-21 03:01:51 +00:00
idk
727af7efaa move systray variables 2022-12-19 16:51:54 +00:00
idk
9c4c85d8f0 add logging 2022-12-19 16:44:56 +00:00
idk
9ef5a7e874 update icon 2022-12-19 16:29:14 +00:00
idk
8ed4f3a03c add b64 of favicon 2022-12-19 16:06:36 +00:00
idk
47b3149816 add b64 of favicon 2022-12-19 16:05:48 +00:00
idk
9696aeeee8 update icon 2022-12-19 16:01:06 +00:00
idk
3f66384abf page generation update for: 2022-12-19 03:56:15.912154993 +0000 UTC m=+19.666651899 2022-12-19 03:56:16 +00:00
idk
4562d736c6 update icon 2022-12-19 03:54:45 +00:00
idk
d5ff2f06e7 update icon 2022-12-19 03:49:16 +00:00
idk
53e748506e update icon 2022-12-19 03:41:03 +00:00
idk
54cbd53ea0 add script to test everything at once 2022-12-19 03:31:18 +00:00
idk
d3f426b52b update version, changelog 2022-12-19 03:02:02 +00:00
idk
b8f894ec57 page generation update for: 2022-12-19 02:55:21.957471899 +0000 UTC m=+17.193542892 2022-12-19 02:55:22 +00:00
idk
d55f8d82ed build plugin during release phase 2022-12-19 02:53:54 +00:00
idk
1fa5e1cf17 update client.config 2022-12-19 02:13:27 +00:00
idk
7e6090b1d2 Checkin plugin version 2022-12-19 01:47:52 +00:00
idk
3c8fa40289 put plugin version it's own class 2022-12-19 01:46:54 +00:00
idk
420d034fa2 Don't use as many static variables in I2pBrowser.Java, fully enable usage as a console plugin 2022-12-19 00:28:44 +00:00
idk
25e565d2fb work on plugin usage 2022-12-18 23:21:45 +00:00
idk
88f9a7726a more console plugin improvements and fixes 2022-12-18 23:06:57 +00:00
idk
d7928fd854 re-add javadoc into docs directory 2022-12-18 22:20:21 +00:00
idk
3703fb2ecf automatically generate torrent updates 2022-12-18 22:18:49 +00:00
idk
a7c82fdc3c include jars in update files 2022-12-18 21:25:12 +00:00
idk
86b033370f include jars in update files 2022-12-18 21:24:01 +00:00
idk
938889bc91 generate torrents 2022-12-18 21:20:01 +00:00
idk
ef33fca439 update-as-torrent prep 2022-12-18 21:04:19 +00:00
idk
f548cae846 Allow launching as a console plugin 2022-12-18 20:58:34 +00:00
idk
e8cdfb27d8 Work on the console plugin version 2022-12-18 20:31:48 +00:00
idk
aee3505da0 update index.html 2022-11-23 00:28:54 -05:00
idk
a68166ec2d update OSX.html 2022-11-22 23:58:31 -05:00
idk
a05ff0bfd2 update LINUX.html 2022-11-22 23:58:29 -05:00
idk
19a17df75c update index.html 2022-11-22 23:58:23 -05:00
idk
55872ee38e remove cmd scripts from jar for now 2022-11-22 23:56:18 -05:00
idk
7041cca7c9 update changelog 2022-11-22 23:55:19 -05:00
idk
92613e1dd4 update WINDOWS.html 2022-11-22 23:48:52 -05:00
idk
8bbf061a77 update VERSION.html 2022-11-22 23:48:50 -05:00
idk
cc2d3a014a update OSX.html 2022-11-22 23:48:48 -05:00
idk
c26d9cad00 update LINUX.html 2022-11-22 23:48:46 -05:00
idk
b4e537bdf3 update LICENSE.html 2022-11-22 23:48:45 -05:00
idk
b9ea2530d0 update CHANGES.html 2022-11-22 23:48:43 -05:00
idk
83786df865 update index.html 2022-11-22 23:48:41 -05:00
idk
f4304d7745 update changelog 2022-11-22 23:46:41 -05:00
idk
0c06e2d8ff check in our overrides 2022-11-22 23:38:57 -05:00
idk
9463827d80 fix some issues with forcing re-generation of profiles at build-time 2022-11-22 23:38:03 -05:00
idk
5c2f81e7c2 Add versionmd to jar target 2022-11-22 23:26:05 -05:00
idk
59d1e0266d updates for version 1.0.5, check in systray test 2022-11-22 23:23:31 -05:00
idk
8f5316d2e4 also create extension directory
Former-commit-id: f4941a18dc24354a63a0eb2d6681257b837378b4
2022-11-20 13:15:29 -05:00
idk
bd2455713e create directories for profile in profile generation phase
Former-commit-id: a79245de81d4449203359fdbc34c6dca885268a8
2022-11-20 13:13:23 -05:00
idk
32943d8336 create directories for profile in profile generation phase
Former-commit-id: 0342e81ea3d62f87b934d7392888e3a70fd2213c
2022-11-20 13:11:18 -05:00
idk
78e4f54e63 remove artifacts from build
Former-commit-id: fa0183a9c5288779939a7460160c9eabcef26285
Former-commit-id: 04c69b0d959e17339cafa4afddf28c716b577675
2022-11-20 12:26:07 -05:00
idk
a1e632bf98 add tor-browser downloading script that works for Windows hosts
Former-commit-id: e7d692e4c917f5e39c33545c6b2495d7e3c336c7
Former-commit-id: 9983f67111f4bea6748e3bc76104a1ceec5ed8ab
2022-11-15 23:30:20 -05:00
idk
02a93d28af move test scripts to own directory
Former-commit-id: 4d0cb523dc680859b006c3acebd757d39708b426
Former-commit-id: fc6d8212cb62d04eb038513f4360d93ae53fbb15
2022-11-15 23:29:09 -05:00
idk
e8d32c2159 Merge branch 'main' of i2pgit.org:idk/i2p.plugins.firefox
Former-commit-id: 9d90f228a8dbf131464236834b5bb517061d6792
Former-commit-id: 57a9772e177de1e26e5a48c770444640ea574803
2022-11-11 19:01:50 -05:00
idk
f853b5e358 add link to build docs in readme, move defaultBrowser iexplore defaults to correct part of function
Former-commit-id: 0ba701fc27fb15132bb62616d4915cf28fabfb49
Former-commit-id: 7c81df78c46e7ab624a8e93718d76918363c3a79
2022-11-11 19:00:41 -05:00
idk
951edeab92 add link to build docs in readme, move defaultBrowser iexplore defaults to correct part of function
Former-commit-id: 457302777b291ab2607c175535174b3219c9d468
Former-commit-id: b349d01e3b2c9dbd007db3e56b489d64613f1b8b
2022-11-11 18:58:48 -05:00
8228750fe5 always exit, disable systray when not running browser on OSX
Former-commit-id: 864068c5e4556640cf57043577fd2a3bdab27299
Former-commit-id: 11836fe4fced5f304ed98b7b79dbda599a91ad76
2022-11-09 23:54:24 -05:00
3c47eeb5f9 osx fixes when built as dmg
Former-commit-id: 1eaf548ed1ef1d94d2e8aa586271ef031aeef94f
Former-commit-id: 95118093f6fadea30fa1f4a991532d35d0bfa242
2022-11-09 23:21:36 -05:00
idk
2a70031e54 update docs/USAGE.html
Former-commit-id: bdcfadd36bedb0ba1795195bacbdbefb26869724
Former-commit-id: 38f044779fffdf7f7102145dbbc168113b009f7d
2022-11-07 12:35:40 -05:00
idk
93bccb67fc update docs/TODO.html
Former-commit-id: fd7241b152addef31ba9e14fac9bc200dbf11be9
Former-commit-id: 17f97ac1d704777bc0417be01f17d3dc3847fcb7
2022-11-07 12:35:38 -05:00
idk
d8d495efbf update docs/RELEASES.html
Former-commit-id: f37b1bbda407c5853b3240f0deba3765fa98a4c5
Former-commit-id: 8d55b465c6f8530df624c9ec4941bb0d838e5834
2022-11-07 12:35:36 -05:00
idk
bdadf667a7 update docs/PACKAGES.html
Former-commit-id: a00fedf3bccdd9b8e0c8e6c1b49add27a8d9127d
Former-commit-id: b4b2cbbbeba836bb6a3c6de57de2bc4e2b7af43e
2022-11-07 12:35:34 -05:00
idk
d87c81726e update docs/I2PPureJavaBrowser.html
Former-commit-id: 11960354c713d1c370a2872f9e3e615bf93ae726
Former-commit-id: e403739ea7c9d44b8d9e5041043fecc032880f96
2022-11-07 12:35:31 -05:00
idk
98a4362a9d update docs/I2PGenericUnsafeBrowser.html
Former-commit-id: a83782dba25b124c6ca0768c7dbca22fd21b538d
Former-commit-id: 678c06f5e9a4dceae34d14ed442b9edaace44346
2022-11-07 12:35:29 -05:00
idk
4e7baaf14a update docs/I2PFirefoxProfileUnpacker.html
Former-commit-id: fdf605d59b444fbad92c92cae152032eb088b555
Former-commit-id: f1fa0221a83c6b1c33649a96b150dbc1c835e391
2022-11-07 12:35:27 -05:00
idk
f193a3fb2f update docs/I2PFirefoxProfileChecker.html
Former-commit-id: bca0a1f0434f9a018ad7c34a048d6080c2a2ea99
Former-commit-id: 3723a49a81ff42197c9382d73a9289541f783e93
2022-11-07 12:35:26 -05:00
idk
d94826cf26 update docs/I2PFirefoxProfileBuilder.html
Former-commit-id: 2492e97c20325d36f88d850079fbc798eab732d6
Former-commit-id: 46606be3238c367da9fc0637d032a553751f3769
2022-11-07 12:35:23 -05:00
idk
7e7359e363 update docs/I2PFirefox.html
Former-commit-id: 7636eb32abe094fddbf00a95dbb11f7b16cb1d1c
Former-commit-id: 3fe2618d2acf53293ec884489e3d891dc6870694
2022-11-07 12:35:21 -05:00
idk
47ab02193c update docs/I2PCommonBrowser.html
Former-commit-id: 455500c76b975fedd9e8405824fb67c6bd713bff
Former-commit-id: 8ad33fe96fadcb8c563606241d1305fd8124c3ba
2022-11-07 12:35:19 -05:00
idk
1c7a55e8ad update docs/I2PChromiumProfileUnpacker.html
Former-commit-id: 26a449880f605a47f64a6f00f5a9a4cf0535dc4b
Former-commit-id: ce5f1052f489f0be47cc62f234ab36b19193dcff
2022-11-07 12:35:17 -05:00
idk
44496f35dc update docs/I2PChromiumProfileChecker.html
Former-commit-id: 19d76de3d3749912737e5b2b71faaddbf66c9027
Former-commit-id: f3ab72d04df3869cda41d902075305e9900564a2
2022-11-07 12:35:15 -05:00
idk
1bea1636bf update docs/I2PChromiumProfileBuilder.html
Former-commit-id: 112ee3360f03095bcbcf77695ce63bafc3cae503
Former-commit-id: 49c63cdeca73fdcae9b602cdd2816545d93f6391
2022-11-07 12:35:13 -05:00
idk
9842ba6d43 update docs/I2PChromium.html
Former-commit-id: a0972de06dc9b2046f9881904a2eb9bd4d2d4f25
Former-commit-id: dff0b8b4448898222d1939a8a1b3623afab5d54c
2022-11-07 12:35:11 -05:00
idk
207171bbf3 update docs/I2PBrowser.html
Former-commit-id: 9d8f7cc2175a50205345732f4773144db238c99e
Former-commit-id: 959a825394754472312b95a30befc959951ababd
2022-11-07 12:35:09 -05:00
idk
d70ede2913 update docs/EXAMPLES.html
Former-commit-id: 2e8a1db78cce0906c4d2200180a0cfd2a223310f
Former-commit-id: 91412bc920eeb60ab0fc6a0129efc7a853ee401e
2022-11-07 12:35:07 -05:00
idk
46b0b3cf20 update docs/CONFIG.html
Former-commit-id: 365013696140336936abc130629cd368875868af
Former-commit-id: dd7f38a7c344a58ea27cd54be678d6e195792801
2022-11-07 12:35:05 -05:00
idk
aadfca6477 update docs/BUILD.html
Former-commit-id: 60222c5c46648fc701c4ee8d89b03129d6306574
Former-commit-id: df573f46a83da7943211fe90e96ce3c1b6840243
2022-11-07 12:35:03 -05:00
idk
46cc35d30a update WINDOWS.html
Former-commit-id: 68b2fad4df1508c4b34bc711528e8b0993a2138d
Former-commit-id: cbf8a6d781f167bfa5d4aa7fb12c7db83544ac90
2022-11-07 12:35:01 -05:00
idk
5f86e6b784 update VERSION.html
Former-commit-id: ea32c2677b497552bd4566d4a3ed07d94fd737d5
Former-commit-id: 8bf44d92605a532ca7ade0816738c48c62c09ae3
2022-11-07 12:34:59 -05:00
idk
e33fe4631d update OSX.html
Former-commit-id: 6fbe261297eccadc7749e33768f55a22466aa929
Former-commit-id: 7f81c72efb29814866d6c6ce251a93820124ec35
2022-11-07 12:34:57 -05:00
idk
1a19975887 update LINUX.html
Former-commit-id: 5157c666ff39efd429439f17aba28f7b87bd7fe4
Former-commit-id: 9a07b7958526884b989b7eedf60329b4cae2f408
2022-11-07 12:34:56 -05:00
idk
95b96b495a update LICENSE.html
Former-commit-id: 1d6d1cd6ad23bbe8861a0203fae2658a6906713c
Former-commit-id: 821da15be403c9e0d5f15a18c996dcabbec72841
2022-11-07 12:34:54 -05:00
idk
b98e2bdb6d update CHANGES.html
Former-commit-id: e1863b447f2591b1e14312eecb412fda320cd956
Former-commit-id: 3ded3c99958cc287bdeebd88bd7aaecf56803d3e
2022-11-07 12:34:51 -05:00
idk
a4ea7cf9fa update index.html
Former-commit-id: 0859860e75889a31d84d82459c8c977df8de2427
Former-commit-id: 69292d5167304d2c8790ff81fc8bd3f500c96b6f
2022-11-07 12:34:49 -05:00
idk
826d6082c2 move more docs to docs directory
Former-commit-id: 027e197b614effe1dd6fc76168be1a98f11d4807
Former-commit-id: 53e1fa57c53f9a1fb0666898a9d0989b123b3f48
2022-11-07 12:34:35 -05:00
idk
a1803498dc update docs/USAGE.html
Former-commit-id: 5bdb4f221150ff3c26cbb5ee2d189997c31270ef
Former-commit-id: d52624030f134550183ab6821c3fec75281a4591
2022-11-07 12:33:31 -05:00
idk
1f167bbeab update docs/TODO.html
Former-commit-id: 69b11ea16bafe35db4f1726033f5ec8d66850cf5
Former-commit-id: f4e27dc61977ca21c20f499ced94bea990195948
2022-11-07 12:33:29 -05:00
idk
39ec834b0f update docs/PACKAGES.html
Former-commit-id: 6792cb27ebb5356127118fc6bc3821e31cb24613
Former-commit-id: d5329e2e7eb28ddcec830ccf1aaafab7ccc43e54
2022-11-07 12:33:27 -05:00
idk
e94f8eb9b5 update docs/I2PPureJavaBrowser.html
Former-commit-id: 6a1febc731fa39a0e9ee0a6a201bec58c1fe5100
Former-commit-id: 6e4f6e4f7d240fd3bedb052959572d503258a41b
2022-11-07 12:33:26 -05:00
idk
bf38939b7b update docs/I2PGenericUnsafeBrowser.html
Former-commit-id: fd14637007749b4f5e3416fe2f492a36b74ce333
Former-commit-id: 77c73e69a295d64556a395c442c25101ca6319c1
2022-11-07 12:33:23 -05:00
idk
5d98bcae91 update docs/I2PFirefoxProfileUnpacker.html
Former-commit-id: bd5a306c9d49acfb105c9dfa240ee2004aabaa49
Former-commit-id: 96d6c2dc74a2b1713c833894b1a11083c87af74c
2022-11-07 12:33:21 -05:00
idk
769ff2ccd9 update docs/I2PFirefoxProfileChecker.html
Former-commit-id: 2d1b1d823c16c56ca4adc0cb5f87c3f6cc68cdcc
Former-commit-id: da321774a1f9800600f6e140c1004732f9353ded
2022-11-07 12:33:19 -05:00
idk
d06b21fcfc update docs/I2PFirefoxProfileBuilder.html
Former-commit-id: 1cd6183cd9481c8184b12646693c81d22d5da438
Former-commit-id: 3648f3f7e011bc754d77e8e313a608154091942d
2022-11-07 12:33:16 -05:00
idk
16da7d9040 update docs/I2PFirefox.html
Former-commit-id: 85fcc5c04703f4f0a07e2f4740c1ff5f9220a12a
Former-commit-id: 10068aac76f340adb09aa2fdb758d9347a5992c6
2022-11-07 12:33:14 -05:00
idk
26a922c4ce update docs/I2PCommonBrowser.html
Former-commit-id: 1ce980a83c49b38a781b6c746d16a85be5f736be
Former-commit-id: ca39709caed98e96d31e99f561c9561426e043e3
2022-11-07 12:33:12 -05:00
idk
792070376f update docs/I2PChromiumProfileUnpacker.html
Former-commit-id: d57bf80dbf967f050b9eb06d39a34e2dc1ec4712
Former-commit-id: 9182b5f89a5ed35b8402e59adcb585355b7ef6c1
2022-11-07 12:33:10 -05:00
idk
631fc83cc8 update docs/I2PChromiumProfileChecker.html
Former-commit-id: 5cd70d261987ee891d44b55c56a086e64fdb459e
Former-commit-id: 9e4a08be8769b021138aa5ac78748891d566a523
2022-11-07 12:33:08 -05:00
idk
ac2bddb63d update docs/I2PChromiumProfileBuilder.html
Former-commit-id: 35df9b2033303477e45ee561481f692d4c843a7b
Former-commit-id: 9bdb4680fee26dd8f56a4f31914a933206e65755
2022-11-07 12:33:05 -05:00
idk
7ed42b67ed update docs/I2PChromium.html
Former-commit-id: 89bd406e92411ae4f0cce3f46854faeffb039b39
Former-commit-id: 0f7fca3be63be552e648bbf5ff5a302bb0d8d1c0
2022-11-07 12:33:03 -05:00
idk
da0c085a7f update docs/I2PBrowser.html
Former-commit-id: 1bd8c7254d875bd4aec905c896f055510d52f8b1
Former-commit-id: 4928d6d0712cca439a2ab5bb084fb384b98eef16
2022-11-07 12:33:01 -05:00
idk
b7c30d8889 update docs/EXAMPLES.html
Former-commit-id: c3d7aceb0ff0916a31a42813fbfc2f8d22802653
Former-commit-id: a734ee0e98de63f6acd6e23363eab49937482b59
2022-11-07 12:32:59 -05:00
idk
7f3bc617c0 update docs/CONFIG.html
Former-commit-id: 3d14a756c69c6fb3b92c9dfd3ab3c556d3bfd9dc
Former-commit-id: 941b4c4a2d2021d4b9eee9a46a345aa8ff91edd7
2022-11-07 12:32:57 -05:00
idk
31287df121 update docs/BUILD.html
Former-commit-id: 947a83a740cafa30bac280a124a8dca6cb039c37
Former-commit-id: cb2a92b471f57ed16275104c0d51a02c8ead6d62
2022-11-07 12:32:55 -05:00
idk
b7f3c834a9 update WINDOWS.html
Former-commit-id: 9175a92a7f32478705383ef07c2b643ed423904e
Former-commit-id: 35033723c84594e15c7d7739169160f3a1c0ec04
2022-11-07 12:32:53 -05:00
idk
0396302f3a update VERSION.html
Former-commit-id: 597a2e0a9a878b107c3db962372f8daeb3a88e10
Former-commit-id: 2d6a901a759b6ce02565e22a011eece4de855754
2022-11-07 12:32:51 -05:00
idk
821510dea0 update RELEASES.html
Former-commit-id: aec04f43738670b13d8676c1ac4895361a7aff32
Former-commit-id: 1f5b86f6bde37dfbf978249afc09d949a056ca45
2022-11-07 12:32:49 -05:00
idk
537eb8c561 update OSX.html
Former-commit-id: 7e47cda09d1c8d62ac0b15472aad38b4dc3540c6
Former-commit-id: 93fe42c90c9934b5adae923334e8feaa17b63c70
2022-11-07 12:32:47 -05:00
idk
cbd22b7fe9 update LINUX.html
Former-commit-id: c63d733733157024068d54a0b1694be409814c43
Former-commit-id: 74417887613ea4048f81384b8da630486fb95d03
2022-11-07 12:32:45 -05:00
idk
58bec96215 update LICENSE.html
Former-commit-id: 6aa2c17012007db785ae9eea682279249db236a5
Former-commit-id: 1eb168edaf3c5d9fff4115d7ea2f115f8c3604f7
2022-11-07 12:32:43 -05:00
idk
4ec905f204 update CHANGES.html
Former-commit-id: 7da4764afbc061564d4acf36ead7b568c8fe4866
Former-commit-id: 0f0aa38ec21636f42e00d381cf4a73ebe1d151d0
2022-11-07 12:32:41 -05:00
idk
23b6cc05f6 update index.html
Former-commit-id: 59b91a0a6426278c4ae041c69788bc8b3b708093
Former-commit-id: 27adf05add25ceac38d0004ff43d3929976ed6fe
2022-11-07 12:32:38 -05:00
idk
f6d214be34 move javadocs to docs dir
Former-commit-id: d9b996a9220f6d9110cabbd948a4589779dfcbd2
Former-commit-id: 0a28cb9f0854dac26ee82ca9ada1cf6d97e1daec
2022-11-06 21:55:54 -05:00
idk
a8162848bf update VERSION.html
Former-commit-id: f78cf12d005f587a5e16fef1150bd4a4024a7e4c
Former-commit-id: 3979db01eebfdc05acf0ffa70eb0d743c8ed24f4
2022-11-06 21:49:41 -05:00
idk
ed39c87813 update OSX.html
Former-commit-id: dabd8752b4ed7bea62a9be1475fccae2de14996d
Former-commit-id: b5ae14caf52c0ef7cba827d0545f6522fe1fd509
2022-11-06 21:49:32 -05:00
idk
9ea3be441e update LINUX.html
Former-commit-id: 81fa8a283893da16f0ad312805e3c47c3834e10f
Former-commit-id: 923316768a67c35187554a91c0e5630154b5515d
2022-11-06 21:49:30 -05:00
idk
038dccad5d update I2PFirefoxProfileBuilder.html
Former-commit-id: c5cc8e6567c0799f287c765bb91c978ad1d7835b
Former-commit-id: 5cf87926514124a4c94dc8d1a7f6e34282af2ada
2022-11-06 21:49:17 -05:00
idk
3513d2d86d update I2PBrowser.html
Former-commit-id: cbaf5d4d4aebf6cf2c6401475854211ed3837f99
Former-commit-id: 2bc1bbeacda01951de3a3a0db9a5ce1b20d526a3
2022-11-06 21:49:01 -05:00
idk
9b686c667b update index.html
Former-commit-id: b56f332b5b0c63105c4fc8cae60bd07ce455c6b1
Former-commit-id: c80b1de740bedea108ac5a10bb2749bc0bc0dcf0
2022-11-06 21:48:50 -05:00
idk
24bded7e3d update release
Former-commit-id: bd230b963898d60797db8d1d8244d0fe16dd769c
Former-commit-id: 5be82c9c6ed19c1cf40163d347e36cab851ebf50
2022-11-06 21:45:42 -05:00
idk
992e0a038d move PWA selector code to before profile validation. register shutdown hook when systray launches
Former-commit-id: 770776b088a5c31ac94ede711814b07a94eb2748
Former-commit-id: bf7ed3a10a036a614dd8866ea152cf00fce889f0
2022-10-31 12:15:29 -04:00
idk
a13eab4f05 update BUILD.html
Former-commit-id: 2dd314f253cccaeb49e0cf85568ea9dffccccce7
Former-commit-id: 1dbf87027dbf07b097220d1f6c75723906818876
2022-10-24 14:52:03 -04:00
idk
762aaeaf3d update index.html
Former-commit-id: 7b018a984590592b07c3a62d5b72c2e34312a8d5
Former-commit-id: 27bb16fad10bb7af989876296f9f3ac660375449
2022-10-24 14:52:01 -04:00
idk
5dd41bc2c7 uncomment torsocks call
Former-commit-id: 0b6e1274154225594348ad0695f965e221063e2e
Former-commit-id: dfdbc151e15d90ca1b61f6301ef4192676a7e117
2022-10-24 13:53:35 -04:00
idk
b2d6f67af3 update index.html
Former-commit-id: eb0bc93df6
Former-commit-id: e2fe7490197da408b3ad22bbb32fe69e31604825
2022-10-24 00:29:31 -04:00
idk
24b28359f0 update OSX.html
Former-commit-id: e61cf40b8f
Former-commit-id: 0be680a55d3d2984a9a80605a88e3a1b5b1c4893
2022-10-24 00:17:39 -04:00
idk
a0c6760ec7 update index.html
Former-commit-id: 1a79e565c3
Former-commit-id: 02ccc2ec1e9e7827240b725ef37e635489edb4e4
2022-10-24 00:17:09 -04:00
idk
908fc6021d update WINDOWS.html
Former-commit-id: 2633f86920
Former-commit-id: c45932a2c8970eb8e6fb6077af2cc9f32c2ea97b
2022-10-24 00:16:03 -04:00
idk
5116d19e8f update LINUX.html
Former-commit-id: 9f9e898803
Former-commit-id: dda28293ab38a9197c585019f887bf04c07887d3
2022-10-24 00:15:53 -04:00
idk
15c0b65c91 update index.html
Former-commit-id: 41c7e7df97
Former-commit-id: 752104559d69a9a8acbdff4642cc838986a8da58
2022-10-24 00:15:25 -04:00
idk
355d6d6512 add releases to instructions
Former-commit-id: 85fa719f39
Former-commit-id: 038ca588e5f886c270d61defed84e9790fa2c554
2022-10-24 00:14:41 -04:00
idk
32a5fcfeb4 update LINUX.html
Former-commit-id: c602ac151b
Former-commit-id: 7a6a393556f013ec3476eb0ed3a5e2f32ead9d91
2022-10-24 00:11:14 -04:00
idk
54ddd09b80 update I2PGenericUnsafeBrowser.html
Former-commit-id: 376aeb63e7
Former-commit-id: d48d0024556b2bf8099ff8bcf0411973e201e859
2022-10-24 00:11:09 -04:00
idk
fef6726bab update I2PFirefox.html
Former-commit-id: 24f61a5fc0
Former-commit-id: e92680ad423b359d929f3cd3c53c51a5c4b72a52
2022-10-24 00:11:04 -04:00
idk
d10893cce1 update I2PCommonBrowser.html
Former-commit-id: fd476b8a6e
Former-commit-id: bfe3369d466614c39ccb14e7889dc0a12cc44456
2022-10-24 00:11:02 -04:00
idk
580eca779c update I2PChromium.html
Former-commit-id: be19811fed
Former-commit-id: b9286b588efee289b1277fa553757f5acc6b815f
2022-10-24 00:10:56 -04:00
idk
6543d1e95b update index.html
Former-commit-id: 1d54ea8358
Former-commit-id: 4ac43423234fede06c046b5c63cb4de551ff423c
2022-10-24 00:10:47 -04:00
idk
d95237d5e6 update gitignore, shift testing around a bit
Former-commit-id: 38f65fffe0
Former-commit-id: 0512bcb79ca62ba18f37467908c99f3b5977faca
2022-10-24 00:06:27 -04:00
idk
26a54cf103 update WINDOWS.html
Former-commit-id: 2685d2cb74
Former-commit-id: 9348840fb92a205c4b3c4b987f5eeeb42f344105
2022-10-24 00:01:05 -04:00
idk
06adaa8d80 update VERSION.html
Former-commit-id: ec3afa914e
Former-commit-id: d660ce68b516a3fca64ed72f02304a3ce4901986
2022-10-24 00:01:04 -04:00
idk
bfac6ddc51 update USAGE.html
Former-commit-id: dbb7dfa5f2
Former-commit-id: da57f7b1993f0160d8b420ceba6648c7af03776b
2022-10-24 00:01:02 -04:00
idk
dd08db19d6 update TODO.html
Former-commit-id: fe17e3563b
Former-commit-id: 8c3bccaa94d12cbd4a262c5d55eb2db37b9224cc
2022-10-24 00:01:00 -04:00
idk
fd8b58307c update RELEASES.html
Former-commit-id: 8fec4f6b22
Former-commit-id: 0ab31b650277f1b64512fdef95bec9bbf2445127
2022-10-24 00:00:58 -04:00
idk
50dbf996b6 update PACKAGES.html
Former-commit-id: b618047156
Former-commit-id: bae575b0f7219ee0ae75c2f6a7bddfdc916c3af5
2022-10-24 00:00:57 -04:00
idk
d88bf9e854 update OSX.html
Former-commit-id: 756fa1e8a8
Former-commit-id: c93753d19edc2bee77befad28b09f6cf3c44c160
2022-10-24 00:00:55 -04:00
idk
5f7dae3f5c update LINUX.html
Former-commit-id: a9fcc70fb1
Former-commit-id: b77b17d95307b6c99377da1ee36f591a5b664bad
2022-10-24 00:00:53 -04:00
idk
a41e02b24f update LICENSE.html
Former-commit-id: c0ae89ef20
Former-commit-id: f19ecec514dcf96ac83ca20554af911218b85765
2022-10-24 00:00:52 -04:00
idk
53cd4804d6 update I2PPureJavaBrowser.html
Former-commit-id: 6ed0347f3f
Former-commit-id: d24a547132f388a43a52507d8a504f50aa359630
2022-10-24 00:00:49 -04:00
idk
4a8aa7262d update I2PGenericUnsafeBrowser.html
Former-commit-id: f9efb07349
Former-commit-id: e1f0b75d08bc605f22766234cd2aee646541b8ab
2022-10-24 00:00:48 -04:00
idk
cdfa0f8eec update I2PFirefoxProfileUnpacker.html
Former-commit-id: e2595e0999
Former-commit-id: 883f1108156d885327b53c98199de03186850440
2022-10-24 00:00:46 -04:00
idk
2fb2ce6432 update I2PFirefoxProfileChecker.html
Former-commit-id: cc3895ff1d
Former-commit-id: ad7b2e762208ba81ff059d5a3d947f38880b9936
2022-10-24 00:00:44 -04:00
idk
a525a5785b update I2PFirefoxProfileBuilder.html
Former-commit-id: 288d706a16
Former-commit-id: be301fd216dbce802687ce8aad91ddca18907cda
2022-10-24 00:00:42 -04:00
idk
07fc258649 update I2PFirefox.html
Former-commit-id: 109e409415
Former-commit-id: 3112c1876a06c429a53a474859235faecad5b496
2022-10-24 00:00:40 -04:00
idk
59a6e1452c update I2PCommonBrowser.html
Former-commit-id: 697db7cce0
Former-commit-id: 9abff087c0f99bd51830ec0f854b1e63ea0c322d
2022-10-24 00:00:38 -04:00
idk
cc3ef2c50a update I2PChromiumProfileUnpacker.html
Former-commit-id: 735c21c5c5
Former-commit-id: f328cfc8a8e6cbf8b21428d1fe5eaaab85457986
2022-10-24 00:00:36 -04:00
idk
cbc714e2bb update I2PChromiumProfileChecker.html
Former-commit-id: 33f4f57797
Former-commit-id: 8ee6c89a513f593b62bd8b14d911c80b3e13831e
2022-10-24 00:00:34 -04:00
idk
bd1cc05596 update I2PChromiumProfileBuilder.html
Former-commit-id: 1b5a7fa393
Former-commit-id: 0fb7730223c4fb810c8b3f4658ed4cc9d5c50235
2022-10-24 00:00:32 -04:00
idk
6d9a0a25fb update I2PChromium.html
Former-commit-id: 4d7143af60
Former-commit-id: 760ee1fbf42b80af78305d743a7dd73e6d800179
2022-10-24 00:00:31 -04:00
idk
8211000878 update I2PBrowser.html
Former-commit-id: 3947d264db
Former-commit-id: 082788c3d81b3da0ec24b94b4fbf1e546d5b2705
2022-10-24 00:00:29 -04:00
idk
e891a9a7e8 update EXAMPLES.html
Former-commit-id: 84c19bfdab
Former-commit-id: 32c78c5a9cb2113456a7c352b56eb82e220c72e5
2022-10-24 00:00:28 -04:00
idk
8bc447886e update CONFIG.html
Former-commit-id: 3d12850334
Former-commit-id: c2fc903d3cc195df7d47424f29886cd1fc8f210e
2022-10-24 00:00:26 -04:00
idk
9379a75aab update CHANGES.html
Former-commit-id: 28a81c061a
Former-commit-id: f955bd47354ab0141a24903f41d4e83e2b8dfe1b
2022-10-24 00:00:25 -04:00
idk
64c1a247b4 update BUILD.html
Former-commit-id: 7b2beaee44
Former-commit-id: c54f96ad4ad77c2fd6bfaa98acce756beb5d31a5
2022-10-24 00:00:23 -04:00
idk
9742b2fe86 update index.html
Former-commit-id: 17de473b28
Former-commit-id: 4347de8be145374e1ed97314fc74d66f0c9b47ff
2022-10-24 00:00:22 -04:00
idk
3cc6907cbd add torbrowser test script
Former-commit-id: 0031901d86
Former-commit-id: c0b6ac58a4858ecf1f1f386301bc0b05c52eae8b
2022-10-23 23:58:02 -04:00
idk
585ea7ff6b also search for portable Chromiums if there is such a thing
Former-commit-id: 4fd186f88f
Former-commit-id: d85d60bd28aaeb56e5534460445c6b42124566ce
2022-10-23 23:56:31 -04:00
idk
8a94b69636 also search for portable Chromiums if there is such a thing
Former-commit-id: 2b763a9de7
Former-commit-id: 27dbd9d4e875c5dd43095abc234e9dab1353de66
2022-10-23 23:55:45 -04:00
idk
29256fdf44 fix nearby firefox discovery
Former-commit-id: 098cc0b4a8
Former-commit-id: cd5aeaf1599099e78be7d4693f4284d7dac1e1e1
2022-10-23 22:59:23 -04:00
idk
d82d5c75e1 add platform specific install instructions
Former-commit-id: b9778ed075
Former-commit-id: 6c86d90a7744d349bd3355dbc6656b0a1d85b034
2022-10-23 22:42:18 -04:00
idk
39ea020271 move build instructions to own file
Former-commit-id: 72c6c2f4e2
Former-commit-id: 7b521144200fe13875a517dd386bdffe99389ab4
2022-10-23 21:57:22 -04:00
idk
f75e3753a7 test build
Former-commit-id: 45554a3aa9
Former-commit-id: b6d23021895e376d44337df8baa3fcbd4159ad60
2022-10-23 21:39:11 -04:00
idk
5c96c91ada add icons to jpackages
Former-commit-id: 11ce176ed5
Former-commit-id: 04a837eb9232486ca590ae40cfb7e3599ac0c524
2022-10-23 21:04:15 -04:00
idk
ff6f70e9fe update VERSION.html
Former-commit-id: d5eb4da51d
Former-commit-id: 3eba67a00fcf0747503e7f94de66695864fc64e0
2022-10-23 20:13:30 -04:00
idk
c50dc6b2e1 update USAGE.html
Former-commit-id: 00edc2c928
Former-commit-id: 869f727ce04cfb09f4d62a2eba19286a1c433f1e
2022-10-23 20:13:28 -04:00
idk
0c1fc1aed7 update TODO.html
Former-commit-id: af8ac433b8
Former-commit-id: 752b3dff287fac90fb6aeec8a2bfd40dda9a8ab1
2022-10-23 20:13:26 -04:00
idk
e08c918506 update RELEASES.html
Former-commit-id: 000079f53a
Former-commit-id: c69d1989f6686ab6420a8294110e3bea2c282c8d
2022-10-23 20:13:24 -04:00
idk
9db073acd1 update PACKAGES.html
Former-commit-id: 7a021f9364
Former-commit-id: 9d046c163275312a219f76bc569d8430448fa90a
2022-10-23 20:13:23 -04:00
idk
2458bcc69f update OSX.html
Former-commit-id: afccb7d346
Former-commit-id: 49b162499fb581548de6c1ae5dea738ed3b1ce17
2022-10-23 20:13:21 -04:00
idk
658b01a7a7 update LICENSE.html
Former-commit-id: 67cbcdd746
Former-commit-id: ca58d3675ceeb80e9dc5e1e23889c837edbb37a5
2022-10-23 20:13:20 -04:00
idk
0b53d51cf1 update I2PPureJavaBrowser.html
Former-commit-id: 97f032b9c1
Former-commit-id: 790d18f78dd8ba91f1dbf0d62573ffde71f052d8
2022-10-23 20:13:18 -04:00
idk
2717d61261 update I2PGenericUnsafeBrowser.html
Former-commit-id: 97f0372cac
Former-commit-id: 71cd4a72fcf6ecefc7f2472a1cb3418f7b48ed33
2022-10-23 20:13:17 -04:00
idk
92470dcc85 update I2PFirefoxProfileUnpacker.html
Former-commit-id: 1f10c3c346
Former-commit-id: c1418993af61b7386d20cfd6f3cefc618c4d8009
2022-10-23 20:13:15 -04:00
idk
1c070a6845 update I2PFirefoxProfileChecker.html
Former-commit-id: a6df69a0a4
Former-commit-id: 2e175ab3c0c736f193625a5b561f5f82d8e1c092
2022-10-23 20:13:13 -04:00
idk
976e095694 update I2PFirefoxProfileBuilder.html
Former-commit-id: 76c8236ea8
Former-commit-id: c3f2f9914e4cf1bf8b89442feb531ca6351db485
2022-10-23 20:13:12 -04:00
idk
94acb9e5aa update I2PFirefox.html
Former-commit-id: 24581ea695
Former-commit-id: feb42882ec10341c3c55fa4500efb35707d335fe
2022-10-23 20:13:10 -04:00
idk
65e2326cfe update I2PCommonBrowser.html
Former-commit-id: 073aa0df53
Former-commit-id: 069ee6ee835ec1cb36f72040216cdd067ead64be
2022-10-23 20:13:08 -04:00
idk
0509ba6580 update I2PChromiumProfileUnpacker.html
Former-commit-id: 8b37ccfe33
Former-commit-id: 8750b43b0dcb40ec065d71ce1831de423732d90e
2022-10-23 20:13:07 -04:00
idk
73d5c425e6 update I2PChromiumProfileChecker.html
Former-commit-id: 84506f1310
Former-commit-id: 619bfc4d5b0801256d309d119bc56d32f3975bd6
2022-10-23 20:13:05 -04:00
idk
6752eff230 update I2PChromiumProfileBuilder.html
Former-commit-id: 010b1ca527
Former-commit-id: 14edec93feb078cfd5f2823d26cd12d541ecb80a
2022-10-23 20:13:04 -04:00
idk
4943854440 update I2PChromium.html
Former-commit-id: 41fb2ff414
Former-commit-id: 0b7d162a3c08cb278833ffee66ace1712851f642
2022-10-23 20:13:02 -04:00
idk
44cb1a9d87 update I2PBrowser.html
Former-commit-id: 2446428481
Former-commit-id: 39d94fc4ce1a1a98d8a560ebb6172f97760fffdc
2022-10-23 20:13:00 -04:00
idk
1e30ef35ca update EXAMPLES.html
Former-commit-id: 0334246cee
Former-commit-id: f6dfcfdfd24c745f17411d789207a016a23ea2c8
2022-10-23 20:12:58 -04:00
idk
cec4af7261 update CONFIG.html
Former-commit-id: a5dede7178
Former-commit-id: c9934670094784b3038b2f7cf7e419630105983d
2022-10-23 20:12:57 -04:00
idk
04d4b86b5d update CHANGES.html
Former-commit-id: 1df56f7112
Former-commit-id: 557550eee429bd0449c6a73dc45487d6335394bb
2022-10-23 20:12:55 -04:00
idk
430c657dfa update index.html
Former-commit-id: e4a42c8a4e
Former-commit-id: 2b38700c1c5552001756f71fe2db71bccfe9ecda
2022-10-23 20:12:53 -04:00
idk
87823cee5a disable systray in test.sh
Former-commit-id: c2f63fd47f
Former-commit-id: 68cc5777e88cd9c48925ce4e06bf81cf1ebf65cf
2022-10-23 19:50:27 -04:00
idk
7f690f20d3 start pure-java solution
Former-commit-id: 418fa9a6a0
Former-commit-id: e0ea2e83ffa521fb28f22a54def8b5862c607302
2022-10-23 17:25:48 -04:00
idk
b0469561f2 start pure-java solution
Former-commit-id: 9bbb7b926a
Former-commit-id: d0c7e337a6382f59e4ba48e2c01c675917825761
2022-10-23 17:25:34 -04:00
idk
b558bb350e log line in registryQuery
Former-commit-id: 69f7af1b5c
Former-commit-id: 817dafca10c92b2167ddb585aa2ca14c8d986b31
2022-10-23 12:37:10 -04:00
idk
67454c21fe check both edge and msedge binary names, force user-data-dir if edge, even in unsafe mode
Former-commit-id: f469ee39c4
Former-commit-id: ab48e332277f8b5f7a44c6302f515ddf6a1c496c
2022-10-23 12:07:47 -04:00
idk
fb71a82527 check both edge and msedge binary names
Former-commit-id: 7203ba826e
Former-commit-id: 6537e1f8b751e2b5a42fefb22f1bc548cca81e0a
2022-10-23 12:01:06 -04:00
idk
78733bbb36 fix 32-bit profile detection
Former-commit-id: 323bfa26a5
Former-commit-id: de0debae3bb236a60ebe4c5c99679279abc97f9c
2022-10-23 11:54:13 -04:00
idk
c3896365b6 fix 32-bit profile detection
Former-commit-id: 03911e0eb3
Former-commit-id: 2144a1c4835c1cb4c858b0bec2b0f9d1c5be1a36
2022-10-23 11:52:56 -04:00
idk
d4c3aa4bad re-add config.md
Former-commit-id: 01c8b7601d
Former-commit-id: 63ae76f0948bd390f29d58eabbbf279a9035ff0b
2022-10-23 11:40:39 -04:00
idk
aedf8421b7 Add config.md
Former-commit-id: 8ffd4025ef
Former-commit-id: 70484b9b11160e8a570eb19c5f35fd52b35e8dec
2022-10-23 11:34:25 -04:00
idk
8ce616f71e add browser.config generator
Former-commit-id: 2e7f875efe
Former-commit-id: 94bf218ee2a0449ec5a9cea0a3d211b121045c55
2022-10-23 11:27:59 -04:00
idk
6f1fb7399e add browser.config generator
Former-commit-id: 4909c59baf
Former-commit-id: 6f420ea8740fd98894968312f738501fcae0b7bb
2022-10-23 11:26:45 -04:00
idk
b99c545842 update index.html
Former-commit-id: 467c673b60
Former-commit-id: 1413f44601320c19a584654fd3983832f0d459d7
2022-10-23 01:35:24 -04:00
idk
4233e1a173 update VERSION.html
Former-commit-id: 63a12fe602
Former-commit-id: 8bab2919554ab4d0d5bbb2599e2e3f744a2383e7
2022-10-23 01:24:35 -04:00
idk
f8309ced69 update USAGE.html
Former-commit-id: 368c7519cd
Former-commit-id: e63d54e62e870cec530fe13db839d7f06822d363
2022-10-23 01:24:33 -04:00
idk
497a70108f update TODO.html
Former-commit-id: 8b66d927ce
Former-commit-id: b83fa5baf76c6188b941846ef83234b2e16e2dc9
2022-10-23 01:24:31 -04:00
idk
8c38a837d7 update RELEASES.html
Former-commit-id: c9d4498630
Former-commit-id: fdf7d5067f1597ab336e29cd32f61894cf57a7d4
2022-10-23 01:24:30 -04:00
idk
aedfe87479 update PACKAGES.html
Former-commit-id: 169c3c631e
Former-commit-id: 9fd2966e6d9d80b805a18a63038d8a0305a26c43
2022-10-23 01:24:29 -04:00
idk
126d63cbeb update LICENSE.html
Former-commit-id: 91fe642990
Former-commit-id: b6edee84cd61cfe9c0c21def1cf8422e7d1d8c6b
2022-10-23 01:24:27 -04:00
idk
0395dc71ab update I2PPureJavaBrowser.html
Former-commit-id: 6c27b797ba
Former-commit-id: 4a5bdc9c785afb7dbb407ae8ee2bcf0054f2740c
2022-10-23 01:24:26 -04:00
idk
9e6134386a update I2PGenericUnsafeBrowser.html
Former-commit-id: 19307d5410
Former-commit-id: 927c73d517efd3c0cb2b5c14af8d4037bb1885dc
2022-10-23 01:24:24 -04:00
idk
a270abd97d update I2PFirefoxProfileUnpacker.html
Former-commit-id: 093059fce9
Former-commit-id: dea1300e6ab2d0d1836ea76ea78c39b35dbe5d19
2022-10-23 01:24:23 -04:00
idk
462e160caa update I2PFirefoxProfileChecker.html
Former-commit-id: 236bdadc1d
Former-commit-id: bdaaa60edac79d85d7e8a28d6c0e4775313f54ff
2022-10-23 01:24:21 -04:00
idk
383419eba3 update I2PFirefoxProfileBuilder.html
Former-commit-id: c22fbbd07d
Former-commit-id: 5800a0e5b00033b900b946fe1bc354e5a7d15591
2022-10-23 01:24:19 -04:00
idk
3dce0243ce update I2PFirefox.html
Former-commit-id: b6429c56bf
Former-commit-id: 62a36fc0fac2d3eaacac79b41973d07fb6ad4bcf
2022-10-23 01:24:18 -04:00
idk
4332a22be1 update I2PCommonBrowser.html
Former-commit-id: 7cedb145f9
Former-commit-id: 31345d546f4e3b46e5bb681f2edd499d10c617b2
2022-10-23 01:24:17 -04:00
idk
7b4d56d4ea update I2PChromiumProfileUnpacker.html
Former-commit-id: 5156813cdc
Former-commit-id: 505d7d89aede5b4671152b38dac2e7bb876a2b5f
2022-10-23 01:24:15 -04:00
idk
e4f8262584 update I2PChromiumProfileChecker.html
Former-commit-id: cf09511609
Former-commit-id: 7398c0bb1d8a5c067e0daeada3a9752ccb3b74f6
2022-10-23 01:24:14 -04:00
idk
a6af6a27ee update I2PChromiumProfileBuilder.html
Former-commit-id: 3f2cfb8c79
Former-commit-id: 1e480bc1f4d5c0075357593395d74ab7bc1aec7e
2022-10-23 01:24:12 -04:00
idk
f2480e84e3 update I2PChromium.html
Former-commit-id: 77aa62d0e9
Former-commit-id: 97b3ff5e18cd16ce64758cd972b625bf6a63b82b
2022-10-23 01:24:11 -04:00
idk
ab2555f3e8 update I2PBrowser.html
Former-commit-id: 90b6489c60
Former-commit-id: ac79d56a76be9cc6b0c255ca7a6557c68201a495
2022-10-23 01:24:09 -04:00
idk
16e60b118a update EXAMPLES.html
Former-commit-id: 38a865011c
Former-commit-id: a472d5c0acb44aee975027d880aa75f274348358
2022-10-23 01:24:07 -04:00
idk
44d8f0a86a update CHANGES.html
Former-commit-id: dcd7211a4b
Former-commit-id: a8bfd335d42e2bf3d9c9a0b97d9f81e413df7037
2022-10-23 01:24:06 -04:00
idk
c6e2e6d1f4 update index.html
Former-commit-id: a1a80bc84b
Former-commit-id: b17d7a1c5d52766e488873adcaa43d1626734416
2022-10-23 01:24:04 -04:00
idk
e7c32cb586 bump version
Former-commit-id: 614a4b674e
Former-commit-id: be7426ed7bbb6f92671bb2a0c95f04e9aa587f96
2022-10-23 01:22:45 -04:00
idk
204baca3d6 expand systray launcher to launch both variants
Former-commit-id: aa04b2ce21
Former-commit-id: 715de42407b76f5befd30dc14dfd37fd740ca21a
2022-10-23 01:20:46 -04:00
idk
6a8797536e add systray launcher
Former-commit-id: b96d79261a
Former-commit-id: df4c91ac8cc852a970e8d905f3e4ea679120da07
2022-10-22 23:51:13 -04:00
idk
babd6a1db1 add systray launcher
Former-commit-id: 51275d0624
Former-commit-id: c33dd5ee98a8861817250de0cd7211fb34756c77
2022-10-22 23:43:38 -04:00
idk
6d32f7cc04 add systray launcher
Former-commit-id: 518984fd25
Former-commit-id: 6cbcaaa29c43da66e0b047e964d2118a1de226a2
2022-10-22 23:09:00 -04:00
idk
4bedd93a32 update index.html
Former-commit-id: e7d6116dc6
Former-commit-id: c4bde6c917e9de33ddc612ef5be1bb91378b5a27
2022-10-22 22:27:04 -04:00
idk
f15a040bcc update VERSION.html
Former-commit-id: 29bd27837e
Former-commit-id: 46430915635ca85c4b9ec1d300122b9e5c180bec
2022-10-22 22:11:47 -04:00
idk
4a98a9841a update USAGE.html
Former-commit-id: 8f05f22ca7
Former-commit-id: b1f3972ab99b9073502b17394097dd0b2ce40317
2022-10-22 22:11:46 -04:00
idk
6b082fe376 update TODO.html
Former-commit-id: 3a61683cae
Former-commit-id: 54c375916d8b71bcf0dbff33891b9ae79c130342
2022-10-22 22:11:44 -04:00
idk
37a46d4a85 update RELEASES.html
Former-commit-id: 85133ee3cf
Former-commit-id: c291d238d81aa2e4c7f362a17895a1d19ae54d35
2022-10-22 22:11:43 -04:00
idk
a596cb1299 update PACKAGES.html
Former-commit-id: b9007415be
Former-commit-id: d09dbfdf434c26184a9fe708e58649353a457df3
2022-10-22 22:11:41 -04:00
idk
e9a20164be update LICENSE.html
Former-commit-id: 87c6468549
Former-commit-id: d461fffd99e2c43c130953ec34c06fdc33b5b855
2022-10-22 22:11:40 -04:00
idk
4f3a54d385 update I2PPureJavaBrowser.html
Former-commit-id: e4fc16ad15
Former-commit-id: 477cc92088b3bc6904389e0710cc0fd15ed01057
2022-10-22 22:11:38 -04:00
idk
0bb6153129 update I2PGenericUnsafeBrowser.html
Former-commit-id: 500aafde54
Former-commit-id: 11de04a1dfd1049b285efc3e8a398b9b361a47fb
2022-10-22 22:11:37 -04:00
idk
854ff39a64 update I2PFirefoxProfileUnpacker.html
Former-commit-id: 72c9acb753
Former-commit-id: b82ccc825456d18809bd49a0f48bed4b3ec4b677
2022-10-22 22:11:35 -04:00
idk
784ba6e021 update I2PFirefoxProfileChecker.html
Former-commit-id: 9cea504cb0
Former-commit-id: 4e13ea46f2c2e58a645d46f88cb565e4b9876bb6
2022-10-22 22:11:34 -04:00
idk
e0df3b3b2e update I2PFirefoxProfileBuilder.html
Former-commit-id: 7bccada5cb
Former-commit-id: eccbfd3061c5852f5d2e313189aa62d74a3711ea
2022-10-22 22:11:32 -04:00
idk
37534bbb70 update I2PFirefox.html
Former-commit-id: 1a2d4b343d
Former-commit-id: e3a2c902d8a8d7d69f8a3131de0d29662ac92387
2022-10-22 22:11:31 -04:00
idk
9324d981fb update I2PCommonBrowser.html
Former-commit-id: 598c0a602b
Former-commit-id: a14866905c9f31930b02154429d20f00f80596f7
2022-10-22 22:11:29 -04:00
idk
21479b2747 update I2PChromiumProfileUnpacker.html
Former-commit-id: 4079dfea15
Former-commit-id: 44ad8aab5312e622efc65d6dc3820ac0d462e232
2022-10-22 22:11:28 -04:00
idk
4262598a5f update I2PChromiumProfileChecker.html
Former-commit-id: 558ac602c5
Former-commit-id: c8a5af4c38eea793e991c18f5f9461a975afb36b
2022-10-22 22:11:26 -04:00
idk
8508050e2d update I2PChromiumProfileBuilder.html
Former-commit-id: af7bcc0c9b
Former-commit-id: 5c79ba7beb14ef0c60a2a6438596e72c595a1a72
2022-10-22 22:11:25 -04:00
idk
75dc6d38db update I2PChromium.html
Former-commit-id: aa61098603
Former-commit-id: 3227b9aab43850d7254a15ff1ca899bebc68cab4
2022-10-22 22:11:23 -04:00
idk
194ebce498 update I2PBrowser.html
Former-commit-id: 389102aa50
Former-commit-id: 5adbad60fd173e409ead06e3c9adf6dfb85f6b43
2022-10-22 22:11:22 -04:00
idk
5eef7b82a4 update EXAMPLES.html
Former-commit-id: 735d192f5c
Former-commit-id: 4cc3e899d6d813f3a3763b3e74e4cfec85b2d7ad
2022-10-22 22:11:20 -04:00
idk
cc6fd8b22c update CONFIG.html
Former-commit-id: 145b43fbcd
Former-commit-id: 3707165853419120db2ff3ebf8fd0ba75dfb3d21
2022-10-22 22:11:19 -04:00
idk
ecf31f2447 update CHANGES.html
Former-commit-id: 8a07d8e784
Former-commit-id: 24106e9ce54d373a5467835a7b154afa774df975
2022-10-22 22:11:17 -04:00
idk
569f53310e update index.html
Former-commit-id: 41ce20aee2
Former-commit-id: 4cad80dd22dd82ec4011a128781f1d19d5d78fb7
2022-10-22 22:11:15 -04:00
idk
c6c98f97a5 add generic to browser.config
Former-commit-id: 7b300ac9b2
Former-commit-id: c6419d208eeadee126defe2a844bb499310ce03d
2022-10-22 21:59:44 -04:00
idk
2a66154f6c add generic to browser.config
Former-commit-id: 7d90b9000d
Former-commit-id: fba873898c9c82b04ba5b985d9fe2ac37c541ad4
2022-10-22 20:55:41 -04:00
idk
ee5ead4440 don't generate a config by default
Former-commit-id: 0a87a601dc
Former-commit-id: 3a558127f71f2ca383e91497a0a7a3797fa23148
2022-10-22 20:14:57 -04:00
idk
febc615284 add default config file
Former-commit-id: ee3532b83d
Former-commit-id: d493f375d5dee58483f0af95a050480598f1b043
2022-10-22 20:12:51 -04:00
idk
1d31d54697 return default if property is empty string
Former-commit-id: 74dfb76d31
Former-commit-id: 48bcb9243e6763b766e56df224e212f1eb814d88
2022-10-22 18:46:09 -04:00
idk
efe90891fc add the ability to store and fetch important properties
Former-commit-id: fd96d44ee2
Former-commit-id: c8a3e0ec0854ecdf2c33087d82d61e52c0117e82
2022-10-22 18:39:01 -04:00
idk
57b3060201 update RELEASES.html
Former-commit-id: 845b9ddfe9
Former-commit-id: 87070e267e50159bd45edcce8ca4d253990acfda
2022-10-22 17:01:15 -04:00
idk
4bb5050f73 update index.html
Former-commit-id: d3c1d74684
Former-commit-id: ca8cff05b971ae1196470517a86c9396eebb4aca
2022-10-22 17:00:48 -04:00
idk
a96b6b2f90 Use revisions from i2p.i2p #70
Former-commit-id: 5b4b2a49db
Former-commit-id: 4b152f52851a8ab5acebd23eda4254259aa61ff3
2022-10-21 21:26:44 -04:00
idk
8edd2d7d5a update VERSION.html
Former-commit-id: 7a6a5381af
Former-commit-id: 81cfb79609416c5b84dcee1a31439f3f15a09619
2022-10-20 00:48:30 -04:00
idk
d3f35539d5 update I2PFirefoxProfileBuilder.html
Former-commit-id: d81b705580
Former-commit-id: 98b8576f162df6d87d218457a463270562f5f2c6
2022-10-20 00:48:09 -04:00
idk
7199948bc9 update CHANGES.html
Former-commit-id: 9ae5804018
Former-commit-id: 49e3af59c2d416b1f556e67ffec4ee188d0380d9
2022-10-20 00:47:52 -04:00
idk
9837ceb36c update index.html
Former-commit-id: e1d63c8442
Former-commit-id: 573291b7883a18b73de144c840e7cc903ecc5288
2022-10-20 00:47:50 -04:00
idk
efc5b8db2c update version
Former-commit-id: 0f90ad28b2
Former-commit-id: 2042e140045612028dedff8ab59b92fcdd26020c
2022-10-20 00:46:56 -04:00
idk
bea5c699ec update version
Former-commit-id: b192c8fea5
Former-commit-id: 6fb57c41d820434ed79757aa1f2d20d972c4354e
2022-10-20 00:46:05 -04:00
idk
da145f98c6 update PWA mode stylesheet
Former-commit-id: ff0f425cb3
Former-commit-id: 97bc1d02ac3151db42847fe61b3b0443b8a3af75
2022-10-20 00:11:30 -04:00
idk
820d4aef80 update PWA mode stylesheet
Former-commit-id: 43dbce41a8
Former-commit-id: a43df9ebeb181b5eb54005d46023508e74948902
2022-10-20 00:09:20 -04:00
idk
f7b008866e update extension versions
Former-commit-id: f1da221b90
Former-commit-id: dfbe625d541dfdc10969feffd9b0d0f53997015c
2022-10-17 21:26:30 -04:00
idk
093a3de219 update extension versions
Former-commit-id: ff7ed45cac
Former-commit-id: 431ba294d3e828dbd887a0c6ceca2b24e0de0fd2
2022-10-17 20:29:22 -04:00
idk
3007c4150f update extension versions
Former-commit-id: 480fdaf43c
Former-commit-id: 2e4009c926df48131ea23ecab50df03042f1dfa9
2022-10-17 18:05:17 -04:00
idk
11f5d5e6a3 update extension versions
Former-commit-id: 12437c97e4
Former-commit-id: d0db0af6bf7cea5fef3d50cfa2fcf7a2699ba834
2022-10-17 18:02:53 -04:00
idk
36e4901724 adds plugin buttons to userChrome.css in app mode
Former-commit-id: 17e0523457
Former-commit-id: e9b7e71d93f07499f1ec153d67b7115f30caa270
2022-10-06 20:09:45 -04:00
idk
2b53f2ba54 add source tarballs to releases too, don't allow release.sh to replace release files if they are unchanged
Former-commit-id: f909f770e8
Former-commit-id: 264e04ba39c030cd5e46bb378d9277280696cd37
2022-10-05 14:51:54 -04:00
idk
82606b4aa7 update I2PChromium.html
Former-commit-id: da519eeb9d
Former-commit-id: c8b313f8f512e9f4a730a0131fce15771f2ab4a3
2022-10-04 20:48:32 -04:00
idk
c5d28322a9 update index.html
Former-commit-id: 8a95fc1da3
Former-commit-id: 673fd0bba5c12426bbec483151ab323487f9bf20
2022-10-04 20:48:19 -04:00
idk
2988a3bc7b add -O to dzip
Former-commit-id: 719e93537d
Former-commit-id: 9f15667452f4bddceb5e6ebc627256458fa20442
2022-10-04 20:46:10 -04:00
idk
29cd8492d8 generate a tarball for this project and release it too
Former-commit-id: 22f3785699
Former-commit-id: 37b449d7a3adabef5fb9ed0bff6cee3e69016999
2022-10-04 19:17:14 -04:00
idk
c976af98da add torbrowser.sh script to linux jpackage builds
Former-commit-id: b1be2285c0
Former-commit-id: 394e1f0d47df2382ad5385e36c2e103dc617e5e1
2022-10-02 14:38:17 -04:00
idk
e8127098c7 shellcheck torbrowser.sh script
Former-commit-id: 6d983e96b0
Former-commit-id: 02f553c3b345bad06128464230beaead9ddaf223
2022-10-01 22:30:28 -04:00
idk
5500c1eeb4 remove unused variable from chromium wrapper
Former-commit-id: 0864d1860a
Former-commit-id: 0cc267371af606ea474ed8adf8e3dd73ac16042a
2022-10-01 22:25:24 -04:00
idk
19315d4ed3 auto-torify in torbrowser.sh script
Former-commit-id: 63044f3e1b
Former-commit-id: 41dec631f3b4d50c089cfc4fd6136f77c8fca9f8
2022-10-01 22:12:05 -04:00
idk
90a543a272 update index.html
Former-commit-id: ec9e765ac1
Former-commit-id: 2908d33aec63e935ca1de666851c3b37f468847e
2022-10-01 21:14:04 -04:00
idk
c904d31294 don't distclean in javadoc.sh
Former-commit-id: ae667bfd1c
Former-commit-id: 27e36b1d5fd35e9000da85db9594aff2c69664c9
2022-10-01 21:13:01 -04:00
idk
2cbfd0e189 update I2PFirefox.html
Former-commit-id: 51039cf32b
Former-commit-id: 1aabb79e94625dbf6c2e6c7dcc16743015adbc78
2022-10-01 21:08:59 -04:00
idk
8da3acf602 update CHANGES.html
Former-commit-id: 7867e774a4
Former-commit-id: 22d90d485d2e6bcc47e68f9580573130fe30440f
2022-10-01 21:08:37 -04:00
idk
3fc9516af3 update index.html
Former-commit-id: 3766b4458b
Former-commit-id: b7e1849825eadb2ffe39c5a68f92412833c769a1
2022-10-01 21:08:34 -04:00
idk
9d2ad1c89c improve support for using a firefox unpacked in a plugin directory
Former-commit-id: 6ddbfdbc0b
Former-commit-id: 69ca620cf06bc0ebe8aefed31cafadedb7ea06a0
2022-10-01 20:58:14 -04:00
idk
fcc9f85b25 update torbrowser.sh
Former-commit-id: 9ae6287f88
Former-commit-id: eb91bd87a1dcca92c407f94b9d081dfe7ab02b8e
2022-10-01 20:49:55 -04:00
idk
ec90b0c3ca update changelog
Former-commit-id: a4b5ede5cf
Former-commit-id: 74e47122be6224d66fc51f65273e67d62a3624ef
2022-10-01 20:35:20 -04:00
idk
52c4fd3dd7 add support for running a Tor Browser unpacked to the portable dir directly
Former-commit-id: 9b79fb806b
Former-commit-id: 6a3c0d3e2b94256d417f50bddebc00a9fbad8367
2022-10-01 20:34:19 -04:00
idk
2a91ec2f09 add a torbrowser download shell script.
Former-commit-id: 63a684ed14
Former-commit-id: 9a328ffed4c59a247c4724b3b2d7c282f469bcfc
2022-10-01 20:07:33 -04:00
idk
13eb24465a update index.html
Former-commit-id: e577eb9119
Former-commit-id: 2818dc20db91c585ebd318dbd1746e5528f77163
2022-10-01 19:49:52 -04:00
idk
76966fdacd fix name of script
Former-commit-id: fcd50d49bb
Former-commit-id: c106571dd825191cb6466165f097f5f4dbe22fe4
2022-10-01 19:48:58 -04:00
idk
c68f0f8f51 update VERSION.html
Former-commit-id: 0e64f57f35
Former-commit-id: 51aee1eef292d22d7f6d91ab6e8936f307648973
2022-10-01 19:24:36 -04:00
idk
d57de2be4d update I2PFirefox.html
Former-commit-id: 53628a907f
Former-commit-id: 8d004eb7cca3ecfb6fee9bfb16c04859f15d9237
2022-10-01 19:24:08 -04:00
idk
5e8e80d774 update I2PCommonBrowser.html
Former-commit-id: 93b5db908a
Former-commit-id: 00fe6fadba5163fcdbe025c83de28c12c0cd4876
2022-10-01 19:24:06 -04:00
idk
3c72d154c5 update I2PChromium.html
Former-commit-id: 625fc24c6b
Former-commit-id: 68585ea3bf53b5285e947b6b71903cc8eebd0937
2022-10-01 19:23:56 -04:00
idk
4fb865ced4 update CHANGES.html
Former-commit-id: 48ad48dcba
Former-commit-id: 89dc4460db4c7204eb893b40769e6a5df571d0b2
2022-10-01 19:23:48 -04:00
idk
97558022c8 update index.html
Former-commit-id: c6f01c48df
Former-commit-id: bf88160f65dd1e7bf61132583cbaf253b6072459
2022-10-01 19:23:46 -04:00
idk
7507aadfcf update versionMd
Former-commit-id: c92941df14
Former-commit-id: d8173ee890efec7cd162d0514cffcf2909c59b2f
2022-10-01 19:23:04 -04:00
idk
ff6e37620c bump version
Former-commit-id: 2cd46a1f6d
Former-commit-id: fd46e6bb7268086ef7985024bbebc4fa8b6cfef2
2022-10-01 18:05:51 -04:00
idk
8be9a4d81c Quote all shell script args
Former-commit-id: ded9b0a7f9
Former-commit-id: 8dc15bf115bd5f31eaf813143cf0eeab1fdcfeb8
2022-10-01 18:01:35 -04:00
idk
f9563ebad4 re-add Tor Browser support to OSX
Former-commit-id: 812c63e5e8
Former-commit-id: 938d13b82ad102303304b19e86516ed708c39e30
2022-10-01 17:48:25 -04:00
idk
fac0f4ac27 update changelog
Former-commit-id: 31449cbabb
Former-commit-id: 44aaeca33ac2d0add1da02027cdc47a3863f8d07
2022-10-01 17:30:32 -04:00
idk
564139b02e work around osx anti-automation measures
Former-commit-id: 7d4e53b82c
Former-commit-id: 8b79c9cf398a93a4fe42a3446ef856c9d5cee351
2022-10-01 17:26:19 -04:00
idk
417255b22f update index.html
Former-commit-id: fbd76aad9a
Former-commit-id: 5f9c302d62cea098792a3c848f24cd66359a8c6d
2022-10-01 13:44:53 -04:00
idk
8f21ef6bb9 generate zips deterministically
Former-commit-id: 128d0aa9f7
Former-commit-id: dd4cd35257aaca369369ca4981f4d3d81df48b18
2022-10-01 13:44:51 -04:00
idk
6869ca0c4d update VERSION.html
Former-commit-id: b1f7c68860
Former-commit-id: 89e9ce72ab143505efb9935018bde5f9e3a57163
2022-10-01 13:44:20 -04:00
idk
4d80a0df89 update RELEASES.html
Former-commit-id: 768f9e3b71
Former-commit-id: 505d803b4434520e3c145f4044e177dd27bf33cb
2022-10-01 13:44:09 -04:00
idk
d453d1e1c8 update index.html
Former-commit-id: 2aab7b230d
Former-commit-id: 8ae51f1cdf317c9d3c5bb404ac814c049d924ba6
2022-10-01 13:43:25 -04:00
idk
7e19bfa54b generate zips deterministically
Former-commit-id: c037c97e94
Former-commit-id: 6769920dff6bd44d5a9b2772863e63419582cb41
2022-10-01 13:43:23 -04:00
idk
5563d6a02f add a join function so args don't get passed in malformed ways
Former-commit-id: 5c05c3ee0f
Former-commit-id: 1472c7d0e99f842a16f61c7815b101403ab77c44
2022-10-01 13:23:27 -04:00
idk
7cce42faba note that Edgium performance and privacy are terrible
Former-commit-id: 20ec8dda68
Former-commit-id: ec65be8069e4537a2878ce3a64cccbd7c2dad875
2022-09-30 18:28:55 -04:00
idk
3c2f9403bf update index.html
Former-commit-id: 0ec6a4a352
Former-commit-id: 737e01cf89d1d45ad645c25a283547d6b2569f79
2022-09-30 18:28:08 -04:00
idk
f67193cce7 note that Edgium performance and privacy are terrible
Former-commit-id: 28b07aeba1
Former-commit-id: 274df51c0171d7809753aa1dbf46e0b41b2b1a9a
2022-09-30 18:28:05 -04:00
idk
fa59f06f0d don't do plugin in jar
Former-commit-id: ddec443df4
Former-commit-id: 5bd3c190c30c35cedf19b4db2decf1018694b57e
2022-09-30 18:17:09 -04:00
idk
8089aa4bf5 fix compat when launching Chromium on OSX
Former-commit-id: a79b2a6a97
Former-commit-id: 7b9af8e64b7e9045bd6d16a739beecf347ab4e52
2022-09-30 00:52:20 -04:00
idk
c2174eb264 fix osx compatibility for Firefox mode
Former-commit-id: 4c70d78401
Former-commit-id: 5ea67ec498f287f75d36f4eb3aeb95d47f496b43
2022-09-30 00:46:45 -04:00
idk
35a4b91037 osx patches
Former-commit-id: 72920869d7
Former-commit-id: 87638fbb66a15e9464207a6eb6a61737e84212da
2022-09-29 23:16:29 -04:00
idk
1ce9caf00c move profile upload to own script
Former-commit-id: d6ebf85efc
Former-commit-id: 6a3bc8b9235d25316c58aa3adec77d802e07c10e
2022-09-26 00:26:59 -04:00
idk
c62271746c add profile upload script separate from release script
Former-commit-id: 9eacfaaaab
Former-commit-id: f828de36746cd686a0bb495503f3ed87503830b1
2022-09-25 17:03:14 -04:00
idk
1238e67316 update index.html
Former-commit-id: 9a4147c0ed
Former-commit-id: 5642097bb95f298d5c78bfec1a43952ea35f1b75
2022-09-25 16:22:37 -04:00
idk
cb4fbe66be update VERSION.html
Former-commit-id: e7cb7821f1
Former-commit-id: e7bed8bb424b8c86654e35f7dba68a9c86c4f782
2022-09-25 16:08:40 -04:00
idk
a49b654c27 update index.html
Former-commit-id: e86f842e19
Former-commit-id: 50f5bbf34cb31d638f4de86c1bd824940f4c5272
2022-09-25 16:07:17 -04:00
idk
4f6e516dee update I2PBrowser.html
Former-commit-id: 21855c8f3e
Former-commit-id: 55791a0a561a26785fd763ec28ba5a407cf50637
2022-09-25 16:06:27 -04:00
idk
1200d22861 update index.html
Former-commit-id: d8c5fb9c59
Former-commit-id: 7103307e59de055b873b6c1e547ce48f5b15b869
2022-09-25 16:06:15 -04:00
idk
520c2a2e64 update index.html
Former-commit-id: aa627c8191
Former-commit-id: 73b9c811734574f24dba0d57d8bcac411c8e89d1
2022-09-25 16:05:16 -04:00
idk
df467d81ed update index.html
Former-commit-id: c43602e46f
Former-commit-id: ee361b76062c703ae9fbd5c90a7a381f51b12f83
2022-09-25 15:47:49 -04:00
idk
cd5e0695cf update CHANGES.html
Former-commit-id: 957f0bf36d
Former-commit-id: 19a1869e2f00ce317c758cfaf4b3a13e8b1e3929
2022-09-25 15:46:21 -04:00
idk
07983f2969 bump version
Former-commit-id: 36856d47f6
Former-commit-id: 6e2cee7e9e4f26533e4c4957170361776b92f3cc
2022-09-25 15:19:32 -04:00
idk
60107ba636 update index.html
Former-commit-id: 7e4dd91e90
Former-commit-id: 3ea03ee8e4fbae4f8564bc657688e10cc59713ee
2022-09-17 15:15:28 -04:00
idk
14296eed79 update VERSION.html
Former-commit-id: 2eb91667ca
Former-commit-id: 65a24ea0e49c759708e5113c3f40dc926a735798
2022-09-17 15:06:14 -04:00
idk
e255e87cd0 update USAGE.html
Former-commit-id: 4a310d5273
Former-commit-id: 5404669625e9fafe4ac57a27143a6f12f2c273e4
2022-09-17 15:06:12 -04:00
idk
4a839d75f4 update TODO.html
Former-commit-id: 5fb99ba604
Former-commit-id: dfba1436fd1e3f0acab19fce3e70a836bd622e9c
2022-09-17 15:06:10 -04:00
idk
ec2a45a07f update RELEASES.html
Former-commit-id: 3f7bb6427a
Former-commit-id: 072b19375cd8de646b69913881d811bf0a56a707
2022-09-17 15:06:08 -04:00
idk
0421dcaa69 update PACKAGES.html
Former-commit-id: 8938cdb82f
Former-commit-id: dbba42a368f87d411ebc0cc7705202af85b109e5
2022-09-17 15:06:06 -04:00
idk
fcb0f05964 update LICENSE.html
Former-commit-id: 2726079150
Former-commit-id: d099ea08836f507de0d3eeac04719b179fc99a50
2022-09-17 15:06:04 -04:00
idk
c9789a45db update I2PPureJavaBrowser.html
Former-commit-id: cd861fcd2d
Former-commit-id: 0a4acb3594d6f7af0e76d804cd7464bd9ce790f8
2022-09-17 15:06:02 -04:00
idk
59d6e24110 update I2PGenericUnsafeBrowser.html
Former-commit-id: bad65bfef1
Former-commit-id: 67d76cf246d21e191c17ff21731245d728687e0d
2022-09-17 15:06:00 -04:00
idk
c4cf4d3d4a update I2PFirefoxProfileUnpacker.html
Former-commit-id: 7f3ac774d8
Former-commit-id: 817f68e25b8e0d9e715429fe3b30ea58ec336b95
2022-09-17 15:05:57 -04:00
idk
92ec24fcf5 update I2PFirefoxProfileChecker.html
Former-commit-id: 2e974b2f9a
Former-commit-id: da49f89409a701e1c4e77b9d27c471d830a50ebe
2022-09-17 15:05:55 -04:00
idk
65d6264450 update I2PFirefoxProfileBuilder.html
Former-commit-id: c2970fd883
Former-commit-id: 0e9bb296318d868476bc5dfbea6148ab389f62f0
2022-09-17 15:05:53 -04:00
idk
7b98d33d88 update I2PFirefox.html
Former-commit-id: 3080b6258f
Former-commit-id: 9fcf8511984adff07406e0185ae4469d22ee1710
2022-09-17 15:05:50 -04:00
idk
b563002d25 update I2PCommonBrowser.html
Former-commit-id: 387300fdbc
Former-commit-id: f8f8e126c36416940b2a4a2c112a6a43b5f57b9f
2022-09-17 15:05:48 -04:00
idk
9f85a6104d update I2PChromiumProfileUnpacker.html
Former-commit-id: 3edb321dea
Former-commit-id: b3ff6bb0406cc5d826b8d33783a6343c61c5fa5d
2022-09-17 15:05:45 -04:00
idk
838bfe41d1 update I2PChromiumProfileChecker.html
Former-commit-id: d90062594e
Former-commit-id: e78c442d338cd7e1117f8ed00e24d80113da4c54
2022-09-17 15:05:43 -04:00
idk
f22350486d update I2PChromiumProfileBuilder.html
Former-commit-id: bc6e0ef02e
Former-commit-id: 991ae343ee9d61c85097ef692d21a9a07ec3e0b4
2022-09-17 15:05:41 -04:00
idk
8eecd52168 update I2PChromium.html
Former-commit-id: b24b1fc085
Former-commit-id: 5a83d352f4939b9409ab91b6aed66b81a87f84ed
2022-09-17 15:05:38 -04:00
idk
5b98cc1400 update I2PBrowser.html
Former-commit-id: 92b576861a
Former-commit-id: 4fc05177c3916245463b1d70e602cf33a4e4d61c
2022-09-17 15:05:36 -04:00
idk
60066c27b6 update EXAMPLES.html
Former-commit-id: f9f6257619
Former-commit-id: 3b40a7c2396117ee8dc35801bc6b41f9157cfb2d
2022-09-17 15:05:34 -04:00
idk
e60d8d7fdc update CHANGES.html
Former-commit-id: 9ce1fc2931
Former-commit-id: fbbe689c82578f7070ffb2d814bc705f7c81df72
2022-09-17 15:05:32 -04:00
idk
958e29b6d1 update index.html
Former-commit-id: adb8c8b2c7
Former-commit-id: 708eb3bcba7181ca0512f3746d20bced389d508b
2022-09-17 15:05:30 -04:00
idk
28333571d6 roll back version to fix homepage insructions
Former-commit-id: 834c070318
Former-commit-id: a4d56f67928f11a13dadeff202ffad5a2648c5f8
2022-09-17 15:05:07 -04:00
idk
2442dc974d set display variable correctly in docker.sh
Former-commit-id: 6abad05a18
Former-commit-id: 138aa59be14da8fe71c1b8d07f6767860e67e09a
2022-09-16 17:57:53 -04:00
idk
51b14cb6cd add note to docker.sh
Former-commit-id: 82dfd47e3d
Former-commit-id: 6f9aaf76cf8355013ec6c1714efd1b4ca97020d5
2022-09-16 17:57:03 -04:00
idk
2cd567cb16 oops forgot to add firefox to docker container, also add a launcher script
Former-commit-id: 254912480d
Former-commit-id: 25bc9b95de4d1ce28341a7ca238b20db62a0da80
2022-09-16 17:26:27 -04:00
idk
79432ee9d6 dockerize
Former-commit-id: e68c5b9568
Former-commit-id: 10d6568464404bf462bdc09fc0ec055aa24130d0
2022-09-16 16:39:05 -04:00
idk
4d4706acce move fedora dockerfile
Former-commit-id: dddafe3d45
Former-commit-id: cbfae2dc5d40d56a912f54a907f88dddfa4e323c
2022-09-16 16:16:59 -04:00
idk
e254e3e2cd work on a java-only solution
Former-commit-id: 8e26c31485
Former-commit-id: 06bebeaa8006e815e2840554e2ded1a14532c26f
2022-09-16 00:04:54 -04:00
idk
63e0750410 update TODO.html
Former-commit-id: 7fb7d625f3
Former-commit-id: 70417616021183a2b37c37b530292112a6c49983
2022-09-16 00:01:57 -04:00
idk
4f92c462b3 update PACKAGES.html
Former-commit-id: 7bdc984a5e
Former-commit-id: 0f09b54523cdc81223971c82483c6678a6fb4740
2022-09-16 00:01:49 -04:00
idk
11ef05aef4 update I2PFirefoxProfileChecker.html
Former-commit-id: 68f67314ef
Former-commit-id: a6f7e1d2d2a52cdb27586a2478552d5ea7742265
2022-09-16 00:01:33 -04:00
idk
6ef69a367e update I2PFirefoxProfileBuilder.html
Former-commit-id: 50a23f7caa
Former-commit-id: 7fdccfa7a5c5388fca668ff65e5002d5f1d9db06
2022-09-16 00:01:28 -04:00
idk
908e121b48 update I2PFirefox.html
Former-commit-id: caf896e2d9
Former-commit-id: e619988fb45ce705170edd54a3b5adf018a76ff7
2022-09-16 00:01:23 -04:00
idk
8ded75d725 update I2PCommonBrowser.html
Former-commit-id: 21cd09fd50
Former-commit-id: aeb5f7993f441c779b861ae2bf5efa357e262c3f
2022-09-16 00:01:19 -04:00
idk
800faded36 update I2PChromium.html
Former-commit-id: 46c4e25655
Former-commit-id: 404ce51ca564d10a79101ec2e51e4d2f33c7110e
2022-09-16 00:01:03 -04:00
idk
32f512c210 update I2PBrowser.html
Former-commit-id: 8500199d2f
Former-commit-id: 9a5a488d10c25cc2ce09a57f77b80982c33783b4
2022-09-16 00:00:59 -04:00
idk
96aa559394 update index.html
Former-commit-id: 9464613822
Former-commit-id: 6225c9a37e884ba6986dcda36eeb2ca6841dc7fc
2022-09-16 00:00:45 -04:00
idk
60b97676f0 move prerelease scripts
Former-commit-id: 6111c1a1a6
Former-commit-id: a3a480e5d64269fa61de5e6aae7cfde395b95c32
2022-09-16 00:00:18 -04:00
idk
68e027b992 update PACKAGES.html
Former-commit-id: 56a830cffa
Former-commit-id: 8c62795b1f3141344b235cf16809bb353068df0f
2022-09-15 23:57:32 -04:00
idk
367bda0ae4 Apply app mode to all urls passed in Chromium mode
Former-commit-id: 601f4981b4
Former-commit-id: 80f2683e551ab4317e5c6fa51dc4586131a454d8
2022-09-15 23:56:25 -04:00
idk
6311562a3d adds the -app mode flag
Former-commit-id: ce78f3b72f
Former-commit-id: f49cc93ff57dd8bea4bb5e9b2e6c5f9977651f32
2022-09-15 23:34:42 -04:00
idk
18999908c2 add chromium app-mode launcher
Former-commit-id: 46093c88dd
Former-commit-id: 0676b08e9e65dda037137d1defe86311b863e63e
2022-09-15 22:53:29 -04:00
idk
b0524a756e test app mode
Former-commit-id: 6d52518f4e
Former-commit-id: 97c2ef262c7b39549b6dfc0fa7000a692e983abd
2022-09-15 22:48:20 -04:00
idk
a2817647ab test app mode
Former-commit-id: cb393d8a36
Former-commit-id: d17c33e4ed3a0da3c8c9ea711728183df29c5897
2022-09-15 22:47:06 -04:00
idk
392141eb56 test app mode
Former-commit-id: 1e82ed79e3
Former-commit-id: 1dd669dad912ef715bae81493948b443cb9aff6f
2022-09-15 22:40:39 -04:00
idk
7df65e5aec test app mode
Former-commit-id: ad958ebfc6
Former-commit-id: 57bad91503f2b9692a61c797cf0e90654e44e88e
2022-09-15 22:38:45 -04:00
idk
37a32c69ce test app mode
Former-commit-id: 202f700cd7
Former-commit-id: 6806877324fdc53aea7341973ba74b40d37ea5cc
2022-09-15 22:38:02 -04:00
idk
887824b896 test app mode
Former-commit-id: 95189d2b24
Former-commit-id: a8b049635e2d0853e1984922c063bc68beabd3b1
2022-09-15 22:35:18 -04:00
idk
82ea5b2aaf test app mode
Former-commit-id: 9eedbe7081
Former-commit-id: ef89bea6f4cc79bf180c53a2797b8fe1c15ede54
2022-09-15 22:33:38 -04:00
idk
58e0cd1631 test app mode
Former-commit-id: dbbd6a4506
Former-commit-id: 2f3e1c672bd8e0a949ddc852fe400e655128e332
2022-09-15 22:31:48 -04:00
idk
c8368aaacf test app mode
Former-commit-id: 4e3d8912b5
Former-commit-id: 2c73b3544b72ea8c6d8fb4f5556b437401abc0c9
2022-09-15 22:31:11 -04:00
idk
cf74e5cb49 test app mode
Former-commit-id: d63e9d2a21
Former-commit-id: a7cf8e797335d0edae8eec64c019adc03ba24e5b
2022-09-15 22:29:04 -04:00
idk
43859971e6 add userChrome CSS enablement for Firefox app mode
Former-commit-id: e86376afc8
Former-commit-id: e6da7cda8a131ff032f830b90b686a09d63795fa
2022-09-15 21:12:02 -04:00
idk
eb118dc3c6 add userChrome CSS enablement for Firefox app mode
Former-commit-id: 0074d0968a
Former-commit-id: c93305d9a770275c675b2d70a07123b9b4af452a
2022-09-15 21:10:48 -04:00
idk
a133ee1d8f add userChrome CSS enablement for Firefox app mode
Former-commit-id: ccdfeac71a
Former-commit-id: b3e477a84e261e12c65b514b620cb5cec5ca8acf
2022-09-15 21:01:55 -04:00
idk
24df8dda06 add the only XUL component we'll ever need
Former-commit-id: 2187952038
Former-commit-id: 6bd8b1eac0155cd86f2b367720678e27c6f11445
2022-09-15 20:23:53 -04:00
idk
f78f867ca2 use a different profile directory if we're running apps-only
Former-commit-id: 879b78ac80
Former-commit-id: 54c8e376a59bf998fec6df74b9f3936a367ede1d
2022-09-15 19:48:52 -04:00
idk
7edcf08a17 add 127.0.0.1:7657 to bypasslist
Former-commit-id: 754de817a8
Former-commit-id: 0ed4ddc88cc3accb59564dd4ec16e615baee666a
2022-09-15 19:45:25 -04:00
idk
0b9a18867e start working on app mode
Former-commit-id: a605a86573
Former-commit-id: 590a07bdb554c72ff31f227c598082faf47cc4ff
2022-09-15 19:21:42 -04:00
idk
4b94cb1e30 update CHANGES.html
Former-commit-id: 1538e05a5b
Former-commit-id: 5bab27e8441ba65d9f39574def0e1c8c52b16fd1
2022-09-15 18:52:03 -04:00
idk
a10934b39a update index.html
Former-commit-id: b02984cf6e
Former-commit-id: 19c27774603005da1826e15888cb1a7f40e5948b
2022-09-15 18:51:59 -04:00
idk
b1b274bdcd put license files into an intuitive place that will make it into a build artifact
Former-commit-id: 2125d0ec0c
Former-commit-id: 1770ee266c1267567f29a4f7c847bbb778a9e867
2022-09-15 18:43:50 -04:00
idk
b0e429a873 put license files into an intuitive place that will make it into a build artifact
Former-commit-id: 18eb9bc145
Former-commit-id: 338e5daebc9b2206af1b377ce94d7662189d2dc5
2022-09-15 18:42:29 -04:00
idk
4960f79d1a put license files into an intuitive place that will make it into a build artifact
Former-commit-id: a321902818
Former-commit-id: d4c10118e9e22d1e043fefa7bb66c42e0ab49d57
2022-09-15 18:42:06 -04:00
idk
9c64021605 upload the profiles without the jars too
Former-commit-id: d653da5a50
Former-commit-id: ccd633ada15bb266dec45bcd23ab336aeebc953b
2022-09-15 18:30:48 -04:00
idk
84779c7bf5 update I2PGenericUnsafeBrowser.html
Former-commit-id: 0bfa4e2545
Former-commit-id: e196c95137178aba8ac21908468964af9832b435
2022-09-15 18:08:07 -04:00
idk
6955d7542f update I2PFirefoxProfileChecker.html
Former-commit-id: e9b6712b7f
Former-commit-id: ac7e8fa587646a2c6694383f345d7251c17ba84f
2022-09-15 18:08:00 -04:00
idk
6e427a855a update I2PCommonBrowser.html
Former-commit-id: 7028597091
Former-commit-id: d83355e51be0c3f6c232d3d0505811e9faacb5fd
2022-09-15 18:07:47 -04:00
idk
e1a4edac07 update I2PChromiumProfileBuilder.html
Former-commit-id: c3e9b94f15
Former-commit-id: d1224a26bd361a12eecd3f1fe9bbd3295ba1f447
2022-09-15 18:07:36 -04:00
idk
62f67bfc61 update index.html
Former-commit-id: f14c0848ad
Former-commit-id: 49f4aca8d234ece768f7d55fed37d13bf5d31b8f
2022-09-15 18:07:17 -04:00
idk
572d2ee9a5 add targets to auto-update the Firefox user.js
Former-commit-id: c360bac917
Former-commit-id: 4b6a9322aef04c7de6e991527856ec9634f2b46d
2022-09-15 18:06:58 -04:00
idk
5a90f2b396 update PACKAGES.html
Former-commit-id: 76c577015e
Former-commit-id: 4f663752d9ce59f6f4702a1fa88c9d0dc6a72b57
2022-09-15 16:24:31 -04:00
idk
2c77dda0e4 update index.html
Former-commit-id: a9f5519307
Former-commit-id: 470fbfef60caffaa52ef25f126cb6d7b4afe61c4
2022-09-15 16:23:33 -04:00
idk
6a62ea34b8 update PACKAGES.html
Former-commit-id: b90e6b23fc
Former-commit-id: a6c4284104ebb339aeeda2a285c074fa9eb1e38c
2022-09-15 14:15:38 -04:00
idk
ab74cf574d update index.html
Former-commit-id: 844da64205
Former-commit-id: 66de73382b6127306e521fc2206a3be2f6a260d3
2022-09-15 14:14:39 -04:00
idk
836762ea11 update PACKAGES.html
Former-commit-id: 520acf645e
Former-commit-id: 01daf53dd06ba47955b7fb9ee26a3cb8f5cc1385
2022-09-15 14:13:43 -04:00
idk
6eb41be3eb update index.html
Former-commit-id: 012ef7973c
Former-commit-id: 0d5e6d2623c0da12f1d1a68835cad60ecab71ff6
2022-09-15 14:12:42 -04:00
idk
2bc6a2eff9 fix missing quote in PACKAGES.md
Former-commit-id: 0d23afec1f
Former-commit-id: 9776da2343832d2b1e0da2083c6a040ea7fc5b0b
2022-09-15 14:12:24 -04:00
idk
6b30646ace also have release.sh update line in readme
Former-commit-id: 0b57e6b83f
Former-commit-id: 41c36f556a0609fd75c90f8243e43bc389bfffb1
2022-09-15 14:08:28 -04:00
idk
e290d9d350 version files
Former-commit-id: 8bc1e3ce8e
Former-commit-id: 73f2339ceb42c2cb2029bbb30474c6cafab1a952
2022-09-15 13:53:46 -04:00
idk
3340185ebc move version.txt to version.md and sync it with release/build numbers
Former-commit-id: fbc0ed75f1
Former-commit-id: 0e1af76b0db0b346ef797b1b36ea9c81a10070cc
2022-09-15 13:41:12 -04:00
idk
fff5bcf2de move version.txt to version.md and sync it with release/build numbers
Former-commit-id: 9539b08e46
Former-commit-id: e8713d332fd2b185be5648fa48a5333d976e053f
2022-09-15 13:33:23 -04:00
idk
4082f01390 update VERSION.html
Former-commit-id: 3682adb451
Former-commit-id: dff5b9e357731fb2a0c27f18e4cc5eafd3fc84c7
2022-09-14 23:38:46 -04:00
idk
e5e24663e5 update USAGE.html
Former-commit-id: d95c9db56a
Former-commit-id: 81b00960c5d59eb62fdba46df91d1fc30e59524d
2022-09-14 23:38:42 -04:00
idk
15263bcfc2 update TODO.html
Former-commit-id: b112b2d2f0
Former-commit-id: fe7587801031142e921e1cee97018d65c4d3ffd4
2022-09-14 23:38:39 -04:00
idk
1460a1fbc5 update RELEASES.html
Former-commit-id: 5a716812e0
Former-commit-id: e7217af771e6f71b7de81afb5a3e288cf2aaff31
2022-09-14 23:38:35 -04:00
idk
c2ff1edbdd update PACKAGES.html
Former-commit-id: 6efc37c485
Former-commit-id: fc3b95977ad68589cf3ef0722b29209065b5aff4
2022-09-14 23:38:31 -04:00
idk
91fd2f9c2a update LICENSE.html
Former-commit-id: 7e26446eea
Former-commit-id: 3bf7fc2b8b74ff88f44a31eb429330ce236a42b2
2022-09-14 23:38:27 -04:00
idk
f297763491 update I2PGenericUnsafeBrowser.html
Former-commit-id: 6d2bd58cc3
Former-commit-id: e57029030b073cb1242c6e0a46ee545bab55f44e
2022-09-14 23:38:23 -04:00
idk
faa2566a57 update I2PFirefoxProfileUnpacker.html
Former-commit-id: da4c571a22
Former-commit-id: 2d3de169086c7e1a92d69b400caebbbe77d920f1
2022-09-14 23:38:18 -04:00
idk
93f3741c16 update I2PFirefoxProfileChecker.html
Former-commit-id: ada176deb0
Former-commit-id: 886da8779ba124692948dfac71c3b8f161d5979c
2022-09-14 23:38:15 -04:00
idk
1995786fc7 update I2PFirefoxProfileBuilder.html
Former-commit-id: 206fee704c
Former-commit-id: a5ba4c56c76ac5d533baf9f0763a78a9fa0cce43
2022-09-14 23:38:11 -04:00
idk
e2180c3329 update I2PFirefox.html
Former-commit-id: 4498c4a19f
Former-commit-id: 926c0cc83d60e9a428d01e9c9b36766fa9f84223
2022-09-14 23:38:07 -04:00
idk
87bfa24d3e update I2PCommonBrowser.html
Former-commit-id: d41182c38a
Former-commit-id: 6eb2468b20ba6303dc40cc4cf75e9dfb46626963
2022-09-14 23:38:03 -04:00
idk
4c12b4dea2 update I2PChromiumProfileUnpacker.html
Former-commit-id: 6454655a62
Former-commit-id: 3c0cc113a6c56f9fe12ac84c4196b4abfb00b376
2022-09-14 23:37:59 -04:00
idk
c276ffc38a update I2PChromiumProfileChecker.html
Former-commit-id: 74fabbe814
Former-commit-id: 5f570e3a0853ae8d8bcbe4ea717099c4c18f19df
2022-09-14 23:37:56 -04:00
idk
0ff963277c update I2PChromiumProfileBuilder.html
Former-commit-id: 7cf1008cab
Former-commit-id: 89512e1b163c59daa263854a9d4efaa6d16bc443
2022-09-14 23:37:51 -04:00
idk
0c38b20f2f update I2PChromium.html
Former-commit-id: 89f2116a01
Former-commit-id: b4e045ba20063e806b24010c7a4c10763b2289c8
2022-09-14 23:37:48 -04:00
idk
0a41f1a159 update I2PBrowser.html
Former-commit-id: 91656a060c
Former-commit-id: 4c4c15c4c8ad4fe80afad925f0bc95ce24a0086d
2022-09-14 23:37:44 -04:00
idk
a99754f73a update EXAMPLES.html
Former-commit-id: b3237acd79
Former-commit-id: 4199eea8d486eb230bfcae4081b39ce97dfe6714
2022-09-14 23:37:40 -04:00
idk
b2953534a6 update CHANGES.html
Former-commit-id: 3d1e05be95
Former-commit-id: c44b92cd8a918a34103e370c55d38324798505b7
2022-09-14 23:37:36 -04:00
idk
ca4832e005 update index.html
Former-commit-id: 5b3bd4a064
Former-commit-id: 091ca8711f430d9f07e8945df70580cfbb3091e1
2022-09-14 23:37:32 -04:00
idk
da587b0c35 add descriptions
Former-commit-id: 638e880dc4
Former-commit-id: d8da648f89f9b4623017b72debae7b6284d59143
2022-09-14 23:37:29 -04:00
idk
a09b8792e2 add a file which lists the versions of the extensions
Former-commit-id: 72448bc949
Former-commit-id: 3f38aa87e648c957d190108fb62dc67635d71c24
2022-09-14 23:36:08 -04:00
idk
3630c0046e update I2PChromium.html
Former-commit-id: c7bb970c49
Former-commit-id: 68d62db18cb8d3d19d018f99b321dd181d74ef4d
2022-09-14 22:38:40 -04:00
idk
a3d7cac838 add https everywhere to Chromium extension loadout
Former-commit-id: 719e3a6a9a
Former-commit-id: 0bbb60d9cb9c0976ab23b52bdfec88e840a93025
2022-09-14 22:38:20 -04:00
idk
9a8c20b90c add https everywhere to Chromium extension loadout
Former-commit-id: e85eb22f91
Former-commit-id: 81114b318ee79ff86d0af24f7fd80629f2a1e1fb
2022-09-14 22:37:32 -04:00
idk
186ebd3539 update RELEASES.html
Former-commit-id: 2bb369bca2
Former-commit-id: 9351458baaf7d9c356fd86ae8198459451fc4232
2022-09-14 22:31:57 -04:00
idk
4d1fcaac15 update index.html
Former-commit-id: 59c88da41b
Former-commit-id: 8129c4153ffaed7e67ff6bb65c16acd668fb11dd
2022-09-14 22:30:56 -04:00
idk
8659699c6d update CHANGES.html
Former-commit-id: 188a3b8c5d
Former-commit-id: 3d6add170eb62aebb1c53286ca86dba3c6774220
2022-09-14 22:27:59 -04:00
idk
723f088fd0 update index.html
Former-commit-id: 1b1d861ec7
Former-commit-id: 16ab47e902b5620155a3f5458df3fd9e1cbe4c67
2022-09-14 22:27:54 -04:00
idk
9f2c5f9e9b update index.html
Former-commit-id: ab47e252cd
Former-commit-id: a4ce94f22d4a99af3002a30fc233d4a6ec2d558a
2022-09-11 02:05:14 -04:00
idk
7c732ef6a0 don't assume distclean in ant jar
Former-commit-id: 7846a3d566
Former-commit-id: fd7581a7d560e05ff0296b2ffc078067b0eb9385
2022-09-11 02:04:50 -04:00
idk
b85f46b6da don't assume distclean in ant jar
Former-commit-id: abb8be09c4
Former-commit-id: 27a0053b4a9d7145a3c02e6f3c4bc8f38a95ee65
2022-09-11 02:04:19 -04:00
idk
07d517978d update index.html
Former-commit-id: 49fbe74d2c
Former-commit-id: 44f9d0158a60638245bd227e59d391f518eb0181
2022-09-11 02:01:43 -04:00
idk
84cadbac94 update USAGE.html
Former-commit-id: a116e9f35e
Former-commit-id: c4231508410baadcca3e7034e8ee3216a10f9c5c
2022-09-11 01:47:31 -04:00
idk
5dca31b0a7 update TODO.html
Former-commit-id: 3ce7ca9210
Former-commit-id: 87a2a4bba6db8529c51d643e64b7367ea5db5ea5
2022-09-11 01:47:27 -04:00
idk
e6c2370184 update RELEASES.html
Former-commit-id: e5e350dae3
Former-commit-id: 2b11b72842c0ae742bdee117b31182d6c63904b0
2022-09-11 01:47:23 -04:00
idk
813e106c2b update PACKAGES.html
Former-commit-id: 5c9835a972
Former-commit-id: f4a94b84ce7bf1185d773deb367db3ce4946fcdb
2022-09-11 01:47:20 -04:00
idk
7d522d21db update LICENSE.html
Former-commit-id: 4f41ba7322
Former-commit-id: 212135e052af9fdac9a90972309e7a60035d290f
2022-09-11 01:47:16 -04:00
idk
f2281d400a update I2PGenericUnsafeBrowser.html
Former-commit-id: d372f87a6e
Former-commit-id: 82540b10cef272ee089d145a81295b4ffb1c9dff
2022-09-11 01:47:12 -04:00
idk
6e3dfd724a update I2PFirefoxProfileUnpacker.html
Former-commit-id: 4f070d84c3
Former-commit-id: 3e6fc61cad31651d1cd80aed2a4d231d34c2398b
2022-09-11 01:47:09 -04:00
idk
91cab7efaf update I2PFirefoxProfileChecker.html
Former-commit-id: 50116c6d4f
Former-commit-id: 39e92a46004d35c72991ae66673c7a18abdbf8c0
2022-09-11 01:47:06 -04:00
idk
9b64daef7e update I2PFirefoxProfileBuilder.html
Former-commit-id: 89f3f10bc2
Former-commit-id: 7685f4b45da034994b3aacd831b09c3aeb856a87
2022-09-11 01:47:01 -04:00
idk
d911a6f1e4 update I2PFirefox.html
Former-commit-id: 8057192698
Former-commit-id: 09d006a92d1b01fe4ccc5d588f5cb6bd78949dd8
2022-09-11 01:46:58 -04:00
idk
6c49c5fded update I2PCommonBrowser.html
Former-commit-id: ec8d535f65
Former-commit-id: 8b38b5c74a477f23f834c3cbbdbaebc3b45f8707
2022-09-11 01:46:54 -04:00
idk
b3a7eac296 update I2PChromiumProfileUnpacker.html
Former-commit-id: 0e5b7eb4c2
Former-commit-id: 5db730e7f1c78a1338e8a46884b26f989e50c688
2022-09-11 01:46:51 -04:00
idk
af213b5982 update I2PChromiumProfileChecker.html
Former-commit-id: e8f8235f06
Former-commit-id: f0304be4f48d4fed71382228bbe3d0374a368596
2022-09-11 01:46:47 -04:00
idk
c716f29042 update I2PChromiumProfileBuilder.html
Former-commit-id: a99a4ffc09
Former-commit-id: ba0fc0e08a3bbec251f1d5c2747d4ad4749abb21
2022-09-11 01:46:43 -04:00
idk
ecee59a577 update I2PChromium.html
Former-commit-id: a29340c9ef
Former-commit-id: 0fb80f2a49bbd0411dc691159cd9e9056b507298
2022-09-11 01:46:40 -04:00
idk
cf0943bb1f update I2PBrowser.html
Former-commit-id: 6fd377403a
Former-commit-id: 7abbab6d4665c12b2b28530872bd843b43e6b226
2022-09-11 01:46:37 -04:00
idk
2d83b588eb update EXAMPLES.html
Former-commit-id: c055352afd
Former-commit-id: a13c409b6d210fd781c34180cbd4cb4dc50b1243
2022-09-11 01:46:33 -04:00
idk
96c348db5e update CHANGES.html
Former-commit-id: a23ee60350
Former-commit-id: 0f21bb6b6b7b842d48c9566f1d25d8e8987a9cdc
2022-09-11 01:46:29 -04:00
idk
ebcc1481fe update index.html
Former-commit-id: 03a29fd557
Former-commit-id: 06f555e37c3612104638f6fcdf29d7d8b04085b5
2022-09-11 01:46:25 -04:00
idk
5bdbdd5958 update changelog, release
Former-commit-id: 1e84c614ce
Former-commit-id: 34deddf7a09d31e7a3a891a97c065b7554a8a219
2022-09-11 01:46:07 -04:00
idk
e75e844bdd do away with clunky logging thing
Former-commit-id: 74a6cded17
Former-commit-id: 46520df07ced3b42ec6fa42fb2095655dba941eb
2022-09-11 01:44:57 -04:00
idk
1a9bd3581b do away with clunky logging thing
Former-commit-id: 0a9b7f0678
Former-commit-id: 927ed542e0c6aa26735f6be4c1e021b414479f5f
2022-09-11 01:42:07 -04:00
idk
da9c06f5ad Add git clean -fdx to distclean target
Former-commit-id: 18ab8844c4
Former-commit-id: a27442cbfe4b64a95aea1e0e7b423b3938de69e4
2022-09-07 16:39:15 -04:00
idk
8eb528837d update RELEASES.html
Former-commit-id: 73f77dd64f
Former-commit-id: 384c80b6241bd8e511e51791be5875893ccf0716
2022-09-07 14:17:53 -04:00
idk
0e91210526 update index.html
Former-commit-id: ed76fbe804
Former-commit-id: 8ec0aa9df207ab2cf592ad84ce006611fdb0ce40
2022-09-07 14:16:55 -04:00
idk
ae12ba9a6a update packages.sh script
Former-commit-id: 207d7ffcd0
Former-commit-id: 4a3b5f53669ffe64764e7c08fcc683d6aa68f65e
2022-09-07 14:15:31 -04:00
idk
16908b885e update I2PBrowser.html
Former-commit-id: 27ebdbdde7
Former-commit-id: 7aeae87756ceade2fc78ac9f3757474fa48f66fe
2022-09-07 14:00:42 -04:00
idk
f77ea15a74 update EXAMPLES.html
Former-commit-id: acf760e24c
Former-commit-id: edfb05712f28fe5ce0ea45bb1d6efaffdbeedd03
2022-09-07 14:00:38 -04:00
idk
b398c948d5 update index.html
Former-commit-id: 35a0855dd5
Former-commit-id: 0d50b3cb091d8389495aa9be91e3d839771b3098
2022-09-07 14:00:31 -04:00
idk
04284fd462 update RELEASES.html
Former-commit-id: 475b1d93a5
Former-commit-id: bf29a02806d8ca2d3d5268c5ab5a08eb5143a837
2022-09-07 13:58:59 -04:00
idk
fa256ddea4 update PACKAGES.html
Former-commit-id: 33a1c4f8b0
Former-commit-id: 0a941d0d05fd431158cb636bef434e8e2ea1aba0
2022-09-07 13:58:56 -04:00
idk
fbf278754c update index.html
Former-commit-id: e584557dcc
Former-commit-id: fd9062d664bb16e2ba6153580b75e11697b81546
2022-09-07 13:58:02 -04:00
idk
0757e7a72e update I2PFirefox.html
Former-commit-id: 44e4b2348d
Former-commit-id: f288e4dbba33053fe8f15c6c4eb4ab3a649f7560
2022-09-07 12:07:02 -04:00
idk
fbe4ff3728 update I2PCommonBrowser.html
Former-commit-id: c581903d0a
Former-commit-id: 2aa69c3620fd7535cc2062718516222b7abc07ea
2022-09-07 12:06:58 -04:00
idk
0e7953ece8 update I2PChromium.html
Former-commit-id: 853d07b7d5
Former-commit-id: 0f1162ce3ed9b6420789259455013e2887c859c7
2022-09-07 12:06:44 -04:00
idk
aa9326149b update CHANGES.html
Former-commit-id: 29b1576936
Former-commit-id: 4ffa48ae8e97e9070073a43a1e6f4743f7c11784
2022-09-07 12:06:33 -04:00
idk
afb1ededad update index.html
Former-commit-id: 2ea0850f06
Former-commit-id: 97189b43f3679042c1282ca0178d07a2a003b034
2022-09-07 12:06:29 -04:00
idk
de74b448d0 update changelog
Former-commit-id: 5ad93c97aa
Former-commit-id: e60df3a14d30a00dc9af998d84353d866d112072
2022-09-07 12:06:06 -04:00
idk
2a0a0eae7b make waitForProxy always return true if the timeout is zero or less
Former-commit-id: 26154f3b7f
Former-commit-id: a57f223bf4f3a52875c3760fa3b8cefa33aa41c6
2022-09-07 12:04:03 -04:00
idk
1684d7c7bd wait up to 5 seconds for the headless firefox to die(sounds creepy when I say it like that)
Former-commit-id: 64505f6617
Former-commit-id: 0f6e3fea65809c006bebe1d032246c9e19b8741a
2022-09-07 11:58:08 -04:00
idk
ab2d1f9265 wait up to 5 seconds for the headless firefox to die(sounds creepy when I say it like that)
Former-commit-id: 800de73b9d
Former-commit-id: 7367d274c1a7d06bf358102ee89e1aa00049fbd1
2022-09-07 11:55:10 -04:00
idk
09b794a9de wait up to 5 seconds for the headless firefox to die(sounds creepy when I say it like that)
Former-commit-id: 4d605d40b2
Former-commit-id: 34825884aadce5ea3394fadf97807c5c35f9be13
2022-09-07 11:49:21 -04:00
idk
fac9329b4b move all proxy checking into common class(DRY) and add the ability to selectively disable or change the timeout time
Former-commit-id: 368d9c3423
Former-commit-id: 26922abcb88820e6ae4d894ce3eece295eb925ba
2022-09-07 11:45:49 -04:00
idk
7ed828391e update I2PFirefoxProfileChecker.html
Former-commit-id: 76d05d0d53
Former-commit-id: 393677db773e3172928d3e3ebfbf06a3e8b1c185
2022-09-07 04:35:28 -04:00
idk
20aba00029 update index.html
Former-commit-id: 7e6f11f6b3
Former-commit-id: 6c5565df0ad2b2f19253519cef27232563e867e1
2022-09-07 04:34:45 -04:00
idk
3f877ebac2 fix unclosed scanner
Former-commit-id: b9c0fc5e38
Former-commit-id: 048eebdff9f3f24f2701c8cceb75b410adcc3b76
2022-09-07 04:34:36 -04:00
idk
13f54f2769 update index.html
Former-commit-id: 5d4b1a4681
Former-commit-id: cab637f56079bfdb5a90501bed5d088e503d4373
2022-09-07 03:51:00 -04:00
idk
946bcb1348 fix url argument passing
Former-commit-id: b2f604a4a5
Former-commit-id: 45388e5d724cf78a8693c8b846b4fc5ff0e44d51
2022-09-07 03:50:51 -04:00
idk
2e882ed6ef update index.html
Former-commit-id: 7e3ae6ad04
Former-commit-id: a0a447211b04d7941f07e3531e4fce6f581a599b
2022-09-07 03:49:31 -04:00
idk
ee65d142a4 tweak releases slightly
Former-commit-id: 2edb2a3408
Former-commit-id: a7699ae8f5179df238d379622675794334fdd6b2
2022-09-07 03:35:50 -04:00
idk
012d69203e update I2PFirefoxProfileChecker.html
Former-commit-id: 6c1f2bc640
Former-commit-id: 21b0240a649e46da54278592021df9867194b423
2022-09-07 03:24:08 -04:00
idk
dfe039d6bb update I2PFirefox.html
Former-commit-id: 76292fc7c0
Former-commit-id: 170832bdb28fbbefa70e0f73c484e3f36fa842b9
2022-09-07 03:24:01 -04:00
idk
c5a25cc0b2 update index.html
Former-commit-id: c354c49128
Former-commit-id: 596509a0d4114fa176590f4d17f642eb6db54e84
2022-09-07 03:23:27 -04:00
idk
89ef810664 if the headless process survives destruction, forcibly estroy it
Former-commit-id: 9d66efe846
Former-commit-id: 69027cdf345b1aadf94a59e83559f1eec2892c24
2022-09-07 03:22:11 -04:00
idk
ed201cb93d remove -attach-console as it probably does nothing and breaks something
Former-commit-id: 24a08cf7c5
Former-commit-id: 87acb8d90248091c95b5093c8cfef73d511e3df9
2022-09-07 03:16:13 -04:00
idk
90cb65adcd update RELEASES.html
Former-commit-id: 4e19c36817
Former-commit-id: 46ca1c6dffe7cc29915b87a0aa2bfc3f7919daef
2022-09-07 00:46:22 -04:00
idk
c74e068186 update index.html
Former-commit-id: 05dfef06e3
Former-commit-id: 632a26caddf3b2877c8c004f1423caa6c81fb5ab
2022-09-07 00:45:23 -04:00
idk
76dbb58c9a update I2PFirefox.html
Former-commit-id: 8397d7415b
Former-commit-id: e725d407b35e502129aebde71a467b6e77541850
2022-09-06 23:54:43 -04:00
idk
142b8758ad update index.html
Former-commit-id: f9279f494f
Former-commit-id: 764f7dcb8f441bb8ee0fcebccae33d6608da21ca
2022-09-06 23:54:11 -04:00
idk
e2a6f3d37e Destroy headless process if it goes too long
Former-commit-id: e3c2ab91be
Former-commit-id: 1eded14d0e2320a2d7fda6e6d48482633b083373
2022-09-06 23:52:52 -04:00
idk
bf605d6e76 update CHANGES.html
Former-commit-id: a8a54f6b4c
Former-commit-id: 309364c6c54f483c1e3887689aa3c9f32088b0e8
2022-09-06 23:50:26 -04:00
idk
37bf014b49 Destroy headless process if it goes too long
Former-commit-id: 995e9805a2
Former-commit-id: 6e9354a9e8bff60e65764aabef0fc33d93cdc9f8
2022-09-06 23:50:19 -04:00
idk
770b38bb1e update RELEASES.html
Former-commit-id: f3e7c28503
Former-commit-id: 3978536349dcdb353f4db5ee3dd90d6b732dbdf9
2022-09-06 22:41:50 -04:00
idk
c26b9f418a update index.html
Former-commit-id: 6042f30350
Former-commit-id: bd7aab59ff5406e9a03da44e209bd1199c63664c
2022-09-06 22:40:52 -04:00
idk
1ce6d4b534 update PACKAGES.html
Former-commit-id: ab226e5a4c
Former-commit-id: 02e679a73a96ee0bdc99c111e7618762e5c752f8
2022-09-06 22:38:24 -04:00
idk
85f2d471b4 update I2PFirefox.html
Former-commit-id: e632a49933
Former-commit-id: f4211e494f1affcf23167296d5a50037e81c893c
2022-09-06 22:38:01 -04:00
idk
33d2a50d78 update index.html
Former-commit-id: beef36b36d
Former-commit-id: 4e297861efe7672878db792f1ec5eb53ba2b5187
2022-09-06 22:37:27 -04:00
idk
583e62d05a update USAGE.html
Former-commit-id: 2ed27fa307
Former-commit-id: 2e6055b56f25ebcd0e63bfaa63c241dd2d6fc6ff
2022-09-06 22:31:34 -04:00
idk
662df0a330 update TODO.html
Former-commit-id: 1a5ce21912
Former-commit-id: 1caf051a3c9b9030a01e7db4b6f061bd542eac0d
2022-09-06 22:31:31 -04:00
idk
5204d03699 update RELEASES.html
Former-commit-id: 7754c0b43d
Former-commit-id: 2d33d23ef555d69e91a72549bfdaef289926857c
2022-09-06 22:31:27 -04:00
idk
56ecb4f552 update PACKAGES.html
Former-commit-id: b4b2a30935
Former-commit-id: eb3a0b73ef26023bdeca21b0562c4fa7f152e287
2022-09-06 22:31:23 -04:00
idk
7435367a9e update LICENSE.html
Former-commit-id: 81f58b9d48
Former-commit-id: acfb122b80316d30c6249fdf4d16a19d84029032
2022-09-06 22:31:19 -04:00
idk
5c01933265 update I2PGenericUnsafeBrowser.html
Former-commit-id: 02ac99531a
Former-commit-id: 150533ec0fc546ff3c63721e8cc54ae273eaa77f
2022-09-06 22:31:15 -04:00
idk
949932875c update I2PFirefoxProfileUnpacker.html
Former-commit-id: 2b2aea0748
Former-commit-id: aafda96ea2949ccee89e3dc3305c674cf4642140
2022-09-06 22:31:12 -04:00
idk
9915429c35 update I2PFirefoxProfileChecker.html
Former-commit-id: 09e6864cb9
Former-commit-id: 87a1639a084f6783aa0674d6098d0f67bd4a6cd7
2022-09-06 22:31:08 -04:00
idk
f43ec9f0e5 update I2PFirefoxProfileBuilder.html
Former-commit-id: f954bf4893
Former-commit-id: 600e512b67ac03d4af139deb219a73c5e7c3c660
2022-09-06 22:31:04 -04:00
idk
6363c1a08b update I2PFirefox.html
Former-commit-id: 21f74306c8
Former-commit-id: 6660ece7b7544c79f326529a35c7fe8989ecf13e
2022-09-06 22:31:00 -04:00
idk
e946ad17e1 update I2PCommonBrowser.html
Former-commit-id: ccde6b65dc
Former-commit-id: 2b5bf48efc4ad550b9100fa432834a1c6e305fe3
2022-09-06 22:30:56 -04:00
idk
3b1652800a update I2PChromiumProfileUnpacker.html
Former-commit-id: f348347115
Former-commit-id: 30d577b9f20eb52fbdfdbd277937eb3af9eaa088
2022-09-06 22:30:52 -04:00
idk
cbe6b65213 update I2PChromiumProfileChecker.html
Former-commit-id: ef19f681d0
Former-commit-id: e07cf48dfa4ad9890bd5753aa9b7229a68860e3a
2022-09-06 22:30:48 -04:00
idk
2fe3e265ca update I2PChromiumProfileBuilder.html
Former-commit-id: 1b60e74f9d
Former-commit-id: 5a6fad0e08521ac241ad224438bb5f9a242b35b2
2022-09-06 22:30:44 -04:00
idk
672e383328 update I2PChromium.html
Former-commit-id: 9a052f4f3c
Former-commit-id: afe8280e59d589045142ab94b733d28b9743afc6
2022-09-06 22:30:40 -04:00
idk
2cb84b76e5 update I2PBrowser.html
Former-commit-id: 1e94b34efe
Former-commit-id: 2a0e98e0445bd4bb614a5579ba6acb6fe9d6849b
2022-09-06 22:30:36 -04:00
idk
4807958951 update EXAMPLES.html
Former-commit-id: 01c19d1ffd
Former-commit-id: ed577863dde0daaff087921eb098c143c3edff87
2022-09-06 22:30:33 -04:00
idk
e612d7cab1 update CHANGES.html
Former-commit-id: de6b872426
Former-commit-id: 0405e9bb0b05efa0aeff68acbd463a3c5ae8e1f9
2022-09-06 22:30:29 -04:00
idk
e9bd73b5db update index.html
Former-commit-id: 27cb5b8365
Former-commit-id: 3b980f0389495ce82b0aa15f48001853d507e4c5
2022-09-06 22:30:25 -04:00
idk
e701bfbaad update download page
Former-commit-id: 2d508e1417
Former-commit-id: bf5a0bbc5baccaae7025a73294d634e11c4bb970
2022-09-06 22:30:14 -04:00
idk
aad7c34630 start working on an OSX package, won't have a signer for now but gotta start somewhere
Former-commit-id: d6a62bb6ee
Former-commit-id: 16d50ea12952597134c5df4736d0afb059962c4f
2022-09-06 21:35:27 -04:00
idk
0fe2d7b128 minor tweak to releaser script
Former-commit-id: 4095e61ad3
Former-commit-id: 4d4f877a801ff7ab322066f2aff8b77d598be14f
2022-09-06 21:22:03 -04:00
idk
3fb39e4c97 add sha256sums for releases
Former-commit-id: f107bf92b2
Former-commit-id: 0f75131e564e6afdd214f036838fa4cf1e44538d
2022-09-06 21:08:34 -04:00
idk
a215f31adf update index.html
Former-commit-id: bf2e964e1a
Former-commit-id: 9251322c52bda6fd750a61ab3e7dd3aaf6578b10
2022-09-06 21:06:31 -04:00
idk
6b957a72e1 update index.html
Former-commit-id: 8c4647f8b3
Former-commit-id: ed673a3d6bc8e6d9fc2f9f0f0f3b9312a7373b5b
2022-09-06 20:59:00 -04:00
idk
3f570f1d12 add sha256sums for releases
Former-commit-id: 62bda1aec5
Former-commit-id: 11881d2894c06af4e660ce955e02269bdeae0f62
2022-09-06 20:57:43 -04:00
idk
89ba93ff88 Fix uploader for fedora package
Former-commit-id: 5c637e900e
Former-commit-id: a20f68ee70ab8ca5ce0c539866f78b2cb001cebb
2022-09-06 20:42:36 -04:00
idk
cefdfd03f1 update I2PFirefox.html
Former-commit-id: 41b927809b
Former-commit-id: bc825eff0fcad20c86bef94fd5f8f0e8aa7934af
2022-09-06 20:25:43 -04:00
idk
452bd2329c update I2PCommonBrowser.html
Former-commit-id: f8b70f2a96
Former-commit-id: 2bf2d0767fd9a40fd08aad938436307095ffd482
2022-09-06 20:25:40 -04:00
idk
45e4875207 update index.html
Former-commit-id: c9e7a4beba
Former-commit-id: d1b800cd68a48be9a17c3c0cf8250ebf0d119b13
2022-09-06 20:25:12 -04:00
idk
46ad406776 update I2PFirefoxProfileUnpacker.html
Former-commit-id: 40f50aefb5
Former-commit-id: 676c735cbcd5f5ef39e85e7c314f48e36872b4b7
2022-09-06 20:24:44 -04:00
idk
f58e7c34d3 update CHANGES.html
Former-commit-id: e9dfeb0288
Former-commit-id: cd5b368bc72e35914ba5de139a904278b097f51e
2022-09-06 20:24:05 -04:00
idk
9e476d4f4e update index.html
Former-commit-id: 5d121e8927
Former-commit-id: aa61e47afb0dca43894a4c4f49283ccd4c700100
2022-09-06 20:24:02 -04:00
idk
8c2a403216 update index.html
Former-commit-id: aad78749b4
Former-commit-id: 4dc60c50de2b930926d3990e75978bb11d408f93
2022-09-06 20:22:17 -04:00
idk
3ad02df993 update the README
Former-commit-id: bbaddd3927
Former-commit-id: 3974d8afe1432eadd8dfa9752df76006e8d8b595
2022-09-06 20:21:04 -04:00
idk
e0d3ec1868 update the changelog
Former-commit-id: f7c58d0125
Former-commit-id: af92fc55139fb2e80b44fcdf7168b03790bc6667
2022-09-06 20:12:56 -04:00
idk
1892e107bc update the changelog
Former-commit-id: 0e2dba7bd5
Former-commit-id: 7f3ad002f5c39d0d19ba531670f78840d5a60f3d
2022-09-06 20:12:31 -04:00
idk
adc2690d97 run headlessly if we find a first-run file
Former-commit-id: 23f1e3491f
Former-commit-id: cf8259fac577a24d9cac68c30058769aed6a76e4
2022-09-06 20:06:50 -04:00
idk
6170521f0e run headlessly if we find a first-run file
Former-commit-id: a36a74a44a
Former-commit-id: a66049edac1c7d230c8ec181f0499a26ae7244f3
2022-09-06 20:05:29 -04:00
idk
48dd749554 update USAGE.html
Former-commit-id: 63344656c1
Former-commit-id: c798dd1b111ea4e32e610f0b4d0221a716f13f90
2022-09-06 19:38:45 -04:00
idk
e4344ae908 update TODO.html
Former-commit-id: 260d42a7b3
Former-commit-id: f437d5856320aa511d07a06f4e0923604813fc4a
2022-09-06 19:38:41 -04:00
idk
896175f851 update PACKAGES.html
Former-commit-id: 4c3f5523d2
Former-commit-id: a9d966e58367090165cd03c606a4e5f2e56cc237
2022-09-06 19:38:38 -04:00
idk
13cb55f999 update LICENSE.html
Former-commit-id: 0038f9c186
Former-commit-id: a710c06a598bf7c83ab234d99df12a78676465ea
2022-09-06 19:38:34 -04:00
idk
799678af02 update I2PGenericUnsafeBrowser.html
Former-commit-id: 46469a4e94
Former-commit-id: af2a2489b8b62ed987aeae43e0f903e34fd40434
2022-09-06 19:38:30 -04:00
idk
9eab532d7f update I2PFirefoxProfileUnpacker.html
Former-commit-id: 8d8006c956
Former-commit-id: 62d8133375b0a081b7f7a3a2d7d8bc6e406a9cc6
2022-09-06 19:38:27 -04:00
idk
c1f055c3a3 update I2PFirefoxProfileChecker.html
Former-commit-id: 4d35d18c99
Former-commit-id: b1ed2dd021a7d0f994442f37006b98ef14799c87
2022-09-06 19:38:23 -04:00
idk
dd1d53cea0 update I2PFirefoxProfileBuilder.html
Former-commit-id: 8a2b3fee85
Former-commit-id: 95b9f5345e5ee5a4ec04f761daf40495fe018b10
2022-09-06 19:38:20 -04:00
idk
e787ae65cf update I2PFirefox.html
Former-commit-id: 268b791ad7
Former-commit-id: da70b6ccbcfaac8f9c89c8f99612fd4b2552a609
2022-09-06 19:38:16 -04:00
idk
43cdef1c9c update I2PCommonBrowser.html
Former-commit-id: 37c7ad9640
Former-commit-id: e8eb68fb0972cf5bc215b11a255f1ecb8fee58dd
2022-09-06 19:38:12 -04:00
idk
754fbebbd2 update I2PChromiumProfileUnpacker.html
Former-commit-id: 6928ff423a
Former-commit-id: e56e98495411185f2561830cc62333343526a915
2022-09-06 19:38:09 -04:00
idk
d9328b098c update I2PChromiumProfileChecker.html
Former-commit-id: a4bde9e63b
Former-commit-id: 54bb1a2c7d3513490d8eee2e7c04fa3b0ee4569e
2022-09-06 19:38:05 -04:00
idk
e04dcec42e update I2PChromiumProfileBuilder.html
Former-commit-id: e337f90c0b
Former-commit-id: 26f88a295884148c37a29e6acf39adb9e2819cbe
2022-09-06 19:38:02 -04:00
idk
e2be14f912 update I2PChromium.html
Former-commit-id: 89b480cd22
Former-commit-id: fe09271073d49879818ca935279f883b31a7b6a4
2022-09-06 19:37:58 -04:00
idk
7b847e5a9f update I2PBrowser.html
Former-commit-id: 0c4746e8fb
Former-commit-id: 529dcbdc000638070092230e8e0453923d6790b3
2022-09-06 19:37:55 -04:00
idk
833508d141 update EXAMPLES.html
Former-commit-id: 87b0a07878
Former-commit-id: a4149b0e25d45f81ddbde0c726663a2c85f158b8
2022-09-06 19:37:51 -04:00
idk
cb1b25cecf update CHANGES.html
Former-commit-id: f09599a2fa
Former-commit-id: c0b37569d98f81ee186fcf3e1856acbacfeeeede
2022-09-06 19:37:48 -04:00
idk
1ed4724638 update index.html
Former-commit-id: 2d3071dbb2
Former-commit-id: a273c3f051160fd71a2758f972b0d1a8f6381bc1
2022-09-06 19:37:44 -04:00
idk
7ce104655c fedora fixes
Former-commit-id: c79018a29a
Former-commit-id: f711e279e9c3a3d5920c0f3a26a61aee9a2df899
2022-09-06 19:35:19 -04:00
idk
b02e069ade Document package builds
Former-commit-id: bc342cc463
Former-commit-id: fd4ec91f191a9d0c88d86ec573a675022981d2b0
2022-09-06 19:27:02 -04:00
idk
626d2997ba Document package builds
Former-commit-id: 54b427e532
Former-commit-id: a8312e38a534575c4d37d4fea4fddfc21eef2f24
2022-09-06 19:25:43 -04:00
idk
8140aac189 fedora builds
Former-commit-id: ebc829c5c9
Former-commit-id: 119b8a4ab2c35aba585225f8ce5cb49d7cd2a5ff
2022-09-06 18:56:39 -04:00
idk
c23fa33a61 container-build redhat packages
Former-commit-id: ce5240d658
Former-commit-id: 509c76bf00d8b9bdf734e3a7bb8005dc9f99fc89
2022-09-06 18:42:37 -04:00
idk
02d1a72d31 container-build redhat packages
Former-commit-id: fdd3aac391
Former-commit-id: df8b09594894b38bf52324840e5d3f2ed51ca6d4
2022-09-06 18:42:01 -04:00
idk
95d6159997 fedora. What the hell.
Former-commit-id: c5281751bb
Former-commit-id: afd8bd48cf41d170e1f299b464049ba4140e3899
2022-09-06 18:31:12 -04:00
idk
fa9c948688 Windows EXE installer, Windows portable zip
Former-commit-id: a3b9f1abce
Former-commit-id: e61d370a1fbb1fb3ed3349bd50558d1fee453373
2022-09-06 18:29:43 -04:00
idk
ac934cd6db start a windows portable
Former-commit-id: f208563c35
Former-commit-id: c447f2f1db80a303984f706f025b8adf30fac85b
2022-09-06 18:15:21 -04:00
idk
6803280bf2 fix windows releaser script
Former-commit-id: a9e1135ef5
Former-commit-id: 6d9e221fbb4e2b890435054d0a140b209f37a4e6
2022-09-05 22:04:23 -04:00
idk
24bc8384f4 make everything distributable better
Former-commit-id: 8d3b46b36c
Former-commit-id: f97b6787a467306de1dddb1513dc9f48bd36acf9
2022-09-05 22:01:20 -04:00
idk
46fdf0e9ee update I2PCommonBrowser.html
Former-commit-id: a7e47cfc15
Former-commit-id: e3375bc2ce8bc411ff3145e8b813d5b52992369f
2022-09-05 21:54:29 -04:00
idk
1df9f4d4dd update CHANGES.html
Former-commit-id: 71060cd851
Former-commit-id: da01fce972e1a32ea4c4ccad2db5c56c7a6c734e
2022-09-05 21:54:03 -04:00
idk
518bc35946 update index.html
Former-commit-id: f3dc285ba6
Former-commit-id: aa24c34cf2ff8d446a53c80d06c8239d71ee960d
2022-09-05 21:53:59 -04:00
idk
935d6766c7 Windows releaser too.
Former-commit-id: bce2f0e286
Former-commit-id: f7717694d8a92c1679301ba09aa18a60efa32ae3
2022-09-05 21:53:24 -04:00
idk
3d3eec3de9 Windows releaser too.
Former-commit-id: 8e70d9280c
Former-commit-id: 97954c403b59723eac7e62580d99d3e079a6e481
2022-09-05 21:52:18 -04:00
idk
ba6104df32 never run inside Program Files, allow per-user install
Former-commit-id: ea778bf5da
Former-commit-id: dbd2095b70b8534ab186ece6dd9ffadaf4444717
2022-09-05 21:32:31 -04:00
idk
3652e8a8b8 fix releaser script
Former-commit-id: a3de60fcb1
Former-commit-id: 21210d4b304a75959a643c751e89949ca0868907
2022-09-05 21:28:36 -04:00
idk
99144c0eac update I2PGenericUnsafeBrowser.html
Former-commit-id: 459c16aec2
Former-commit-id: 803c6aaf344af3cb120517a7ffabc7d6498156de
2022-09-05 21:15:53 -04:00
idk
5dc0622e58 update I2PFirefox.html
Former-commit-id: d35a60cc01
Former-commit-id: df90e9cfee6d467667d437375a894cc09f758aab
2022-09-05 21:15:39 -04:00
idk
32d2c5a50c update I2PCommonBrowser.html
Former-commit-id: 733c2b1cc0
Former-commit-id: d6746bca3b1c167aacb48a9006582a24e657587a
2022-09-05 21:15:35 -04:00
idk
9d44047018 update I2PChromium.html
Former-commit-id: 6b7ab66c99
Former-commit-id: 97ce0c34058f501fecf23b381d7b164509920d0e
2022-09-05 21:15:21 -04:00
idk
44f5ad8604 update I2PBrowser.html
Former-commit-id: 4647cd4a0b
Former-commit-id: 643c947223a7807fd655dea93e2af5928d1f4f90
2022-09-05 21:15:18 -04:00
idk
ab31fafd65 update CHANGES.html
Former-commit-id: b47fb744c4
Former-commit-id: 1bda1de68631928fa8c737be63c41177ef8c14ad
2022-09-05 21:15:11 -04:00
idk
38c8ada0ad release
Former-commit-id: a179482b95
Former-commit-id: 24a6077e0bda3f1539b3ebfea35933935c01ff3e
2022-09-05 21:14:59 -04:00
idk
346ee983d1 update index.html
Former-commit-id: 0f44a3219b
Former-commit-id: 36ed198cf2f9c03053d5f41915042f61696019f8
2022-09-05 21:13:01 -04:00
idk
11288b804a debian package
Former-commit-id: 9c54e16978
Former-commit-id: 7e529a046425e13ed88d2e6a5c3df8eacae73107
2022-09-05 21:12:53 -04:00
idk
f3df0443d9 debian package
Former-commit-id: 395e1c2c95
Former-commit-id: ac8a3a59d8e12fcb1748bc8f1659691d2566391e
2022-09-05 21:12:10 -04:00
idk
a52121b191 set a default directory in some cases
Former-commit-id: d989337a9c
Former-commit-id: 3334c0c6e0d54e4001ef0afd5d87ec07d68fd41f
2022-09-05 21:08:11 -04:00
idk
553472a045 make everything distributable better
Former-commit-id: 7dbfdd9cbf
Former-commit-id: 1c089bbfa57285f4ba3e919f537e661088d172bf
2022-09-05 18:43:02 -04:00
idk
62df9f87c2 make it so Windows can find things easier
Former-commit-id: 6605220f4a
Former-commit-id: fc48cf56cd4cd69c501e3fd65cdaf6c1df09d0b7
2022-09-05 18:28:23 -04:00
idk
fc812be01e update gitignore
Former-commit-id: d0440dcc56
Former-commit-id: 0c74fb2118c60e4d202cf4e7d278d5ed6ef97878
2022-09-05 18:26:00 -04:00
idk
05ff2af7dc Freestanding packages. Why the heck not.
Former-commit-id: 4640cc528c
Former-commit-id: f916227a3b9cbde8e89ee8c44ff32077775e994e
2022-09-05 18:23:33 -04:00
idk
26013c9fd0 add support for a Debian package. Yeah a Debian package.
Former-commit-id: 94e03d045b
Former-commit-id: 26d5bef754c2c5c12fdb96c29f00d4efa588aede
2022-09-05 17:50:04 -04:00
idk
6f68e2c9ce update I2PFirefox.html
Former-commit-id: b6a66cf96e
Former-commit-id: 9d769c1acbe0fb71c8e4d8ef50edc94822fcab26
2022-09-05 10:21:30 -04:00
idk
e42501dd07 update CHANGES.html
Former-commit-id: 91f44d29f7
Former-commit-id: 3a6656f63760fe7837000a9a83d266b5b47bc668
2022-09-05 10:20:59 -04:00
idk
2ec49db0ad update index.html
Former-commit-id: 9152da34c9
Former-commit-id: 3a3c76b3d865f4b79fb02dfcf2008fdd488d07e4
2022-09-05 10:20:55 -04:00
idk
e5ac25b839 update changelog
Former-commit-id: e49cd5d470
Former-commit-id: 207aa5abc8a433881a4c42ed452df1540d087a3b
2022-09-05 10:19:03 -04:00
idk
84d9448921 always pass --new-instance to firefox
Former-commit-id: 02c148ccbd
Former-commit-id: dccc20ab1d48526b93d8e154ed8112cd3610f72b
2022-09-05 10:16:52 -04:00
idk
ced9f14d88 update I2PGenericUnsafeBrowser.html
Former-commit-id: 5216ec40f4
Former-commit-id: b62bfcf37614988b7cef5cd6d718477694f4e7e5
2022-09-05 00:41:31 -04:00
idk
7b60616489 update I2PFirefoxProfileChecker.html
Former-commit-id: 65e67f661b
Former-commit-id: 9a04a891b2139c4e8605d7f5946e92e5adb2eddd
2022-09-05 00:41:23 -04:00
idk
6a6dea233e update I2PFirefox.html
Former-commit-id: adfda72398
Former-commit-id: f8560f6d9c194e23a735b63ea010c1b4fea768e8
2022-09-05 00:41:15 -04:00
idk
94399bb27d update I2PCommonBrowser.html
Former-commit-id: 5f320087f0
Former-commit-id: 7837a407db71f7458dedd4d0f9dc3dcffd99cb84
2022-09-05 00:41:11 -04:00
idk
f1181e2f48 update I2PChromiumProfileChecker.html
Former-commit-id: 86c0c1b68b
Former-commit-id: d40073be655d8825c593d645fddca70e34a1704b
2022-09-05 00:41:04 -04:00
idk
ac5c64db05 update I2PChromium.html
Former-commit-id: 07cc177a95
Former-commit-id: ae7eec7a4fd21266737fc15d315c6fd0f8415f1d
2022-09-05 00:40:56 -04:00
idk
6fd12cff57 update I2PBrowser.html
Former-commit-id: 40299b00fc
Former-commit-id: 8f5747f6f7801b74aee524e9cc661413a5c9cc60
2022-09-05 00:40:53 -04:00
idk
c9b67a5b9d update index.html
Former-commit-id: 1c1e048c50
Former-commit-id: 974d9bd1b17c0d0fb7f773261a6373c7d87c330f
2022-09-05 00:40:42 -04:00
idk
4ab03ab420 update logging
Former-commit-id: 084ecb46ff
Former-commit-id: 47fc588a9546eaf65b9236de394de23c6b82c3f6
2022-09-05 00:31:27 -04:00
idk
3de28ee877 move all logging to a proper logging system
Former-commit-id: 2b80b4151a
Former-commit-id: 8b4aa7a33e94df5a4903c52be31b266999549b0e
2022-09-05 00:19:59 -04:00
idk
c7ed068c37 update I2PFirefox.html
Former-commit-id: e43468c367
Former-commit-id: e50eae62e4093204452e2aa2793ed054a4f9b293
2022-09-04 23:13:33 -04:00
idk
e6777a88a3 update index.html
Former-commit-id: 1f770c01ab
Former-commit-id: 576d7fc707241a636b3065473f289b85f4651c76
2022-09-04 23:12:22 -04:00
idk
91c0f618cf bump again
Former-commit-id: 4d79219358
Former-commit-id: afd814b9d530be881805d44bafee3443939b3752
2022-09-04 23:11:25 -04:00
idk
bd911cda8c update index.html
Former-commit-id: 3725be1d5b
Former-commit-id: 0829f580cd2e7dd69451d7c0a52fe32c0ab242ca
2022-09-04 21:24:26 -04:00
idk
145d99443e bump
Former-commit-id: 5d1afd8dd4
Former-commit-id: aa86bd412c3a840c66132b859d9b69bfc5e2782c
2022-09-04 21:19:35 -04:00
idk
98f531e892 fix missing semicolon
Former-commit-id: 6234ffdff1
Former-commit-id: 4402259ff2e6e9b2f86e952c3a848b14a426d022
2022-09-04 21:13:40 -04:00
idk
2a1af1e1a4 update I2PFirefoxProfileBuilder.html
Former-commit-id: 8802f9448f
Former-commit-id: db5d6fa9c4710a603503adf557bc388ebbc6a405
2022-09-04 11:02:30 -04:00
idk
068c691dea update I2PFirefox.html
Former-commit-id: 31d654ef4f
Former-commit-id: 0d2d6024269b72586c72034ac0b068e0be072bc5
2022-09-04 11:02:23 -04:00
idk
40739eed34 update I2PCommonBrowser.html
Former-commit-id: 04894a0977
Former-commit-id: 4e070470d5ab31e8f96e9a861c67736ad42d4fa5
2022-09-04 11:02:17 -04:00
idk
452a8f8701 update I2PChromium.html
Former-commit-id: a2733d8ffb
Former-commit-id: ab3fc74b2cc12d3f1ebabe1e25140a3db0fa7c83
2022-09-04 11:01:52 -04:00
idk
2d1be5ea3e update index.html
Former-commit-id: 100fe7fd95
Former-commit-id: 618f3259eaa1bbe292412cecd197e83d8db0d239
2022-09-04 11:01:25 -04:00
idk
0d3f16ae02 bump for release
Former-commit-id: 91964508d8
Former-commit-id: ab8a84fa6de2c0514b57444f36ac54042474775a
2022-09-04 11:00:32 -04:00
idk
a9279a6caa first run just unpacks the profile and deletes the first-run file now, to prevent launch-and-close of browser on Windows 11 when running from NSIS
Former-commit-id: 9d347bdfa2
Former-commit-id: 95ad268c681476213e3513f0b33e033501bee758
2022-09-04 10:59:35 -04:00
idk
0e6bc0d8cf add in first-run files to profiles
Former-commit-id: 93f6e01e53
Former-commit-id: 85b1e3f7d222302d0879257fdd4901d55e3f3dc0
2022-09-04 09:36:15 -04:00
idk
5db024724a update I2PGenericUnsafeBrowser.html
Former-commit-id: 03ea5ed52c
Former-commit-id: 0a93564c6488b418fd0ec7a35ee3a8f1c079e210
2022-09-03 22:04:59 -04:00
idk
dd49ab1a1d update I2PFirefox.html
Former-commit-id: 78bf32bc06
Former-commit-id: 195add0af6ffb884be807552be1bc4b964a368bf
2022-09-03 22:04:38 -04:00
idk
9124ce1958 update I2PChromium.html
Former-commit-id: 4420222d7e
Former-commit-id: e0e712526cbfb585b24ba65456bca3a5715d94cd
2022-09-03 22:04:09 -04:00
idk
aabff994d4 update index.html
Former-commit-id: 8a3b73599a
Former-commit-id: e37dbfe3a5a6445fc5f2e7b7fd0f56898de848d1
2022-09-03 22:03:43 -04:00
idk
42d7e032f0 release again
Former-commit-id: 68300d78ef
Former-commit-id: c1424ac87171cc683c2f8a8bc8331e95c6a13c99
2022-09-03 21:41:41 -04:00
idk
bcd932c726 never check args.length and args != null on the same line
Former-commit-id: b3fba0449c
Former-commit-id: 2e0110d5350c23504de42b64b16953f6c182a0b1
2022-09-03 21:38:20 -04:00
idk
0e6da3bb26 update USAGE.html
Former-commit-id: 437d0698c0
Former-commit-id: c30b82dd02510d1c1ae190bd7ec024485cdc0d97
2022-09-02 18:36:11 -04:00
idk
783b00fa41 update TODO.html
Former-commit-id: 5d504c96f3
Former-commit-id: a4cc972037b91fb3987dcc00d0ae4f076afbed06
2022-09-02 18:36:05 -04:00
idk
a8ae112588 update LICENSE.html
Former-commit-id: 895e7c39af
Former-commit-id: 2bd1c641da42ae8dc2a469676b16c11e12e95bfd
2022-09-02 18:36:00 -04:00
idk
108b5d90e7 update I2PGenericUnsafeBrowser.html
Former-commit-id: 7a0bbf0d22
Former-commit-id: b89cfa01cb0f9c9d17cb3aa9a44bfef3178f26fe
2022-09-02 18:35:54 -04:00
idk
a12a1c3f4d update I2PFirefoxProfileUnpacker.html
Former-commit-id: 99e33eb030
Former-commit-id: 39442b9c4ccfd389bcc933258e9417e4f616d4cd
2022-09-02 18:35:49 -04:00
idk
1cde9dc8ee update I2PFirefoxProfileChecker.html
Former-commit-id: 73ab706e21
Former-commit-id: b8e49be537d7d347461202837bf0fa86d98cdeb7
2022-09-02 18:35:43 -04:00
idk
ca2a23a714 update I2PFirefoxProfileBuilder.html
Former-commit-id: 9b177f17e7
Former-commit-id: a67c2c7a629aeaeb72c7fb2887f1ae3a7fb31099
2022-09-02 18:35:38 -04:00
idk
c50cbc1288 update I2PFirefox.html
Former-commit-id: 88346f9d99
Former-commit-id: 41c1c4857123782bd17e1d1a78ff8dbdbda0c1c0
2022-09-02 18:35:32 -04:00
idk
fcf4bda13b update I2PCommonBrowser.html
Former-commit-id: 26a0fc6bf9
Former-commit-id: 132f2316e5b7d0f253c4468934ee8d9cd8aeae1a
2022-09-02 18:35:27 -04:00
idk
b509bd75db update I2PChromiumProfileUnpacker.html
Former-commit-id: 5f279ea87a
Former-commit-id: 8cf9c8b280c67dec39ebef12b13c47ed6e525eb5
2022-09-02 18:35:22 -04:00
idk
903967d7bd update I2PChromiumProfileChecker.html
Former-commit-id: ce4deba206
Former-commit-id: a37e974867e6f486282b321770735b8e6ecebb57
2022-09-02 18:35:16 -04:00
idk
5e070c6cf8 update I2PChromiumProfileBuilder.html
Former-commit-id: 78c379e0a9
Former-commit-id: b7ec57fcd4771c0e392827e61f3de3a3da7215c4
2022-09-02 18:35:10 -04:00
idk
99755fbd06 update I2PChromium.html
Former-commit-id: bfdd9a01a8
Former-commit-id: 82b5983c80371ff738a80fa6afbc461f1b12e28f
2022-09-02 18:35:04 -04:00
idk
16ce7815ff update I2PBrowser.html
Former-commit-id: 7664107c7d
Former-commit-id: 20b1c351f280f77a8bfc4fda422e49cb7a06fcf8
2022-09-02 18:34:59 -04:00
idk
82d7437758 update EXAMPLES.html
Former-commit-id: 61f8297fe9
Former-commit-id: f87d85dcad9aad5fd8d24c1f5bea99c1cdd55ce8
2022-09-02 18:34:53 -04:00
idk
0322001da6 update CHANGES.html
Former-commit-id: 0f538970d0
Former-commit-id: 76fe853be1b5134fa06280827fe61521d181b2de
2022-09-02 18:34:47 -04:00
idk
3598e27ffa update index.html
Former-commit-id: 86f0ec3943
Former-commit-id: 21db27a6db918ef26c3493d587f50438c2289d30
2022-09-02 18:34:40 -04:00
idk
4921de65d4 unset https only mode during validation step for Firefox
Former-commit-id: 59f8d0edf9
Former-commit-id: 4cc3c91fa4c5183a28521ef62628592c803fdc60
2022-09-02 18:34:19 -04:00
idk
7bc0b6d045 unset https only mode during validation step for Firefox
Former-commit-id: 3d4f22676a
Former-commit-id: 4a1850cc6e07a0c0e35a8bd67fdf9030c47fcf15
2022-09-02 18:28:05 -04:00
idk
516f56a0e4 unset https only mode during validation step for Firefox
Former-commit-id: d0d0b5aca8
Former-commit-id: 359cb4b63120ad93626b0e16435c7085da8cc4be
2022-09-02 18:25:27 -04:00
idk
cfed313fc9 move release arg
Former-commit-id: 998305ebe1
Former-commit-id: 9ce46babb3bb47b6e6d8237f2122fa4376d9deae
2022-09-01 16:12:59 -04:00
idk
0a7471a044 update TODO.html
Former-commit-id: b1596d14bc
Former-commit-id: 924e965d82df5100d8d922cce41cdd7d67c04d94
2022-09-01 16:06:25 -04:00
idk
d56e34409d update TODO.md
Former-commit-id: 6242346178
Former-commit-id: f2df0f203e53a0df922b4b2f8225d7de1e9257dd
2022-09-01 16:04:12 -04:00
idk
1938615b9d verbosity in releaser script
Former-commit-id: 34ac0fb641
Former-commit-id: e6061e2d2874d2f8fd2779de4aa11d5dfcf2a167
2022-09-01 15:49:07 -04:00
idk
badc711faf delete jpackage before building jpackage
Former-commit-id: 7da10def01
Former-commit-id: 69589cf11ce7d68d095f1c53b4c19aa2f77dc3e2
2022-09-01 15:44:04 -04:00
idk
602d741dba update I2PCommonBrowser.html
Former-commit-id: 4857f753a6
Former-commit-id: 0294a4d6462b3087e359a6fbef1ad03a27079f4b
2022-09-01 15:40:29 -04:00
idk
c61e48f589 update CHANGES.html
Former-commit-id: de5956a1ce
Former-commit-id: 1f3a8a72885f51717520839701f4fb21d80ded42
2022-09-01 15:39:56 -04:00
idk
e14148d166 delete jpackage before building jpackage
Former-commit-id: 630b8327b7
Former-commit-id: 055b8c55175df67b9348d55f73e8e75db56571c4
2022-09-01 15:39:22 -04:00
idk
4b672c744c update I2PChromiumProfileBuilder.html
Former-commit-id: ac309150dc
Former-commit-id: d963f90ee7d0b81c64e8d19145cf1d2ddb098222
2022-09-01 15:37:53 -04:00
idk
6eb1f676b1 update I2PChromium.html
Former-commit-id: 7b995c9928
Former-commit-id: cc24f520448618dfe7043688bd8a0fd975f24ad7
2022-09-01 15:37:49 -04:00
idk
2639d36b07 update index.html
Former-commit-id: fa2256fd99
Former-commit-id: 7dd50dd1002b3793d6502cbae87220f86a193da7
2022-09-01 15:37:27 -04:00
idk
7eb1167b9f OK releasing it
Former-commit-id: 04d93e2411
Former-commit-id: f7c52746e763b4d11905f86b4757f55443915bb1
2022-09-01 15:36:52 -04:00
idk
ff915470f4 OK releasing it
Former-commit-id: 4cf8f67752
Former-commit-id: b99c7dd59ffec063b2a89759e37a98edbb9ae56e
2022-09-01 15:36:17 -04:00
idk
476ce2598b jpackage it. Why the heck not.
Former-commit-id: f462bf3c3b
Former-commit-id: cb9ee0d13309c00d7749051ec662eb7d0dd3fef8
2022-09-01 15:11:48 -04:00
idk
7ab2355d96 check in zips and fixup gitignore
Former-commit-id: 80eefa0754
Former-commit-id: 40319b8993902d782e314c5d6b8c6ecde9f95a3d
2022-09-01 15:01:52 -04:00
idk
f28858c441 update I2PChromiumProfileUnpacker.html
Former-commit-id: ea9c0b5351
Former-commit-id: c3c6809f1028c6034e5902d1e9c058022df03d6b
2022-08-31 20:59:12 -04:00
idk
71d6696586 update I2PChromiumProfileBuilder.html
Former-commit-id: 3276573f6f
Former-commit-id: 02ae8e0252a601f5b70a32bb63b19bf85e59aed3
2022-08-31 20:59:03 -04:00
idk
dcbb2b2377 update I2PChromium.html
Former-commit-id: abf4963f68
Former-commit-id: 9ce69c946e1807fc5340689e7625af02e8c35662
2022-08-31 20:58:59 -04:00
idk
33fe3d9a5f update CHANGES.html
Former-commit-id: bfb51a0036
Former-commit-id: 11bc5a619c3a395c1aea28f354b4d9d2fb0169d2
2022-08-31 20:58:47 -04:00
idk
224e248828 update index.html
Former-commit-id: 1aeb795450
Former-commit-id: a7fc182903a537a77ef31f322034e9c99a2cd9d5
2022-08-31 20:58:42 -04:00
idk
2284ff26ee stub the Chromium extensions for strict and usability modes
Former-commit-id: c427481099
Former-commit-id: 3e1d7d754d89d930c20aee40c7bb5cb7feef77d1
2022-08-31 15:16:31 -04:00
idk
60cc2e6c3c stub the Chromium extensions for strict and usability modes
Former-commit-id: e7ec201f05
Former-commit-id: ff472f14a968c24fb187e3352c9f476109ea5a2b
2022-08-31 15:11:53 -04:00
idk
48a2a4f73b add TODO to the Chromium flags
Former-commit-id: 9db97f60fa
Former-commit-id: 1f6bc23955cf9e4aa129852f64056a61af278c53
2022-08-31 14:59:41 -04:00
idk
cd3bcb5408 add --reset-variation-state to the Chromium flags
Former-commit-id: 7976e6dc0d
Former-commit-id: 9d2c5e2740c4b4646511ce26ef909b34f5433c70
2022-08-31 14:58:40 -04:00
idk
65cbe35766 don't clangFmt in distclean
Former-commit-id: 8f37ee4758
Former-commit-id: acab10b0a44309130ea53f2d7dd337377043580e
2022-08-31 14:22:18 -04:00
idk
913b6fc68e update CHANGES.html
Former-commit-id: 729894fd93
Former-commit-id: 06903a3874122650a80e5127656f41369074d349
2022-08-30 20:59:40 -04:00
idk
adc57df04f update index.html
Former-commit-id: 3600e1f72f
Former-commit-id: 35f1f1a0ca4358d66a70c5f31d257ca1771ce17c
2022-08-30 20:59:36 -04:00
idk
e3266d0014 update I2PFirefoxProfileUnpacker.html
Former-commit-id: e9bb1b4d8a
Former-commit-id: bd9e8f4413f4427652535763b332319ec2b259dd
2022-08-30 17:37:46 -04:00
idk
2b9f116dea update I2PFirefoxProfileBuilder.html
Former-commit-id: 7217847504
Former-commit-id: 9b52e4d99a027563a01fa9d6c89711829c2db483
2022-08-30 17:37:39 -04:00
idk
c9e5589972 update I2PFirefox.html
Former-commit-id: 4a294e9cda
Former-commit-id: b58580c5634ec4e9b8e62992b486fe94161eab6a
2022-08-30 17:37:35 -04:00
idk
426be5d7d7 update I2PCommonBrowser.html
Former-commit-id: 814d52bfdd
Former-commit-id: 911c5a75db99425a3f4d71112c2a8703e9d9208b
2022-08-30 17:37:30 -04:00
idk
8c1ca139af update I2PChromium.html
Former-commit-id: a248728178
Former-commit-id: dcdc2698bf2a0b94c1e3a1468029d5194bda224c
2022-08-30 17:37:16 -04:00
idk
ae428cda66 update I2PBrowser.html
Former-commit-id: 5a7e974a88
Former-commit-id: 9ff016ecba446a8fdc60489776ba0fc9044755d9
2022-08-30 17:37:13 -04:00
idk
7423a327e7 update index.html
Former-commit-id: 6ff6ca4fb3
Former-commit-id: 2986e6125d058346c6609a675ead59500e99ae18
2022-08-30 17:37:02 -04:00
idk
9881fb62e8 enable usability mode in launcher
Former-commit-id: 3629b03a3a
Former-commit-id: ba24f1723ecacdc724eaec4f00ff8669d3c09937
2022-08-30 17:36:30 -04:00
idk
38019e0f5b add usability mode for Firefox
Former-commit-id: afab61f43d
Former-commit-id: 4ce4c3e6dd26e12287e1e1b3800b0d5bfb3559ea
2022-08-30 17:29:51 -04:00
idk
464922f8c7 add usability mode for Firefox
Former-commit-id: 06239a90d2
Former-commit-id: 154ef9644bc029332eeff58165d1ab20774c8e61
2022-08-30 17:25:23 -04:00
idk
b258bc9ad6 add usability mode for Firefox
Former-commit-id: d7769d4320
Former-commit-id: 65d762f837a781302719bb90f55f7efe80a7a479
2022-08-30 17:23:56 -04:00
idk
43d3528116 update index.html
Former-commit-id: f234b0703a
Former-commit-id: af9d284d8841ff731cbfcde43e8d4b9f56640560
2022-08-30 16:08:04 -04:00
idk
cba673777f update USAGE.html
Former-commit-id: 2ed6361b41
Former-commit-id: a3d4b647d789a7596469e9afea54042c66c42b62
2022-08-30 16:03:29 -04:00
idk
0fdc7c5171 update TODO.html
Former-commit-id: 2ba798b965
Former-commit-id: 2035e10a176ff59067f4fcf7a592a5eb5c7d87d9
2022-08-30 16:03:26 -04:00
idk
8bde2854d9 update LICENSE.html
Former-commit-id: 63b49cdcd7
Former-commit-id: 8261b2423cad4ed81122646c9e0b6f524799d79a
2022-08-30 16:03:22 -04:00
idk
065964e3b2 update I2PGenericUnsafeBrowser.html
Former-commit-id: 8044dcdebc
Former-commit-id: d424cfbed0565361b18eaada69b3dd065cf459a5
2022-08-30 16:03:18 -04:00
idk
8895c80728 update I2PFirefoxProfileUnpacker.html
Former-commit-id: d07f018beb
Former-commit-id: e3c50cb058d3b27628bacbf682fd4a3249c7db11
2022-08-30 16:03:15 -04:00
idk
e90ae84f4d update I2PFirefoxProfileChecker.html
Former-commit-id: 48c089ef54
Former-commit-id: 2c87f77ee278ff9ec5d39158bbd9ea0c049a7412
2022-08-30 16:03:12 -04:00
idk
fce71e99f5 update I2PFirefoxProfileBuilder.html
Former-commit-id: a199a45e6c
Former-commit-id: e45e67f3711dc81dceade17b17af3b62b4cad42d
2022-08-30 16:03:08 -04:00
idk
768dc5bcdf update I2PFirefox.html
Former-commit-id: d33794640c
Former-commit-id: 7a5cb2e5eb70b683f5ad2cdc231988977b9363ec
2022-08-30 16:03:04 -04:00
idk
eb76a7e841 update I2PCommonBrowser.html
Former-commit-id: a2cf7b738d
Former-commit-id: 02822d982aa7dcae0b00c9a2ad84e2741736a28c
2022-08-30 16:03:00 -04:00
idk
57456ee507 update I2PChromiumProfileUnpacker.html
Former-commit-id: f64f44a251
Former-commit-id: 5b64517169102f3b91dc1b6aa7b038a5bccbbffa
2022-08-30 16:02:55 -04:00
idk
dcc406b2b6 update I2PChromiumProfileChecker.html
Former-commit-id: ba50604c22
Former-commit-id: 972dccc421dbb376d1b636f3f37b6205b3cb5b7d
2022-08-30 16:02:50 -04:00
idk
d4f0347575 update I2PChromiumProfileBuilder.html
Former-commit-id: 10ee4c3434
Former-commit-id: 3534482a530003e5ddaf68ba12e6944bfa3e0bdf
2022-08-30 16:02:46 -04:00
idk
8ed7a00a46 update I2PChromium.html
Former-commit-id: 417e9e399c
Former-commit-id: cd8eaff732b021e34193c52fd1a5ca7f35c1d511
2022-08-30 16:02:43 -04:00
idk
1aba2b8ff4 update I2PBrowser.html
Former-commit-id: 67b7050c72
Former-commit-id: fdda30dd46a2ecde7a2a28776acd21785b8ad980
2022-08-30 16:02:39 -04:00
idk
5517be50e8 update EXAMPLES.html
Former-commit-id: 0a6077cde9
Former-commit-id: cf59de91a75ffd95c196c9f0fb9da74a00bf4704
2022-08-30 16:02:35 -04:00
idk
cdd1a63e74 update CHANGES.html
Former-commit-id: 2987780ec5
Former-commit-id: c6e148cbb3e54e8cd86c815a1fa4068484bf22a3
2022-08-30 16:02:32 -04:00
idk
08b49e7eec update index.html
Former-commit-id: 0551c6652d
Former-commit-id: 6803d0e23a34c203caa38506708d5ae8f01a4223
2022-08-30 16:02:28 -04:00
idk
e402c9d85e fix pathfinding bug from refactor
Former-commit-id: cb724a0b4b
Former-commit-id: b786e722514f88e746e60aa36b90527ea4e06c0d
2022-08-30 16:00:58 -04:00
idk
32e5dd112f clangfmt everything
Former-commit-id: 84bc6480d9
Former-commit-id: fa1c9c8f207bc52eb2e8fa9c1d643bea0b17af4f
2022-08-30 15:49:44 -04:00
idk
4a64df9b1b update USAGE.html
Former-commit-id: 4d2177a134
Former-commit-id: 7b53d029a135c878cca9d2e7d171ef5c23c5cf5e
2022-08-30 15:17:35 -04:00
idk
25e7a82b71 update TODO.html
Former-commit-id: 5fa616eaa1
Former-commit-id: 265bf1b6aa15c202c282e4205199a4750a020e9d
2022-08-30 15:17:32 -04:00
idk
66b8f41e4c update LICENSE.html
Former-commit-id: 63bb4de1df
Former-commit-id: 4d31fde5e6d2b7a234349db0d16e6f15a9f19752
2022-08-30 15:17:29 -04:00
idk
8ad1e923d9 update I2PGenericUnsafeBrowser.html
Former-commit-id: 16042bb73d
Former-commit-id: 88fa7a3303837eff644f611ee5822f70e69e33f7
2022-08-30 15:17:25 -04:00
idk
193f0ad957 update I2PFirefoxProfileUnpacker.html
Former-commit-id: c9512deeea
Former-commit-id: 90ba37c759c7b56fb4892689da6a700386309d29
2022-08-30 15:17:21 -04:00
idk
5fe16e7d77 update I2PFirefoxProfileChecker.html
Former-commit-id: 6237819213
Former-commit-id: d4511dc4404b2f17bcac4f55a8fff8efe496b9ca
2022-08-30 15:17:18 -04:00
idk
c0f8106223 update I2PFirefoxProfileBuilder.html
Former-commit-id: ac418aca31
Former-commit-id: 224d9bfb6c59f9d0b06f25d84d4aa0ec2f11043b
2022-08-30 15:17:14 -04:00
idk
174265d51c update I2PFirefox.html
Former-commit-id: bdbbc93adb
Former-commit-id: 5f8c0352f970408ec435629b4ac0ab7e2f9d76ed
2022-08-30 15:17:10 -04:00
idk
64e7beff8a update I2PChromiumProfileUnpacker.html
Former-commit-id: 24edd57c57
Former-commit-id: 1af378da4ca3a8c261629ea470f35c1a86d88c3c
2022-08-30 15:17:07 -04:00
idk
35445be46b update I2PChromiumProfileChecker.html
Former-commit-id: 234c0c04be
Former-commit-id: c3e21b181fc1b5966acd7cf77aa98d0fc25fee11
2022-08-30 15:17:03 -04:00
idk
eabea57327 fix missing dot
Former-commit-id: 54486e5da4
Former-commit-id: bbe545ad41d7695fcb89a7265fe11fb4025f030d
2022-08-30 15:16:38 -04:00
idk
e40490347b update I2PChromiumProfileBuilder.html
Former-commit-id: bea33564f0
Former-commit-id: 5911ed20dcf545f075b6a0e1913137ef74195165
2022-08-30 15:15:58 -04:00
idk
7c5f0ca2f9 update I2PChromium.html
Former-commit-id: 6d048490d8
Former-commit-id: e1036bf8602a0156009b041200cd6f0792dcf836
2022-08-30 15:15:54 -04:00
idk
df8f92e8b7 update I2PBrowser.html
Former-commit-id: 6cb35c6291
Former-commit-id: df73db4dbd1af4b52ea7b13eca55e68d1f978f8e
2022-08-30 15:15:50 -04:00
idk
cfdba558aa update index.html
Former-commit-id: 2a461ed7fb
Former-commit-id: 4a62cc89a1cd01b73744bc91df950b3c2a2992df
2022-08-30 15:15:39 -04:00
idk
25390abf09 README stuff
Former-commit-id: 2488cec304
Former-commit-id: bc72546ab6555835c95ddd7d4f6576d566b88f42
2022-08-30 15:15:35 -04:00
idk
81cbf349e4 update EXAMPLES.html
Former-commit-id: 0b0346abc3
Former-commit-id: 645382793fdac18611c213502652c82b55675a91
2022-08-30 15:15:32 -04:00
idk
1e4c5bd85b update CHANGES.html
Former-commit-id: 657b51c2ee
Former-commit-id: 67d59b1cac7a0d0c39e90b135fab5349627c5abb
2022-08-30 15:15:28 -04:00
idk
b63e7977fd update index.html
Former-commit-id: 820790beed
Former-commit-id: e4fd3d4eca2a299830228b3d8fdabf0e5da3eb7b
2022-08-30 15:15:24 -04:00
idk
1ddc4fe6a5 README stuff
Former-commit-id: 31efc06ae1
Former-commit-id: a4c766f8731bf314b283a6e51f4de35c8ae639e0
2022-08-30 15:15:21 -04:00
idk
69929e01c3 add usability profile to repo
Former-commit-id: d053d16e56
Former-commit-id: 29fc86cbff45c15cf33709ba959b8ed41129b845
2022-08-30 15:02:56 -04:00
idk
980ff201e5 move more common functions to common class.
Former-commit-id: d3613d566a
Former-commit-id: cfd4128ac44d3f5bb1c154491a23bdf9e588993d
2022-08-30 15:01:57 -04:00
idk
a629652495 factor away more common code into the parent class. Break some javadoc.
Former-commit-id: f76fae7c1c
Former-commit-id: 15121e50b48d16496ab7df88199f8eede889f2c1
2022-08-30 14:52:29 -04:00
idk
67d4b16690 fix unaltered FIREFOX vars in I2PChromiumProfileBuilder.java
Former-commit-id: 48ba47b274
Former-commit-id: 7fab03763415a18cff4e73f7d565ee1027958cf4
2022-08-30 14:22:47 -04:00
idk
07f885ae4f move runtime directory discovery functions to common class
Former-commit-id: 2a50bd38a1
Former-commit-id: efdb68bbd7a26e420d52a022dcd00249398f4825
2022-08-30 11:35:43 -04:00
idk
131b69d800 move runtime directory discovery functions to common class
Former-commit-id: 87f24dc0b1
Former-commit-id: 2361cc7d15d2074f6829e29e08a4654d1d6b0b39
2022-08-30 11:34:32 -04:00
idk
759fa79505 start a TODO list
Former-commit-id: 894e139cc8
Former-commit-id: ce1d637adfc54ddc786fa8286a11299d2d90369b
2022-08-30 11:26:15 -04:00
idk
2f5e9a0ee3 update USAGE.html
Former-commit-id: fa554888be
Former-commit-id: 4a1ddbdd2a85306749880f1e677866050c1d94d1
2022-08-29 01:03:56 -04:00
idk
cdbd095be2 update LICENSE.html
Former-commit-id: 907e71e09c
Former-commit-id: 8d864e5aafc1f07aa374a6f448cbe1eb28b10e0a
2022-08-29 01:03:52 -04:00
idk
9d33d7a3ed update I2PGenericUnsafeBrowser.html
Former-commit-id: d687c1c52c
Former-commit-id: e02e63a793dcc4e2f3a85c59bc0ed0224ff6d9de
2022-08-29 01:03:49 -04:00
idk
1d2daf7746 update I2PFirefoxProfileUnpacker.html
Former-commit-id: ba9411520c
Former-commit-id: e97d94f3b8b78e299f4d916fde1671fb6c3244b8
2022-08-29 01:03:46 -04:00
idk
1a883a303d update I2PFirefoxProfileChecker.html
Former-commit-id: 6bac5992df
Former-commit-id: 5d6532de634be528df9328b110905469c9dd822b
2022-08-29 01:03:42 -04:00
idk
8428cc6821 update I2PFirefoxProfileBuilder.html
Former-commit-id: 63f0cabe1a
Former-commit-id: cdcaa348e6b72e86718d2ab0c0993730c7f290f9
2022-08-29 01:03:39 -04:00
idk
24a74ed91a update I2PFirefox.html
Former-commit-id: 3ab272682d
Former-commit-id: c6957c183706ce977154968574675a7938c85e51
2022-08-29 01:03:36 -04:00
idk
50f7df7d25 update I2PChromiumProfileUnpacker.html
Former-commit-id: 8a3d7b0143
Former-commit-id: c6d80136d51f1fa5a064afb1b073751a79f4e15e
2022-08-29 01:03:32 -04:00
idk
4edd485e01 update I2PChromiumProfileChecker.html
Former-commit-id: 577426f330
Former-commit-id: 1db442cf732a590a08de1b879a34b89c27b09e7e
2022-08-29 01:03:29 -04:00
idk
e154c6ed1e update I2PChromiumProfileBuilder.html
Former-commit-id: 5c5dd307d4
Former-commit-id: 6614ee6d96bb7cc749845768db6821477090421e
2022-08-29 01:03:25 -04:00
idk
dac56c582c update I2PChromium.html
Former-commit-id: 6627835357
Former-commit-id: efd0e033d5daafc930e65862374947901936c13f
2022-08-29 01:03:22 -04:00
idk
1c35b6e155 update I2PBrowser.html
Former-commit-id: 47dc34f1c3
Former-commit-id: 14900ae829a5be531267ffeec7605918e9b38f1d
2022-08-29 01:03:18 -04:00
idk
3e4d4c6153 update EXAMPLES.html
Former-commit-id: 20f620639e
Former-commit-id: 59aae2f46069b789409a345f69605cbad1664e83
2022-08-29 01:03:15 -04:00
idk
811157e350 update CHANGES.html
Former-commit-id: 72940f09fb
Former-commit-id: a57c141f3570a819d8bb67ef290fb81e72f42519
2022-08-29 01:03:11 -04:00
idk
84e4098b77 update index.html
Former-commit-id: f14100c0eb
Former-commit-id: 3dde437262320cf812b0ea807bd6f026aeba7866
2022-08-29 01:03:08 -04:00
idk
b100b54d6f update to 0.0.18
Former-commit-id: a89024ef8b
Former-commit-id: bc2375c884e8e6eea8d7bf2323dd93a8071acbe3
2022-08-28 00:47:20 -04:00
idk
21ba0d76f7 update CHANGES.html
Former-commit-id: 186604d7c4
Former-commit-id: 9409633a61b57af9286cb02096733f43fd6f8b0b
2022-08-28 00:43:40 -04:00
idk
9ad4d8a56a update to 0.0.18
Former-commit-id: 116144bc18
Former-commit-id: c3b426255cbab01f261c3f979e88746788ee7132
2022-08-28 00:43:32 -04:00
idk
a41e57b6ff fix edge finding
Former-commit-id: a0b7383afd
Former-commit-id: ff3cd189f57dcf93693e3f980254a17b974419a0
2022-08-28 00:34:48 -04:00
idk
d05789324a update I2PGenericUnsafeBrowser.html
Former-commit-id: 89f407c171
Former-commit-id: cfd9bf19e4a53404190bb17fa98d82685232c5aa
2022-08-28 00:26:07 -04:00
idk
368cd0a3f1 update I2PFirefox.html
Former-commit-id: b942668af8
Former-commit-id: a47ac25dc9608e0f1a24e85baa7c71bb8f924408
2022-08-28 00:25:53 -04:00
idk
a33e3477ac update I2PChromium.html
Former-commit-id: 231cb6aa02
Former-commit-id: b8d3e1c99769b064030fa3e3808ac0bac01f3b23
2022-08-28 00:25:39 -04:00
idk
ea891e86aa update index.html
Former-commit-id: f011e8c85b
Former-commit-id: 822178458cf10c90a55c1506e1a32b1f14b304d2
2022-08-28 00:25:26 -04:00
idk
6a40759f40 don't always wait in the background
Former-commit-id: af3a99d314
Former-commit-id: b561ea9ec42acbae20cdcaeb5a92619251a29963
2022-08-28 00:25:21 -04:00
idk
1cb9db4d40 update I2PBrowser.html
Former-commit-id: 47b296ce66
Former-commit-id: a4e95fd2fb7c262c2f67ae3bfd386016b1fca0f2
2022-08-27 23:49:31 -04:00
idk
23989a7017 update index.html
Former-commit-id: e5799fb837
Former-commit-id: 2de9da8a6454d4d8a47b916eb75bca6dfbc97636
2022-08-27 23:49:19 -04:00
idk
82a23ee121 add support for forcibly setting based on routerconsole.browser
Former-commit-id: 655bc45035
Former-commit-id: 195074267db497fa21c281e0373c985d76693692
2022-08-27 23:49:15 -04:00
idk
96bf7b9098 update USAGE.html
Former-commit-id: 4e51986e02
Former-commit-id: b7661ffe99ee1e9bc0eac52a4ed164adde6d72b1
2022-08-27 23:48:59 -04:00
idk
37cb05dfa8 update I2PGenericUnsafeBrowser.html
Former-commit-id: ccdd1dc33a
Former-commit-id: ce6ee8f499928843681ccf0955bd2b6371f09bf6
2022-08-27 23:48:52 -04:00
idk
04cd619b26 update I2PBrowser.html
Former-commit-id: 7c7d175c10
Former-commit-id: 35b1ea382c3d134c5b0939912edf8ca337d1179a
2022-08-27 23:48:22 -04:00
idk
7a88065f4d update index.html
Former-commit-id: be7155a88f
Former-commit-id: 16fa501b6a45a18b12c32c22c3429beb291bb7df
2022-08-27 23:48:12 -04:00
idk
9450738e02 add support for forcibly setting based on routerconsole.browser
Former-commit-id: 0473572933
Former-commit-id: 1b7e63d0a928696dc09049979b3b07cd67284e9d
2022-08-27 23:48:07 -04:00
idk
bfb531faff update USAGE.html
Former-commit-id: e0b1eabfee
Former-commit-id: 95902711b57d54845edea8fd593860784d960b01
2022-08-27 23:23:58 -04:00
idk
37308d8945 update LICENSE.html
Former-commit-id: 7d7cffd843
Former-commit-id: 87a8a09c96003d9311e93e991ffae957245a3449
2022-08-27 23:23:54 -04:00
idk
d03314bb74 update I2PGenericUnsafeBrowser.html
Former-commit-id: c9eacd23d3
Former-commit-id: 2ce40becc557e0a90c63efb7634629ebf77b2623
2022-08-27 23:23:51 -04:00
idk
7a6edb51e7 update I2PFirefoxProfileUnpacker.html
Former-commit-id: d2a1a69d69
Former-commit-id: b7380fbcbba14bbb3908d0b193bb1f63363f40bc
2022-08-27 23:23:48 -04:00
idk
757e44cc30 update I2PFirefoxProfileChecker.html
Former-commit-id: 2c28435f7e
Former-commit-id: 3267203bf6d49697af59c62ff825823f4aea28d2
2022-08-27 23:23:44 -04:00
idk
7babf02f32 update I2PFirefoxProfileBuilder.html
Former-commit-id: fcbda43ca5
Former-commit-id: c3538365c34f0a39eaf2714024f3a4812d3254fe
2022-08-27 23:23:41 -04:00
idk
1e8e02cf84 update I2PFirefox.html
Former-commit-id: 491c7124b7
Former-commit-id: ccb9bcdcb3bd6665371606f07452aa68788851e4
2022-08-27 23:23:38 -04:00
idk
de115d9c3c update I2PChromiumProfileUnpacker.html
Former-commit-id: 2788c000c4
Former-commit-id: ea13b9773ab6edd41ddd19cc6ba8eb7d03f80971
2022-08-27 23:23:34 -04:00
idk
7ab0946794 update I2PChromiumProfileChecker.html
Former-commit-id: 928d2b2761
Former-commit-id: 1880378165ce905e63c9d00d0187ccded102c31f
2022-08-27 23:23:31 -04:00
idk
2e4a0414d8 update I2PChromiumProfileBuilder.html
Former-commit-id: 47a3845f96
Former-commit-id: f78d29f695c4dae8da36c7064d56c40bda9dade5
2022-08-27 23:23:28 -04:00
idk
cf5c777c91 update I2PChromium.html
Former-commit-id: f5a7c25aa8
Former-commit-id: d93706d7ad463f7886b2d25c9c67d0614abefdf0
2022-08-27 23:23:24 -04:00
idk
8cd9d992fd update I2PBrowser.html
Former-commit-id: c48db5046a
Former-commit-id: fba84f370006ce82f99bbf911c8848c06c8cd8bb
2022-08-27 23:23:21 -04:00
idk
eebaede496 update EXAMPLES.html
Former-commit-id: 05e2dee979
Former-commit-id: 15c5528d8cba91d0dad46f4575092bbed26f5fce
2022-08-27 23:23:18 -04:00
idk
2d38c31623 update CHANGES.html
Former-commit-id: b719d69d23
Former-commit-id: a3025f257d65a4434fc8cc41a577ab5c7cf2141e
2022-08-27 23:23:15 -04:00
idk
d78175836d update index.html
Former-commit-id: f438b6c292
Former-commit-id: 992a42af3ddd19a7c81e81547288e357912b1aac
2022-08-27 23:23:11 -04:00
idk
4d9e001daa not quite
Former-commit-id: 53669601fc
Former-commit-id: c805063e3364e0ac2ba96b38cd4fdb11f87a61a6
2022-08-27 23:20:52 -04:00
idk
300b16bce3 I guess it should always work now I think?
Former-commit-id: 5886cf69a2
Former-commit-id: 675445dafaaa06dbe425c6a3f0f3bd4de134cb18
2022-08-27 23:19:16 -04:00
idk
100fba31d0 Generic Unsafe launcher should handle any browser which honors proxy envars
Former-commit-id: 6da5998660
Former-commit-id: cfc774e5bb96e4aaf421e95316c3f208759fb563
2022-08-27 23:01:58 -04:00
idk
1e092b7fb1 Generic Unsafe launcher should handle any browser which honors proxy envars
Former-commit-id: 939acd2857
Former-commit-id: 8c8eaecfbb255f09fca36b42fcdb1b7c3a943a2d
2022-08-27 22:43:36 -04:00
idk
9f6caeeb14 start browser discovery code for Windows
Former-commit-id: 259e9aea66
Former-commit-id: cbb9c80faec30bef4382dc8ed26c4a0e33703106
2022-08-27 21:38:11 -04:00
idk
d8f205ae85 start browser discovery code for Windows
Former-commit-id: b80787d7ba
Former-commit-id: 6748a2eda6f3883166d22e77e94967b4e5375d5a
2022-08-27 21:36:35 -04:00
idk
5acee82d76 start browser discovery code for Windows
Former-commit-id: 1060e6959d
Former-commit-id: 006294d2bc4e20cb278a2c8679d8263fe1f13338
2022-08-27 21:36:02 -04:00
idk
8494d297c7 start browser discovery code for Windows
Former-commit-id: 370b547272
Former-commit-id: bb28fd862c4b62077060ab92415902a9046b21bd
2022-08-27 21:23:01 -04:00
idk
c6476a604b start browser discovery code for Windows
Former-commit-id: 67c487ceb7
Former-commit-id: d0e2eebef4f175e7bef15daa51bfb6c2b8d88b6e
2022-08-27 21:21:58 -04:00
idk
1278fdd6e8 start browser discovery code for Windows
Former-commit-id: f3bf7a928f
Former-commit-id: 5e0ff03543e9ed7ad2116f2cce86b97afc27080e
2022-08-27 21:21:19 -04:00
idk
b933ed42c0 start browser discovery code for Windows
Former-commit-id: daf642f145
Former-commit-id: 608a206c86c3a7d4f859f9f3633bf62f613430db
2022-08-27 21:18:29 -04:00
idk
f86df634c5 start browser discovery code for Windows
Former-commit-id: f7fa3c3eca
Former-commit-id: 580af619de932b1f251d50b6ad727355e6a587f7
2022-08-27 21:17:13 -04:00
idk
04a4e37734 start browser discovery code for Windows
Former-commit-id: b638c4a140
Former-commit-id: 656106156960f5f57f3b93edb9ea4dcadc8532fa
2022-08-27 21:15:57 -04:00
idk
faa6336da6 start browser discovery code for Windows
Former-commit-id: d77e531867
Former-commit-id: de03ded79998a505ae61c57a9d2a62087b4af833
2022-08-27 21:15:16 -04:00
idk
975200a159 start browser discovery code for Windows
Former-commit-id: 1b06f8f296
Former-commit-id: da120fd79db049dbc62d1ad88b44a755707d8df8
2022-08-27 21:08:18 -04:00
idk
eb8759b398 start browser discovery code for Windows
Former-commit-id: 158b1cecfe
Former-commit-id: 0d2132269f84f8bf11fb4762813ec1ce9448605c
2022-08-27 21:07:40 -04:00
idk
8d76140c34 start browser discovery code for Windows
Former-commit-id: ba9ee25941
Former-commit-id: a66a0edd0e8c0ee8625a9d25580b95fa0b30eaf5
2022-08-27 21:03:29 -04:00
idk
09cca39fcc start browser discovery code for Windows
Former-commit-id: 596bb77102
Former-commit-id: 14ba9465510be429c060c45207d6ae14026dff9c
2022-08-27 20:38:12 -04:00
idk
07f5095594 start browser discovery code for Windows
Former-commit-id: 7b10fc640d
Former-commit-id: 4e82b22923166d87532f0fa24bc6e9ea376942a1
2022-08-27 20:24:11 -04:00
idk
539e3340b4 update index.html
Former-commit-id: cc54b85188
Former-commit-id: a9c52d1c5d5a9f8f346f259a7d6e195a9eec5248
2022-08-27 19:50:32 -04:00
idk
e35ae949fa update USAGE.html
Former-commit-id: 0a814a5e50
Former-commit-id: 41774d27790940b9e0764bb01d115aa1d8c80875
2022-08-27 14:46:25 -04:00
idk
d0b7d45f45 update LICENSE.html
Former-commit-id: 8c66473d88
Former-commit-id: 820f7f94d6f17cadcb5adde82c754605a882f4f1
2022-08-27 14:46:21 -04:00
idk
82ceefe167 update I2PFirefoxProfileUnpacker.html
Former-commit-id: 30dacc7005
Former-commit-id: 14cb00bb73c158430dbf29058dde6ad42fcb4ee1
2022-08-27 14:46:18 -04:00
idk
173b88e89f update I2PFirefoxProfileChecker.html
Former-commit-id: 8e4409a02a
Former-commit-id: e4e74fb77e124d23dcf7592080af23862a6760c1
2022-08-27 14:46:14 -04:00
idk
c0897086ff update I2PFirefoxProfileBuilder.html
Former-commit-id: 66031ea4c0
Former-commit-id: 357e318f016b71a7e1c13e4e902377bcc6693a62
2022-08-27 14:46:11 -04:00
idk
abe38ddbc8 update I2PFirefox.html
Former-commit-id: 29c6158048
Former-commit-id: 4a2293265a567d6a29badb17bce7d8b99e874c02
2022-08-27 14:46:07 -04:00
idk
3138d2b1fe update I2PChromiumProfileUnpacker.html
Former-commit-id: 4d4325a032
Former-commit-id: bbd9a2ae6777029298a482a2d36fc2ffa56b5cec
2022-08-27 14:46:04 -04:00
idk
9f21efbd13 update I2PChromiumProfileChecker.html
Former-commit-id: e95f5ceb8f
Former-commit-id: 848c4accf18bf5a5a83d9c4f28e8fe287c6bcf31
2022-08-27 14:46:01 -04:00
idk
f1a76078e6 update I2PChromiumProfileBuilder.html
Former-commit-id: 16f32e97e3
Former-commit-id: 9c4d30f14612def6605733d5e815cf8da03fc012
2022-08-27 14:45:58 -04:00
idk
a587427e75 update I2PChromium.html
Former-commit-id: ae87e04ec7
Former-commit-id: 756236b1c82b514eed1687fbffc52b086bbfda5d
2022-08-27 14:45:54 -04:00
idk
3eb82c1af8 update I2PBrowser.html
Former-commit-id: c0766b1eb0
Former-commit-id: b4dd281c58434c700f3429faf11e846d7614a219
2022-08-27 14:45:51 -04:00
idk
4bc9a238b2 update EXAMPLES.html
Former-commit-id: 0c56acde13
Former-commit-id: 197d5d5eec3ff6625848864e338fc16cf4ca9ba6
2022-08-27 14:45:48 -04:00
idk
9041ab9ad5 update CHANGES.html
Former-commit-id: 82730621ae
Former-commit-id: da30471fcf7ed3cc4e4105faab5321ee353f3349
2022-08-27 14:45:44 -04:00
idk
38653be1f1 update index.html
Former-commit-id: 932d14e1d7
Former-commit-id: 851b914a8c1dfc45cd6b35b8e25eae41445f7abf
2022-08-27 14:45:41 -04:00
idk
72213dc8de update I2PFirefoxProfileChecker.html
Former-commit-id: 1be56efa34
Former-commit-id: c29e0ae48ec05f786582088e0f809f09cc1e1e16
2022-08-27 13:53:50 -04:00
idk
683082ffe2 update I2PChromiumProfileChecker.html
Former-commit-id: 22bd6ec799
Former-commit-id: 7dfd23cb2581d40eb159871a59d675cd439de1b1
2022-08-27 13:53:37 -04:00
idk
15c120d865 update changelog
Former-commit-id: ab5d73fb40
Former-commit-id: d40877116d3492f025271c2918e23afbe32d8c82
2022-08-27 13:53:14 -04:00
idk
770798fd0d update CHANGES.html
Former-commit-id: 3e0002d424
Former-commit-id: b3673b7b10773a5211981de4328867a2c3078f0e
2022-08-27 13:42:05 -04:00
idk
44aa7e2792 update changelog
Former-commit-id: 0a67ca0e1c
Former-commit-id: b9aa20368e592b54d1667d9f153dde1ab8312b48
2022-08-27 13:41:59 -04:00
idk
cae1a73dc6 revise test.sh to test all combinations of args
Former-commit-id: 174342bce1
Former-commit-id: 607d5914e589b8242c8909ed6a33935cb7a0dd73
2022-08-27 13:39:04 -04:00
idk
bce0a80f42 revise test.sh to test all combinations of args
Former-commit-id: f94fd15e5b
Former-commit-id: 17481d12690eaafa6c95f8c1d0324d11280b3ae0
2022-08-27 13:33:33 -04:00
idk
5040c98831 update I2PFirefoxProfileUnpacker.html
Former-commit-id: 849fc3fdf3
Former-commit-id: 30e03b4790fd097390c4af82ac0732f721b69808
2022-08-27 13:28:14 -04:00
idk
9bd16c6c36 update I2PFirefoxProfileChecker.html
Former-commit-id: 0329e4f06f
Former-commit-id: b32427decef83f24022ae3407edeeaa9061e95ed
2022-08-27 13:28:10 -04:00
idk
9e1c9d9307 update I2PFirefoxProfileBuilder.html
Former-commit-id: fa83389e73
Former-commit-id: 4d43d477d36fc1d834c4c17fa98b7bc8dcddb925
2022-08-27 13:28:06 -04:00
idk
154de511a9 update I2PFirefox.html
Former-commit-id: 9182ceeb5c
Former-commit-id: c9bbe2541ddb8552ca3d342dfe24d67651db6e72
2022-08-27 13:28:03 -04:00
idk
226feb4c0c update I2PChromiumProfileUnpacker.html
Former-commit-id: 343919bef6
Former-commit-id: 19af606318eb99f5f761dde46ea2a689f6ca9789
2022-08-27 13:27:59 -04:00
idk
8bf5193e72 update I2PChromiumProfileChecker.html
Former-commit-id: 7defc6b137
Former-commit-id: cc745e116b11dff7764b178e5696b146e3601ba8
2022-08-27 13:27:55 -04:00
idk
69e4d4674d update I2PChromiumProfileBuilder.html
Former-commit-id: a3be32d39a
Former-commit-id: 0508397c5fd1490c4e94b7974656292c21620411
2022-08-27 13:27:52 -04:00
idk
7b6db7b9d3 update I2PChromium.html
Former-commit-id: d88383037e
Former-commit-id: 38ed6a7a8dea4f03f85720c38b91692cefe95e43
2022-08-27 13:27:48 -04:00
idk
b2206dbae9 update I2PBrowser.html
Former-commit-id: f889b8fc94
Former-commit-id: 09ae36a5986b8f0596e8ae9de002f1238fbe96e1
2022-08-27 13:27:45 -04:00
idk
59f69ee5cb add URL-passing option
Former-commit-id: ce8ec78beb
Former-commit-id: 1352be01aeb6ad0c7c2539f6354505c5b4c8a8cf
2022-08-27 13:27:28 -04:00
idk
276e67c994 update I2PFirefoxProfileChecker.html
Former-commit-id: c6c555cb1c
Former-commit-id: dbd624441dde91887215405cd0c73b425acd9937
2022-08-22 17:18:53 -04:00
idk
cfc6f79cc9 update I2PChromiumProfileChecker.html
Former-commit-id: d4cc2c1d45
Former-commit-id: 76b5d22f1af70a0530c22f84eed8e45617faac98
2022-08-22 17:18:40 -04:00
idk
e25d6d1f88 update CHANGES.html
Former-commit-id: 46afb304a5
Former-commit-id: a68cadda9a095eeacf600c14041bff4c40ab628e
2022-08-22 17:18:23 -04:00
idk
e2aac6e657 update index.html
Former-commit-id: 35b00a886e
Former-commit-id: e5211eb32e31636d2e77768d34a348e40a9804f3
2022-08-22 17:18:19 -04:00
idk
b83dc1fc06 Completes support for auto-selecting *either* a Firefox or Chrome instance, automatically
Former-commit-id: 2a4a601176
Former-commit-id: 142d8beafe3e9448f70091d1c5610b80e02a2a33
2022-08-22 17:17:32 -04:00
idk
e237b627f3 add some missing javadoc
Former-commit-id: a8573b79f9
Former-commit-id: 6a5d2476aa921b47e0f50fa837cbd778427ec28d
2022-08-22 00:47:40 -04:00
idk
9f6e77aff2 update USAGE.html
Former-commit-id: 5024666f9e
Former-commit-id: 4ee434724a92ed362ed00425468a6bebf4d88756
2022-08-22 00:41:22 -04:00
idk
ecd0112047 update LICENSE.html
Former-commit-id: f7fddfdb4b
Former-commit-id: bd117e18038961d1ec18a6686a117d9f3601636c
2022-08-22 00:41:19 -04:00
idk
40877ca2f0 update I2PFirefoxProfileUnpacker.html
Former-commit-id: 398bfe4ef1
Former-commit-id: 532dabed506748d7980eea03fc50bd7162e14d47
2022-08-22 00:41:16 -04:00
idk
e47a40829b update I2PFirefoxProfileChecker.html
Former-commit-id: f380df9075
Former-commit-id: 905fc060c03cfaad6222510ed632190fbcca5e15
2022-08-22 00:41:12 -04:00
idk
27e310a6ff update I2PFirefoxProfileBuilder.html
Former-commit-id: b90c09c17f
Former-commit-id: ed88ce8a86b68e467213d660daecfd57e4931cbb
2022-08-22 00:41:09 -04:00
idk
05d630c3d7 update I2PFirefox.html
Former-commit-id: 6b90f5548a
Former-commit-id: cc708d8874a5f55b292256756a81383b4ee28a7c
2022-08-22 00:41:05 -04:00
idk
df5ddb9906 update I2PChromiumProfileUnpacker.html
Former-commit-id: 45f6a1c96b
Former-commit-id: e7faa2508fa4a70bc407438515eb212e42d686ba
2022-08-22 00:41:02 -04:00
idk
dcf569ba14 update I2PChromiumProfileChecker.html
Former-commit-id: dca4ffa7e9
Former-commit-id: ee7be910ed79488c5ab2076a03b0432a9fc348b9
2022-08-22 00:40:59 -04:00
idk
68ab171d43 update I2PChromiumProfileBuilder.html
Former-commit-id: c883f035d5
Former-commit-id: ae0fe5b447c54f1dfe58dfdabd2dc9cce709a139
2022-08-22 00:40:55 -04:00
idk
6c9f1af62e update I2PChromium.html
Former-commit-id: de082ceba2
Former-commit-id: b48b4f1adb46d109bd9b4585e7fbab26e7d17a5b
2022-08-22 00:40:52 -04:00
idk
19b163e6fd update I2PBrowser.html
Former-commit-id: 396ebef9b1
Former-commit-id: 715d62e745c397d11048661882d1fc4fc1e10b39
2022-08-22 00:40:49 -04:00
idk
7e281e2cd5 update EXAMPLES.html
Former-commit-id: 18e42da0d7
Former-commit-id: 2f6dc808287f600387782a71fe991e701e3400c4
2022-08-22 00:40:45 -04:00
idk
b2325cb3b7 update CHANGES.html
Former-commit-id: 682a9487ae
Former-commit-id: e0490fdb4dc2b6ecb1b6271cc255ba6fde022d5e
2022-08-22 00:40:42 -04:00
idk
d98eb887d7 update index.html
Former-commit-id: 9747a456ce
Former-commit-id: 2dcc40261fda3e2ceab63bfc4995034b76b86894
2022-08-22 00:40:38 -04:00
idk
4851c27e98 more javadoc
Former-commit-id: 2c608ccbc5
Former-commit-id: 0253f02816b4bc27b170a0d840cdd7c2ff34c170
2022-08-21 23:49:08 -04:00
idk
fc59f52308 Remove redundant var
Former-commit-id: ef9c5fcb2c
Former-commit-id: 86c6066d1ad0ba9bff9f5828cac0053a35c4887d
2022-08-21 21:19:47 -04:00
idk
8dc83c1147 Universal launcher class, launches first available Firefox->Chrome
Former-commit-id: ac3d5a34fb
Former-commit-id: f8f219e3d01dc105fa578ef52c3004c6e50d773f
2022-08-21 21:17:28 -04:00
idk
0d818b9b3b update CHANGES.html
Former-commit-id: 41d7c188f8
Former-commit-id: 0e73dbf083242b1ecc1d151aeff5df42fb1cdd6a
2022-08-21 20:19:46 -04:00
idk
c0e40a25ee sleep 2 seconds before waiting? I have no idea why Windows thinks it's exit 0
Former-commit-id: 4e254d59c3
Former-commit-id: 28c0f0b5ea3ca4cd25842efe46746d22c3a38bd9
2022-08-21 20:19:08 -04:00
idk
71b3349d10 sleep 2 seconds before waiting? I have no idea why Windows thinks it's exit 0
Former-commit-id: 629162372e
Former-commit-id: 407979b7ddfed5415842bac4a457d2872164a666
2022-08-21 20:01:34 -04:00
idk
7f59009a2e analyze exit value
Former-commit-id: b1bfd39327
Former-commit-id: 2665fbdf6fb33d1d790ccae4ea2841283fb9ae02
2022-08-21 19:34:29 -04:00
idk
7f23d67b33 add launchers for private mode
Former-commit-id: 3ee2c7a10d
Former-commit-id: 8bd46f65ac25183e3758f93667aa16ec51ea32cb
2022-08-21 19:25:05 -04:00
idk
dc011ce892 disable https-only mode for now
Former-commit-id: 44ce1d2ed2
Former-commit-id: ff47503ed3b262c3e70d5beb5c47f0184e654cdf
2022-08-21 19:03:03 -04:00
idk
6db9b245fd fix path issue on Windows
Former-commit-id: 7cef932d3d
Former-commit-id: 5ec7f7dc4281910609703bc02ae4c732e1da9df5
2022-08-21 18:13:17 -04:00
idk
efab728a99 fix path issue on Windows
Former-commit-id: c063eae03c
Former-commit-id: 2718b961a5d3abe3805f9e0a1cf61db2175e6bdc
2022-08-21 18:03:17 -04:00
idk
5192d7f20a fix path issue on Windows
Former-commit-id: 7f9bcbe1c0
Former-commit-id: 8f5f4ae6385e1330740f672323f5eb15420fc982
2022-08-21 17:59:55 -04:00
idk
26b83c9b5e log a little more
Former-commit-id: e023469b93
Former-commit-id: 86f860faec8802ec92abb8a65b376013a2bbe5bc
2022-08-21 17:56:56 -04:00
idk
c3cbfa6f26 don't initialize the process to null
Former-commit-id: 0cf817bb09
Former-commit-id: a6f546100d474367e1e9347416ee375ce304e0bb
2022-08-21 17:36:15 -04:00
idk
78abd248d8 don't initialize the process to null
Former-commit-id: 865c0fca84
Former-commit-id: b000e8abbe150050520f2b6cabb88e54db41bafd
2022-08-21 17:34:03 -04:00
idk
8e6e55aca4 add note about licensing TODO
Former-commit-id: 6ecd993531
Former-commit-id: 75f736260e0e40c3c86520860895950caf0be800
2022-08-21 14:37:24 -04:00
idk
9f5b76df94 Fixes a bug in privateProcessBuilder
Former-commit-id: b6ab50c337
Former-commit-id: 7fa05f85b58767cae77ae46114b0a6ddbce3ff30
2022-08-21 01:13:38 -04:00
idk
71f8311b07 Fixes a bug in privateProcessBuilder
Former-commit-id: 3ad98b38ab
Former-commit-id: 28278cd4da5ddaf9edac9a84d6a0a3d0f48a5e94
2022-08-21 01:12:52 -04:00
idk
fc45796446 Fixes a bug in privateProcessBuilder
Former-commit-id: 8ba4651e32
Former-commit-id: e355fd4587ed8c0ddb4004442addbd6844900c59
2022-08-21 01:12:37 -04:00
idk
27f55ba05b only add more flags when more flags are passed.
Former-commit-id: 3e5b9c049d
Former-commit-id: 5cfea67fa4119ea80a0f94b42805cceabefa7d6a
2022-08-21 00:25:27 -04:00
idk
e2cd2f3805 fix an issue where passing the -private flag annihilates extension flags
Former-commit-id: e5d36aff8f
Former-commit-id: ab6fa0d0ce381bfd9ec3afd1b63c5f0ace2a9418
2022-08-20 23:50:08 -04:00
idk
a50d9c1311 update index.html
Former-commit-id: fa3fa165b1
Former-commit-id: 8905a85271c2ef113518f4cc457f4b79eda1146e
2022-08-20 22:49:08 -04:00
idk
8bd5d49674 move target for chrome extension out of main build process because of requirement on go-crx3
Former-commit-id: 5211c6d7e0
Former-commit-id: aef6e73db83343b6c342f3ba594356cd45754be9
2022-08-20 22:47:51 -04:00
idk
f7f05cbdbf update index.html
Former-commit-id: ce6a31166b
Former-commit-id: 11ab390497bb6ddf5e21179cefc48491c89bfbd3
2022-08-20 21:04:45 -04:00
idk
9f86fef14d update CHANGES.html
Former-commit-id: 842f4bb992
Former-commit-id: 8ed6c6907364761ccd1baac7ca70d1f9d3dd39c5
2022-08-20 20:58:13 -04:00
idk
9968fd066c update index.html
Former-commit-id: 5fefdab16d
Former-commit-id: 262a8c73019044ead98cf7d4d0e79c99f0540e4a
2022-08-20 20:58:10 -04:00
idk
f4cc1a2c6d update CHANGES.html
Former-commit-id: 53d4cf8146
Former-commit-id: f02ff1e2a19c384e505b69ab1eb681dad840c99a
2022-08-20 20:54:21 -04:00
idk
b484356ecc update index.html
Former-commit-id: 6daeaf8297
Former-commit-id: fb6beb08ed67cc5a1e909423053e34184a67e15d
2022-08-20 20:54:17 -04:00
idk
bfa4c43215 Bump again
Former-commit-id: 8645f69067
Former-commit-id: d55502908b14d0eb33862b2417454512a82050c1
2022-08-20 20:53:31 -04:00
idk
070f349cab update index.html
Former-commit-id: 4f22360b2f
Former-commit-id: 939a06726c9d2dfbb0d475d28cdb0b39f8588c02
2022-08-20 20:32:55 -04:00
idk
28bfa7f5c2 update index.html
Former-commit-id: ccfe0af3f6
Former-commit-id: f5ea0ec823c9d36907878d45d007fb84e944fc79
2022-08-20 20:24:35 -04:00
idk
7a2b138506 relase
Former-commit-id: 3b204871bf
Former-commit-id: b554942db309018f7ed5fcede1bc06a595743014
2022-08-20 20:23:27 -04:00
idk
1c24d4ba49 add chromium launcher-only script
Former-commit-id: 1f7854b35e
Former-commit-id: f0fbea3023d2b7136816f2367a8bd11f3d5a06a8
2022-08-20 20:22:04 -04:00
idk
10f1b5abd1 add chromium launcher-only script
Former-commit-id: 89acc78048
Former-commit-id: 79b3041d5b7d2fa6e97b22290f7e3bdd178a092a
2022-08-20 20:21:33 -04:00
idk
50bdff3e19 add chromium launcher-only script
Former-commit-id: 31291214e2
Former-commit-id: 3b7b4a176cc8f1c452a75e6ace03b5bed9707d64
2022-08-20 20:19:59 -04:00
idk
ea177be127 add chromium launcher-only script
Former-commit-id: 2875197bc8
Former-commit-id: c36d2c327381110bbc2d9cec1156c636e035957a
2022-08-20 20:10:18 -04:00
idk
ad1ca3eba6 fixup gitignore
Former-commit-id: 2bb8d35ed2
Former-commit-id: 4d64e10e9af7f59519970d6f3560d56bdc32ef4b
2022-08-20 20:08:29 -04:00
idk
3c2c196a8f check in my own extension for now because I definitely shouldn't try to do a whole new set of licensing things right now, but in the future, ublock, scriptsafe
Former-commit-id: e9424ee482
Former-commit-id: f1f1dab8a8c540886a06badd753a8f22f02d6158
2022-08-20 19:59:40 -04:00
idk
dddd912639 don't check in other people's extensions
Former-commit-id: 2f3fb18eac
Former-commit-id: 9f4fd902f9ee193c784473b22d0a3fc6d810089c
2022-08-20 19:54:11 -04:00
idk
c24fdc05f2 don't check in other people's extensions
Former-commit-id: 51ecaaf1d9
Former-commit-id: 358188222e94c4d659cd2c2132c7be0b5be8698f
2022-08-20 19:53:25 -04:00
idk
7388829aeb don't check in other people's extensions
Former-commit-id: 11f32c211b
Former-commit-id: 661dd506d7288464a60b2cb80ab8b179a85cc0d5
2022-08-20 19:50:55 -04:00
idk
bdb6e2d8ec add an unpacked extension
Former-commit-id: 6417dba4f5
Former-commit-id: 7347788cc80c0b8e5e179b58a1a0ee25adf8f969
2022-08-20 19:41:24 -04:00
idk
07583798c9 make sure that the jar includes the Chromium profile directory
Former-commit-id: 4090df0148
Former-commit-id: 71381c6157847b6969b9871cc44e811f32a5d9af
2022-08-20 19:12:43 -04:00
idk
a4881f007f update CHANGES.html
Former-commit-id: 154eec9e01
Former-commit-id: 1ecb0b882b9a729a45bccf60444fd3964af057c9
2022-08-20 19:00:32 -04:00
idk
745d128ee3 update index.html
Former-commit-id: 365c5ac6e8
Former-commit-id: 528ac41416ad5e454cb91a6fa5e082ecf00e5912
2022-08-20 19:00:29 -04:00
idk
20d2b9ece6 show people how to use a binary
Former-commit-id: bcb0919efa
Former-commit-id: 0029c009aa9ea1d6a825d5622ddd2640798fe58f
2022-08-20 18:58:50 -04:00
idk
856691f025 put Tor Browser's at the top of the order on Windows
Former-commit-id: 2f9b0e3686
Former-commit-id: 26f1abe6b38960a67095c1ce684fbfd4556c2ca2
2022-08-19 22:54:53 -04:00
idk
c504d5bffd put Tor Browser's at the top of the order on Windows
Former-commit-id: 62167a118a
Former-commit-id: 4150679f32a2353864cbd17ffd5827d9513d74a0
2022-08-19 22:54:24 -04:00
idk
c0dfd46890 put Tor Browser's at the top of the order on Windows
Former-commit-id: 82ccb9c47f
Former-commit-id: 0689dff559790b1a778c0c270d802ef4f80bec69
2022-08-19 22:53:52 -04:00
idk
d1bb5a4e48 update version
Former-commit-id: 120f92d626
Former-commit-id: b61f790949ee514490d090c6a3122bf9b9ae31db
2022-08-19 18:47:20 -04:00
idk
33f6d20942 add private-windows support
Former-commit-id: 2c7b9a8fea
Former-commit-id: 004a16ef0623b3e8064b174779600f803d029d4b
2022-08-19 18:45:59 -04:00
idk
acf5f2f50d add private-windows support
Former-commit-id: 20fd681f46
Former-commit-id: 323a42b2f42b80e50651ebeeba3cc03a6714391b
2022-08-19 18:44:06 -04:00
idk
71d08490ef add private-windows support
Former-commit-id: 31c7096edc
Former-commit-id: dae917ca5f0e6333a11a6647a22b156891b3c6c8
2022-08-19 18:30:14 -04:00
idk
3176811808 update heading
Former-commit-id: 292cac5e67
Former-commit-id: 7af07935210b96388734f6ec5c18bb0c2afd5d9d
2022-08-08 20:12:02 -04:00
idk
b69e3666f1 update CHANGES.html
Former-commit-id: f6c8408f80
Former-commit-id: 38d9e0d2c45ecd5f7c48de0270a17cfa8bea12aa
2022-08-08 20:10:24 -04:00
idk
addf62d640 update launcher script to self-discover jar. add some build targets of convenience
Former-commit-id: fb30909e3a
Former-commit-id: 07f93beb2e49f297bd59f9f45c3da72daced4362
2022-08-08 20:10:10 -04:00
idk
8d78d81011 update LICENSE.html
Former-commit-id: 5c66b64671
Former-commit-id: 15666c8eea1155b36e93392f1790b3d140c19704
2022-08-08 18:53:03 -04:00
idk
9e235b7712 update I2PFirefoxProfileUnpacker.html
Former-commit-id: a87a003ceb
Former-commit-id: 69e357fec4c4376b280df2e8cf15925fa33b5ef5
2022-08-08 18:53:00 -04:00
idk
5f15c9fdb7 update I2PFirefoxProfileChecker.html
Former-commit-id: 3b68756a32
Former-commit-id: 2fa6aa9d4a687eb7293b864487fb2298e27874dc
2022-08-08 18:52:56 -04:00
idk
7b3b5736b5 update I2PFirefoxProfileBuilder.html
Former-commit-id: 17b6922728
Former-commit-id: 68a565d4c6a01a162a7cfada90fb7bdee6825a9a
2022-08-08 18:52:53 -04:00
idk
66a46579cf update I2PFirefox.html
Former-commit-id: 49d9acc383
Former-commit-id: 58ed389d68f3f373a1bdfdc1f83d78d11d8afbae
2022-08-08 18:52:49 -04:00
idk
247b562e97 update I2PChromiumProfileUnpacker.html
Former-commit-id: 529d763e7a
Former-commit-id: d623917f4bd0ccc352525349be7b6b215989f19c
2022-08-08 18:52:46 -04:00
idk
148f5af9a0 update I2PChromiumProfileChecker.html
Former-commit-id: 582699ce1f
Former-commit-id: b5e142cafa5dbc3ad06c9234f3c3f30dd91a56bb
2022-08-08 18:52:42 -04:00
idk
0f89d0e869 update I2PChromiumProfileBuilder.html
Former-commit-id: 6f5390eacd
Former-commit-id: fea1a8be8d3535efedf84e9d7f41836500550d98
2022-08-08 18:52:38 -04:00
idk
3e65453700 update I2PChromium.html
Former-commit-id: db45db7058
Former-commit-id: cc6b487e4861d323804fdf425446b0417b179029
2022-08-08 18:52:35 -04:00
idk
b7915c10a4 update CHANGES.html
Former-commit-id: 9693b1383f
Former-commit-id: 7e661cc0d4b0f9e68cced03348c54108b8b83cc2
2022-08-08 18:52:31 -04:00
idk
41f4dc5584 update index.html
Former-commit-id: 839d6fddb3
Former-commit-id: e9925916a12bf0cb9e03f4c873aa4d68ec0c5d91
2022-08-08 18:52:27 -04:00
idk
192eb2ecfa update index.html
Former-commit-id: 7638e5cfec
Former-commit-id: de4b2a238b56d78d6aa9bcaf1113b1c672ac1c8d
2022-08-08 15:29:47 -04:00
idk
167f973d68 add javadoc error reports
Former-commit-id: b66e8690e2
Former-commit-id: 2dd73f75e3f9aa6ad745a551d2c9899415d36d22
2022-08-08 13:28:46 -04:00
idk
12631b5c81 add chromium targets to distclean
Former-commit-id: ce9aeb3b19
Former-commit-id: f03e6bbc546d160c1c16f1c6aaa357449a586aec
2022-08-08 13:23:44 -04:00
idk
db0dc9ed7e update LICENSE.html
Former-commit-id: 417fd68f91
Former-commit-id: 3818b9ac7a01fb0e7dfb42b77764ead5205ef9dd
2022-08-08 13:18:18 -04:00
idk
9aabd83d07 update I2PFirefoxProfileUnpacker.html
Former-commit-id: 3468cbd637
Former-commit-id: c96b4e86d6d144449a3c13d242fbfc6840992364
2022-08-08 13:18:13 -04:00
idk
7b60ee3b01 update I2PFirefoxProfileChecker.html
Former-commit-id: acf24565c6
Former-commit-id: 0dbe48952636736c31797b627a437376ee8a80c3
2022-08-08 13:18:08 -04:00
idk
bac3766e41 update I2PFirefoxProfileBuilder.html
Former-commit-id: 3c505187e7
Former-commit-id: 978baf133bb9557d75594b50f911476d02e7de7a
2022-08-08 13:18:03 -04:00
idk
251cbf9183 update I2PFirefox.html
Former-commit-id: cf9ecca991
Former-commit-id: e1fb8b302ea05482c6aa476bebcad53f71ae5b7c
2022-08-08 13:17:59 -04:00
idk
bc5161d6bd update I2PChromiumProfileUnpacker.html
Former-commit-id: 350cab1d33
Former-commit-id: 076dd32ca480fb118fa4ce57e1a96a258ee62c28
2022-08-08 13:17:56 -04:00
idk
af69884f5e update I2PChromiumProfileChecker.html
Former-commit-id: 717dda7d0b
Former-commit-id: d8a11be87ffaa1496e90449f43334911ce97c5ef
2022-08-08 13:17:52 -04:00
idk
1f33334f67 update I2PChromiumProfileBuilder.html
Former-commit-id: f5da9b7ca3
Former-commit-id: b7c6377b6f00bb0b9aec343545da0acef022fc90
2022-08-08 13:17:48 -04:00
idk
ebbe1dd156 update I2PChromium.html
Former-commit-id: 0a17f89b83
Former-commit-id: 1c948a32b335070f1212d522ea37a6e4ce5dd779
2022-08-08 13:17:43 -04:00
idk
c38f3f6f58 update CHANGES.html
Former-commit-id: 12e82c3d74
Former-commit-id: ad2632938c84150a05c8d6ec26dfd4defe8be75e
2022-08-08 13:17:40 -04:00
idk
441b71afcb update index.html
Former-commit-id: eed2811920
Former-commit-id: 3e731065dfdd1c164e73da8c8465e14d96b30dec
2022-08-08 13:17:36 -04:00
idk
75846f7567 generate markdown from javadoc
Former-commit-id: 6e92fcc976
Former-commit-id: 6f45949e3aa692eaad28129f20c782c7b65cd6bc
2022-08-08 13:17:25 -04:00
idk
3d7c0a2ab2 Good morning.
Former-commit-id: 8d075794c2
Former-commit-id: c60c8f601c5bc3398f8235b39cfb7d8f4a77079b
2022-08-08 01:45:11 -04:00
idk
5a020bce47 Adds enough Chromium support that all that needs to be added is extensions
Former-commit-id: 169a3ec988
Former-commit-id: a3d5585d4c083e335b73c92fbfe5ad2fe8ec1d23
2022-08-08 01:43:30 -04:00
idk
062d1a4af8 Adds enough Chromium support that all that needs to be added is extensions
Former-commit-id: 6df7706964
Former-commit-id: 7ff66742c78705d7c1041ed7173d0e0f8f7eeb1b
2022-08-08 01:38:40 -04:00
idk
28c4b90660 Adds enough Chromium support that all that needs to be added is extensions
Former-commit-id: b47093009a
Former-commit-id: d5182f281021ba7f5a414e5550b478cec66c05ee
2022-08-08 01:37:52 -04:00
idk
e967b281bf Maybe chromium too what the hell
Former-commit-id: 752d7a96d8
Former-commit-id: 0ebeb5684e57c3521a044560489d6c7acece0a41
2022-08-07 23:55:25 -04:00
idk
ba43e7c730 sync tags in releaser script
Former-commit-id: 3804c542ad
Former-commit-id: f0bbf2a1ca47af3ba2421cdda77947f25c36380c
2022-08-07 22:57:40 -04:00
idk
2a52eecf0b Wait on the process to close so it doesn't crash and restart
Former-commit-id: cdc3142df1
Former-commit-id: 18bb29422f69ad9de58642959f01879ec6aa3e8b
2022-08-07 22:55:35 -04:00
idk
3dded34f5d add test.sh script
Former-commit-id: d3b8a3d8fc
Former-commit-id: 75e48209292c4914c74c9980dbdfc1d1e279f4c5
2022-08-07 22:49:01 -04:00
idk
a6614ffd91 update CHANGES.html
Former-commit-id: 519fe9b83b
Former-commit-id: 183a417d99f5e3597b9a4d86ee41c286ba2d71dc
2022-08-07 22:46:46 -04:00
idk
b0a71a27ed wait for launch to close
Former-commit-id: b64b96039d
Former-commit-id: cd27cd929adf860ae8ac6fbb4186613698ceea10
2022-08-07 22:46:38 -04:00
idk
ba414cce32 wait for launch to close
Former-commit-id: b39e9ccb19
Former-commit-id: b0f123604176556696208f51790273272f60cd2a
2022-08-07 22:45:34 -04:00
idk
08ab5a28e0 fix typo
Former-commit-id: a8adf2478f
Former-commit-id: f9a8a2db04c1b33474c430bb544e86a71b30fa79
2022-08-07 22:24:19 -04:00
idk
f5e515de10 update index.html
Former-commit-id: 36b79ec7ae
Former-commit-id: e007e3cea77364f8fc56b53f71d18a69d5580a7f
2022-08-07 22:22:52 -04:00
idk
615935ac1c fix typo
Former-commit-id: aca5ef9df1
Former-commit-id: 8524f71f3d23a4afe8d8719e2bf4272eb73cebd8
2022-08-07 22:22:49 -04:00
idk
48e749854a update LICENSE.html
Former-commit-id: 183fd7cab4
Former-commit-id: e95d7e3e08679c6f67893c52223a3bb4a2071ead
2022-08-07 22:21:38 -04:00
idk
244d65dad8 update CHANGES.html
Former-commit-id: 02d23790bc
Former-commit-id: f4c7a6d780e4fbb7e41fa0c8109fd5a7759822cc
2022-08-07 22:21:34 -04:00
idk
eac85b60c0 update index.html
Former-commit-id: 635c1e1873
Former-commit-id: bd6ab7214ac6f3ad7adbef0b27d8ba724114ba7a
2022-08-07 22:21:29 -04:00
idk
bde47cb5a6 update README
Former-commit-id: 5cf29b43f9
Former-commit-id: 5411b23748db1541bf38b6bee12d5b609d6aa3c3
2022-08-07 22:21:13 -04:00
idk
b497b2e9be bump version fix release
Former-commit-id: 75fe20d84d
Former-commit-id: 171546dc137e5040e60ad939bad73ec9c1becfa4
2022-08-07 22:16:36 -04:00
idk
1de9a5d580 Fill in the changelog
Former-commit-id: b5c098bb9b
Former-commit-id: 3896691c71647585ebcc6749b4cd15d20f22fa5f
2022-08-07 22:14:45 -04:00
idk
dca80aa61e also search the Tor Browser path on Windows.
Former-commit-id: 2c5e75ac5c
Former-commit-id: 8fa7773c42750225c3c54d7f2f64442cc7e81161
2022-08-07 22:10:04 -04:00
idk
c83a1ed894 bump version
Former-commit-id: f7a62f57cc
Former-commit-id: 40949d5a81c40c53adaf547f11cedf265923f8c1
2022-08-07 21:29:26 -04:00
idk
2cdd5b0588 constructor needs to be in public scope
Former-commit-id: ab88dc722b
Former-commit-id: 93402e2b6f1910b5b90f14ead15cf5fce419e818
2022-08-07 21:28:56 -04:00
idk
9dae3c539f fix missing javadoc
Former-commit-id: dfb8bfb347
Former-commit-id: 05afe3fec1a4a6a50347e4a7c1a5b24539d67453
2022-08-07 20:55:58 -04:00
idk
4b73c3f873 add i2pbrowser.cmd
Former-commit-id: 51a2416d26
Former-commit-id: 7fccc1b4d38c0ed79e5fce2c6e90adeb4f226634
2022-08-07 20:50:44 -04:00
idk
5ea329554f update version
Former-commit-id: b08743d09b
Former-commit-id: 43a23b482c887e69ef83f953040ec93a98744be6
2022-08-07 20:49:20 -04:00
idk
bc85cee083 add i2pbrowser.cmd
Former-commit-id: 64e4183c41
Former-commit-id: ce2fa0231f1ec9e3364f8a0050710d275cac8072
2022-08-07 20:46:22 -04:00
idk
413d52a2e5 update gitignore
Former-commit-id: b9591ef84c
Former-commit-id: 8d70a4e62e391fcd735473459d173667fc694dea
2022-08-07 20:20:55 -04:00
idk
d80c092f21 add releaser script
Former-commit-id: f829e9cdf1
Former-commit-id: d707772a28c9057909e14ac26a11ad1aafacb89e
2022-08-07 20:20:29 -04:00
idk
3abae76a2d Delete the zip. Generate it every time so I don't have to check it itn
Former-commit-id: ce674a50fa
Former-commit-id: cf33fca07637eb484c9688e4076755558048504e
2022-08-07 19:41:27 -04:00
idk
64babdd11b Check in the unpacker thing
Former-commit-id: 8ef27f314d
Former-commit-id: 13b6c234a90b04f039fe0e94dc66db1bf0edf529
2022-08-07 19:40:37 -04:00
idk
8bdca6480d add gitignore, housekeeping stuff
Former-commit-id: 15a3e69286
Former-commit-id: cba8a4345f0678059babf83e9b62f4fa7fbfee45
2022-08-07 19:39:20 -04:00
idk
539f6591ca add test dirs to clean target
Former-commit-id: 7d9814e330
Former-commit-id: 309c8dfb1c4a31dcb0329e3c982470f668229f9b
2022-08-07 19:36:56 -04:00
idk
99294f3dd7 It lives
Former-commit-id: c52c4227e1
Former-commit-id: fa3d51b2d1bae639efedb2da0a0b7e78acdda33b
2022-08-07 19:35:30 -04:00
idk
e587cd7058 update profile
Former-commit-id: 1d77950d50
Former-commit-id: 9fa77465318cf145106a2cba271512725505f05a
2022-08-07 16:54:06 -04:00
idk
d87b7acb89 update profile
Former-commit-id: 7a38bae33c
Former-commit-id: c882dce8d6368e873b16fab88e83ef8a0fefc1ad
2022-08-07 16:42:19 -04:00
idk
1804ecbbd7 add base profile
Former-commit-id: 453bc0620d
Former-commit-id: 5e531e5a246c5edac04835218a77d36b386cbd19
2022-08-07 16:32:51 -04:00
idk
1786428b1b add license files
Former-commit-id: 0c022ec3e5
Former-commit-id: 4e843c3dcf65c93b76a8e5b76cd7dededb318a25
2022-08-07 16:30:40 -04:00
120 changed files with 40374 additions and 2536 deletions

4
.dockerignore Normal file
View File

@ -0,0 +1,4 @@
/.git
/plugin
/i2pbrowser
/i2p.plugins.firefox

38
.gitignore vendored Normal file
View File

@ -0,0 +1,38 @@
log
/*.su3
/*.xpi2p
/*.zip
/generated/
/i2p.chromium.base.profile/
/i2p.firefox.base.profile/
/i2p.chromium.usability.profile/
/i2p.firefox.usability.profile/
/src/i2p.chromium.base.profile/
/src/i2p.firefox.base.profile/
/src/i2p.chromium.usability.profile/
/src/i2p.firefox.usability.profile/
i2p.chromium.profile
i2p.firefox.profile
src/build
*.err
*.log
i2pbrowser/
/i2pbrowser*.deb
/i2pbrowser*.rpm
/logs
/*.jar
/*.msi
/*.exe
/user.js
arkenfoxnum
/*.tar.gz
/*.tar.xz
/i2p.firefox.profile.*
/src/*.zip
/src/*profile/extensions/*.xpi
i2p.plugins.firefox/
/icon.png
/systray.running
/.cache
/.mozilla
/i2p.plugins.firefox.torrent.zip

0
.nojekyll Normal file
View File

1339
CHANGES.html Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,164 @@
Tue, January 17
---------------
- Remove HTTPS everywhere from all profiles
- Generate a Tor Browser install to go inside Linux jpackage portables
Sat, December 31
----------------
- Add environment variables which customize behavior of Tor Browser
Sun, December 18
----------------
- Enable use as a Java I2P Console Plugin
Tue, November 22
----------------
- Fix some minor issues from buildsystem refactor that surfaced during release
- update to version 1.0.5
Sat, October 22
---------------
- Add systray for launching browsers from our own GUI
- Add `browser.config` file for customizing configuration
Thu, October 20
---------------
- Complete the PWA/App mode
Sat, October 1
--------------
- Work around anti-automation measures on OSX by writing final command out to shell script and running that
- Deterministically generate .zip files
- Add Tor Browser support to OSX
- Improve Tor Browser support on Linux
Sun, September 25
-----------------
- Become version 1.0.0
Wed, September 15
-----------------
- Add ant targets which auto-update the user.js
Wed, September 14
-----------------
- Add ant targets which fetch Firefox addons from addons.mozilla.org
Sun, September 11
-----------------
- Make the logging a little more sensible
Tue, September 6
----------------
- Wait up to 5 seconds for the initializing headless Firefox instance to die on Windows
- Add option to disable proxy pre-check by setting timeout to zero or less
Tue, September 6
----------------
- Run headlessly on first-run on Windows.
- Add support for building an .exe package.
- Add support for building an .zip Windows portable package.
- Add support for building an .rpm package.
- Destroy headless process if it goes too long.
Mon, September 5
----------------
- Fix several issues with running on Windows 11
- Make tunnel nicknames different to avoid double shared tunnels
- Add support for building a .deb package.
- Add support for building an .msi package.
Fri, September 2
----------------
- Disable HTTPS only mode in favor of HTTPS-first mode to remove the interstitial on I2P sites.
- Clearnet sites still choose HTTPS first and will silently deny downgrades but will not warn HTTP-only users.
Thu, September 1
----------------
- Add a jpackage target. Add descriptions to release items.
Wed, August 31
--------------
- Add unpacked extensions for Chromium profiles
- Add Chromium flags from Ungoogled-Chromium documentation
- Add Usability/Strict mode switching for Chromium
Tue, August 30
--------------
- Add Usability/Strict mode switching for Firefox
- Factor out common functions to own class
Sun, August 28
--------------
- Adds support for generically configuring a browser with environment variables.
- Bugfix for MSEdgium support
- Add detachable version of launchers
Sat, August 27
--------------
- Added support for passing a URL as a parameter to the cli's
- revised test.sh
Mon, August 22
--------------
- Completes support for auto-selecting *either* a Firefox or Chrome instance, automatically
Sat, August 21
--------------
- Adds support for passing the -private flag to start Firefox with --private-window and Chromium --incognito
Fri, August 20
--------------
- Chromium is now a first-class citizen
Fri, August 19
--------------
- Adds the ability to pass --private-window to Firefoxes and --incognito to Chromiums
- Switch Tor Browser to the top of the order on Windows to match i2p.firefox behavior
Mon, August 8
-------------
- Add Chromium support. You heard me. Chromium support.
- Update launcher script so it self-discovers the location of the script and uses that to find the bundled jar.
Sun, August 7
-------------
- Wrote the Javadoc
- Embedded the Firefox profile in the Jar so it always unpacks correctly
- re-added Tor Browser support on Windows
- Fix false positives in validation routine
- Make constructors public
- Wait on processbuilder to close
Saturday, August 6
------------------
- Implemented firefox detection
- Implemented directory setup
- Implemented processBuilder generator

6
Dockerfile Normal file
View File

@ -0,0 +1,6 @@
FROM debian:stable
RUN apt-get update && apt-get install -y openjdk-17* ant zip firefox-esr
ADD . /usr/src/i2p.firefox
WORKDIR /usr/src/i2p.firefox
RUN ant jar
CMD java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser

14
Dockerfile.fedora Normal file
View File

@ -0,0 +1,14 @@
FROM fedora:36
# Note,
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 cat /etc/yum.repos.d/adoptium.repo
RUN dnf clean all && rm -r /var/cache/dnf && dnf upgrade -y && dnf update -y
RUN dnf -y install rpm-build temurin-19-jdk
ADD . /src/i2p.plugins.firefox
WORKDIR /src/i2p.plugins.firefox
CMD ./fedora-docker.sh

1906
LICENSE.html Executable file

File diff suppressed because it is too large Load Diff

View File

@ -1,46 +1,842 @@
Copyright 2022 idk (hankhill19580@gmail.com)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
========================================================================
Includes code from zzzot:
Copyright 2010 zzz (zzz@mail.i2p)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
========================================================================
Includes code from Jetty 5.1.15:
Copyright 199-2004 Mort Bay Consulting Pty. Ltd.
------------------------------------------------------------------------
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Copyright 2022 idk (hankhill19580@gmail.com)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
========================================================================
Includes code from zzzot:
Copyright 2010 zzz (zzz@mail.i2p)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
========================================================================
Includes code from Jetty 5.1.15:
Copyright 199-2004 Mort Bay Consulting Pty. Ltd.
------------------------------------------------------------------------
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MIT License
Copyright (c) 2019 idk
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
HTTPS Everwyhere:
Copyright © 2010-2012 Mike Perry <mikeperry@fscked.org>
Peter Eckersley <pde@eff.org>
and many others
(Licensed GPL v2+)
Incorporating code from NoScript,
Copyright © 2004-2007 Giorgio Maone <g.maone@informaction.com>
Licensed GPL v2+
Incorporating code from Convergence
Copyright © Moxie Marlinspike
Licensed GPL v3+
Incorporating code from URI.js
Copyright © Rodney Rehm
Licensed MIT, GPL V3
Incorporating code from js-lru
Copyright © 2010 Rasmus Andersson
Licensed MIT
The build system incorporates code from Python 2.6,
Copyright © 2001-2006 Python Software Foundation
Python Software Foundation License Version 2
Net License: GPL v3+ (complete tree)
GPL v2+ (if Moxie's NSS.js is absent)
Text of MIT License:
====================
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
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. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
MIT License
Copyright (c) 2019 idk
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
HTTPS Everwyhere:
Copyright © 2010-2012 Mike Perry <mikeperry@fscked.org>
Peter Eckersley <pde@eff.org>
and many others
(Licensed GPL v2+)
Incorporating code from NoScript,
Copyright © 2004-2007 Giorgio Maone <g.maone@informaction.com>
Licensed GPL v2+
Incorporating code from Convergence
Copyright © Moxie Marlinspike
Licensed GPL v3+
Incorporating code from URI.js
Copyright © Rodney Rehm
Licensed MIT, GPL V3
Incorporating code from js-lru
Copyright © 2010 Rasmus Andersson
Licensed MIT
The build system incorporates code from Python 2.6,
Copyright © 2001-2006 Python Software Foundation
Python Software Foundation License Version 2
Net License: GPL v3+ (complete tree)
GPL v2+ (if Moxie's NSS.js is absent)
Text of MIT License:
====================
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
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. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

View File

@ -1,28 +1,65 @@
# i2p.plugins.firefox
A port of the batch scripts from i2p.firefox to Java.
A port of the batch scripts from `i2p.firefox` to Java.
**Status:** This package is maintained. It cannot solve all your problems. Fingerprinting
is a reality in modern browsers. Exploits are too. This software attempts to provide a
best-possible baseline of privacy first, security a close second for browsing the web that
exists within I2P. Do not expect it to withstand attacks from very powerful adversaries
who can spend time and money to screw up your life. Do expect it to resist advertisers,
trackers, and jerks using off-the-shelf techniques and exploits. It is fundamentally unable
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.**
**All packages require a running I2P router.**
**[Windows users should see the Easy-Install Bundle](https://i2pgit.org/i2p-hackers/i2p.firefox)**
## Credits
This profile manager makes use of a set of browser extensions which are largely the work of others.
It makes use of dependencies that are the work of others. In many ways, it's merely an elaborate
configuration tool. A smart one, but a configuration tool nonetheless. Many thanks to the following
projects, developers, and communities:
### Firefox and Chrome Extensions
- [NoScript - Giorgio Maone and others](https://noscript.net)
- [HTTPS Everywhere - Electronic Frontier Foundation](https://www.eff.org/https-everywhere)
- [uBlock Origin - Raymond Gorhill and others](https://ublockorigin.com/)
- [LocalCDN - nobody and others](https://www.localcdn.org/)
- [jShelter - Libor Polčák and others](https://jshelter.org/)
### Firefox Configuration Modifiations
- [Arkenfox - Thorin Oakenpants and Others](https://github.com/arkenfox/user.js/)
You can find the license files for each of the these projects in the `src/i2p.firefox.*.profile/extensions/*`
directory for Firefox, and the `src/i2p.chromium.*.profile/extensions/*.js/*` directories for Chromium.
## Getting started
### Building
### Building the package:
This is not actually a plugin yet, but it will be soon. The important bit is the jar.
To generate that, you can either generate the full plugin, which will not work but
produces the jar as a by-product, or you can:
- See: [BUILD.md](docs/BUILD.md)/[BUILD.html](docs/BUILD.html)
### Using a Binary
For platform specific instructions, see
- [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)
#### All platforms, using a zip: `.zip` and a non-bundled Java
```sh
cd src
ant
cd ...
mkdir ~/tmp-i2pfirefox && cd ~/tmp-i2pfirefox
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.0.9/i2pfirefox.zip
unzip i2pfirefox.zip
./i2pfirefox.cmd
#or if you want to use a Chromium
./i2pchromium.cmd
```
To build just the jar. You'll know it worked if you can:
```sh
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PFirefox
```
and a new Firefox instance comes up with a fresh profile. This is just a default Firefox
profile, configuring it for I2P requires you to put a pre-configured Firefox profile into
the `i2p.firefox.base.profile` directory or otherwise supply a static, pre-configured
profile.

1069
VERSION.html Normal file

File diff suppressed because it is too large Load Diff

46
VERSION.md Normal file
View File

@ -0,0 +1,46 @@
Extension Versions
==================
## Firefox
```md
i2p-in-private-browsing
1.44
https://addons.mozilla.org/firefox/downloads/file/4020669/i2p_in_private_browsing-1.44.xpi
noscript
11.4.16
https://addons.mozilla.org/firefox/downloads/file/4067473/noscript-11.4.16.xpi
localcdn-fork-of-decentraleyes
2.6.46
https://addons.mozilla.org/firefox/downloads/file/4066709/localcdn_fork_of_decentraleyes-2.6.46.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.11.1
https://addons.mozilla.org/firefox/downloads/file/3950710/javascript_restrictor-0.11.1.xpi
ublock-origin
1.46.0
https://addons.mozilla.org/firefox/downloads/file/4047353/ublock_origin-1.46.0.xpi
```
## Chromium
```md
__MSG_extensionName__
1.29
https://clients2.google.com/service/update2/crx
NoScript
11.4.16
https://clients2.google.com/service/update2/crx
LocalCDN
2.6.45
https://clients2.google.com/service/update2/crx
uBlock Origin
1.46.0
https://clients2.google.com/service/update2/crx
JShelter
0.11.1
https://clients2.google.com/service/update2/crx
```

1
arkenfox.number Normal file
View File

@ -0,0 +1 @@
arkenfox.number=105.0

15
browser.config Normal file
View File

@ -0,0 +1,15 @@
#Chromium Configuration Section
#Sun Oct 23 11:53:50 EDT 2022
chromium.bins.linux=ungoogled-chromium,chromium,brave,edge,ungoogled-chromium,chrome
chromium.bins.osx=ungoogled-chromium,chromium,brave,edge,ungoogled-chromium,chrome
chromium.bins.windows=ungoogled-chromium.exe,chromium.exe,brave.exe,edge.exe,ungoogled-chromium.exe,chrome.exe
chromium.paths.linux=/usr/bin,/usr/local/bin,/opt/chromium/bin,/snap/bin
chromium.paths.osx=/Applications/Chromium.app/Contents/MacOS,/Applications/Chrome.app/Contents/MacOS,/Applications/Brave.app/Contents/MacOS
chromium.paths.windows=C\:/Users/user/AppData/Local/Google/Chrome/Application,C\:/Program Files/Google/Chrome/Application,C\:/Program Files (x86)/Google/Chrome/Application,C\:/Users/user/AppData/Local/Chromium/Application,C\:/Program Files/Chromium/Application,C\:/Program Files (x86)/Chromium/Application,C\:/Users/user/AppData/Local/BraveSoftware/Brave Browser/Application,C\:/Program Files/BraveSoftware/Brave Browser/Application,C\:/Program Files (x86)/BraveSoftware/Brave Browser/Application,C\:/Program Files (x86)/Microsoft/Edge/Application,C\:/Program Files/Microsoft/Edge/Application
firefox.bins.linux=firefox,firefox-bin,firefox-esr,waterfox,waterfox-bin,librewolf
firefox.bins.osx=firefox,firefox-bin,firefox-esr,waterfox,waterfox-bin,librewolf
firefox.bins.windows=firefox.exe,firefox-bin.exe,firefox-esr.exe,waterfox.exe,waterfox-bin.exe,librewolf.exe
firefox.paths.linux=/usr/bin,/usr/local/bin,/opt/firefox/bin,/snap/bin
firefox.paths.osx=/Applications/Tor Browser.app/Contents/MacOS,/Applications/Firefox.app/Contents/MacOS,/Applications/Waterfox.app/Contents/MacOS,/Applications/Librewolf.app/Contents/MacOS
firefox.paths.windows=C\:/Users/user/OneDrive/Desktop/Tor Browser/Browser,C\:/Users/user/Desktop/Tor Browser/Browser,C\:/Program Files/Mozilla Firefox,C\:/Program Files (x86)/Mozilla Firefox,C\:/Program Files/Waterfox,C\:/Program Files (x86)/Waterfox,C\:/Program Files/Librewolf
generic.bins.unix=sensible-browser,xdg-open,x-www-browser,gnome-www-browser,defaultbrowser,dillo,seamonkey,konqueror,galeon,surf,www-browser,links,lynx

7
browser.config.sh Executable file
View File

@ -0,0 +1,7 @@
#! /usr/bin/env sh
rm -f browser.config
ant clangFmt jar
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -chromium -outputconfig -nosystray "http://idk.i2p"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -firefox -outputconfig -nosystray "http://idk.i2p"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -generic -outputconfig -nosystray "http://idk.i2p"

759
build.xml Normal file → Executable file
View File

@ -2,47 +2,366 @@
<project basedir="." default="all" name="i2pfirefox">
<property file="override.properties"/>
<target name="all" depends="clean,plugin" />
<target name="all" depends="clean,versionMd,i2pFirefoxBaseProfileZip,i2pChromiumBaseProfileZip,jar" />
<target name="war" >
<ant dir="src" target="build" />
<target name="tarball">
<exec executable="git">
<arg value="archive"/>
<arg value="--format=tar.gz"/>
<arg value="--output=i2p.plugins.firefox.tar.gz"/>
<arg value="main"/>
</exec>
</target>
<target name="plugin" depends="war">
<target name="examples" >
<exec executable="echo">
<redirector output="USAGE.md"/>
<arg value="Example Commands:" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="=================" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="printf">
<redirector output="USAGE.md" append="true"/>
<arg value="These scripts are designed so that they can be executed on both Windows and Unix.\n\nThe top command is for Unixes and should work on most POSIX shells. After it runs, the script will terminate preventing Windows commands from running.\n\nThe second and third command is for Windows and won't be reachable on
Linux(because the top command will be run and the script will exit).\n\nBoth determine the path to the script, use it to find the jar file, and execute a single command.\n\n" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="Auto-Select in Persistent Mode" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```sh" />
</exec>
<exec executable="cat">
<redirector output="USAGE.md" append="true"/>
<arg value="i2pbrowser.cmd" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="Auto-Select in Private Browsing Mode" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```sh" />
</exec>
<exec executable="cat">
<redirector output="USAGE.md" append="true"/>
<arg value="i2pbrowser-private.cmd" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="Firefox in Persistent Mode" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```sh" />
</exec>
<exec executable="cat">
<redirector output="USAGE.md" append="true"/>
<arg value="i2pfirefox.cmd" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="Firefox in Private Browsing Mode" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```sh" />
</exec>
<exec executable="cat">
<redirector output="USAGE.md" append="true"/>
<arg value="i2pfirefox-private.cmd" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="Chromium in Persistent Mode" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```sh" />
</exec>
<exec executable="cat">
<redirector output="USAGE.md" append="true"/>
<arg value="i2pchromium.cmd" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="Chromium in Private Browsing Mode" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```sh" />
</exec>
<exec executable="cat">
<redirector output="USAGE.md" append="true"/>
<arg value="i2pchromium-private.cmd" />
</exec>
<exec executable="echo">
<redirector output="USAGE.md" append="true"/>
<arg value="```" />
</exec>
</target>
<target name="jar" depends="versionMd,i2pFirefoxBaseProfileZip,i2pFirefoxUsabilityProfileZip,i2pChromiumBaseProfileZip,i2pChromiumUsabilityProfileZip">
<ant dir="src" target="jar" />
</target>
<target name="i2pFirefoxBaseProfileZip">
<exec executable="rm" failonerror="false" dir="src">
<arg value="-rf" />
<arg value="i2p.firefox.base.profile.zip" />
</exec>
<exec executable="dzip" failonerror="true" dir="src">
<arg value="-O"/>
<arg value="i2p.firefox.base.profile.zip"/>
<arg value="i2p.firefox.base.profile"/>
</exec>
</target>
<target name="i2pFirefoxUsabilityProfileZip">
<exec executable="rm" failonerror="false" dir="src">
<arg value="-rf" />
<arg value="i2p.firefox.usability.profile.zip" />
</exec>
<exec executable="dzip" failonerror="true" dir="src">
<arg value="-O"/>
<arg value="i2p.firefox.usability.profile.zip"/>
<arg value="i2p.firefox.usability.profile"/>
</exec>
</target>
<target name="i2pChromiumBaseProfileZip">
<exec executable="rm" failonerror="false" dir="src">
<arg value="-rf" />
<arg value="i2p.chromium.base.profile.zip" />
</exec>
<exec executable="dzip" failonerror="true" dir="src">
<arg value="-O"/>
<arg value="i2p.chromium.base.profile.zip"/>
<arg value="i2p.chromium.base.profile"/>
</exec>
</target>
<target name="i2pChromiumUsabilityProfileZip">
<exec executable="rm" failonerror="false" dir="src">
<arg value="-rf" />
<arg value="i2p.chromium.usability.profile.zip" />
</exec>
<exec executable="dzip" failonerror="true" dir="src">
<arg value="-O"/>
<arg value="i2p.chromium.usability.profile.zip"/>
<arg value="i2p.chromium.usability.profile"/>
</exec>
</target>
<target name="freeZip" depends="jar">
<exec executable="rm" failonerror="false" dir="src">
<arg value="-rf" />
<arg value="i2pbrowser.zip" />
</exec>
<exec executable="dzip" failonerror="true">
<arg value="-O"/>
<arg value="i2pfirefox.zip"/>
<arg value="src/build/i2pfirefox.jar"/>
<arg value="LICENSE.md"/>
<arg value="README.md"/>
</exec>
</target>
<target name="arkenfoxUpdateUserJs">
<exec executable="git" osfamily="unix" failonerror="false">
<arg value="clone" />
<arg value="https://github.com/arkenfox/user.js" />
</exec>
<exec executable="git" dir="user.js" output="user.js/.arkenfox.number">
<arg value="tag" />
<arg value="--sort=committerdate" />
</exec>
</target>
<target name="arkenfoxConfig" depends="arkenfoxUpdateUserJs">
<exec executable="tail" dir="user.js" output="user.js/.arkenfox.number">
<arg value="-n" />
<arg value="1" />
<arg value=".arkenfox.number" />
</exec>
<exec executable="echo" dir="user.js" output="arkenfox.number" append="false">
<arg value="-n" />
<arg value="-e" />
<arg value="arkenfox.number=" />
</exec>
<exec executable="cat" dir="user.js" output="arkenfox.number" append="true">
<arg value=".arkenfox.number" />
</exec>
<exec executable="tr" input="arkenfox.number" output="arkenfox.number" append="false">
<arg value="-d" />
<arg value="\n" />
</exec>
</target>
<target name="arkenfoxNum" depends="arkenfoxConfig">
<property file="arkenfox.number" />
<exec executable="echo" osfamily="unix" output="arkenfoxnum">
<arg value="{arkenfox.number}" />
</exec>
</target>
<target name="arkenfoxCheckout" depends="arkenfoxNum">
<exec executable="git" osfamily="unix" dir="user.js">
<arg value="pull" />
<arg value="--tags" />
</exec>
<exec executable="git" osfamily="unix" dir="user.js">
<arg value="checkout" />
<arg value="${arkenfox.number}" />
</exec>
</target>
<target name="userJs" depends="i2pFirefoxBaseUserJs,i2pFirefoxUsabilityUserJs">
</target>
<target name="i2pFirefoxBaseUserJs" depends="arkenfoxCheckout">
<copy file="user.js/user.js" tofile="src/i2p.firefox.base.profile/user.js"/>
<exec executable="sed" osfamily="unix">
<arg value="-i" />
<arg value='s|user_pref("extensions.autoDisableScopes", 15);|user_pref("extensions.autoDisableScopes", 0);|g' />
<arg value="src/i2p.firefox.base.profile/user.js" />
</exec>
<exec executable="sed" osfamily="unix">
<arg value="-i" />
<arg value='s|user_pref("extensions.enabledScopes", 5);|user_pref("extensions.enabledScopes", 1);|g' />
<arg value="src/i2p.firefox.base.profile/user.js" />
</exec>
<exec executable="sed" osfamily="unix">
<arg value="-i" />
<arg value='s|user_pref("dom.security.https_only_mode", true);|user_pref("dom.security.https_only_mode", false);|g' />
<arg value="src/i2p.firefox.base.profile/user.js" />
</exec>
</target>
<target name="i2pFirefoxUsabilityUserJs" depends="arkenfoxCheckout">
<copy file="user.js/user.js" tofile="src/i2p.firefox.usability.profile/user.js"/>
<exec executable="sed" osfamily="unix">
<arg value="-i" />
<arg value='s|user_pref("extensions.autoDisableScopes", 15);|user_pref("extensions.autoDisableScopes", 0);|g' />
<arg value="src/i2p.firefox.usability.profile/user.js" />
</exec>
<exec executable="sed" osfamily="unix">
<arg value="-i" />
<arg value='s|user_pref("extensions.enabledScopes", 5);|user_pref("extensions.enabledScopes", 1);|g' />
<arg value="src/i2p.firefox.usability.profile/user.js" />
</exec>
<exec executable="sed" osfamily="unix">
<arg value="-i" />
<arg value='s|user_pref("dom.security.https_only_mode", true);|user_pref("dom.security.https_only_mode", false);|g' />
<arg value="src/i2p.firefox.usability.profile/user.js" />
</exec>
</target>
<target name="buildNum">
<buildnumber file="scripts/build.number" />
<property name="release.number" value="1.0.9" />
<exec executable="echo" osfamily="unix">
<arg value="${release.number}-${build.number}" />
</exec>
</target>
<target name="ebn" depends="buildNum">
<exec executable="echo" osfamily="unix">
<arg value="${release.number}-${build.number}" />
</exec>
</target>
<target name="plugin" 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 -->
<buildnumber file="scripts/build.number" />
<property name="release.number" value="0.0.1" />
<!-- 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/firefox.css" todir="plugin/eepsite/docroot/" overwrite="true" />
<copy file="scripts/firefox-purple.css" todir="plugin/eepsite/docroot/" overwrite="true" />
<copy file="scripts/favicon.png" todir="plugin/eepsite/docroot/" 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" />
<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}-b${build.number}" />
<arg value="version=${release.number}-${build.number}" />
</exec>
<!--<exec executable="pack200" failonerror="true">
<arg value="-r" />
<arg value="plugin/lib/i2pfirefox.jar" />
<arg value="src/build/i2pfirefox.jar" />
</exec>
<exec executable="pack200" failonerror="true">
<arg value="-r" />
<arg value="plugin/eepsite/webapps/firefox.war" />
<arg value="src/build/firefox.war.jar" />
</exec>-->
<input message="Enter su3 signing key password:" addproperty="release.password.su3" />
<fail message="You must enter a password." >
<condition>
@ -60,25 +379,84 @@
<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" />
<copy file="scripts/i2pfirefox.config" todir="plugin/" overwrite="true" />
<copy file="scripts/robots.txt" todir="plugin/eepsite/docroot/" overwrite="true" />
<mkdir dir="plugin/eepsite/docroot/torrents/" />
<exec executable="echo" osfamily="unix" failonerror="true" output="plugin/plugin.config" append="true">
<arg value="version=${release.number}-b${build.number}" />
<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" />
<exec executable="mktorrent" osfamily="unix" failonerror="true">
<arg value='--announce=http://mb5ir7klpc2tj6ha3xhmrs3mseqvanauciuoiamx2mmzujvg67uq.b32.i2p/a,http://w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa.b32.i2p/a' />
<arg value='--piece-length=20' />
<arg value='--name=i2p.plugins.firefox' />
<arg value='--web-seed=http://idk.i2p/i2p.plugins.firefox,http://idk.i2p/i2p.plugins.firefox' />
<arg value='--output=i2p.plugins.firefox.torrent' />
<arg value='i2p.plugins.firefox' />
</exec>
<exec executable="zip">
<arg value="-r" />
<arg value="i2p.plugins.firefox.torrent.zip" />
<arg value="i2p.plugins.firefox" />
<arg value="i2p.plugins.firefox.torrent" />
</exec>
<exec executable="unzip">
<arg value="i2p.plugins.firefox.torrent.zip" />
<arg value="-d" />
<arg value="${user.home}/.i2p/i2psnark/" />
</exec>
</target>
<target name="seed" depends="torrent">
<exec executable="cp">
<arg value="-rv" />
<arg value="i2p.plugins.firefox" />
<arg value="i2p.plugins.firefox.torrent" />
<arg value="${user.home}/.i2p/i2psnark/" />
</exec>
</target>
<target name="distclean" depends="clean" />
<target name="clangFmt">
<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/java/net/i2p/i2pfirefox/I2PCommonBrowser.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PChromium.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PChromiumProfileBuilder.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PChromiumProfileChecker.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PChromiumProfileUnpacker.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PFirefox.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PLibreWolf.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PFirefoxProfileChecker.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PFirefoxProfileUnpacker.java"/>
<arg value="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java"/>
</exec>
</target>
<target name="clean" >
<ant dir="src" target="clean" />
<defaultexcludes remove="**/*~"/>
<delete>
<fileset dir="." includes="*/*.~ **/*.*~ */**/*.*~ *.*~" />
</delete>
<delete dir="user.js" />
<delete dir="i2p.firefox.base.profile" />
<delete dir="i2p.firefox.usability.profile" />
<delete dir="i2p.firefox.profile" />
<delete dir="src/i2p.firefox.profile.zip" />
<delete dir="i2p.chromium.base.profile" />
<delete dir="i2p.chromium.usability.profile" />
<delete dir="i2p.chromium.profile" />
<delete dir="src/i2p.chromium.profile.zip" />
<delete file="plugin/i2ptunnel.config" />
<delete file="plugin/plugin.config" />
<delete file="plugin/i2pfirefox.config" />
@ -98,6 +476,337 @@
<delete file="i2pfirefox-update.su3" />
<delete file="plugin.zip" />
<delete dir="plugin/eepsite/docroot/torrents/" />
<exec executable="git">
<arg value="clean"/> <arg value="-fdx"/>
</exec>
</target>
<target name="jpackage" depends="jar">
<delete dir="i2pbrowser" />
<exec executable="jpackage" failonerror="true">
<arg value="--type"/> <arg value="app-image"/>
<arg value="--name"/> <arg value="i2pbrowser"/>
<arg value="--app-version"/> <arg value="${release.number}"/>
<arg value="--app-content"/> <arg value="etc/scripts/torbrowser.sh"/>
<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>
<exec executable="rm" failonerror="true" osfamily="windows">
<arg value="-rf" />
<arg value="i2pbrowser.zip" />
</exec>
<exec executable="dzip" failonerror="true" osfamily="windows">
<arg value="-O"/>
<arg value="i2pbrowser.zip"/>
<arg value="i2pbrowser"/>
</exec>
<exec executable="rm" failonerror="true" osfamily="unix">
<arg value="-rf" />
<arg value="i2pbrowser.tar.gz" />
</exec>
<exec executable="./lib/torbrowser.sh" failonerror="true" osfamily="unix" dir="i2pbrowser">
</exec>
<exec executable="tar" failonerror="true" osfamily="unix">
<arg value="cvzf"/>
<arg value="i2pbrowser.tar.gz"/>
<arg value="i2pbrowser"/>
</exec>
</target>
<target name="debian" depends="jar">
<exec executable="bash" failonerror="true">
<arg value="--verbose"/>
<arg value="-c"/>
<arg value="./debian.sh"/>
</exec>
</target>
<target name="fedora" depends="jar">
<exec executable="bash" failonerror="true">
<arg value="--verbose"/>
<arg value="-c"/>
<arg value="./fedora.sh"/>
</exec>
</target>
<target name="versionMd" depends="i2pFirefoxBaseProfile, i2pFirefoxUsabilityProfile, i2pChromiumBaseProfile, i2pChromiumUsabilityProfile">
<delete file="VERSION.md"></delete>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value=""/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="Extension Versions"/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="=================="/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value=""/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="## Firefox"/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value=""/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="```md"/>
</exec>
<exec executable="amo-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-n"/>
<arg value="i2p-in-private-browsing"/>
</exec>
<exec executable="amo-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-n"/>
<arg value="noscript"/>
</exec>
<exec executable="amo-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-n"/>
<arg value="localcdn-fork-of-decentraleyes"/>
</exec>
<exec executable="amo-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-n"/>
<arg value="onion-in-container-browsing"/>
</exec>
<exec executable="amo-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-n"/>
<arg value="javascript-restrictor"/>
</exec>
<exec executable="amo-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-n"/>
<arg value="ublock-origin"/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="```"/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value=""/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="## Chromium"/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value=""/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="```md"/>
</exec>
<exec executable="manifest-json-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-mf"/>
<arg value="src/i2p.chromium.base.profile/extensions/i2pchrome.js/manifest.json"/>
</exec>
<exec executable="manifest-json-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-mf"/>
<arg value="src/i2p.chromium.base.profile/extensions/noscript.js/manifest.json"/>
</exec>
<exec executable="manifest-json-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-mf"/>
<arg value="src/i2p.chromium.usability.profile/extensions/localcdn.js/manifest.json"/>
</exec>
<exec executable="manifest-json-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-mf"/>
<arg value="src/i2p.chromium.usability.profile/extensions/ublock.js/manifest.json"/>
</exec>
<exec executable="manifest-json-version" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="-mf"/>
<arg value="src/i2p.chromium.usability.profile/extensions/jshelter.js/manifest.json"/>
</exec>
<exec executable="echo" failonerror="true">
<redirector output="VERSION.md" error="VERSION.md" alwayslog="true" append="true"></redirector>
<arg value="```"/>
</exec>
</target>
<target name="i2pChromiumBaseProfile">
<mkdir dir="src/i2p.chromium.base.profile/extensions/" />
<exec executable="crx3" failonerror="true">
<arg value="download"/>
<arg value="ikdjcmomgldfciocnpekfndklkfgglpe" />
<arg value="-u=true"/>
<arg value="-o" />
<arg value="src/i2p.chromium.base.profile/extensions/i2pchrome.js.crx" />
</exec>
<exec executable="crx3" failonerror="true">
<arg value="download"/>
<arg value="doojmbjmlfjjnbmnoijecmcbfeoakpjm" />
<arg value="-u=true"/>
<arg value="-o" />
<arg value="src/i2p.chromium.base.profile/extensions/noscript.js.crx" />
</exec>
<exec executable="echo" failonerror="true" append="false" output="src/i2p.chromium.base.profile/version.md">
<arg value="Profile Version" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.base.profile/version.md">
<arg value="===============" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.base.profile/version.md">
<arg value="" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.base.profile/version.md">
<arg value="${release.number}-${build.number}" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.base.profile/version.md">
<arg value="" />
</exec>
</target>
<target name="i2pChromiumUsabilityProfile">
<mkdir dir="src/i2p.chromium.usability.profile/extensions/" />
<exec executable="crx3" failonerror="true">
<arg value="download"/>
<arg value="ikdjcmomgldfciocnpekfndklkfgglpe" />
<arg value="-u=true"/>
<arg value="-o" />
<arg value="src/i2p.chromium.usability.profile/extensions/i2pchrome.js.crx" />
</exec>
<exec executable="crx3" failonerror="true">
<arg value="download"/>
<arg value="cjpalhdlnbpafiamejdnhcphjbkeiagm" />
<arg value="-u=true"/>
<arg value="-o" />
<arg value="src/i2p.chromium.usability.profile/extensions/ublock.js.crx" />
</exec>
<exec executable="crx3" failonerror="true">
<arg value="download"/>
<arg value="ammoloihpcbognfddfjcljgembpibcmb" />
<arg value="-u=true"/>
<arg value="-o" />
<arg value="src/i2p.chromium.usability.profile/extensions/jshelter.js.crx" />
</exec>
<exec executable="crx3" failonerror="true">
<arg value="download"/>
<arg value="njdfdhgcmkocbgbhcioffdbicglldapd" />
<arg value="-u=true"/>
<arg value="-o" />
<arg value="src/i2p.chromium.usability.profile/extensions/localcdn.js.crx" />
</exec>
<exec executable="echo" failonerror="true" append="false" output="src/i2p.chromium.usability.profile/version.md">
<arg value="Profile Version" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.usability.profile/version.md">
<arg value="===============" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.usability.profile/version.md">
<arg value="" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.usability.profile/version.md">
<arg value="${release.number}-${build.number}" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.chromium.usability.profile/version.md">
<arg value="" />
</exec>
</target>
<target name="i2pFirefoxBaseProfile" depends="buildNum">
<mkdir dir="src/i2p.firefox.base.profile/extensions/" />
<copy file="src/prefs.js" tofile="src/i2p.firefox.base.profile/prefs.js" />
<copy file="src/user-overrides.js" tofile="src/i2p.firefox.base.profile/user-overrides.js" />
<touch file="src/i2p.firefox.base.profile/first-run"/>
<exec executable="amo-version" failonerror="true">
<arg value="-n"/>
<arg value="i2p-in-private-browsing"/>
<arg value="-d"/>
<arg value="-o" />
<arg value="src/i2p.firefox.base.profile/extensions/i2ppb@eyedeekay.github.io.xpi" />
</exec>
<exec executable="amo-version" failonerror="true">
<arg value="-n"/>
<arg value="noscript"/>
<arg value="-d"/>
<arg value="-o" />
<arg value="src/i2p.firefox.base.profile/extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi" />
</exec>
<exec executable="echo" failonerror="true" append="false" output="src/i2p.firefox.base.profile/version.md">
<arg value="Profile Version" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.firefox.base.profile/version.md">
<arg value="===============" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.firefox.base.profile/version.md">
<arg value="" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.firefox.base.profile/version.md">
<arg value="${release.number}-${build.number}" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.firefox.base.profile/version.md">
<arg value="" />
</exec>
</target>
<target name="i2pFirefoxUsabilityProfile" depends="buildNum">
<mkdir dir="src/i2p.firefox.usability.profile/extensions/" />
<copy file="src/prefs.js" tofile="src/i2p.firefox.usability.profile/prefs.js" />
<copy file="src/user-overrides.js" tofile="src/i2p.firefox.usability.profile/user-overrides.js" />
<touch file="src/i2p.firefox.usability.profile/first-run"/>
<exec executable="amo-version" failonerror="true">
<arg value="-n"/>
<arg value="i2p-in-private-browsing"/>
<arg value="-d"/>
<arg value="-o" />
<arg value="src/i2p.firefox.usability.profile/extensions/i2ppb@eyedeekay.github.io.xpi" />
</exec>
<exec executable="amo-version" failonerror="true">
<arg value="-n"/>
<arg value="localcdn-fork-of-decentraleyes"/>
<arg value="-d"/>
<arg value="-o" />
<arg value="./src/i2p.firefox.usability.profile/extensions/{b86e4813-687a-43e6-ab65-0bde4ab75758}.xpi" />
</exec>
<exec executable="amo-version" failonerror="true">
<arg value="-n"/>
<arg value="onion-in-container-browsing"/>
<arg value="-d"/>
<arg value="-o" />
<arg value="src/i2p.firefox.usability.profile/extensions/onioncbt@eyedeekay.github.io.xpi" />
</exec>
<exec executable="amo-version" failonerror="true">
<arg value="-n"/>
<arg value="javascript-restrictor"/>
<arg value="-d"/>
<arg value="-o" />
<arg value="src/i2p.firefox.usability.profile/extensions/jsr@javascriptrestrictor.xpi" />
</exec>
<exec executable="amo-version" failonerror="true">
<arg value="-n"/>
<arg value="ublock-origin"/>
<arg value="-d"/>
<arg value="-o" />
<arg value="src/i2p.firefox.usability.profile/extensions/uBlock0@raymondhill.net.xpi" />
</exec>
<exec executable="echo" failonerror="true" append="false" output="src/i2p.firefox.usability.profile/version.md">
<arg value="Profile Version" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.firefox.usability.profile/version.md">
<arg value="===============" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.firefox.usability.profile/version.md">
<arg value="" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.firefox.usability.profile/version.md">
<arg value="${release.number}-${build.number}" />
</exec>
<exec executable="echo" failonerror="true" append="true" output="src/i2p.firefox.usability.profile/version.md">
<arg value="" />
</exec>
</target>
</project>

6
config.sh Executable file
View File

@ -0,0 +1,6 @@
#! /usr/bin/env sh
export GITHUB_USER=eyedeekay
export GITHUB_REPO=i2p.plugins.firefox
export GITHUB_NAME="Fixes release builds for Windows"
export GITHUB_DESCRIPTION=$(cat CHANGES.md VERSION.md)
export GITHUB_TAG=1.0.9

18
debian-torbrowser.sh Normal file
View File

@ -0,0 +1,18 @@
#! /usr/bin/env sh
# debian build which automatically configures Tor Browser.
# I do not think that it has write permission to it's own directory, making Tor Browser updates probably impossible.
# Don't use it yet.
. ./config.sh
ant jpackage
jpackage --verbose \
--app-image i2pbrowser \
--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" \

17
debian.sh Executable file
View File

@ -0,0 +1,17 @@
#! /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

11
docker.sh Executable file
View File

@ -0,0 +1,11 @@
#! /usr/bin/env sh
## Run this from inside the `i2p.plugins.firefox` checkout.
docker build -t eyedeekay/i2p.plugins.firefox .
xhost + local:docker
docker run -it --rm \
--net=host \
-e DISPLAY=unix"${DISPLAY}" \
-v /tmp/.X11-unix:/tmp/.X11-unix \
eyedeekay/i2p.plugins.firefox

1403
docs/BUILD.html Normal file

File diff suppressed because it is too large Load Diff

228
docs/BUILD.md Normal file
View File

@ -0,0 +1,228 @@
# Building
## Build Dependencies
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:
```sh
sudo apt-get install openjdk-18* ant
```
Some of the targets use scripts written in Go to help generate resources. If
you want to update the profiles, you will need them. To install Go on Debian
and Ubuntu:
```sh
sudo apt-get install golang-go
```
Add `$HOME/go/bin` to your `$PATH` so `ant` can find Go applications.
`export PATH=$PATH:$HOME/go/bin`
Then use Go to download the applications you need and add them to `$HOME/go/bin`.
If you want to build the Chromium profiles you will need a Go application
called `crx3` which is used to interact with the Chrome app store to download
and update extensions.
```sh
go install github.com/mediabuyerbot/go-crx3/crx3@latest
```
Another Go application, called `amo-version`, is used to fetch extensions from addons.mozilla.org.
Like the Chrome profiles, generating the Firefox profiles requires this application. If you don't
want to update the profiles, you don't need it.
```sh
go install github.com/eyedeekay/amo-version@latest
```
One last Go application, called `dzip` is used to generate zip files deterministically for
redistribution.
```sh
go install github.com/delicb/dzip@latest
```
If you don't want to use it, you can work around it by creating a file called
`dzip` in `/usr/local/bin/dzip` and adding the contents:
```sh
#! /usr/bin/env sh
zip -r $@
```
This will break deterministic builds, but for testing it will continue to work. More elaborate
scripts or other deterministic zip utilities can be easily substituted in by placing them
in the `$PATH` under the name `dzip`.
For Fedora, use Yum, for Arch use pacman or something else but make sure to tell everyone
about it. Once you have that installed, when building, make sure to add `$GOPATH/bin/`
to your `$PATH`.
```sh
export PATH=$PATH:$HOME/go/bin
```
Will almost always work.
## Building
This is not actually a plugin yet, but it will be soon. The important bit is the jar.
To generate that, you can either generate the full plugin, which will not work but
produces the jar as a by-product, or you can:
```sh
ant jar
```
To build just the jar. You'll know it worked if you can:
```sh
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PFirefox
```
and a new Firefox instance comes up with a fresh profile, ready-to-use for I2P browsing.
The cooler thing you can do with it is add it to an I2P distribution and somewhere in it,
add a UI element that triggers something along the lines of this:
```java
// Firefox Example
if (i2pIsRunning()) {
logger.warning("I2P is already running");
System.out.println("I2PFirefox");
I2PFirefox i2pFirefox = new I2PFirefox();
i2pFirefox.launch();
}
```
```java
// Chromium Example
if (i2pIsRunning()) {
logger.warning("I2P is already running");
System.out.println("I2PChromium");
I2PChromium i2pChromium = new I2PChromium();
i2pChromium.launch();
}
```
```java
// Auto-Select Example, chooses Firefox first, then Chromium
if (i2pIsRunning()) {
logger.warning("I2P is already running");
System.out.println("I2PBrowser");
I2PBrowser i2pBrowser = new I2PBrowser();
/*
* toggle chromium to the top of the order by doing:
I2PBrowser.chromiumFirst = true;
*
*/
i2pBrowser.launch(privateBrowsing);
}
```
to add a browser management tool to it.
## Browser Discovery Methods
This tool looks for browsers on the host system, creates a workspace to use for I2P
purposes, and launches the browser inside of that workspace. The details of the
workspace vary from browser to browser but roughly corresponds to a browser profile.
In order to be successful this tool uses 3 main types of browser discovery methods,
in this order:
1. "Local" discovery, where a browser is in a subdirectory of the directory where you
ran the launcher. This will only happen if the user unpacked a portable browser into
the same directory where they ran the launcher.
2. "Path-Based" discovery, where it scans common browser installation directories
until it finds one which it can use. On Unix, it simply scans the directories on the
`PATH` for a browser it knows about. On Windows, default paths to browser install
directories are hard-coded and included in the binary. This is what usually happens.
3. "System-Based" discovery, where it defers to the host system to make a choice
about the browser and counts on browser vendors to honor the system proxy environment
variables. This is a catch-all solution which works with most browsers, but does
not apply any customizations.
There is a little subtlety here though.
- The path to Edgium on Windows will **always** resolve during path-based discovery,
resulting in a positive test for Chromium when launching the browser in auto-select
mode. So Windows will never reach stage 3 unless expressly forced to. If Firefox or
a variant is installed, it will be chosen before Edgium unless directed otherwise.
- Even though it will launch you into Edgium if it has no other choice, I recommend
you do not use it. Edgium will in a constant, incessant way try to induce you to
share your behavior with Microsoft. If you try to resist this, it negatively affects
the performance of the browser. Google also does this with Chrome, ant this negatively
affects Chrome performance too, but less than with Edgium. TL:DR Edgium sucks and is
pointless and terrible. Literally any other browser would be better.
- Linux is unaware of a Tor Browser path because Tor Browser is rarely, if ever,
installed on-path. What is on path is virtually always a wrapper for Tor Browser
which is installed either as the main user or it's own user. Linux will only use
Tor Browser if it's discovered in "Local" mode. To set this up automatically, you
can `cd` to the `I2P` directory where you unpacked the `.tar.gz` file, and run the
`./lib/torbrowser.sh` script from there.
- I really only test Phase 3 with Dillo and Edgium. **YMMV.**
## Usability vs Strict
This is basically a profile-management tool geared toward minimizing the
differences between browser users which are passively discernible while
they are browsing I2P. It assumes that they are part of a highly fragmented
browsing environment where they are already unique, and therefore consolidation
on configuration is a goal. However, this goal sometimes also conflicts with
usability. To allow users a safe set of choices, we offer "Coarse" configuration
in 2 modes. We recommend that you do not deviate from these configurations if
you have browser application fingerprinting as a concern.
### Usability Mode
TODO: description
Pros: Allows a restricted subset of Javascript
Pros: Less likely to try and reach the clearnet
Cons: Looks very different from Tor Browser
Cons: Plugin updates can create temporary uniqueness
#### Usability Extension Set
- **I2P In Private Browsing**
- **uMatrix**
- **jsRestrictor**
- **LocalCDN**
- **Onion in Container Tabs**
- **HTTPS EveryWhere** in some configurations
### Usability user.js characteristics
TODO: Summarize differences
### Strict Mode
TODO: description
Pros: Does not allow Javascript by default
Pros: Looks a lot like Tor Browser especially if you're using Tor Browser
Cons: More work to use
Cons: Temporary uniqueness can be created by enabling Javascript for specific sites
Cons: More likely to try and reach the clearnet
#### Strict Extension Set
- **NoScript**
- **I2P In Private Browsing**
- **HTTPS EveryWhere** in some configurations
#### Strict user.js characteristics
TODO: Summarize differences

2052
docs/I2PBrowser.html Normal file

File diff suppressed because it is too large Load Diff

431
docs/I2PBrowser.md Normal file
View File

@ -0,0 +1,431 @@
# Class I2PBrowser [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java)
> */
Access: public
Description:
> I2PBrowser.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 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
Parent class: I2PGenericUnsafeBrowser
package: net.i2p.i2pfirefox
## Dependencies
<details>
<summary>
Show dependencies
</summary>
<ul>
<li>java.awt.AWTException</li>
<li>java.awt.Component</li>
<li>java.awt.Image</li>
<li>java.awt.Menu</li>
<li>java.awt.MenuItem</li>
<li>java.awt.PopupMenu</li>
<li>java.awt.SystemTray</li>
<li>java.awt.Toolkit</li>
<li>java.awt.TrayIcon</li>
<li>java.awt.event.ActionEvent</li>
<li>java.awt.event.ActionListener</li>
<li>java.awt.event.MouseAdapter</li>
<li>java.awt.event.MouseEvent</li>
<li>java.awt.event.MouseListener</li>
<li>java.io.File</li>
<li>java.io.FileOutputStream</li>
<li>java.io.FileWriter</li>
<li>java.io.IOException</li>
<li>java.io.InputStream</li>
<li>java.io.OutputStream</li>
<li>java.util.ArrayList</li>
<li>java.util.Arrays</li>
</ul>
</details>
## Member Variables
#### I2PFirefox i2pFirefox [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### I2PChromium i2pChromium [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### I2PGenericUnsafeBrowser i2pGeneral [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### Toolkit toolkit [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### SystemTray tray [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### Image image [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### TrayIcon icon [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### PopupMenu menu [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### Menu submenuStrict [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### MenuItem launchRegularBrowserStrict [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### MenuItem launchPrivateBrowserStrict [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### Menu submenuUsability [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### MenuItem launchRegularBrowserUsability [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### MenuItem launchPrivateBrowserUsability [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### MenuItem launchConfigBrowserUsability [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### MenuItem closeItem [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### boolean firefox [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: public
#### boolean chromium [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: public
#### boolean generic [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: public
#### boolean chromiumFirst [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: public
#### boolean usability [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: public
#### int privateBrowsing [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: public
#### boolean outputConfig [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
#### boolean useSystray [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L)
>
+ Access: private
## Methods
### launchFirefox [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L78)
+ Description:
+ Access: private
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | int | |
| url | String[] | |
### launchChromium [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L85)
+ Description:
+ Access: private
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | int | |
| url | String[] | |
### launchGeneric [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L92)
+ Description:
+ Access: private
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindowInt | int | |
| url | String[] | |
### setBrowser [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L121)
+ Description:
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| browserPath | String | |
### hasChromium [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L129)
+ Description: Return true if there is a Chromium available
+ Access: public
+ return: true if Chromium is available false otherwise
This method has no parameters.
### hasFirefox [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L146)
+ Description: Return true if there is a Firefox variant available
+ Access: public
+ return: true if Firefox variant is available false otherwise
This method has no parameters.
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L166)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches either Firefox or Chromium with the profile directory.
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | int | |
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L211)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches either Firefox or Chromium with the profile directory.
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | boolean | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L225)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches either Firefox or Chromium with the profile directory.
+ Access: public
+ return: void
This method has no parameters.
### ValidURL [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L227)
+ Description:
+ Access: private
+ return: String
| Name | Type | Description |
| ----- | ----- | ----- |
| inUrl | String | |
### main [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L237)
+ Description:
+ Access: public
+ Modifiers: static
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | |
### parseArgs [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L241)
+ Description:
+ Access: public
+ return: ArrayList<String>
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | |
### startup [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L288)
+ Description:
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | |
### createSystrayRunningFile [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L307)
+ Description:
+ Access: protected
+ return: boolean
This method has no parameters.
### systrayRunningExternally [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L323)
+ Description:
+ Access: protected
+ return: boolean
This method has no parameters.
### initTray [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L334)
+ Description:
+ Access: private
+ return: SystemTray
This method has no parameters.
### initMenu [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L345)
+ Description:
+ Access: private
+ return: PopupMenu
This method has no parameters.
### initIconFile [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L350)
+ Description:
+ Access: private
+ return: File
This method has no parameters.
### initIcon [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L364)
+ Description:
+ Access: private
+ return: TrayIcon
This method has no parameters.
### startupSystray [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L377)
+ Description:
+ Access: protected
+ return: void
This method has no parameters.
### shutdownSystray [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L404)
+ Description:
+ Access: protected
+ return: void
This method has no parameters.
### systray [[src]](src/java/net/i2p/i2pfirefox/I2PBrowser.java#L413)
+ Description:
+ Access: public
+ return: boolean
This method has no parameters.

1425
docs/I2PBrowserPlugin.html Normal file

File diff suppressed because it is too large Load Diff

1902
docs/I2PChromium.html Normal file

File diff suppressed because it is too large Load Diff

358
docs/I2PChromium.md Normal file
View File

@ -0,0 +1,358 @@
# Class I2PChromium [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java)
> */
Access: public
Description:
> I2PChromium.java Copyright C 2022 idk <hankhill19580@gmail.com> This program is free software: you can redistribute it and/or modify it under the terms of the MIT License. See LICENSE.md for details. This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Author: idk
Parent class: I2PChromiumProfileUnpacker
package: net.i2p.i2pfirefox
## Dependencies
<details>
<summary>
Show dependencies
</summary>
<ul>
<li>java.io.File</li>
<li>java.io.FileOutputStream</li>
<li>java.io.FileWriter</li>
<li>java.io.IOException</li>
<li>java.io.OutputStream</li>
<li>java.io.PrintWriter</li>
<li>java.util.ArrayList</li>
<li>java.util.Arrays</li>
<li>java.util.List</li>
<li>java.util.stream.Collectors</li>
<li>java.util.stream.Stream</li>
</ul>
</details>
## Member Variables
#### String[] CHROMIUM_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L)
>
+ Access: private
+ Modifiers: final
#### Process p [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L)
>
+ Access: private
## Methods
### storeChromiumDefaults [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L60)
+ Description:
+ Access: public
+ return: void
This method has no parameters.
### chromiumPathsUnix [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L89)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### chromiumBinsUnix [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L98)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### FIND_CHROMIUM_SEARCH_PATHS_UNIX [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L114)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### chromiumPathsOSX [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L128)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### FIND_CHROMIUM_SEARCH_PATHS_OSX [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L137)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### chromiumPathsWindows [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L151)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### chromiumBinsWindows [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L184)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### FIND_CHROMIUM_SEARCH_PATHS_WINDOWS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L196)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### FIND_ALL_CHROMIUM_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L210)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### FIND_CHROMIUM_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L230)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### NEARBY_CHROMIUM_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L244)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### CHROMIUM_FINDER [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L337)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### onlyValidChromiums [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L358)
+ Description: Check our list of chrome paths for a valid chrome binary. Just an existence check for now but should check versions in the future.
+ Access: public
+ return: a list of usable Chromiums or an empty list if none are found.
This method has no parameters.
### topChromium [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L378)
+ Description: Return the best available Chromium from the list of Chromiums we have.
+ Access: public
+ return: the path to the best available Chromium or null if none are found.
This method has no parameters.
### topChromium [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L407)
+ Description: Return the best available Chromium from the list of Chromiums we have. if override is passed it will be validated and if it validates it will be used.
+ Access: public
+ return: the path to the best available Chromium or null if none are found.
| Name | Type | Description |
| ----- | ----- | ----- |
| overrideChromium | String | |
### defaultProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L425)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile.
+ Access: public
+ return: a ProcessBuilder for the top Chromium binary and the default profile.
This method has no parameters.
### defaultProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L438)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile. @args the arguments to pass to the Chromium binary
+ Access: public
+ return: a ProcessBuilder for the top Chromium binary and the default profile.
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | |
### privateProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L450)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile.
+ Access: public
+ return: a ProcessBuilder for the top Chromium binary and the default profile. Always passes the --incognito flag.
This method has no parameters.
### privateProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L463)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile.
+ Access: public
+ return: a ProcessBuilder for the top Chromium binary and the default profile. Always passes the --incognito flag.
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | the arguments to pass to the Chromium binary. |
### appProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L485)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile.
+ Access: public
+ return: a ProcessBuilder for the top Chromium binary and the default profile. Always passes the --app flag.
This method has no parameters.
### appProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L498)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile.
+ Access: public
+ return: a ProcessBuilder for the top Chromium binary and the default profile. Always passes the --app flag.
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | the arguments to pass to the Chromium binary. |
### processBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L545)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile with a specific set of extended arguments.
+ Access: public
+ return: a ProcessBuilder for the top Chromium binary and default profile with a specific set of extended arguments.
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | the extended arguments to pass to the Chromium binary. |
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L662)
+ Description:
+ Access: public
+ return: Process
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | boolean | |
| url | String[] | |
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L669)
+ Description:
+ Access: public
+ return: Process
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | int | |
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L725)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches Chromium with the profile directory.
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | boolean | |
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L731)
+ Description:
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | int | |
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L756)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches Chromium with the profile directory.
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | boolean | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L765)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches Chromium with the profile directory.
+ Access: public
+ return: void
This method has no parameters.
### ValidURL [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L767)
+ Description:
+ Access: private
+ return: String
| Name | Type | Description |
| ----- | ----- | ----- |
| inUrl | String | |
### main [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L777)
+ Description:
+ Access: public
+ Modifiers: static
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | |

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,94 @@
# Class I2PChromiumProfileBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileBuilder.java)
> */
Access: public
Description:
> I2PChromiumProfileBuilder.java Copyright C 2022 idk <hankhill19580@gmail.com> This program is free software: you can redistribute it and/or modify it under the terms of the MIT License. See LICENSE.md for details. This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. I2PChromiumProfileBuilder is a that builds a profile directory which contains the I2P browser profile for the Chromium browser family. It manages the base profile directory and copies it's contents to the active profile directory which is actually used by Chromium.
Author: idk
Parent class: I2PChromiumProfileChecker
package: net.i2p.i2pfirefox
## Dependencies
<details>
<summary>
Show dependencies
</summary>
<ul>
<li>java.io.File</li>
</ul>
</details>
## Member Variables
#### boolean usability [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileBuilder.java#L)
>
+ Access: public
## Methods
### baseProfileDir [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileBuilder.java#L26)
+ Description:
+ Access: private
+ return: String
| Name | Type | Description |
| ----- | ----- | ----- |
| file | String | |
| mode | String | |
### baseProfileDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileBuilder.java#L50)
+ Description:
+ Access: public
+ return: String
| Name | Type | Description |
| ----- | ----- | ----- |
| mode | String | |
### runtimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileBuilder.java#L74)
+ Description: get the runtime directory creating it if create=true
+ Access: public
+ return: the runtime directory or null if it could not be created
| Name | Type | Description |
| ----- | ----- | ----- |
| create | boolean | if true create the runtime directory if it does not exist |
### runtimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileBuilder.java#L85)
+ Description: get the correct runtime directory
+ Access: public
+ return: the runtime directory or null if it could not be created or found
This method has no parameters.
### usabilityMode [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileBuilder.java#L100)
+ Description:
+ Access: public
+ return: String
This method has no parameters.
### copyBaseProfiletoProfile [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileBuilder.java#L111)
+ Description: Copy the inert base profile directory to the runtime profile directory
+ Access: public
+ return: boolean
This method has no parameters.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,83 @@
# Class I2PChromiumProfileChecker [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileChecker.java)
> */
Access: public
Description:
> I2PChromiumProfileChecker.java Copyright C 2022 idk <hankhill19580@gmail.com> This program is free software: you can redistribute it and/or modify it under the terms of the MIT License. See LICENSE.md for details. This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. I2PChromiumProfileChecker is a that checks if the Chromium profile directory exists and is valid.
Author: idk
Parent class: I2PCommonBrowser
package: net.i2p.i2pfirefox
## Dependencies
<details>
<summary>
Show dependencies
</summary>
<ul>
<li>java.io.File</li>
</ul>
</details>
## No member variables in this class
## Methods
### main [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileChecker.java#L29)
+ Description: Output feedback if the profile directory is valid or invalid @description Output feedback if the profile directory is valid or invalid @args unused
+ Access: public
+ Modifiers: static
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | |
### profileDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileChecker.java#L50)
+ Description: get the profile directory creating it if necessary
+ Access: public
+ return: String
| Name | Type | Description |
| ----- | ----- | ----- |
| base | String | |
### validateProfileDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileChecker.java#L61)
+ Description: Return true if the profile directory is valid.
+ Access: public
+ return: true if the profile directory is valid false otherwise
| Name | Type | Description |
| ----- | ----- | ----- |
| profileDirectory | String | the profile directory to check |
### validateFile [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileChecker.java#L92)
+ Description: Return true if the file is valid.
+ Access: public
+ return: true if the file is valid false otherwise
| Name | Type | Description |
| ----- | ----- | ----- |
| file | String | the file to check |
### validateExtensionDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileChecker.java#L119)
+ Description: Return true if the extension directory is valid.
+ Access: public
+ return: true if the extension directory is valid false otherwise
| Name | Type | Description |
| ----- | ----- | ----- |
| extensionDirectory | String | the extension directory to check |

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,50 @@
# Class I2PChromiumProfileUnpacker [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileUnpacker.java)
> */
Access: public
Description:
> I2PChromiumProfileUnpacker.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. I2PChromiumProfileUnpacker is a that unpacks the Chromium profile zip file into the Chromium base profile directory. This is not used by the Chromium browser instance it's unpacked to the disk to be copied to the active profile directory.
Author: idk
Parent class: I2PChromiumProfileBuilder
package: net.i2p.i2pfirefox
## Dependencies
<details>
<summary>
Show dependencies
</summary>
<ul>
</ul>
</details>
## No member variables in this class
## Methods
### main [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileUnpacker.java#L23)
+ Description:
+ Access: public
+ Modifiers: static
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | |
### unpackProfile [[src]](src/java/net/i2p/i2pfirefox/I2PChromiumProfileUnpacker.java#L38)
+ Description: unpack the profile directory
+ Access: public
+ return: true if the profile directory was successfully unpacked
| Name | Type | Description |
| ----- | ----- | ----- |
| profileDirectory | String | |
| mode | String | |

1821
docs/I2PCommonBrowser.html Normal file

File diff suppressed because it is too large Load Diff

335
docs/I2PCommonBrowser.md Normal file
View File

@ -0,0 +1,335 @@
# Class I2PCommonBrowser [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java)
>
Access: public
Description:
> I2PCommonBrowser.java Copyright C 2022 idk <hankhill19580@gmail.com> This program is free software: you can redistribute it and/or modify it under the terms of the MIT License. See LICENSE.md for details. This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Author: idk
package: net.i2p.i2pfirefox
## Dependencies
<details>
<summary>
Show dependencies
</summary>
<ul>
<li>java.io.File</li>
<li>java.io.FileInputStream</li>
<li>java.io.FileOutputStream</li>
<li>java.io.IOException</li>
<li>java.io.InputStream</li>
<li>java.io.OutputStream</li>
<li>java.net.Socket</li>
<li>java.nio.file.Files</li>
<li>java.nio.file.StandardCopyOption</li>
<li>java.util.Arrays</li>
<li>java.util.Properties</li>
<li>java.util.logging.FileHandler</li>
<li>java.util.logging.Logger</li>
<li>java.util.logging.SimpleFormatter</li>
<li>java.util.zip.ZipEntry</li>
<li>java.util.zip.ZipInputStream</li>
</ul>
</details>
## Member Variables
#### Properties prop [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L)
>
+ Access: public
#### Logger logger [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L)
>
+ Access: public
#### FileHandler fh [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L)
>
+ Access: private
## Methods
### loadPropertiesFile [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L58)
+ Description:
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| props | File | |
### validateUserDir [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L68)
+ Description:
+ Access: public
+ return: void
This method has no parameters.
### getOperatingSystem [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L113)
+ Description:
+ Access: public
+ return: String
This method has no parameters.
### isWindows [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L127)
+ Description:
+ Access: protected
+ return: boolean
This method has no parameters.
### isOSX [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L139)
+ Description:
+ Access: protected
+ return: boolean
This method has no parameters.
### runtimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L179)
+ Description: get the runtime directory creating it if create=true
+ Access: protected
+ return: the runtime directory or null if it could not be created
| Name | Type | Description |
| ----- | ----- | ----- |
| create | boolean | if true create the runtime directory if it does not exist |
| override | String | |
### runtimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L196)
+ Description: get the correct runtime directory
+ Access: protected
+ return: the runtime directory or null if it could not be created or found
| Name | Type | Description |
| ----- | ----- | ----- |
| override | String | |
### profileDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L244)
+ Description: get the profile directory creating it if necessary
+ Access: protected
+ return: the profile directory or null if it could not be created
| Name | Type | Description |
| ----- | ----- | ----- |
| envVar | String | |
| browser | String | |
| base | String | |
| app | boolean | |
### profileDir [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L257)
+ Description:
+ Access: protected
+ return: String
| Name | Type | Description |
| ----- | ----- | ----- |
| file | String | |
| browser | String | |
| base | String | |
| app | boolean | |
### unpackProfile [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L268)
+ Description:
+ Access: protected
+ return: boolean
| Name | Type | Description |
| ----- | ----- | ----- |
| profileDirectory | String | |
| browser | String | |
| base | String | |
### copyDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L313)
+ Description:
+ Access: protected
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| sourceDirectory | File | |
| destinationDirectory | File | |
| browser | String | |
| base | String | |
### copyDirectoryCompatibilityMode [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L328)
+ Description:
+ Access: private
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| source | File | |
| destination | File | |
| browser | String | |
| base | String | |
### copy [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L336)
+ Description:
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| source | InputStream | |
| target | OutputStream | |
### copyFile [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L345)
+ Description:
+ Access: private
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| sourceFile | File | |
| destinationFile | File | |
### validateProfileFirstRun [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L356)
+ Description:
+ Access: public
+ return: boolean
| Name | Type | Description |
| ----- | ----- | ----- |
| profileDirectory | String | |
### waitForProxy [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L382)
+ Description: Waits for an HTTP proxy on port 4444 to be ready. Returns false on timeout of 200 seconds.
+ Access: public
+ return: true if the proxy is ready false if it is not.
This method has no parameters.
### waitForProxy [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L392)
+ Description: Waits for an HTTP proxy on port 4444 to be ready. Returns false on timeout of the specified number of seconds.
+ Access: public
+ return: true if the proxy is ready false if it is not.
| Name | Type | Description |
| ----- | ----- | ----- |
| timeout | int | the number of seconds to wait for the proxy to be ready. |
### waitForProxy [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L404)
+ Description: Waits for an HTTP proxy on the specified port to be ready. Returns false on timeout of the specified number of seconds.
+ Access: public
+ return: true if the proxy is ready false if it is not.
| Name | Type | Description |
| ----- | ----- | ----- |
| timeout | int | the number of seconds to wait for the proxy to be ready. |
| port | int | the port to wait for the proxy to be ready on. |
### waitForProxy [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L419)
+ Description: Waits for an HTTP proxy on the specified port to be ready. Returns false on timeout of the specified number of seconds. If the timeout is zero or less the check is disabled and always returns true.
+ Access: public
+ return: true if the proxy is ready false if it is not.
| Name | Type | Description |
| ----- | ----- | ----- |
| timeout | int | the number of seconds to wait for the proxy to be ready. |
| port | int | the port to wait for the proxy to be ready on. |
| host | String | the host to wait for the proxy to be ready on. |
### checkifPortIsOccupied [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L437)
+ Description:
+ Access: public
+ return: boolean
| Name | Type | Description |
| ----- | ----- | ----- |
| port | int | |
| host | String | |
### setProxyTimeoutTime [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L452)
+ Description: Alters the proxy timeout to customized value time in seconds. May be zero.
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| time | int | |
### join [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L457)
+ Description:
+ Access: protected
+ return: String
| Name | Type | Description |
| ----- | ----- | ----- |
| arr | String[] | |
### sleep [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L466)
+ Description:
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| millis | int | |
### searchFile [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L474)
+ Description:
+ Access: public
+ return: File
| Name | Type | Description |
| ----- | ----- | ----- |
| file | File | |
| search | String | |

1993
docs/I2PFirefox.html Normal file

File diff suppressed because it is too large Load Diff

395
docs/I2PFirefox.md Normal file
View File

@ -0,0 +1,395 @@
# Class I2PFirefox [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java)
> */
Access: public
Description:
> I2PFirefox.java Copyright C 2022 idk <hankhill19580@gmail.com> This program is free software: you can redistribute it and/or modify it under the terms of the MIT License. See LICENSE.md for details. This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Author: idk
Parent class: I2PFirefoxProfileUnpacker
package: net.i2p.i2pfirefox
## Dependencies
<details>
<summary>
Show dependencies
</summary>
<ul>
<li>java.io.File</li>
<li>java.io.FileOutputStream</li>
<li>java.io.FileWriter</li>
<li>java.io.IOException</li>
<li>java.io.OutputStream</li>
<li>java.io.PrintWriter</li>
<li>java.util.ArrayList</li>
<li>java.util.Arrays</li>
<li>java.util.List</li>
<li>java.util.concurrent.TimeUnit</li>
<li>java.util.stream.Collectors</li>
<li>java.util.stream.Stream</li>
</ul>
</details>
## Member Variables
#### String[] FIREFOX_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L)
>
+ Access: private
+ Modifiers: final
#### Process process [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L)
>
+ Access: private
#### boolean usability [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L)
>
+ Access: public
## Methods
### baseMode [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L35)
+ Description:
+ Access: private
+ return: String
This method has no parameters.
### storeFirefoxDefaults [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L58)
+ Description:
+ Access: public
+ return: void
This method has no parameters.
### firefoxPathsUnix [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L87)
+ Description:
+ Access: public
+ return: String[]
This method has no parameters.
### firefoxBinsUnix [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L96)
+ Description:
+ Access: public
+ return: String[]
This method has no parameters.
### FIND_FIREFOX_SEARCH_PATHS_UNIX [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L113)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### firefoxPathsOSX [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L126)
+ Description:
+ Access: public
+ return: String[]
This method has no parameters.
### FIND_FIREFOX_SEARCH_PATHS_OSX [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L136)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### firefoxPathsWindows [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L149)
+ Description:
+ Access: public
+ return: String[]
This method has no parameters.
### firefoxBinsWindows [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L182)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### FIND_FIREFOX_SEARCH_PATHS_WINDOWS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L192)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### FIND_ALL_FIREFOX_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L206)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### FIND_FIREFOX_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L226)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### NEARBY_FIREFOX_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L241)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### FIREFOX_FINDER [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L337)
+ Description:
+ Access: private
+ return: String[]
This method has no parameters.
### onlyValidFirefoxes [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L358)
+ Description: Check our list of firefox paths for a valid firefox binary. Just an existence check for now but should check versions in the future.
+ Access: public
+ return: a list of usable Firefoxes or an empty list if none are found.
This method has no parameters.
### topFirefox [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L379)
+ Description: Return the best available Firefox from the list of Firefoxes we have.
+ Access: public
+ return: the path to the best available Firefox or null if none are found.
This method has no parameters.
### topFirefox [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L409)
+ Description: Return the best available Firefox from the list of Firefoxes we have. if override is passed it will be validated and if it validates it will be used.
+ Access: public
+ return: the path to the best available Firefox or null if none are found.
| Name | Type | Description |
| ----- | ----- | ----- |
| overrideFirefox | String | |
### defaultProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L427)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile.
+ Access: public
+ return: a ProcessBuilder for the top Firefox binary and the default profile.
This method has no parameters.
### defaultProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L439)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile.
+ Access: public
+ return: ProcessBuilder
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | the args to pass to the Firefox binary |
### privateProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L453)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile. Pass the --private-window flag to open a window.
+ Access: public
+ return: a ProcessBuilder for the top Firefox binary and the default profile.
This method has no parameters.
### privateProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L466)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile. Pass the --private-window flag to open a window.
+ Access: public
+ return: ProcessBuilder
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | the arguments to pass to the Firefox binary |
### appProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L489)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile. Pass the --private-window flag to open a window.
+ Access: public
+ return: a ProcessBuilder for the top Firefox binary and the default profile.
This method has no parameters.
### appProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L502)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile. Pass the --private-window flag to open a window.
+ Access: public
+ return: ProcessBuilder
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | the arguments to pass to the Firefox binary |
### headlessProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L523)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile. Pass the --headless flag to open without a window.
+ Access: public
+ return: ProcessBuilder
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | the arguments to pass to the Firefox binary |
### processBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L551)
+ Description:
+ Access: public
+ return: ProcessBuilder
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | |
| app | boolean | |
### usabilityMode [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L682)
+ Description:
+ Access: private
+ return: String
This method has no parameters.
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L688)
+ Description:
+ Access: public
+ return: Process
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | boolean | |
| url | String[] | |
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L694)
+ Description:
+ Access: public
+ return: Process
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | int | |
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L786)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches Firefox with the profile directory.
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | boolean | |
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L792)
+ Description:
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | int | |
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L818)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches Firefox with the profile directory.
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | boolean | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L828)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches Firefox with the profile directory. Uses a semi-permanent profile.
+ Access: public
+ return: void
This method has no parameters.
### ValidURL [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L830)
+ Description:
+ Access: private
+ return: String
| Name | Type | Description |
| ----- | ----- | ----- |
| inUrl | String | |
### main [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L841)
+ Description:
+ Access: public
+ Modifiers: static
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | |

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,134 @@
# Class I2PFirefoxProfileBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java)
> */
Access: public
Description:
> I2PFirefoxProfileBuilder.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. I2PFirefoxProfileBuilder is a that builds a profile directory which contains the I2P browser profile for the Firefox browser family. It manages the base profile directory and copies it's contents to the active profile directory which is actually used by Firefox.
Author: idk
Parent class: I2PFirefoxProfileChecker
package: net.i2p.i2pfirefox
## Dependencies
<details>
<summary>
Show dependencies
</summary>
<ul>
<li>java.io.File</li>
<li>java.io.IOException</li>
<li>java.nio.file.Files</li>
<li>java.nio.file.StandardCopyOption</li>
</ul>
</details>
## Member Variables
#### boolean strict [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java#L)
>
+ Access: private
## Methods
### userChromeCSS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java#L28)
+ Description:
+ Access: private
+ return: String
This method has no parameters.
### baseProfileDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java#L125)
+ Description: get the base profile directory creating it if necessary
+ Access: public
+ return: String
| Name | Type | Description |
| ----- | ----- | ----- |
| base | String | |
### runtimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java#L149)
+ Description: get the runtime directory creating it if create=true
+ Access: public
+ return: the runtime directory or null if it could not be created
| Name | Type | Description |
| ----- | ----- | ----- |
| create | boolean | if true create the runtime directory if it does not exist |
### runtimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java#L160)
+ Description: get the correct runtime directory
+ Access: public
+ return: the runtime directory or null if it could not be created or found
This method has no parameters.
### copyBaseProfiletoProfile [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java#L180)
+ Description: Copy the inert base profile directory to the runtime profile directory
+ Access: public
+ return: boolean
| Name | Type | Description |
| ----- | ----- | ----- |
| base | String | |
| app | boolean | |
### writeAppChrome [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java#L213)
+ Description:
+ Access: protected
+ return: boolean
| Name | Type | Description |
| ----- | ----- | ----- |
| profile | String | |
### deleteAppChrome [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java#L226)
+ Description:
+ Access: protected
+ return: boolean
| Name | Type | Description |
| ----- | ----- | ----- |
| profile | String | |
### copyStrictOptions [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java#L241)
+ Description: Copy the strict options from the base profile to the profile
+ Access: public
+ return: true if successful false otherwise
| Name | Type | Description |
| ----- | ----- | ----- |
| base | String | |
| app | boolean | |
### setupUserChrome [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileBuilder.java#L276)
+ Description:
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| profileDir | File | |
| app | boolean | |

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,136 @@
# Class I2PFirefoxProfileChecker [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileChecker.java)
> */
Access: public
Description:
> I2PFirefoxProfileChecker.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. I2PFirefoxProfileChecker is a that checks if the Firefox profile directory exists and is valid.
Author: idk
Parent class: I2PCommonBrowser
package: net.i2p.i2pfirefox
## Dependencies
<details>
<summary>
Show dependencies
</summary>
<ul>
<li>java.io.BufferedReader</li>
<li>java.io.File</li>
<li>java.io.FileNotFoundException</li>
<li>java.io.FileReader</li>
<li>java.io.FileWriter</li>
<li>java.io.IOException</li>
<li>java.util.Scanner</li>
</ul>
</details>
## No member variables in this class
## Methods
### main [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileChecker.java#L32)
+ Description:
+ Access: public
+ Modifiers: static
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | |
### profileDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileChecker.java#L53)
+ Description: get the profile directory creating it if necessary
+ Access: public
+ return: String
| Name | Type | Description |
| ----- | ----- | ----- |
| app | boolean | |
| base | String | |
### validateProfileDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileChecker.java#L64)
+ Description: Return true if the profile directory is valid.
+ Access: public
+ return: true if the profile directory is valid false otherwise
| Name | Type | Description |
| ----- | ----- | ----- |
| profileDirectory | String | the profile directory to check |
### deRestrictHTTPSAndSetupHomepage [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileChecker.java#L97)
+ Description:
+ Access: private
+ return: boolean
| Name | Type | Description |
| ----- | ----- | ----- |
| profile | String | |
### undoHttpsOnlyMode [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileChecker.java#L120)
+ Description:
+ Access: private
+ return: boolean
| Name | Type | Description |
| ----- | ----- | ----- |
| fileToBeModified | File | |
### undoHomepage [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileChecker.java#L126)
+ Description:
+ Access: private
+ return: boolean
| Name | Type | Description |
| ----- | ----- | ----- |
| fileToBeModified | File | |
### undoValue [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileChecker.java#L149)
+ Description:
+ Access: public
+ return: boolean
| Name | Type | Description |
| ----- | ----- | ----- |
| oldString | String | |
| newString | String | |
| fileToBeModified | File | |
### validateFile [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileChecker.java#L183)
+ Description: Return true if the file is valid.
+ Access: public
+ return: true if the file is valid false otherwise
| Name | Type | Description |
| ----- | ----- | ----- |
| file | String | the file to check |
### validateExtensionDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileChecker.java#L210)
+ Description: Return true if the extension directory is valid.
+ Access: public
+ return: true if the extension directory is valid false otherwise
| Name | Type | Description |
| ----- | ----- | ----- |
| extensionDirectory | String | the extension directory to check |

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,50 @@
# Class I2PFirefoxProfileUnpacker [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileUnpacker.java)
> */
Access: public
Description:
> I2PFirefoxProfileUnpacker.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. I2PFirefoxProfileUnpacker is a that unpacks the I2P Firefox profile from a zip file embedded in the `jar` file. The zip is unpacked to a base directory where it is left untouched and the base profile is copied to the active profile directory.
Author: idk
Parent class: I2PFirefoxProfileBuilder
package: net.i2p.i2pfirefox
## Dependencies
<details>
<summary>
Show dependencies
</summary>
<ul>
</ul>
</details>
## No member variables in this class
## Methods
### main [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileUnpacker.java#L23)
+ Description:
+ Access: public
+ Modifiers: static
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | |
### unpackProfile [[src]](src/java/net/i2p/i2pfirefox/I2PFirefoxProfileUnpacker.java#L38)
+ Description: unpack the profile directory
+ Access: public
+ return: true if the profile directory was successfully unpacked
| Name | Type | Description |
| ----- | ----- | ----- |
| profileDirectory | String | |
| base | String | |

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,214 @@
# Class I2PGenericUnsafeBrowser [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java)
>
Access: public
Description:
> I2PChromiumProfileChecker.java Copyright C 2022 idk <hankhill19580@gmail.com> This program is free software: you can redistribute it and/or modify it under the terms of the MIT License. See LICENSE.md for details. This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. I2PGenericUnsafeBrowser is a wrapper which sets common environment variables for the process controlled by a processbuilder. ALWAYS ALWAYS ALWAYS try the Firefox and Chromium specific launchers first.
Author: idk
Parent class: I2PCommonBrowser
package: net.i2p.i2pfirefox
## Dependencies
<details>
<summary>
Show dependencies
</summary>
<ul>
<li>java.io.File</li>
<li>java.io.FileOutputStream</li>
<li>java.io.IOException</li>
<li>java.io.OutputStream</li>
<li>java.net.Socket</li>
<li>java.util.ArrayList</li>
<li>java.util.Arrays</li>
<li>java.util.List</li>
<li>java.util.Scanner</li>
<li>java.util.stream.Collectors</li>
</ul>
</details>
## Member Variables
#### int DEFAULT_TIMEOUT [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L)
>
+ Access: private
+ Modifiers: final
#### String BROWSER [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L)
>
+ Access: public
#### Process p [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L)
>
+ Access: private
## Methods
### getDefaultWindowsBrowser [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L101)
+ Description: Obtains the default browser for the Windows platform which by now should be Edgium in the worst-case scenario but in case it isn't we can use this function to figure it out. It can find: 1. The current user's HTTPS default browser if they configured it to be non-default 2. The current user's HTTP default browser if they configured it to be non-default 3. Edgium if it's available 4. iexplore if it's not and it will return the first one we find in exactly that order. Adapted from:
+ Access: public
+ return: path to command[0] and target URL[1] to the default browser ready for execution or null if not found
This method has no parameters.
### registryQuery [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L142)
+ Description: obtains a value matching a key contained in the windows registry at a path represented by hkeyquery
+ Access: private
+ return: either a registry "Default" value or null if one does not exist/is empty
| Name | Type | Description |
| ----- | ----- | ----- |
| hkeyquery | String | registry entry to ask for. |
| key | String | key to retrieve value from |
### followUserConfiguredBrowserToCommand [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L180)
+ Description: If following a query back to the Default value doesn't work then what we have is a "ProgID" which will be registered in \HKEY_CLASSES_ROOT\%ProgId% and will have an entry \shell\open\command where \shell\open\command yields the value that contains the command it needs. This function takes a registry query in the same format as getDefaultOutOfRegistry but instead of looking for the default entry
+ Access: private
+ return: the command required to run the application referenced in hkeyquery or null
| Name | Type | Description |
| ----- | ----- | ----- |
| hkeyquery | String | |
### followProgIdToCommand [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L196)
+ Description: Cross-references a progId obtained by followUserConfiguredBrowserToCommand against HKEY_CLASSES_ROOT\%ProgId%\shell\open\command which holds the value of the command which we need to run to launch the default browser.
+ Access: private
+ return: the command required to run the application referenced in hkeyquery or null
| Name | Type | Description |
| ----- | ----- | ----- |
| progid | String | |
### getDefaultOutOfRegistry [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L215)
+ Description: obtains a default browsing command out of the Windows registry.
+ Access: private
+ return: either a registry "Default" value or null if one does not exist/is empty
| Name | Type | Description |
| ----- | ----- | ----- |
| hkeyquery | String | registry entry to ask for. |
### scanAPath [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L230)
+ Description:
+ Access: private
+ return: String
| Name | Type | Description |
| ----- | ----- | ----- |
| dir | String | |
### getAnyUnixBrowser [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L245)
+ Description: Find any browser in our list within a UNIX path
+ Access: public
+ return: String
This method has no parameters.
### findUnsafeBrowserAnywhere [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L264)
+ Description: Find any usable browser and output the whole path
+ Access: public
+ return: String
This method has no parameters.
### deleteRuntimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L325)
+ Description: delete the runtime directory
+ Access: public
+ return: boolean
This method has no parameters.
### runtimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L341)
+ Description: get the runtime directory creating it if create=true
+ Access: public
+ return: the runtime directory or null if it could not be created
| Name | Type | Description |
| ----- | ----- | ----- |
| create | boolean | if true create the runtime directory if it does not exist |
### runtimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L353)
+ Description: get the correct runtime directory
+ Access: public
+ return: the runtime directory or null if it could not be created or found
This method has no parameters.
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L368)
+ Description:
+ Access: public
+ return: Process
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | boolean | |
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L390)
+ Description:
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | boolean | |
| url | String[] | |
### ValidURL [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L408)
+ Description:
+ Access: private
+ return: String
| Name | Type | Description |
| ----- | ----- | ----- |
| inUrl | String | |
### main [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L419)
+ Description:
+ Access: public
+ Modifiers: static
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| args | String[] | |

1099
docs/I2PLibreWolf.html Normal file

File diff suppressed because it is too large Load Diff

1117
docs/LINUX.html Normal file

File diff suppressed because it is too large Load Diff

35
docs/LINUX.md Normal file
View File

@ -0,0 +1,35 @@
### Linux Support
It's possible to use this package in the following binary formats on
Linux. These packages are for the **`amd64`** architecture.
#### Linux jpackage: `.tar.gz`
```sh
mkdir ~/tmp-i2pbrowser && cd ~/tmp-i2pbrowser
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.0.9/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.
# This will also make the directory the launcher is in relocatable to a flash drive, for instance.
# This is commonly referred to as being portable.
# If tor and torsocks are on the host system, Tor Browser will be downloaded over Tor.
./lib/torbrowser.sh
# end of optional step.
./bin/i2pbrowser
```
#### Debian/Ubuntu and variants Jpackage: `.deb`
1. Start your I2P Router
2. Download the latest release `.deb` from [Github](https://github.com/eyedeekay/i2p.plugins.firefox/releases) and verify it's hash.
3. Run `sudo apt-get install ./i2pbrowser*.deb`(Only needs to be done once per update)
4. Use the applications menu shortcut to launch the pre-configured I2P browser
#### Fedora and variants Jpackage: `.rpm`
1. Start your I2P Router
2. Download the latest release `.r[m` from [Github](https://github.com/eyedeekay/i2p.plugins.firefox/releases) and verify it's hash.
3. Run `sudo rpm -i ./i2pbrowser*.rpm`(Only needs to be done the first time)
4. Run `sudo rpm -U ./i2pbrowser*.rpm`(Only needs to be done once per update)
5. Use the applications menu shortcut to launch the pre-configured I2P browser

1066
docs/OSX.html Normal file

File diff suppressed because it is too large Load Diff

33
docs/OSX.md Normal file
View File

@ -0,0 +1,33 @@
Using this on OSX
=================
This code will launch an I2P-Configured Browser on OSX, but at this time
there are no packages for it because it's not possible for me to sign OSX
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.0.9/i2pfirefox.zip
unzip i2pfirefox.zip
./cmd/i2pfirefox.cmd
#or if you want to use a Chromium
./cmd/i2pchromium.cmd
```
Building a `jpackage`
---------------------
In order to build a `jpackage`, install at least Java 17. To set up Java
17 and configure it to be the Java used by the system for the rest of the
session, use these commands:
```sh
brew install openjdk@17
sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
export JAVA_HOME=`/usr/libexec/java_home -v 17`
```
Once you're finished, run `./osx-dmg.sh` in the repository root to produce a
`.dmg` package.

1139
docs/WINDOWS.html Normal file

File diff suppressed because it is too large Load Diff

33
docs/WINDOWS.md Normal file
View File

@ -0,0 +1,33 @@
### Windows Support
It's possible to use this package on Windows, but it's recommended that
you get it through the Easy-Install bundle which includes this functionality
already. Use this only if you want to test new features or if you prefer
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)**
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.
3. Unzip the `.zip` directory
4. run the `i2pbrowser.exe` file inside the unzipped directory.
#### Windows Jpackage: `.msi`
**(Not Recommended! This functionality is already included in the Easy-Install Bundle for Windows)**
1. Start your I2P Router
2. Download the latest release `.msi` from [Github](https://github.com/eyedeekay/i2p.plugins.firefox/releases) and verify it's hash.
3. Run the `.msi` installer(Only needs to be done once per update)
4. Use the start menu shortcut to launch the pre-configured I2P browser
#### Windows Jpackage: `.exe`
**(Not Recommended! This functionality is already included in the Easy-Install Bundle for Windows)**
1. Start your I2P Router
2. Download the latest release `.exe` from [Github](https://github.com/eyedeekay/i2p.plugins.firefox/releases) and verify it's hash.
3. Run the `.msi` installer(Only needs to be done once per update)
4. Use the start menu shortcut to launch the pre-configured I2P browser

15
docs/showhider.css Normal file
View File

@ -0,0 +1,15 @@
/* edgar showhider CSS file */
#show {display:none; }
#hide {display:block; }
#show:target {display: block; }
#hide:target {display: none; }
#shownav {display:none; }
#hidenav {display:block; }
#shownav:target {display: block; }
#hidenav:target {display: none; }
#donate {display:none; }
#hidedonate {display:block; }
#donate:target {display: block; }
#hidedonate:target {display: none; }

165
docs/style.css Normal file
View File

@ -0,0 +1,165 @@
/* edgar default CSS file */
body {
font-family: "Roboto";
font-family: monospace;
text-align: justify;
background-color: #373636;
color: whitesmoke;
font-size: 1.15em;
}
ul {
width: 55%;
display: block;
}
ol {
width: 55%;
display: block;
}
li {
margin-top: 1%;
}
p {
max-width: 90%;
margin-top: 1%;
margin-left: 3%;
margin-right: 3%;
}
img {
float: left;
top: 5%;
left: 5%;
max-width: 60%;
display: inline;
padding-right: 2%;
}
.inline {
display: inline;
}
.link-button:focus {
outline: none;
}
.link-button:active {
color: red;
}
code {
font-family: monospace;
border-radius: 5%;
padding: 1%;
border-color: darkgray;
font-size: .9em;
}
a {
color: #C6D9FE;
padding: 1%;
}
ul li {
color: #C6D9FE;
}
iframe {
background: aliceblue;
border-radius: 15%;
margin: 2%;
}
.container {
width: 36vw;
height: 64vh;
display: inline-block;
margin: 0;
padding: 0;
}
.editor-toolbar a {
display: inline-block;
text-align: center;
text-decoration: none !important;
color: whitesmoke !important;
}
#feed {
width: 60vw;
height: unset !important;
margin: 0;
padding: 0;
float: right;
background-color: #373636;
color: whitesmoke;
border: #C6D9FE solid 1px;
}
.thread-post,
.thread {
color: whitesmoke !important;
background-color: #373636;
border: 1px solid darkgray;
font-size: inherit;
padding-top: 1%;
padding-bottom: 1%;
}
.thread-post {
margin-left: 4%;
}
input {
text-align: center;
color: whitesmoke !important;
background-color: #373636;
border: 1px solid darkgray;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
padding-top: 1%;
padding-bottom: 1%;
}
.thread-hash {
text-align: right;
color: whitesmoke !important;
background-color: #373636;
border: 1px solid darkgray;
font-size: inherit;
padding-top: 1%;
padding-bottom: 1%;
}
.post-body {
text-align: left;
color: whitesmoke !important;
font-size: inherit;
padding-top: 1%;
padding-bottom: 1%;
}
#show {display:none; }
#hide {display:block; }
#show:target {display: block; }
#hide:target {display: none; }
#shownav {display:none; }
#hidenav {display:block; }
#shownav:target {display: block; }
#hidenav:target {display: none; }
#navbar {
float: right;
width: 15%;
}
#returnhome {
font-size: xxx-large;
display: inline;
}
h1 {
display: inline;
}

View File

@ -0,0 +1,32 @@
#!/bin/bash
TORSOCKS=$(which torsocks)
#if [ -f "${TORSOCKS}" ]; then
# . "${TORSOCKS}" on
#fi
if [ -z $version ]; then
version="$(curl -s https://aus1.torproject.org/torbrowser/update_3/release/downloads.json | jq -r ".version")"
fi
if [ -z $locale ]; then
locale="ALL" # mention your locale. default = ALL
fi
if [ ! -f ./tor.keyring ]; then
gpg --auto-key-locate nodefault,wkd --locate-keys torbrowser@torproject.org
gpg --output ./tor.keyring --export torbrowser@torproject.org
fi
if [ ! -f "tor-browser-linux64-${version}_${locale}.exe" ]; then
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/torbrowser-install-win64-${version}_${locale}.exe"
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/torbrowser-install-win64-${version}_${locale}.exe.asc"
fi
gpgv --keyring ./tor.keyring "torbrowser-install-win64-${version}_${locale}.exe.asc" "torbrowser-install-win64-${version}_${locale}.exe"
#tar xvJf "torbrowser-install-win64-${version}_${locale}.exe"
#for n in `seq 1 2000`; do echo $n; dd ibs=256 if="torbrowser-install-win64-${version}_${locale}.exe" count=2 skip=$n | file - ; done 2>/dev/null |less
#zip -FF "torbrowser-install-win64-${version}_${locale}.exe" --out extracted.zip
export WINEPREFIX=$(pwd)/../tmp
wine "torbrowser-install-win64-${version}_${locale}.exe" /S #/D .
cp -vr "$WINEPREFIX/drive_c/users/idk/Desktop/Tor Browser/" "Tor Browser"

28
etc/scripts/torbrowser.sh Executable file
View File

@ -0,0 +1,28 @@
#!/bin/bash
TORSOCKS=$(which torsocks)
if [ -f "${TORSOCKS}" ]; then
. "${TORSOCKS}" on
echo ""
fi
if [ -z $version ]; then
version="$(curl -s https://aus1.torproject.org/torbrowser/update_3/release/downloads.json | jq -r ".version")"
fi
if [ -z $locale ]; then
locale="ALL" # mention your locale. default = ALL
fi
if [ ! -f ./tor.keyring ]; then
gpg --auto-key-locate nodefault,wkd --locate-keys torbrowser@torproject.org
gpg --output ./tor.keyring --export torbrowser@torproject.org
fi
if [ ! -f "tor-browser-linux64-${version}_${locale}.tar.xz" ]; then
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/tor-browser-linux64-${version}_${locale}.tar.xz"
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/tor-browser-linux64-${version}_${locale}.tar.xz.asc"
fi
gpgv --keyring ./tor.keyring "tor-browser-linux64-${version}_${locale}.tar.xz.asc" "tor-browser-linux64-${version}_${locale}.tar.xz"
tar xvJf "tor-browser-linux64-${version}_${locale}.tar.xz"

21
fedora-docker.sh Executable file
View File

@ -0,0 +1,21 @@
#! /usr/bin/env sh
. ./config.sh
dnf -y update
dnf -y install temurin-19-jdk
jpackage --verbose \
--type rpm \
--linux-menu-group "Network;WebBrowser;P2P" \
--linux-app-category "Network" \
--linux-package-deps "firefox|chromium|brave|firefox-esr|librewolf|icecat" \
--linux-shortcut \
--license-file LICENSE.md \
--name i2pbrowser \
--app-version "$GITHUB_TAG" \
--icon src/icon.png \
--input src/build \
--main-jar i2pfirefox.jar \
--main-class net.i2p.i2pfirefox.I2PBrowser
ls *.rpm

7
fedora.sh Executable file
View File

@ -0,0 +1,7 @@
#! /usr/bin/env sh
. ./config.sh
docker build -f Dockerfile.fedora -t eyedeekay/i2p.plugins.firefox.fedora .
docker rm -f i2pbrowser-fedora
docker run --name i2pbrowser-fedora eyedeekay/i2p.plugins.firefox.fedora
docker cp i2pbrowser-fedora:/src/i2p.plugins.firefox/i2pbrowser-${GITHUB_TAG}-1.x86_64.rpm .

5
gngr.sh Executable file
View File

@ -0,0 +1,5 @@
#! /usr/bin/env sh
rm lib/jars/gngr.jar
mkdir -p lib/jars/
wget -c -O lib/jars/gngr.jar https://github.com/gngrOrg/gngr/releases/download/v0.3.16/gngr-0.3.16.jar

BIN
i2p.plugins.firefox.torrent Normal file

Binary file not shown.

BIN
i2plogo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

1192
index.html Executable file

File diff suppressed because it is too large Load Diff

8
javadoc.sh Executable file
View File

@ -0,0 +1,8 @@
#! /usr/bin/env bash
~/.cargo/bin/lojidoc src/java/net/i2p/i2pfirefox/ -s -l > report.log
~/.cargo/bin/lojidoc -c src/java/net/i2p/i2pfirefox/ -s
mv -v generated/net/i2p/i2pfirefox/*.md ./docs/
rm -rf generated
git add ./*.md

11
osx-dmg.sh Executable file
View File

@ -0,0 +1,11 @@
#! /usr/bin/env sh
. ./config.sh
jpackage \
--verbose \
--type dmg \
--name i2pbrowser \
--app-version "$GITHUB_TAG" \
--icon src/icon.icns \
--input src/build \
--main-jar i2pfirefox.jar \
--main-class net.i2p.i2pfirefox.I2PBrowser

61
packages.sh Executable file
View File

@ -0,0 +1,61 @@
#! /usr/bin/env sh
. ./config.sh
github-release download --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--name "i2pfirefox.jar"
echo "Downloaded jar"
github-release download --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--name "i2pfirefox.zip"
echo "Downloaded freestanding zip"
github-release download --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--name "i2pbrowser.zip"
echo "Downloaded jpackage zip"
github-release download --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--name "i2pbrowser_${GITHUB_TAG}_amd64.deb"
echo "Downloaded debian package"
github-release download --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--name "i2pbrowser-${GITHUB_TAG}-1.x86_64.rpm"
echo "Downloaded fedora package"
github-release download --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--name "i2pbrowser.msi"
echo "Downloaded MSI package"
github-release download --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--name "i2pbrowser.exe"
echo "Downloaded EXE package"
github-release download --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--name "i2pbrowser-portable.zip"
echo "Downloaded Windows ZIP package"
echo "Sums for release ${GITHUB_TAG}" | tee RELEASES.md
echo "==============================" | tee -a RELEASES.md
echo "" | tee -a RELEASES.md
echo "- [$(sha256sum i2pfirefox.jar)](https://github.com/${GITHUB_USER}/${GITHUB_REPO}/releases/download/${GITHUB_TAG}/i2pfirefox.jar)" | tee -a RELEASES.md
echo "- [$(sha256sum i2pfirefox.zip)](https://github.com/${GITHUB_USER}/${GITHUB_REPO}/releases/download/${GITHUB_TAG}/i2pfirefox.zip)" | tee -a RELEASES.md
echo "- [$(sha256sum i2pbrowser.zip)](https://github.com/${GITHUB_USER}/${GITHUB_REPO}/releases/download/${GITHUB_TAG}/i2pbrowser.zip)" | tee -a RELEASES.md
echo "- [$(sha256sum i2pbrowser_${GITHUB_TAG}_amd64.deb)](https://github.com/${GITHUB_USER}/${GITHUB_REPO}/releases/download/${GITHUB_TAG}/i2pbrowser_${GITHUB_TAG}_amd64.deb)" | tee -a RELEASES.md
echo "- [$(sha256sum i2pbrowser-${GITHUB_TAG}-1.x86_64.rpm)](https://github.com/${GITHUB_USER}/${GITHUB_REPO}/releases/download/${GITHUB_TAG}/i2pbrowser-${GITHUB_TAG}-1.x86_64.rpm)" | tee -a RELEASES.md
echo "- [$(sha256sum i2pbrowser.msi)](https://github.com/${GITHUB_USER}/${GITHUB_REPO}/releases/download/${GITHUB_TAG}/i2pbrowser.msi)" | tee -a RELEASES.md
echo "- [$(sha256sum i2pbrowser.exe)](https://github.com/${GITHUB_USER}/${GITHUB_REPO}/releases/download/${GITHUB_TAG}/i2pbrowser.exe)" | tee -a RELEASES.md
echo "- [$(sha256sum i2pbrowser-portable.zip)](https://github.com/${GITHUB_USER}/${GITHUB_REPO}/releases/download/${GITHUB_TAG}/i2pbrowser-portable.zip)" | tee -a RELEASES.md
echo "" | tee -a RELEASES.md
git add RELEASES.md
edgar
git commit -am "Update releases page"
git push --all

View File

@ -0,0 +1,842 @@
Copyright 2022 idk (hankhill19580@gmail.com)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
========================================================================
Includes code from zzzot:
Copyright 2010 zzz (zzz@mail.i2p)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
========================================================================
Includes code from Jetty 5.1.15:
Copyright 199-2004 Mort Bay Consulting Pty. Ltd.
------------------------------------------------------------------------
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
MIT License
Copyright (c) 2019 idk
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
HTTPS Everwyhere:
Copyright © 2010-2012 Mike Perry <mikeperry@fscked.org>
Peter Eckersley <pde@eff.org>
and many others
(Licensed GPL v2+)
Incorporating code from NoScript,
Copyright © 2004-2007 Giorgio Maone <g.maone@informaction.com>
Licensed GPL v2+
Incorporating code from Convergence
Copyright © Moxie Marlinspike
Licensed GPL v3+
Incorporating code from URI.js
Copyright © Rodney Rehm
Licensed MIT, GPL V3
Incorporating code from js-lru
Copyright © 2010 Rasmus Andersson
Licensed MIT
The build system incorporates code from Python 2.6,
Copyright © 2001-2006 Python Software Foundation
Python Software Foundation License Version 2
Net License: GPL v3+ (complete tree)
GPL v2+ (if Moxie's NSS.js is absent)
Text of MIT License:
====================
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
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. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
MIT License
Copyright (c) 2019 idk
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
HTTPS Everwyhere:
Copyright © 2010-2012 Mike Perry <mikeperry@fscked.org>
Peter Eckersley <pde@eff.org>
and many others
(Licensed GPL v2+)
Incorporating code from NoScript,
Copyright © 2004-2007 Giorgio Maone <g.maone@informaction.com>
Licensed GPL v2+
Incorporating code from Convergence
Copyright © Moxie Marlinspike
Licensed GPL v3+
Incorporating code from URI.js
Copyright © Rodney Rehm
Licensed MIT, GPL V3
Incorporating code from js-lru
Copyright © 2010 Rasmus Andersson
Licensed MIT
The build system incorporates code from Python 2.6,
Copyright © 2001-2006 Python Software Foundation
Python Software Foundation License Version 2
Net License: GPL v3+ (complete tree)
GPL v2+ (if Moxie's NSS.js is absent)
Text of MIT License:
====================
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
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. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

View File

@ -1,7 +1,5 @@
clientApp.0.main=net.i2p.i2pfirefox.I2PFirefoxController
clientApp.0.name=I2PFirefox
clientApp.0.args=-d $PLUGIN start
clientApp.0.stopargs=-d $PLUGIN stop
clientApp.0.main=net.i2p.i2pfirefox.I2PBrowserPlugin
clientApp.0.name=I2PBrowserPlugin
clientApp.0.delay=0
clientApp.0.startOnLoad=true
# we also use i2p.jar and i2ptunnel.jar, they are in the standard router classpath

3
plugin/i2pbrowser.cmd Normal file
View File

@ -0,0 +1,3 @@
:; dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd); java -cp "$dir"/lib/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser; exit $?
@ECHO OFF
java -cp %cd%/lib/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser

View File

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<!--
Configure a custom context for the eepsite.
This context contains only a ServletContextHandler with a default servlet
to serve static html files and images.
-->
<Configure class="org.eclipse.jetty.servlet.ServletContextHandler">
<Set name="contextPath">/</Set>
<Set name="resourceBase">$PLUGIN/eepsite/docroot/</Set>
<Call name="setInitParameter">
<Arg>cacheControl</Arg>
<Arg>max-age=3600,public</Arg>
</Call>
<Call name="addServlet">
<Arg>net.i2p.servlet.I2PDefaultServlet</Arg>
<Arg>/</Arg>
</Call>
</Configure>

View File

@ -1,36 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<!--
Configure a custom context for the eepsite.
* CGI Servlet.
*
* The cgi bin directory can be set with the "cgibinResourceBase" init parameter
* or it will default to the resource base of the context.
*
* The "commandPrefix" init parameter may be used to set a prefix to all
* commands passed to exec. This can be used on systems that need assistance to
* execute a particular file type. For example on windows this can be set to
* "perl" so that perl scripts are executed.
*
* The "Path" init param is passed to the exec environment as PATH. Note: Must
* be run unpacked somewhere in the filesystem.
*
* Any initParameter that starts with ENV_ is used to set an environment
* variable with the name stripped of the leading ENV_ and using the init
* parameter value.
-->
<Configure class="org.eclipse.jetty.servlet.ServletContextHandler">
<Set name="contextPath">/cgi-bin</Set>
<Set name="resourceBase">$PLUGIN/eepsite/cgi-bin/</Set>
<Call name="setInitParameter">
<Arg>Path</Arg>
<Arg>/usr/local/bin:/bin:/usr/bin</Arg>
</Call>
<Call name="addServlet">
<Arg>org.eclipse.jetty.servlets.CGI</Arg>
<Arg>/</Arg>
</Call>
</Configure>

View File

@ -1,21 +0,0 @@
#
# This file defines users passwords and roles for a HashUserRealm
#
# The format is
# <username>: <password>[,<rolename> ...]
#
# Passwords may be clear text, obfuscated or checksummed. The class
# org.mortbay.util.Password should be used to generate obfuscated
# passwords or password checksums
#
# If DIGEST Authentication is used, the password must be in a recoverable
# format, either plain text or OBF:.
#
jetty: MD5:164c88b302622e17050af52c89945d44,user
admin: CRYPT:ad1ks..kc.1Ug,server-administrator,content-administrator,admin
other: OBF:1xmk1w261u9r1w1c1xmq
plain: plain
user: password
# This entry is for digest auth. The credential is a MD5 hash of username:realmname:password
digest: MD5:6e120743ad67abfbc385bc2bb754e297

View File

@ -1,408 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- ===================================================================== -->
<!-- This file contains the default descriptor for web applications. -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- The intent of this descriptor is to include jetty specific or common -->
<!-- configuration for all webapps. If a context has a webdefault.xml -->
<!-- descriptor, it is applied before the contexts own web.xml file -->
<!-- -->
<!-- A context may be assigned a default descriptor by: -->
<!-- + Calling WebApplicationContext.setDefaultsDescriptor -->
<!-- + Passed an arg to addWebApplications -->
<!-- -->
<!-- This file is used both as the resource within the jetty.jar (which is -->
<!-- used as the default if no explicit defaults descriptor is set) and it -->
<!-- is copied to the etc directory of the Jetty distro and explicitly -->
<!-- by the jetty.xml file. -->
<!-- -->
<!-- ===================================================================== -->
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
metadata-complete="true"
version="2.5">
<description>
Default web.xml file.
This file is applied to a Web application before it's own WEB_INF/web.xml file
</description>
<!-- ==================================================================== -->
<!-- Context params to control Session Cookies -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- UNCOMMENT TO ACTIVATE
<context-param>
<param-name>org.eclipse.jetty.servlet.SessionDomain</param-name>
<param-value>127.0.0.1</param-value>
</context-param>
<context-param>
<param-name>org.eclipse.jetty.servlet.SessionPath</param-name>
<param-value>/</param-value>
</context-param>
<context-param>
<param-name>org.eclipse.jetty.servlet.MaxAge</param-name>
<param-value>-1</param-value>
</context-param>
-->
<context-param>
<param-name>org.eclipse.jetty.webapp.NoTLDJarPattern</param-name>
<param-value>start.jar|ant-.*\.jar|dojo-.*\.jar|jetty-.*\.jar|jsp-api-.*\.jar|junit-.*\.jar|servlet-api-.*\.jar|dnsns\.jar|rt\.jar|jsse\.jar|tools\.jar|sunpkcs11\.jar|sunjce_provider\.jar|xerces.*\.jar</param-value>
</context-param>
<!-- ==================================================================== -->
<!-- The default servlet. -->
<!-- This servlet, normally mapped to /, provides the handling for static -->
<!-- content, OPTIONS and TRACE methods for the context. -->
<!-- The following initParameters are supported: -->
<!-- -->
<!-- acceptRanges If true, range requests and responses are -->
<!-- supported -->
<!-- -->
<!-- dirAllowed If true, directory listings are returned if no -->
<!-- welcome file is found. Else 403 Forbidden. -->
<!-- -->
<!-- welcomeServlets If true, attempt to dispatch to welcome files -->
<!-- that are servlets, if no matching static -->
<!-- resources can be found. -->
<!-- -->
<!-- redirectWelcome If true, redirect welcome file requests -->
<!-- else use request dispatcher forwards -->
<!-- -->
<!-- gzip If set to true, then static content will be served-->
<!-- as gzip content encoded if a matching resource is -->
<!-- found ending with ".gz" -->
<!-- -->
<!-- resoureBase Can be set to replace the context resource base -->
<!-- -->
<!-- relativeResourceBase -->
<!-- Set with a pathname relative to the base of the -->
<!-- servlet context root. Useful for only serving -->
<!-- static content from only specific subdirectories. -->
<!-- -->
<!-- useFileMappedBuffer -->
<!-- If set to true (the default), a memory mapped -->
<!-- file buffer will be used to serve static content -->
<!-- when using an NIO connector. Setting this value -->
<!-- to false means that a direct buffer will be used -->
<!-- instead. If you are having trouble with Windows -->
<!-- file locking, set this to false. -->
<!-- -->
<!-- cacheControl If set, all static content will have this value -->
<!-- set as the cache-control header. -->
<!-- -->
<!-- maxCacheSize Maximum size of the static resource cache -->
<!-- -->
<!-- maxCachedFileSize Maximum size of any single file in the cache -->
<!-- -->
<!-- maxCachedFiles Maximum number of files in the cache -->
<!-- -->
<!-- cacheType "nio", "bio" or "both" to determine the type(s) -->
<!-- of resource cache. A bio cached buffer may be used-->
<!-- by nio but is not as efficient as a nio buffer. -->
<!-- An nio cached buffer may not be used by bio. -->
<!-- -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
<init-param>
<param-name>acceptRanges</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>dirAllowed</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>welcomeServlets</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>redirectWelcome</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>maxCacheSize</param-name>
<param-value>256000000</param-value>
</init-param>
<init-param>
<param-name>maxCachedFileSize</param-name>
<param-value>10000000</param-value>
</init-param>
<init-param>
<param-name>maxCachedFiles</param-name>
<param-value>1000</param-value>
</init-param>
<init-param>
<param-name>cacheType</param-name>
<param-value>both</param-value>
</init-param>
<init-param>
<param-name>gzip</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cacheControl</param-name>
<param-value>max-age=3600,public</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<!-- ==================================================================== -->
<!-- JSP Servlet -->
<!-- This is the jasper JSP servlet from the jakarta project -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- The JSP page compiler and execution servlet, which is the mechanism -->
<!-- used by Glassfish to support JSP pages. Traditionally, this servlet -->
<!-- is mapped to URL patterh "*.jsp". This servlet supports the -->
<!-- following initialization parameters (default values are in square -->
<!-- brackets): -->
<!-- -->
<!-- checkInterval If development is false and reloading is true, -->
<!-- background compiles are enabled. checkInterval -->
<!-- is the time in seconds between checks to see -->
<!-- if a JSP page needs to be recompiled. [300] -->
<!-- -->
<!-- compiler Which compiler Ant should use to compile JSP -->
<!-- pages. See the Ant documenation for more -->
<!-- information. [javac] -->
<!-- -->
<!-- classdebuginfo Should the class file be compiled with -->
<!-- debugging information? [true] -->
<!-- -->
<!-- classpath What class path should I use while compiling -->
<!-- generated servlets? [Created dynamically -->
<!-- based on the current web application] -->
<!-- Set to ? to make the container explicitly set -->
<!-- this parameter. -->
<!-- -->
<!-- development Is Jasper used in development mode (will check -->
<!-- for JSP modification on every access)? [true] -->
<!-- -->
<!-- enablePooling Determines whether tag handler pooling is -->
<!-- enabled [true] -->
<!-- -->
<!-- fork Tell Ant to fork compiles of JSP pages so that -->
<!-- a separate JVM is used for JSP page compiles -->
<!-- from the one Tomcat is running in. [true] -->
<!-- -->
<!-- ieClassId The class-id value to be sent to Internet -->
<!-- Explorer when using <jsp:plugin> tags. -->
<!-- [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93] -->
<!-- -->
<!-- javaEncoding Java file encoding to use for generating java -->
<!-- source files. [UTF-8] -->
<!-- -->
<!-- keepgenerated Should we keep the generated Java source code -->
<!-- for each page instead of deleting it? [true] -->
<!-- -->
<!-- logVerbosityLevel The level of detailed messages to be produced -->
<!-- by this servlet. Increasing levels cause the -->
<!-- generation of more messages. Valid values are -->
<!-- FATAL, ERROR, WARNING, INFORMATION, and DEBUG. -->
<!-- [WARNING] -->
<!-- -->
<!-- mappedfile Should we generate static content with one -->
<!-- print statement per input line, to ease -->
<!-- debugging? [false] -->
<!-- -->
<!-- -->
<!-- reloading Should Jasper check for modified JSPs? [true] -->
<!-- -->
<!-- suppressSmap Should the generation of SMAP info for JSR45 -->
<!-- debugging be suppressed? [false] -->
<!-- -->
<!-- dumpSmap Should the SMAP info for JSR45 debugging be -->
<!-- dumped to a file? [false] -->
<!-- False if suppressSmap is true -->
<!-- -->
<!-- scratchdir What scratch directory should we use when -->
<!-- compiling JSP pages? [default work directory -->
<!-- for the current web application] -->
<!-- -->
<!-- tagpoolMaxSize The maximum tag handler pool size [5] -->
<!-- -->
<!-- xpoweredBy Determines whether X-Powered-By response -->
<!-- header is added by generated servlet [false] -->
<!-- -->
<!-- If you wish to use Jikes to compile JSP pages: -->
<!-- Set the init parameter "compiler" to "jikes". Define -->
<!-- the property "-Dbuild.compiler.emacs=true" when starting Jetty -->
<!-- to cause Jikes to emit error messages in a format compatible with -->
<!-- Jasper. -->
<!-- If you get an error reporting that jikes can't use UTF-8 encoding, -->
<!-- try setting the init parameter "javaEncoding" to "ISO-8859-1". -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<servlet id="jsp">
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>DEBUG</param-value>
</init-param>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<!--
<init-param>
<param-name>classpath</param-name>
<param-value>?</param-value>
</init-param>
-->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspf</url-pattern>
<url-pattern>*.jspx</url-pattern>
<url-pattern>*.xsp</url-pattern>
<url-pattern>*.JSP</url-pattern>
<url-pattern>*.JSPF</url-pattern>
<url-pattern>*.JSPX</url-pattern>
<url-pattern>*.XSP</url-pattern>
</servlet-mapping>
<!-- ==================================================================== -->
<!-- Dynamic Servlet Invoker. -->
<!-- This servlet invokes anonymous servlets that have not been defined -->
<!-- in the web.xml or by other means. The first element of the pathInfo -->
<!-- of a request passed to the envoker is treated as a servlet name for -->
<!-- an existing servlet, or as a class name of a new servlet. -->
<!-- This servlet is normally mapped to /servlet/* -->
<!-- This servlet support the following initParams: -->
<!-- -->
<!-- nonContextServlets If false, the invoker can only load -->
<!-- servlets from the contexts classloader. -->
<!-- This is false by default and setting this -->
<!-- to true may have security implications. -->
<!-- -->
<!-- verbose If true, log dynamic loads -->
<!-- -->
<!-- * All other parameters are copied to the -->
<!-- each dynamic servlet as init parameters -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- Uncomment for dynamic invocation
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>org.eclipse.jetty.servlet.Invoker</servlet-class>
<init-param>
<param-name>verbose</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>nonContextServlets</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>dynamicParam</param-name>
<param-value>anyValue</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping>
-->
<!-- ==================================================================== -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!-- ==================================================================== -->
<!-- Default MIME mappings -->
<!-- The default MIME mappings are provided by the mime.properties -->
<!-- resource in the org.mortbay.jetty.jar file. Additional or modified -->
<!-- mappings may be specified here -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- UNCOMMENT TO ACTIVATE
<mime-mapping>
<extension>mysuffix</extension>
<mime-type>mymime/type</mime-type>
</mime-mapping>
-->
<!-- ==================================================================== -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- ==================================================================== -->
<locale-encoding-mapping-list>
<locale-encoding-mapping><locale>ar</locale><encoding>ISO-8859-6</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>be</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>bg</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>ca</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>cs</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>da</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>de</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>el</locale><encoding>ISO-8859-7</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>en</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>es</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>et</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>fi</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>fr</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>hr</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>hu</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>is</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>it</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>iw</locale><encoding>ISO-8859-8</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>ja</locale><encoding>Shift_JIS</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>ko</locale><encoding>EUC-KR</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>lt</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>lv</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>mk</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>nl</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>no</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>pl</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>pt</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>ro</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>ru</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>sh</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>sk</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>sl</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>sq</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>sr</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>sv</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>tr</locale><encoding>ISO-8859-9</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>uk</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>zh</locale><encoding>GB2312</encoding></locale-encoding-mapping>
<locale-encoding-mapping><locale>zh_TW</locale><encoding>Big5</encoding></locale-encoding-mapping>
</locale-encoding-mapping-list>
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
</web-app>

View File

@ -1,360 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>I2P Firefox | HELP</title>
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABwlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzlhbzeBbzfRbzihbzkxbzdRbzbBbzhhbzjxbzgxYDAQDzbxbzehbzgBbzchbziBbzfxYHAwEJBAHzjBYVCwIFAwAxGQQZDgIVCQINBwFuOQoeEAMcDgIQCQEpFgTwjBbphBXubBW/ZBGkTQ9yPwpVMAhWKAglEgPxgRbwkxXfdxTdaxTKbBLKZBLAahGiYw6IPQxkMQlDJwbqehXocRXnaBXdghTgZxTWfhPWdxPLcRK7XhHCWBG6WBG3URCZWw6KRw2YRQ2IUgyBQQtIJAdJLAY3HAUkFQPxiBbvdhbpfRXscRXcfhTWZRPKexLCeBK5cBG7bBG7ZxG8WBG0XBCsUQ+hWw6hTA6ITwx7OQt0OAtxRApuPQprMwpgNwhbNQhPKQdEHwY6IAUsGQTrjRXpjBXeiRThgRTgfRTibhS0aRCsZxCYTQ6TTQ2RTQ19SwtPLge07EnRAAAAJHRSTlMABK+M1/Xz7YlpJRoMBtzNyIRWT+T7tJBwbl86NRAO5cTCtYFtLGI6AAAEcklEQVRYw5XXd0PTQBQA8LSltUCVlqGIuB9gWScFUxtKF6MLREBkyFC2gHvvvff6vt57ubYkTWr8/ZGmJXfk3ch7kcxU1rjt3loAqKutsvuqK6X/0ugoA50yxwGrrT31e8BQWf1BC80PuV2Qx/o4KHD5PFJptvJdoIpnntydHziNbtx98joEql3ltlLtK7xAwi8m2nUm0qKPoxXm7RucgHrXhtoMDKX6ATmrzW7fASj26ISZK49igPYZhrHbTsOWHuzp6fmS2U5f6TEw+IIBZ99t0H4vDd0y3uzssAzyWpuhZZqVvUU92OwU/Wg7eiXjebux0V66B30UFP/mIIW6SLcZPCEMftaOxOAUjYO2fTVwb4dOkrcM0Cx9GcoyiF06udPQZeAaNPPvxHu+1kkWQTWGX0Yu83BYolPjGkbhrNgxAEdw8VzoUL1WAMnf8AsNByQ6tC6E+Y/ewjCU4/wtdau+ykCCa/zLU4X6etmts4RRlue3H67/aEBYDYoONgKBnwwQGwvoRXFfHBIdHMf199EvbIOQ8X9nQPr9RT7gmnRL5CDu31SrMM5AGL6fC2a1tVgKd7e6uffjxS05UWpFIuKTjbYYwJnYLyF8ep1rEs6EIIcp4nOzycg5/qc92P4AP+m72ixcZKCnPGw2chWnslEs4mddOeeLO2Cs//yP8eYuPZwIh4jgdj6CBBhhQZA3P+liuK3GUMk/Qi05GIEJ5U2LTpz/WinV8GM2HxhGYEaeadbK8h9rJB8/rvsFjMCUvOLXWqe1dIwfk6eEJIMSek9pJfHBIlXx49lW4aUMpdxs1bjJf6qSDvNjR04YSpGfd2gxgMNSHZ+ETmGMQUnsza+xkc4CXLUSrsOTwlMZSmNBJm89ezgnru8THYROC9tghSzDHzVphnIdtKsWwCp2jxrwDupwEFmbajIIFsnL1ICf1dI0LpwgU2DZIl5/g6YRM9JEDwmDZQt4/T1+ckxy8+NkG5oF6+YoZH7io82UUUsIBpZRgwxuJtrOcRqCFctjKPJmiLazhCUZ5T7cyhYl8PpLWLiJR1q0k9sCixRlFa9Pi0daI+bFAb41ImANm5rv4AYwAiw+KYbH3d1zFtdQX6qbpDCCfGJ5Hwg8UKyMHotOB8jIcD6xeFyYWfzrwX82Vt79vuUXMK+4ROnrxpm8ni3dWH63sXS9NW8Gk+vxXHlM6b2/xLBtbSS7WjQovXs0BUa/Yvrvnzfp3REFhmDz4lPBdBrlB806Z3EKj9h0RdYwM1s4F7u0ZjRFFmkAnEuzHm41aZyhB4eu5N5HpYxJD+Oa8ZumMtFhWOrGmHEHmvhFqWtcbCciMhSb9xfciYti26zcjxnM5uipnOm0cblPbPsA9RXdRCF3Po4Bcpi9N1U7AYWDui7UInhgpReQs6HES9dRIJEw7NxamA+T0TAQb4W1175InHcRREy5P5mNW3ntIx6fCwoikUiCQZ7LfUj6t4P1ZWBoT71HsuiA0ct3o/RfKqt99qraOsyfXru7xvT1/y8HBiJNY8d/vwAAAABJRU5ErkJggg==">
<style type="text/css">
html,
body {
min-width: 800px;
min-height: 100%;
line-height: 1.4;
font-size: 14pt;
font-family: "Droid Sans", "Open Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", "DejaVu Sans", Helvetica, sans-serif;
color: #ccc;
background: #111;
overflow-x: hidden;
scrollbar-color: #222 #111;
}
@supports (background-blend-mode: overlay) {
html, body {
background: repeating-linear-gradient(45deg, #333, #111 2px, #111 3px),
repeating-linear-gradient(135deg, #444, #333 2px, #222 3px) #111;
background-blend-mode: overlay, normal;
background-size: 100% 100%, 100% 100%;
background-attachment: fixed;
}
}
::selection,
::-moz-selection {
text-shadow: none;
background: #431;
color: #fff;
}
code::-moz-selection,
#b64::-moz-selection,
code::selection,
#b64::selection {
background: #150;
color: #fff;
}
p,
li,
code {
text-shadow: 0 1px 1px #000;
}
#container {
padding: 5% 15%;
}
#panel {
padding: 20px 40px 15px;
font-size: 85%;
text-align: justify;
border: 1px solid #555;
box-shadow: inset 0 0 0 1px #111, inset 0 0 2px 1px #444, 0 0 2px 2px #000;
background: #181818;
background: repeating-linear-gradient(to right, rgba(255, 255, 255, .05), rgba(0, 0, 0, .08) 2px),
repeating-linear-gradient(to bottom, #222, #111 2px);
background-blend-mode: overlay;
will-change: transform;
}
@supports not (-moz-appearance: none) {
#panel {
background: repeating-linear-gradient(to bottom, #222, #111 2px);
}
}
#sitename,
#sitename:hover,
#sitename:focus {
margin: -8px 0 -14px;
display: inline-block;
font-size: 500%;
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
}
#sitename::before {
margin-top: 4px;
display: inline-block;
content: "";
width: 68px;
height: 56px;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABdFBMVEUAAADOzs7g4ODb29vZ2dnd3d3T09Pi4uLq6urr6+vX19fk5OTl5eXm5ubp6ene3t7h4eHk5OTn5+fo6Ojk5OTm5ubq6urp6em7u7v///8dEgrX19fg4OBSPTF/W0VsTzxKNywgFg/k5OTS0tLAv7/p6Oh3VkHv7+9iRzjNzc2EX0hyUz9aQjRnSzra2trJycn19fXGxsby8vJfRjXDw8P7+/vc3Nw/MScmGxOIYUlEMyn4+Pg6KyItIRoxJRzq6up6WUXPz8+KZEw0KCA8LSWwrau/t7FgV1JFPDe5uLe3tLKzsbC6raStopqZlZSIg4GgjICEa1zc1dHDubOgnZuyoZapmY+mk4eVioRtVEXCvbqsqaiFgH2AenZ1b2qKdWdpYV5RR0I8Miy9saqxqaWSc192ZVrUzsumo6Gypp6jmpSSg3mXemluZ2JjXVhZUk7j3tnLwLm9ubech3qZgXJ/ZVNnWE9wXE5fS0A+NjGNiYbSycJQXgkWAAAAGHRSTlMA/NAH6uD4vEk+7qymkGPbwp96b7GFNSKLdq62AAAFzUlEQVRo3qzTSW/aQBgG4DE4G82etH1HbWIUDWCRRIGAIyU9FCGB1BQkFrFeOBCIshzaZpX65wvGIeOBjMc0j82Bz2ZeZvmIss9by4G5obX15c1P5F0tbesag0ta09cXybv4qCdhY6ydH6q2GRvFHekrQfJ/NkNpe+x87fbU5b6Wt0OYvkpm90EDwKqNbHyqbL3KAGgLs00jGEgCGIx+KtNoA0guEP+WjwDW7WU99QoMONom/qxqALvKniopDyM0X2cqwIBuNq4sO4hgAaJqUQPavbgvtwzQlhRXn4HV4r7VGNIrSssDsN7uDHoM8F6moA7kd2cTzwMhr/HngavdmdWA+aDX+I1dl7tq4VY9oe6RMA+Uoi4FSql1H1VWkiaEJsav0aFI1FeCLjk/9YxLx6K224y6xptnaQUoRt1+0ZFa1Ici8IFMsZRGft+tRB2/B18M+8MxJj6OLti0ntbAMvsu0Qh1VLjqQ6Hy629pXyLKoE3bAFYWXqzTF5HXYifmzEmizCa3YZGhbggi9EViXHs4dkplQ6IOtjrRAW1DcEdf7Tu1zEuolTFk/oiLtA028ZcqXMCDYRsfK1oxpMrABuEd4WriHcrp2KXW5bhQMuQukOQbegGsdSjoUs69XfrNbcqhXMu1z8EkiocCI0E5jWGpQMeqh16ukZRPoER5hUGlzi+ZZ4DBuH7WUDRFFcq7NM07i45FTG8XrwdpFWilBE8W5cXMDl8opry1gC0youOPKSpStyK/JdaTqeAcIWeLGW5M0R6VqJgqbpAmthWwlKhvWfTNy7pJqTAZPjordH4gupIFHJsHSs6hO13cPBBFLImTTksp4GbUCovAs/iob3n4Wm2Un70CTGDJ7jLsiC6+KUhUus3Ujsyo10LI7Yj2vin6ciALyEG327gpPugnlDVlAU27mdPoiw+K6gGXsoAnMEI+AWHRSSJxrHglHsMSwGeyCSaWH499uJYFMGyRjclDdO0n4ER+jDbIOn6IuZcxP/qSGfxAgKzh55nbc8yXi7Oz8NRrIIc1MoecENv0F7C3E35TDnOjgDPuDqdj32M+7lgzbP9OvLmAf63ay2+iUBgF8AtlprU++m5PKAtpPxfdlJCQljSlk4k2oCa6cTU+omYWZhJrMotJ2r9+AhGBggjc/sTNXZwTicnV7/IUMWv8yKfx51/9Kdm64DFi3Mjv5ldvMnuMcwuOPhd0GgXd/u7b9WhWF0dMRCeyVlcaHJSOHQ5r45idAM9hyxs+9/VQGHDCzkCRgsUNp2kojHDKroBWyOM1d0EoDbhkjDALddoKLzsUBsPbcEYvgbHCaxaE9b0NR8IwVDBQHhSuS6kHYUNvyywDzcBfhdc8CAPcaWEJaAal1w+8gqwW4A3ydEwsn3PP687amEBjLgmvlu+Nu8AICtxfLa4L0Iu/Nr7m1Q4KCFXmMbA01wbcBUPTtwTt+WOiV38R3AU909fdDI7OgLnpsW558wctP38O1II/gete55YPrcyNXmiaUAaZqsvmir8bm+qGRQjN5HX0VdeIJ38wV0N6kVmCCLK8L9HPwsg2w/wPEMwSBm4t7ooaWWpEDxoLOwHeZdkqFt79sJtylBMbDAroqqpTILxvN9W4dmxqVyOM1KmWix8eNwIdJExlnb6WWWe0asrbvBNEFiOgvdA0PdNLe5NTmIDA4kqEjp5RT00zhFFiCcpAW89mqaboA9Wtw3EYmaTdoUnKQYsEIt6CKXCYdgBCmazUbabAd8Z2NBi7Llql3J/dhzi020xO9uHlpztEBskF6gKQ9tguIlyU8gYcNYHTBkSWQdXALo4cNwaowjIpCfkL3ru5TnxFQqq5HGUNABJZDgdCjgKzT4BQY/mca9iuJQeaPQK0CstvX8c2z7JvOgSgiwWfS9gXkMySXeZkSACEMiuuJlFygTNewGUcnjI+e1VJw2frVl26YF/i4FgSDESQIJ2X2Je6PK0cH31ziZWzK5bVf0D9anRc2+uqAAAAAElFTkSuQmCC) center center no-repeat;
background-size: 56px 56px;
opacity: 0.7;
filter: drop-shadow(0 0 3px rgba(0,0,0,.75));
}
hr.heading {
margin: -10px 0 15px;
height: 1px;
color: transparent;
border: none;
background: repeating-linear-gradient(to right, rgba(255, 255, 255, .05), rgba(0, 0, 0, .08) 2px),
linear-gradient(to right, #888, #666 20%, rgba(0, 0, 0, 0) 90%);
filter: drop-shadow(0 1px 1px #000);
animation: ease-out underline 1s forwards;
will-change: transform;
}
@keyframes underline {
from {
width: 0;
}
to {
width: 100%;
}
}
#v {
margin-left: -10px;
}
h2,
h3 {
color: #ccc;
text-shadow: 0 0 2px #181818, 0 3px 1px #000;
}
h2 {
margin-top: 10px;
}
h3 {
padding: 5px 0 0;
}
h2::first-letter,
h3::first-letter {
font-size: 114%;
}
a:link,
.urls li {
font-weight: bold;
text-decoration: none;
color: #c4ad9d;
outline: none;
}
#local {
font-weight: normal;
color: #bbb;
}
a:visited {
color: #a98770;
}
a:hover,
a:focus {
color: #e88b44;
}
code,
#b64 {
white-space: nowrap;
font-weight: bold;
font-family: "Droid Sans Mono", "Noto Mono", "DejaVu Sans Mono", "Lucida Console", monospace;
font-size: 90%;
color: #292;
-moz-user-select: all;
-webkit-user-select: all;
user-select: all;
}
#b64 {
margin-bottom: -5px;
width: 100%;
display: inline-block;
white-space: no-wrap;
overflow: hidden;
text-overflow: ellipsis;
}
#b64:focus {
white-space: normal;
word-break: break-all;
overflow: normal;
outline: none;
}
.warn {
margin-top: 18px;
padding: 15px 18px 15px 54px;
line-height: 1.2;
border: 1px solid #900;
border-radius: 4px;
box-shadow: inset 0 0 0 1px #000, inset 0 0 2px 1px #900, 0 0 2px 1px rgba(0, 0, 0, .2);
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhCAMAAAEaI3KMAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACbVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQECAgIDAAADAgIEBAQGBAQGBQUGBgYHAQAHBwcICAgJCQkKAQAKCgoLAQALCwsMCwsODg4PDw8QAQAQAgASAAASAwAVCwsaGhobDw8bExMbGxskHx8mJiYpAwAqKiotKysuAQAwLi4yMjI8HR08JiY9CAA/CAA/Pz9BQUFDQ0NKBwBLPDxLS0tTAwBhBABmZmZpAABpPT1tEABvEAB4RUV4WFh4a2uCBwCECACGhoaHeHiUAQCWFgCaFgCclZWkDgClVFSlb2+0lZW0tLS2FQC4BQC9vb3GGQDGxsbIVlbKWFjMFwDOCgDPfn7RFADUrKnV1dXWCgDWEgDWLR7YBATYEADYg4PZ2dnaAwPakozbEADbp6fbysrb29vezc3e1NTe3t7hDQDhIxjk5OTlb2nlcWvmCwDqwL7qysnq6urrCQDrDAPrDgbtAADtgIDv7+/wQkLwS0bxBgDxPTjzBADzhITzq6vz8/P1oJ/1qKf19fX2BAD209P51tb7AgD7HBv77+/7+/v8/Pz/AAD/DAz/amr/bm7/cnL/enr/goL/ior/k5P/lJT/mJj/m5v/o6P/q6v/s7P/t7f/uLj/u7v/vr7/w8P/xcX/yMj/y8v/09P/2Nj/29v/4+P/5OT/6en/6ur/6+v/8fH/8vL/9PT//Pz//f3////ZtbwoAAAAJXRSTlMAAwYMEhUYGyEkMDxCS1ppeISHkJacpairtMPP2Nvk5+3w8/n8UHR7egAAAp9JREFUGBmFwYlDi2EcB/BvB6lRjoxOS/1ykzPkFrmv3GdCyZEzLMRcrZdhjjG3MV4du/S2aU1puXn+Js87G/WWfD4I8W4FkMpaARgEwYAexAHQgFM1gbOPtAPThPUCQNxQyOb5w/Db2aYsKR4y62txgWglILosaDVkQxAS5p+HoK1NXhUC4qVxjccRYG/NYvZUcGQVF4uvreAMgrBeEAyTgNVlQb2QRkE9EaK+fFENhbQWToMOyO3++dPtJrQz2+lkmdnM6ZyJkJgN9+oYmzuZsbp7G2IQ0P+A+b7JZCooMJlMD8wH+oNLOaM7X8GtWlXBndedSQGSSztJRoiKekNpypcxUEh66X+RhA6i1rS0tKzpgfbI6/3q9RLaidvrbmTv3Hvj8NcoSbpEJyVpBP5IfORsfkIHm513ExEUucRuZ4xuMrt9SQR+yzhd+5kxYuxz7bkMBMQWWl+JokiiKL6yFsZCRmaziSMTZzYTuIRThmsCRwJ31XAsAQjP1ekqZFQh0+lyw5FeppSO5aVKy6AmpUFQitIs2rMwLQr/oaKdbW1t20iFbsVRyQdZCcWhG+rRF3w+33ufz3dhtBr/EpY057HH4/Ezv8fjeTwnKQxditQsbeA+5VP+xwZuqSYSXYjJ2OJyueq/HxpP2fu+1btcro0ZMegkloodDsfbH4wNo4kn2Y+3DoejmGKhED/8iM1mkxg3legNY0yy2WyHhw9AB4k5d6qrayQmm0+zmEyqqa6+k5OIvyJS8x5aLJZnzwNW0ornAU8tFsvDvNQIBEWnrzMajbdv3FS6fstoNK5Nj0ZAH9qh1+urrlQGZVJmZdCVKr1ev536gOtHRVqttvxE18q1Wm0R9QUGTth/9H/2j43HoBmbd+3u3q5N0wf/ApzdYLKMtOjLAAAAAElFTkSuQmCC) 12px center no-repeat, repeating-linear-gradient(to bottom, rgba(0, 0, 0, .5), rgba(64, 0, 0, .2) 2px), linear-gradient(to bottom, #222, #111);
background-size: 32px auto, 100% 100%, 100% 100%;
will-change: transform;
}
.emphasis {
margin-top: 4px;
display: inline-block;
line-height: 110%;
color: #900;
font-weight: bold;
}
ul {
margin-top: -10px;
}
ul#config {
list-style-type: none;
}
#config li {
padding: 10px 15px 5px 0;
position: relative;
}
#config li::before {
content: "";
display: inline-block;
width: 25px;
height: 20px;
position: absolute;
top: 12px;
left: -22px;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABwlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzlhbzeBbzfRbzihbzkxbzdRbzbBbzhhbzjxbzgxYDAQDzbxbzehbzgBbzchbziBbzfxYHAwEJBAHzjBYVCwIFAwAxGQQZDgIVCQINBwFuOQoeEAMcDgIQCQEpFgTwjBbphBXubBW/ZBGkTQ9yPwpVMAhWKAglEgPxgRbwkxXfdxTdaxTKbBLKZBLAahGiYw6IPQxkMQlDJwbqehXocRXnaBXdghTgZxTWfhPWdxPLcRK7XhHCWBG6WBG3URCZWw6KRw2YRQ2IUgyBQQtIJAdJLAY3HAUkFQPxiBbvdhbpfRXscRXcfhTWZRPKexLCeBK5cBG7bBG7ZxG8WBG0XBCsUQ+hWw6hTA6ITwx7OQt0OAtxRApuPQprMwpgNwhbNQhPKQdEHwY6IAUsGQTrjRXpjBXeiRThgRTgfRTibhS0aRCsZxCYTQ6TTQ2RTQ19SwtPLge07EnRAAAAJHRSTlMABK+M1/Xz7YlpJRoMBtzNyIRWT+T7tJBwbl86NRAO5cTCtYFtLGI6AAAEcklEQVRYw5XXd0PTQBQA8LSltUCVlqGIuB9gWScFUxtKF6MLREBkyFC2gHvvvff6vt57ubYkTWr8/ZGmJXfk3ch7kcxU1rjt3loAqKutsvuqK6X/0ugoA50yxwGrrT31e8BQWf1BC80PuV2Qx/o4KHD5PFJptvJdoIpnntydHziNbtx98joEql3ltlLtK7xAwi8m2nUm0qKPoxXm7RucgHrXhtoMDKX6ATmrzW7fASj26ISZK49igPYZhrHbTsOWHuzp6fmS2U5f6TEw+IIBZ99t0H4vDd0y3uzssAzyWpuhZZqVvUU92OwU/Wg7eiXjebux0V66B30UFP/mIIW6SLcZPCEMftaOxOAUjYO2fTVwb4dOkrcM0Cx9GcoyiF06udPQZeAaNPPvxHu+1kkWQTWGX0Yu83BYolPjGkbhrNgxAEdw8VzoUL1WAMnf8AsNByQ6tC6E+Y/ewjCU4/wtdau+ykCCa/zLU4X6etmts4RRlue3H67/aEBYDYoONgKBnwwQGwvoRXFfHBIdHMf199EvbIOQ8X9nQPr9RT7gmnRL5CDu31SrMM5AGL6fC2a1tVgKd7e6uffjxS05UWpFIuKTjbYYwJnYLyF8ep1rEs6EIIcp4nOzycg5/qc92P4AP+m72ixcZKCnPGw2chWnslEs4mddOeeLO2Cs//yP8eYuPZwIh4jgdj6CBBhhQZA3P+liuK3GUMk/Qi05GIEJ5U2LTpz/WinV8GM2HxhGYEaeadbK8h9rJB8/rvsFjMCUvOLXWqe1dIwfk6eEJIMSek9pJfHBIlXx49lW4aUMpdxs1bjJf6qSDvNjR04YSpGfd2gxgMNSHZ+ETmGMQUnsza+xkc4CXLUSrsOTwlMZSmNBJm89ezgnru8THYROC9tghSzDHzVphnIdtKsWwCp2jxrwDupwEFmbajIIFsnL1ICf1dI0LpwgU2DZIl5/g6YRM9JEDwmDZQt4/T1+ckxy8+NkG5oF6+YoZH7io82UUUsIBpZRgwxuJtrOcRqCFctjKPJmiLazhCUZ5T7cyhYl8PpLWLiJR1q0k9sCixRlFa9Pi0daI+bFAb41ImANm5rv4AYwAiw+KYbH3d1zFtdQX6qbpDCCfGJ5Hwg8UKyMHotOB8jIcD6xeFyYWfzrwX82Vt79vuUXMK+4ROnrxpm8ni3dWH63sXS9NW8Gk+vxXHlM6b2/xLBtbSS7WjQovXs0BUa/Yvrvnzfp3REFhmDz4lPBdBrlB806Z3EKj9h0RdYwM1s4F7u0ZjRFFmkAnEuzHm41aZyhB4eu5N5HpYxJD+Oa8ZumMtFhWOrGmHEHmvhFqWtcbCciMhSb9xfciYti26zcjxnM5uipnOm0cblPbPsA9RXdRCF3Po4Bcpi9N1U7AYWDui7UInhgpReQs6HES9dRIJEw7NxamA+T0TAQb4W1175InHcRREy5P5mNW3ntIx6fCwoikUiCQZ7LfUj6t4P1ZWBoT71HsuiA0ct3o/RfKqt99qraOsyfXru7xvT1/y8HBiJNY8d/vwAAAABJRU5ErkJggg==) left top no-repeat;
background-size: 14px 14px;
opacity: .85;
filter: saturate(0) brightness(1.6) drop-shadow(0 1px 1px #000);
}
#config li br {
display: none;
}
.urls li {
margin-left: -15px;
list-style-type: none;
}
.urls li::before {
margin: 2px 0 -3px;
width: 22px;
height: 20px;
display: inline-block;
content: "";
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABEVBMVEUAAAAAAAAAAAAAAAAAAABDREYAAAAAAAAAAACDhYgAAABmaGuPkZRZWlyFh4oAAABkZWcAAAAAAABRUlRiY2ZPUVN4eXtydHdcXV9YWVtCQ0QxMjM2Nzh6fH6DhIcAAAAAAAB3eXt3enxoaWtlZ2p2d3pwcnWCg4Z7fH5OTlBnaWtdXmAxMTJXWFoyMjRAQEIAAABeYGJmZ2qIio2jpKfx8vOKjZDLzM7v7+6wsrWdnqCAgYSbnJ6Nj5KMjY58foFxcnXp6urh4uTOz9KztreYmp2QkJOFh4uSlJaPkJF/f4NVVljR0tS/vsC8vsCsrrKgoqSXl5uQkpN6e31ub3JsbXBdYGJaW12/v8G+vb+SlJjRk2qVAAAAMnRSTlMABAwWJ4UHQiBhEWDohWEw7ToU8e3r5dKRg3tpXz05Nw/v7ejEvrGtfHRtaGZXV0w5MLROkgwAAAE3SURBVDjLndHXcoJAFIBhlyWEGA2WJJY003tjAQ2hKQIGe4tJ3v9BsjDOeLEcLzy335nZPfOnNpzTjEnILYIY7SnNVm/g2QLgO4ra/jPHw8kNgvyDlJ9KvuJwoGcl/sUezQtJ78fO17i7X0/G7MJJ5BWeQ7thPcixC0Km2Sb3kX/WNfk4zSykzVZn6lwKsW+J7J1Yc21dXTzHziccgYlvNKzu0lHCwnnkPy7k6FBvWN+6Eazxr6Izk/ePqDP9NHJB/WCbzplInenn+gb1vIgxTgsJ/To2/V8xjxHUZxr9zxFBrzqq1dVnGOpXecst5L4B9svyolQNXagfdU54XNOvHPUF+5Ge+VqjDvcbjEvvDyHYr3DtDX27D3qKk+yJMvICyFMI56+c+aofOwKWVv0SB3GFuN9m8w950jtLubKVyAAAAABJRU5ErkJggg==) left center no-repeat;
background-size: 16px 16px;
filter: sepia(1) saturate(.4) drop-shadow(0 1px 1px #000);
}
.external::before {
content: "";
display: inline-block;
width: 16px;
height: 14px;
vertical-align: middle;
background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAC61BMVEUAAAAAAAAAAAAAAAAAAAAAAAAYf7wbfa8AAAACDBESfbwZbpwVd64dgLITfrUVfLcadqkVX4YXZ5AKLT8MNUkEExsAAAAAAAAWcqQMOlIUaJQeeqoXerMXeq0WfrgVfrMUYYsUYYgypuIintwso+AmoN6f6QAYmNk5q+U1qOUem9oVgcoZgrec5gCa5QCN2wC/6P0yp+6h6wGd6ACY4wCQ3gBRufApot4bmtwSldcLktYDjdUbhL4fhrsehbmu7Rqq8QCl7QCV4gA6qv6m3Pmg2vlJs/RkwPI5q+xGsucZmOc/ruYHjt7i/Jmx7iyV3wCw4v+L0P/G6v665f2s4PzQ7fu04/uX1/iHz/V7y/U4qfROt+xHsuwRlN0NfMHj/3iK2hx2zhmS3wGe2v8vpP+l3/6X1P1Wuf2X2fyQ1PkooPUamfJcve8rouQRlNY/m84fjsUSiMVVu7RjxKdJtZM/rYbS9oPb+oLT+GnF81eD10W48Dm38iGf5x2R3xKw8wWc4QKG1wKe6AC15P9gvv8dmv/a8f56yf6Gzvo8rfduyPV0x/JVvPKv4+4Oku0noes+relxveQmn+S95+MRlOOn399ruN9Xu9NAr9Akls8Zks8Ih85isszr/sEOfcHJ8btOt7eb3rQnobKHy7BAr7BntKpOuaVNuJ5xzZlkw5fl/o+q34+g145dwIbG7oV20YGBzXpYvm+w5m1vym1uymTO+FyS3FZ1z0zB9EWP2kOc5kKx6UF2zjrB9DlqyDh40TSE1y6l5Rao7BGp7w990wuq7Adtxf+w3+kwn+eY2ONiv9qIz9ktndVUqtRjwdMnlNPF7NENgtG96c4Li8tvyMcwpcZOtr/h+76157wUjLwdm7tEnbbl/LFTqazV9Kq97qUnn6Momp9Xu54fnJ6Pzpt6wJmH1YJiw3k6rHbh/3V/13SJ22V70l2b4Fy27Fi68FZTuVNcv0ij4TprySaF1xSU4RCc6Aie4Qa4/QHF9Rd9AAAAInRSTlMABhYPNh3q3EIv07J37OfC0ZmNWUxLOikiGQ7NnZ2ZmSkpxqDDBgAAAzRJREFUeNplklNgJEsAAHeWcc56DNa2bdsb27Zztm3bNp9t2zY+r2f2nPqtajfqPjMy0rYUArakZcxAjWVammL3oc4iQOeh3YrsaY9o6CnG1z8ccB7o6v71zIXL3V07FU9CD/mspsXvbXY6Vz63utJbtUd3vedIEx560K/hbP7Y+aknYAjXzJtbf1Yn/PPIJlDc9/45QWfXSo/BWOl9aecs/boRofvEvQJ6oqliTtDH2fpmoKzSe8KlPrPWUn58hH3wo8eTRQ7DyAH+9c7T75e9ELn4ywDp2rV1e0uEuw7Sn0YmyF5eDY/vPt3T81tfv/rbFweL9Vxu7Tsl17/JhqeYrqo2+jj+mTM/O3euz6V+5hhrP+tdS24D8dbIRfp0MEHGKwv8/lDI41l8GfZvHx1t08coufkr6q4Mf5IBoSDC8kWcUCBQUbG636W+MVC1jzm4fz41N59o62AfS4NQGEZUFDIYjGXV2/vVN3gkUi9LwDzFBYFkCfs8HYNCMxaIDMZwuMa7fegmj8Rn/iMQFH/JzRXnSZaU/EdHg8AsioZrIvPmujRaOBCwdCdj1HwQrPp9GAkWicyRSDT67M1kwGKe0sNbyJMU7EgGpn0m88KF5lk/JQMmSW+hghVoZKnDoYAD6/9rTfXm+qpXh7Q8sEnS2Rg8AQgaZXIVCAjPX/jRFI/HRaIBjVbbe3JwGzgCMoFM/hYBjcJMeK3taCJhTcRNbec1P5eXbztcu3TFnQlaJmBQUKrCYllmt1qtifmtQ/+2Fu/5rvRSnc22qsAhlytTwU3iCC9TKBQ7YFmstZevOTx7dnv78R0djs+/3/gYDrwWZpIql0qlwFDBI+4d3VXMEujcbrfgK8UkDPzcuPTm3Ls0NCyta+frSoVsNvuvN9LBBABMaub6/CRiMTHPdpUFe+GtD/CpmOSXQ2Mz1xNh8gAS29VRMIO7ZCMeiwYTJIspmc3A0QBkckHBpb8FrD9a8FMQf3eOdOUGCRkglTY6PuRf+YKejoy/X6ROHKds3iCVymQyeUcLfdzE1Ac9KDA47OTxBJVKqVQpCeMnY3EY2D+STMWmIGCnjtVIAmHQCBjoAX0bgdwQZFvzARQAAAAASUVORK5CYII=) center top no-repeat;
background-size: 12px 12px;
opacity: .7;
}
.external:hover::before {
opacity: 1;
}
@supports (-webkit-text-stroke-width: 1px) {
#sitename,
#sitename:hover,
#sitename:focus {
background: #731;
background: repeating-linear-gradient(to bottom, rgba(0, 0, 0, .2), rgba(0, 0, 0, .5) 2px),
linear-gradient(to bottom, rgba(255, 96, 0, .2), rgba(0, 0, 0, .9) 100%),
linear-gradient(to bottom, #210, #310 15%, #fff 50%, #310 80%);
-moz-background-clip: text !important;
-webkit-background-clip: text !important;
background-clip: text !important;
-moz-text-fill-color: transparent !important;
-webkit-text-fill-color: transparent !important;
text-fill-color: transparent !important;
filter: drop-shadow(0 0 2px #000);
-webkit-text-stroke-color: #999;
-webkit-text-stroke-width: 0.02em;
}
#sitename:hover,
#sitename:focus {
background: #951;
background: repeating-linear-gradient(to bottom, rgba(0, 0, 0, .2), rgba(0, 0, 0, .3) 2px),
linear-gradient(to bottom, rgba(255, 255, 255, .2), rgba(0, 0, 0, .7) 100%),
linear-gradient(to bottom, #930, #d50 15%, #fff 50%, #930 80%, #000 100%, #ff0 150%);
filter: drop-shadow(0 0 2px #b00);
-webkit-text-stroke-color: #bbb;
}
}
@media screen and (max-width: 1200px) {
#help {
font-size: 90%;
}
.external::before {
margin-left: -2px;
}
#sitename::before {
height: 52px;
background-size: 52px 52px;
}
}
@media screen and (max-width: 1400px) {
#container {
padding: 2% !important;
}
#panel {
padding: 20px 35px 10px;
}
#sitename,
#sitename:hover,
#sitename:focus {
margin: -14px 0;
}
code:not(#b64) {
display: inline-block;
white-space: normal;
text-align: left;
}
br + code {
margin-top: 3px;
}
#config li br {
display: block;
}
}
</style>
</head>
<body id="help">
<div id="container">
<div id="panel">
<a href="http://127.0.0.1:7662/" title="Firefox Manager Homepage" alt="Firefox Manager Homepage"><span id="sitename">I2P Firefox</span></a>
</div>
</div>
</body>
</html>

View File

@ -1,25 +0,0 @@
<!DOCTYPE HTML>
<html>
<!-- edit this file if you want to change your home page -->
<head>
<meta charset="UTF-8">
<title>I2P Firefox</title>
<style type="text/css">
body, html {min-height: 100%; font-size: 0;}
body {background: #111;}
body {background: repeating-linear-gradient(45deg, #444, #333 2px, #222 3px), repeating-linear-gradient(135deg, #444, #333 2px, #222 3px); background-blend-mode: multiply, normal;}
</style>
<link href="/firefox.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="container">
<div id="panel">
<a href="/launch" title="Launch Firefox configured for I2P"><span id="sitename">i2pfirefox</span></a>
<span id="footer" class="b32">$B32</span>
</div>
</div>
</body>
</html>

View File

@ -1,293 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<!-- ========================================================================= -->
<!-- This file configures the Jetty server. -->
<!-- All changes require a restart of I2P. -->
<!-- -->
<!-- Commonly changed settings: -->
<!-- * host: Change 127.0.0.1 to 0.0.0.0 in the addListener section -->
<!-- to access the server directly (bypassing i2p) -->
<!-- from other computers. -->
<!-- * port: Default 7662 in the addConnector section -->
<!-- * docroot: Change the ResourceBase in the contexts/base-context.xml file -->
<!-- to serve files from a different location. -->
<!-- * threads: Raise maximumPoolSize in the ThreadPool section -->
<!-- if you have a high-traffic site and get a lot of warnings. -->
<!-- -->
<!-- I2P uses Jetty 9. If you need web server features not found -->
<!-- in I2P's Jetty 9, you may install and run Jetty 9 in a different JVM -->
<!-- or run any other web server such as Apache. If you do run another web -->
<!-- server instead, be sure and disable the Jetty 9 server for your -->
<!-- eepsite on http://127.0.0.1:7657/configclients.jsp . -->
<!-- -->
<!-- Jetty now uses the I2P logging system rather than wrapper.log. -->
<!-- Use the log override org.eclipse.jetty.server.Server to adjust the log level. -->
<!-- -->
<!-- Note that the XML encoding for this file is UTF-8. -->
<!-- -->
<!-- ========================================================================= -->
<!-- =============================================================== -->
<!-- Configure the Jetty Server -->
<!-- -->
<!-- Documentation of this file format can be found at: -->
<!-- http://docs.codehaus.org/display/JETTY/jetty.xml -->
<!-- -->
<!-- =============================================================== -->
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<!-- =========================================================== -->
<!-- Server Thread Pool -->
<!-- =========================================================== -->
<Arg>
<!--
Requests above the maxThreads + queue_size will be rejected and logged.
ref:
https://wiki.eclipse.org/Jetty/Howto/High_Load
http://trac.i2p2.i2p/ticket/1395
-->
<New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
<Arg type="int">20</Arg> <!-- maxThreads, overridden below -->
<Arg type="int">3</Arg> <!-- minThreads, overridden below -->
<Arg type="int">60000</Arg> <!-- maxIdleTimeMs, overridden below -->
<Arg>
<New class="java.util.concurrent.LinkedBlockingQueue">
<Arg type="int">50</Arg>
</New>
</Arg>
<Set name="minThreads">4</Set>
<Set name="maxThreads">20</Set>
<Set name="idleTimeout">60000</Set>
<Set name="daemon">true</Set>
<Set name="name">I2PFirefox Jetty</Set>
</New>
</Arg>
<!-- =========================================================== -->
<!-- Set connectors -->
<!-- =========================================================== -->
<!-- One of each type! -->
<!-- =========================================================== -->
<!-- Use this connector for many frequently idle connections
and for threadless continuations.
Not recommended on Java 5 - comment this out, and uncomment the
SocketConnector below.
Do not use for gij or JamVM - comment this out, and uncomment the
SocketConnector below.
-->
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg><Ref id="Server" /></Arg>
<Arg type="int">1</Arg> <!-- number of acceptors -->
<Arg type="int">0</Arg> <!-- default number of selectors -->
<Arg>
<Array type="org.eclipse.jetty.server.ConnectionFactory"> <!-- varargs so we need an array -->
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg>
<New class="org.eclipse.jetty.server.HttpConfiguration">
<Set name="sendServerVersion">false</Set>
<Set name="sendDateHeader">true</Set>
</New>
</Arg>
</New>
</Item>
</Array>
</Arg>
<Set name="host">127.0.0.1</Set>
<Set name="port">7662</Set>
<Set name="idleTimeout">600000</Set>
</New>
</Arg>
</Call>
<!-- =========================================================== -->
<!-- Set up global session ID manager -->
<!-- =========================================================== -->
<!--
<Set name="sessionIdManager">
<New class="org.eclipse.jetty.server.session.HashSessionIdManager">
<Set name="workerName">node1</Set>
</New>
</Set>
-->
<!-- =========================================================== -->
<!-- Set handler Collection Structure -->
<!-- -->
<!-- We use a RewriteHandler at the top level so that we may -->
<!-- convert any top-level URLs for the firefox down into the -->
<!-- firefox servlet, without interfering with anything else -->
<!-- that is hosted on the same eepsite. -->
<!-- =========================================================== -->
<Set name="handler">
<New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler">
<Set name="rewriteRequestURI">true</Set>
<Set name="rewritePathInfo">false</Set>
<Set name="originalPathAttribute">requestedPath</Set>
<Set name="rules">
<Array type="org.eclipse.jetty.rewrite.handler.Rule">
<Item>
<New class="org.eclipse.jetty.rewrite.handler.RewritePatternRule">
<Set name="pattern">/help</Set>
<Set name="replacement">/help.html</Set>
</New>
</Item>
<Item>
<New class="org.eclipse.jetty.rewrite.handler.RewritePatternRule">
<Set name="pattern">/help/</Set>
<Set name="replacement">/help.html</Set>
</New>
</Item>
</Array>
</Set>
<Set name="handler">
<New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
</Item>
<Item>
<New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
</Item>
<Item>
<New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"/>
</Item>
</Array>
</Set>
</New>
</Set>
</New>
</Set>
<!-- =============================================================== -->
<!-- Create the deployment manager -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- The deplyment manager handles the lifecycle of deploying web -->
<!-- applications. Apps are provided by instances of the -->
<!-- AppProvider interface. Typically these are provided by -->
<!-- one or more of: -->
<!-- jetty-webapps.xml - monitors webapps for wars and dirs -->
<!-- jetty-contexts.xml - monitors contexts for context xml -->
<!-- jetty-templates.xml - monitors contexts and templates -->
<!-- =============================================================== -->
<Call name="addBean">
<Arg>
<New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
<Set name="contexts">
<Ref id="Contexts" />
</Set>
<Call name="setContextAttribute">
<Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg>
<Arg>.*/.*jsp-api-[^/]*\.jar$|.*/.*jsp-[^/]*\.jar$|.*/.*taglibs[^/]*\.jar$</Arg>
</Call>
</New>
</Arg>
</Call>
<!-- =========================================================== -->
<!-- Configure the context deployer -->
<!-- A context deployer will deploy contexts described in -->
<!-- configuration files discovered in a directory. -->
<!-- The configuration directory can be scanned for hot -->
<!-- deployments at the configured scanInterval. -->
<!-- -->
<!-- This deployer is configured to deploy contexts configured -->
<!-- in the $JETTY_HOME/contexts directory -->
<!-- -->
<!-- =========================================================== -->
<Ref id="DeploymentManager">
<Call name="addAppProvider">
<Arg>
<New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
<Set name="monitoredDirName">$PLUGIN/contexts</Set>
<Set name="scanInterval">120</Set>
</New>
</Arg>
</Call>
</Ref>
<!-- =========================================================== -->
<!-- Configure the webapp deployer. -->
<!-- A webapp deployer will deploy standard webapps discovered -->
<!-- in a directory at startup, without the need for additional -->
<!-- configuration files. It does not support hot deploy or -->
<!-- non standard contexts (see ContextDeployer above). -->
<!-- -->
<!-- This deployer is configured to deploy webapps from the -->
<!-- $JETTY_HOME/webapps directory -->
<!-- -->
<!-- Normally only one type of deployer need be used. -->
<!-- -->
<!-- =========================================================== -->
<Ref id="DeploymentManager">
<Call id="webappprovider" name="addAppProvider">
<Arg>
<New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
<Set name="monitoredDirName">$PLUGIN/eepsite/webapps</Set>
<Set name="parentLoaderPriority">false</Set>
<Set name="extractWars">false</Set>
<Set name="defaultsDescriptor">$PLUGIN/etc/webdefault.xml</Set>
</New>
</Arg>
</Call>
</Ref>
<!-- =========================================================== -->
<!-- Configure Authentication Realms -->
<!-- Realms may be configured for the entire server here, or -->
<!-- they can be configured for a specific web app in a context -->
<!-- configuration (see $(jetty.home)/contexts/test.xml for an -->
<!-- example). -->
<!-- =========================================================== -->
<!-- UNCOMMENT TO ACTIVATE
<Set name="UserRealms">
<Array type="org.eclipse.jetty.security.LoginService">
<Item>
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">Test Realm</Set>
<Set name="config">$PLUGIN/etc/realm.properties</Set>
<Set name="refreshInterval">0</Set>
</New>
</Item>
</Array>
</Set>
-->
<!-- =========================================================== -->
<!-- Configure Request Log -->
<!-- Request logs may be configured for the entire server here, -->
<!-- or they can be configured for a specific web app in a -->
<!-- contexts configuration (see $(jetty.home)/contexts/test.xml -->
<!-- for an example). -->
<!-- =========================================================== -->
<Ref id="RequestLog">
<Set name="requestLog">
<New id="RequestLogImpl" class="net.i2p.jetty.I2PRequestLog">
<Set name="filename">$PLUGIN/eepsite/logs/yyyy_mm_dd.request.log</Set>
<Set name="filenameDateFormat">yyyy_MM_dd</Set>
<Set name="retainDays">90</Set>
<Set name="append">true</Set>
<Set name="extended">false</Set>
<Set name="logCookies">false</Set>
<Set name="LogTimeZone">GMT</Set>
</New>
</Set>
</Ref>
<!-- =========================================================== -->
<!-- extra options -->
<!-- =========================================================== -->
<Set name="stopAtShutdown">true</Set>
<Set name="stopTimeout">1000</Set>
</Configure>

15
preprelease.sh Executable file
View File

@ -0,0 +1,15 @@
#! /usr/bin/env sh
. ./config.sh
ant distclean clangFmt versionMd
./javadoc.sh
NUMLINE=`grep release.number build.xml | head -n 1`
READMELINE=`grep 'i2p.plugins.firefox/releases/download' README.md | grep i2pfirefox`
sed -i "s|${READMELINE}|wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/${GITHUB_TAG}/i2pfirefox.zip|g" README.md
READMELINE=`grep 'i2p.plugins.firefox/releases/download' docs/LINUX.md | grep i2pbrowser`
sed -i "s|${READMELINE}|wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/${GITHUB_TAG}/i2pbrowser.tar.gz|g" docs/LINUX.md
READMELINE=`grep 'i2p.plugins.firefox/releases/download' docs/OSX.md | grep i2pfirefox`
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

39
profiles-upload.sh Executable file
View File

@ -0,0 +1,39 @@
#! /usr/bin/env sh
. ./config.sh
profilezipsum=$(sha256sum src/i2p.chromium.base.profile.zip)
github-release upload --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--label "Chromium strict extensions ${profilezipsum}" \
--name "i2p.chromium.base.profile.zip" \
--file "src/i2p.chromium.base.profile.zip" \
--replace
echo "Uploaded Chromium base profile"
profilezipsum=$(sha256sum src/i2p.chromium.usability.profile.zip)
github-release upload --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--label "Chromium usability extensions ${profilezipsum}" \
--name "i2p.chromium.usability.profile.zip" \
--file "src/i2p.chromium.usability.profile.zip" \
--replace
echo "Uploaded Chromium usability profile"
profilezipsum=$(sha256sum src/i2p.firefox.base.profile.zip)
github-release upload --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--label "Firefox strict profile ${profilezipsum}" \
--name "i2p.firefox.base.profile.zip" \
--file "src/i2p.firefox.base.profile.zip" \
--replace
echo "Uploaded Firefox base profile"
profilezipsum=$(sha256sum src/i2p.firefox.usability.profile.zip)
github-release upload --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--label "Firefox usability profile ${profilezipsum}" \
--name "i2p.firefox.usability.profile.zip" \
--file "src/i2p.firefox.usability.profile.zip" \
--replace
echo "Uploaded Firefox usability profile"

100
release.sh Executable file
View File

@ -0,0 +1,100 @@
#! /usr/bin/env sh
. ./config.sh
./preprelease.sh
github-release release --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--name "${GITHUB_NAME}" \
--description "${GITHUB_DESCRIPTION}" \
--tag "${GITHUB_TAG}"; true
sleep 2s
./profiles-upload.sh
sleep 2s
github-release edit --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--name "${GITHUB_NAME}" \
--description "${GITHUB_DESCRIPTION}" \
--tag "${GITHUB_TAG}"; true
echo "Relase ${GITHUB_TAG} setup"
tarsum=$(sha256sum i2p.plugins.firefox.tar.gz)
github-release upload --user "${GITHUB_USER}" \
--replace \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--label "I2P Browser launcher source tarball. ${tarsum}" \
--name "i2p.plugins.firefox-${GITHUB_TAG}.tar.gz" \
--file "i2p.plugins.firefox.tar.gz"
jarsum=$(sha256sum "src/build/i2pfirefox.jar")
github-release upload --user "${GITHUB_USER}" \
--replace \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--label "I2P Browser launcher as a .jar. Useful as a library or for advanced users. ${jarsum}" \
--name "i2pfirefox.jar" \
--file "src/build/i2pfirefox.jar"
echo "Uploaded jar"
zipsum=$(sha256sum "i2pfirefox.zip")
github-release upload --user "${GITHUB_USER}" \
--replace \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--label "I2P Browser launcher as a .jar and a set of semi-univeral launcher scripts. ${zipsum}" \
--name "i2pfirefox.zip" \
--file "i2pfirefox.zip"
echo "Uploaded freestanding zip"
jvmsum=$(sha256sum "i2pbrowser.tar.gz")
github-release upload --user "${GITHUB_USER}" \
--replace \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--label "I2P Browser launcher as a Jpackage, does not require a JVM. ${jvmsum}" \
--name "i2pbrowser.tar.gz" \
--file "i2pbrowser.tar.gz"
echo "Uploaded jpackage zip"
debsum=$(sha256sum "i2pbrowser_${GITHUB_TAG}_amd64.deb")
github-release upload --user "${GITHUB_USER}" \
--replace \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--label "I2P Browser launcher as a Jpackage inside of a Debian package. ${debsum}" \
--name "i2pbrowser_${GITHUB_TAG}_amd64.deb" \
--file "i2pbrowser_${GITHUB_TAG}_amd64.deb"
echo "Uploaded debian package"
rpmsum=$(sha256sum i2pbrowser-${GITHUB_TAG}-1.x86_64.rpm)
github-release upload --user "${GITHUB_USER}" \
--replace \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--label "I2P Browser launcher as a Jpackage inside of a Fedora package. ${rpmsum}" \
--name "i2pbrowser-${GITHUB_TAG}-1.x86_64.rpm" \
--file "i2pbrowser-${GITHUB_TAG}-1.x86_64.rpm"
echo "Uploaded fedora package"
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"
torsum=$(sha256sum i2p.plugins.firefox.torrent.zip)
github-release upload --user "${GITHUB_USER}" \
--replace \
--repo "${GITHUB_REPO}" \
--tag "${GITHUB_TAG}" \
--label "I2P Browser launcher as an I2P Console Plugin, release torrent. ${torsum}" \
--name "i2p.plugins.firefox.torrent.zip" \
--file "i2p.plugins.firefox.torrent.zip"
echo "Uploaded torrent package"
git pull github --tags
git push --all

View File

@ -1,3 +1,3 @@
#Build Number for ANT. Do not edit!
#Sun Aug 07 13:46:38 EDT 2022
build.number=42
#Sun Feb 12 20:31:18 UTC 2023
build.number=486

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

1
scripts/favicon.png.b64 Normal file
View File

@ -0,0 +1 @@
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAABmJLR0QA/wD/AP+gvaeTAAAGyklEQVRIibWWe0xU2R3Hv+e+5g4zI/NixnFgsIUBqQLulogbtgrF1X1odzXbWmhS2pLs9g9Tk9202wYTLd0IpomkSTebbrK1NpuUuLuxhUXFalEpUZcZFRSKneX9GmEGBubFnbl3Tv+ADviAdk17/jr39/udz/f+7vmd+zvkSE0t/p+D+2+C4vHYxMT4+Pi4zzcly7LeYNhgs9vtGTqd7n8gMDQ0ePly64L04NAh5OYqPI+pKba5WTn7HvvCrhcLCp4RBOEpBSild+64L/615f33lf37WaNx2fXmm3C7cfRoS8u50ZdefEUU1atBmDUEPJ77ly43XbmiVFfDaFQA5d8eheexfbvS2Iji4u6/tV1SFGU1yKoC4XDos5a/NDZi2zZ0d8PlQiSy5AoGcf48zp5FLIa6OiQSnQOD/V9a4It+T3l5eM8eNDQUzcy0EeI6frxqbg6RCE6cqMzKul9UNPLBBz9nWRw7hhvXOxKJxBM5T94DSmnPvbv1JzA6ivz8X5WWllJKTaZj166dtlrx+us/zcnJoZRWVFS7XPUlJRgdGwwEZo1G03/IgDIUBABiMWl4ZNDpRCwGjUbT09Ozc+fOkZERSQLPY2xsrL6+vrOzU5IknofJhN27EQzOL0IESjlKH81AVsdnM3xSSpQkiHZWz3kERVG0WjgcePfdBo2muL29vabmh2fOwGzGxx+/WleXqKqqcjgi77wDQmC3IxKWU5X4zukhS2iaghlPXX/F7FggDDlSU0tZ+iBvTObiSVnBqz711oednbHCQoTDuHED0Si2bYPFAgCyjPv3IcvIzYVKBUqxdy+s5h+9xYRTo4EkxLvO2mzNZgAs6KMr6QDiaQsbs77i8QCARoPycuzdu0QHwHLYvBkFhVCJAMHsLC5cQIGKW0kHYJ2fSlXiDADKPFoAlKVb8gs++gix2BNKgDw86eiA05ln0K17LIyKiQQDQAiJoA/5xEhKliP77+3m1tYnCNAVE980amtRXPzcpKiRWX5lWETQ+HgVA4CLcgZvWnIdF+f1oyZRVL/88r6KCty8uWoGcwHU1MDtxozfFybMTWuuwiyVZZwVOqxOJVlFmgc61bw6plsgCiMG1EQh0Wh0YHAgHEZ5CXnvQ1pZCX7F+ykKbt/GJ0eNFefsTsz94lwTx/Ekv3AysygzGqQE/erUEMti5UGzgmYL8YU4ey+BkfGxCxc+2+wNXEHBs8q6Nxq6Dh4MtrYiEgHPw+tFf7Nxz/kNv4RBBaYMxq8jtbzpU5UoZuc5vWlqUCLMMySBZYEdG31luS6Oic2Fle7b0qk/9DZgYzWe0YF7gNiuQ0FZRtdhe9VAhgKqA2sAT5bzwTdg2Arhuqdde0BMsAoATubNg+u5MM8BsOli5bmfM4wsxenBI30XO6Nnkfcq0vyQr2Laj3jJ8+jqwq6BtHSolreaUEIJgCBkDVg9q9KUZCzSAchc3O+Ysv7DzgDISwswjAxAxZPqfVYQtGEmBvpbjOxD759f8zidaG3m8vFQ/1qkT0Aqh3sK8atK0OK0rAyIqyRZjHMAZGU53W9/05yq4V752RdOJcUCAcDWrZiYgP2kI+WxX28ESp162Muyvw+NW/NsOuujHZRQwgDo8hokWZO07i7Wnzm++0jq7K/TAmdqDvvcLxQUwBZX4bHxT0RK3z7Ydfo3UmXR9k0lKkVc6RVDKazEMQDmJO7T28VzUTMASpn+6Zy+yHOVFd+PJUi23Vb7g++erP7x99B3DbMSEounJQH0I3KKHQ8tLFCKnAybfp3eNLheFV3SUIc0xmELAJK8thCCDVopHGMD0lJpuW913ulzTY9Opeg1Za+VaVO15042llJt4aGX5qyG1Eyr3qRvOtV07+bd+enQ4Z+8zfMCAEWlgIKNsYuQ5XNAKcaDD32HuUCg5nc1DGEEUWBYBoDRYmw+3Vz+refTCKGUAjjwxgH/pH9LtnWRDoCV2JWQtZo+BZWiklqrZjmWEEII2fTspszcTEIIgEULAEVRRFFcDbKWwHqrzdPtecToanP5Jn3Jx2g4qtaoTSbz0wg4HJkX/3TR7/UnLb2u3vSvpre3tEfDUQoamg9d+uSSIAgWi3U1CLtjR9lqPpVK5Zvy9fX2qrXqgC9w6+ot77BXikpptjRPtycSjLjb3PFYXE/N6ekZq0HWutkNDQ3cuN6R7kxv+WMLz/OqFHFmyu+54wkGglmbswZ7ByeHJ3s7e0VRbbFYbbYNX1rA5f5cUZThvuGkxWAw5jg3+cd8d309Ai/wPP+1vC2CIARDQdtTZHBg/3coTSSvIJRShiEMw1JKk4W0xvLF8S/sWeeRQ7BG4QAAAABJRU5ErkJggg==

View File

@ -1,235 +0,0 @@
/* I2P Firefox theme (purrrrple) */
/* Author: dr|z3d 2019 */
html, body {
margin: 0;
padding: 0;
min-height: 100%;
color: #fef;
background: #111;
font-size: 14pt;
font-family: "Droid Sans", "Open Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", Verdana, Helvetica, sans-serif;
}
@supports (background-blend-mode: overlay) {
html, body {
background: repeating-linear-gradient(45deg, #313, #000 2px, #000 3px), repeating-linear-gradient(135deg, #414, #313 2px, #212 3px);
background-blend-mode: overlay, normal;
background-size: 100% 100%, 100% 100%;
background-attachment: fixed;
}
}
#container {
padding: 2%;
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
display: table;
text-align: center;
box-sizing: border-box;
}
#panel {
padding: 20px;
position: relative;
display: table-cell;
vertical-align: middle;
text-align: center;
border: 1px solid #535;
box-shadow: inset 0 0 0 1px #111, inset 0 0 2px 1px #444, 0 0 2px 2px #000;
background: #180618;
background: repeating-linear-gradient(to right, rgba(255, 200, 255, .05), rgba(0, 0, 0, .08) 2px), repeating-linear-gradient(to bottom, #212, #101 2px); /* purple */
background-blend-mode: overlay;
will-change: transform;
}
code {
font-family: "Droid Sans Mono", "Noto Mono", "DejaVu Sans Mono", "Lucida Console", monospace;
}
#sitename, #sitename:hover, #sitename:focus {
margin: 0 auto;
font-size: 10em;
font-weight: bold;
text-transform: uppercase;
line-height: 1;
letter-spacing: .05em;
transition: ease background .3s;
color: #731;
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
}
#stats #sitename, #stats #sitename:hover, #stats #sitename:focus {
font-size: 8em;
}
#sitename:hover, #sitename:focus {
color: #951;
}
@supports (-webkit-text-stroke-width: 1px) {
#sitename, #sitename:hover, #sitename:focus {
background: #731;
background: repeating-linear-gradient(to bottom, rgba(0, 0, 0, .2), rgba(0, 0, 0, .5) 2px), linear-gradient(to bottom, rgba(255, 96, 0, .2), rgba(0, 0, 0, .9) 100%), linear-gradient(to bottom, #414, #313 15%, #fff 50%, #313 80%);
-moz-background-clip: text !important;
-webkit-background-clip: text !important;
background-clip: text !important;
-moz-text-fill-color: transparent !important;
-webkit-text-fill-color: transparent !important;
text-fill-color: transparent !important;
filter: hue-rotate(0) drop-shadow(0 0 2px #181818) drop-shadow(0 3px 0.01em #000);
-webkit-text-stroke-color: #fef;
-webkit-text-stroke-width: 0.02em;
animation: ease-in-out spinwash 120s alternate infinite;
mix-blend-mode: soft-light;
}
#sitename:hover, #sitename:focus {
background: #951;
background: repeating-linear-gradient(to bottom, rgba(0, 0, 0, .2), rgba(0, 0, 0, .3) 2px), linear-gradient(to bottom, rgba(255, 255, 255, .2), rgba(0, 0, 0, .95)), linear-gradient(to bottom, #d59, #a39 15%, #fff 50%, #839 70%, #000);
filter: drop-shadow(0 0 0.02em #f00);
-webkit-text-stroke-color: #fef;
opacity: .5;
mix-blend-mode: normal;
background-blend-mode: overlay;
animation: none;
}
}
@keyframes spinwash {
from {
background: repeating-linear-gradient(to bottom, rgba(0, 0, 0, .2), rgba(0, 0, 0, .3) 2px), linear-gradient(45deg, rgba(64,16,64,.1), rgba(16,0,16,.2)), linear-gradient(to bottom, rgba(255, 255, 255, .2), rgba(0, 0, 0, .7) 100%), linear-gradient(to bottom, #930, #d50 15%, #fff 50%, #930 80%, #000 100%, #ff0 150%);
filter: sepia(0) hue-rotate(0) drop-shadow(0 0 2px #181818) drop-shadow(0 3px 0.01em #000);
}
to {
background: repeating-linear-gradient(to bottom, rgba(0, 0, 0, .2), rgba(0, 0, 0, .3) 2px), linear-gradient(45deg, rgba(16,0,16,.1), rgba(64,16,64,.2)), linear-gradient(to bottom, rgba(255, 255, 255, .2), rgba(0, 0, 0, .7) 100%), linear-gradient(to bottom, #930, #d50 15%, #fff 50%, #930 80%, #000 100%, #ff0 150%);
filter: sepia(0) hue-rotate(1440deg) drop-shadow(0 0 2px #181818) drop-shadow(0 3px 0.01em #000);
}
}
a, a:visited {
color: #f60;
text-decoration: none;
outline: none;
}
a:hover, a:focus {
color: #f90;
}
hr {
margin: 20px 10px;
height: 1px;
color: transparent;
border: none;
background: #555;
background: linear-gradient(to right, rgba(0, 0, 0, 0), #535, rgba(0, 0, 0, 0));
}
::selection,
::-moz-selection {
text-shadow: none;
background: #515;
color: #fff;
}
#totals {
padding-top: 6px;
line-height: 140%;
text-shadow: 0 1px 1px #000;
}
#footer {
padding: 4px;
position: absolute;
bottom: 0;
left: 0;
right: 0;
font-size: 11pt;
font-weight: bold;
border-top: 1px solid #535;
box-shadow: inset 0 0 0 1px #000, inset 0 0 2px 1px #333;
background: rgba(16, 0, 16, .5);
-moz-user-select: all;
-webkit-user-select: all;
user-select: all;
}
#footer.version {
font-size: 9.5pt;
}
#footer.version a {
margin: 0 1px 0 2px;
}
#footer.version::before {
margin-left: -10px;
content: "";
display: inline-block;
margin-top: 1px;
width: 20px;
height: 18px;
vertical-align: middle;
background: url(/favicon.png) left top no-repeat;
background-size: 16px 16px;
filter: hue-rotate(-110deg) saturate(.4) brightness(1.4);
}
#initializing::before {
margin-left: -20px;
content: "";
display: inline-block;
width: 28px;
height: 24px;
vertical-align: text-bottom;
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABRhJREFUeNq0Vd1vk1UYP+f9bruPrmu70W1lrLKJzE0o+BEFt4yLRZJpgl4YZ6IXhiuT/Slcqlw6QyIauNEYIhHlAgMrJDjUDQejdF3Xj7Xv24/3+xyf01LWOpArTvLr6XnOOc/X7znPiyml6HkOgf28+cXDxwLMcYgDsBljHAS8AeJjgDFAGMAByoAk4Ddw8GdAihKCmLMcz7N7s7CXu/JpOCE8xbAXMC0KaGYwLMeG9yj7ujuEPkXmAiDnDZNYasUx1jeNqVTWOG3Z6CLIzwK2AfNgaOGRniNPMtADB+ZiEXl8Yn9nTOD4AcMgnXoVydUy4R4FKXtFQT482tU98YIvcvtuuf+fhzUW6RXiuvMfn4zEv/4hnXicIhA209MlYDrz6rg/Gu33BlWViLbtPDW/lQpBoojlw2Pdw8Fu0Xd9uRh9/8TAIU0jiDjODgcuLCBvEqY0fnQyEOzrUXybmzZqFgDsMUWI53F97boU2Tat71sWQrUaRn0BJXRqJhJKpy3U3S3AGXfHAAGCQEn0xeFOPyj3bm5a9ctMsSxjkteqhdRWNV8qWyxFnL9TUgb7fIFgl7fXNCnPzqbTO5FacMxtjQBSJMsSHz4w4vekUnrdQ6Zc8WDnxp+5B4WSsQqCH+HoHRZQxrQnMrnKh71+5fgro6GYoVOptdwtC7cbcGy7JzbUIWsli9drdqOMfDxZupNNbavGZSi975nBJl9w+VdYD23l7COel/sktWi0cWOZHNPZxkHXUL9Pym2V4T+lmMNORrdT2Xx5GRTVlZt6DYJohM7z/DwsFk4eG4kn10u7yDcNuisCiSOE08t19/OixOfXN0oaHPqdUoKqmlo/LCkeNs06jrMwNx2Lq0WoXWl3dVHi/CcCWDimqVpGTW2sOVRUa1XXJduu20KeriNBFHMs3xcu/Z14RpdItEbw+cXLq/Fn9RVK6GkovwSk7EhTBpyIHIdfOjDY6WvKIgM96NK1da2Vg/hHHxz6XwPfnL/FPAoxkiVFqZMNqQKjJNDhk4dtjLtY9cGwq7arurajtUaAdIugm8vpXYoPj0fQt98tMa/PQBP8yTZNVCmVkCBJjGz2+o+HwsFxmxd4m7oFxmFZtwnotNo4qDoUGbzYpnxyfxCdO3ctAX6dgeWiY1moJTUICvdUj987HR7slZPZSg7xHPbKAtpIFyzISksEEGqFYKQL8mMFPkVAEJTlD/i8+az6FqSC9fTbjArAQSD6HdgbfW3qoLyypRead30y56aSOdOxnWJbBJrLI13cMaBDKyEqlV6fjY9m7m323l/deLuU19iLIv5gF9k3OoD7R/aQv7JmfhvuIpFHHTKP0itrulHVs5BSs63ZlVHDQCwgoZTmINMhaAMyks+4/N7IQDg+ujfcIXH17FQsUs5UnOLVjF0wHZDBPVngkJHZqKVXH5SAl2Tz5TcMQD41JKJQQEQ3Fy/c6j06OYijwyGd8cLyojKw7ui2MAQKMLwyoM0jQO9JrldTN/7IU1bGlFqo1QDr3RUsoNTZxQRsLG5dvT7lGytMipMTewzFK0MwT/7egvOKUbP1pdv56spaEu5eBu815O44gtmrFN/9aulR42eluAiyAJD6GZbl9+ThaB8fGwlQf49CPR7WGFys69u4VNxy1+7dN9eTa9Q0meJfADX2uWsO4/wnDQPC3JdxmEOsztlHm8lYGcI8COdOAI4DooBOFjAgC1gBXAVcg3znucabQE808DzHvwIMALq5vhJjsCXwAAAAAElFTkSuQmCC") center center no-repeat;
background-size: 16px 16px;
filter: hue-rotate(90deg) saturate(.6);
animation: spin linear 3s forwards infinite;
}
@keyframes spin {
from {
transform: rotate(0)
}
to {
transform: rotate(360deg)
}
}
@media screen and (max-height: 600px) {
#container {
padding: 1%;
}
}
@media screen and (max-width: 1000px) {
html, body {
font-size: 12pt;
}
#container {
padding: 1%;
}
#sitename, #sitename:hover, #sitename:focus {
font-size: 8em;
}
#stats #sitename, #stats #sitename:hover, #stas #sitename:focus {
font-size: 6em;
}
#footer.b32 {
font-size: 10pt;
}
#footer.version {
font-size: 8.5pt;
}
#initializing::before {
height: 20px;
}
}

View File

@ -1,247 +0,0 @@
/* I2P Firefox theme */
/* Author: dr|z3d 2019 */
html, body {
margin: 0;
padding: 0;
min-height: 100%;
color: #bbb;
background: #111;
font-size: 14pt;
font-family: "Droid Sans", "Open Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", Verdana, Helvetica, sans-serif;
}
@supports (background-blend-mode: overlay) {
html, body {
background: repeating-linear-gradient(45deg, #333, #111 2px, #111 3px),
repeating-linear-gradient(135deg, #444, #333 2px, #222 3px);
background-blend-mode: overlay, normal;
background-size: 100% 100%, 100% 100%;
background-attachment: fixed;
}
}
#container {
padding: 2%;
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
display: table;
text-align: center;
box-sizing: border-box;
}
#panel {
padding: 20px;
position: relative;
display: table-cell;
vertical-align: middle;
text-align: center;
border: 1px solid #555;
box-shadow: inset 0 0 0 1px #111, inset 0 0 2px 1px #444, 0 0 2px 2px #000;
background: #181818;
background: repeating-linear-gradient(to right, rgba(255, 255, 255, .05), rgba(0, 0, 0, .08) 2px),
repeating-linear-gradient(to bottom, #222, #111 2px);
background-blend-mode: overlay;
will-change: transform;
}
code {
font-family: "Droid Sans Mono", "Noto Mono", "DejaVu Sans Mono", "Lucida Console", monospace;
}
#sitename, #sitename:hover, #sitename:focus {
margin: 0 auto;
font-size: 10em;
font-weight: bold;
text-transform: uppercase;
line-height: 1;
letter-spacing: .05em;
transition: ease background .3s;
color: #731;
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
}
#stats #sitename, #stats #sitename:hover, #stats #sitename:focus {
font-size: 8em;
}
#sitename:hover, #sitename:focus {
color: #951;
}
@supports (-webkit-text-stroke-width: 1px) {
#sitename, #sitename:hover, #sitename:focus {
background: #731;
background: repeating-linear-gradient(to bottom, rgba(0, 0, 0, .2), rgba(0, 0, 0, .5) 2px),
linear-gradient(to bottom, rgba(255, 96, 0, .2), rgba(0, 0, 0, .9) 100%),
linear-gradient(to bottom, #210, #310 15%, #fff 50%, #310 80%);
-moz-background-clip: text !important;
-webkit-background-clip: text !important;
background-clip: text !important;
-moz-text-fill-color: transparent !important;
-webkit-text-fill-color: transparent !important;
text-fill-color: transparent !important;
filter: drop-shadow(0 0 2px #000);
-webkit-text-stroke-color: #999;
-webkit-text-stroke-width: 0.02em;
animation: ease-in-out spinwash 60s 15s forwards infinite;
}
#sitename:hover, #sitename:focus {
background: #951;
background: repeating-linear-gradient(to bottom, rgba(0, 0, 0, .2), rgba(0, 0, 0, .3) 2px),
linear-gradient(to bottom, rgba(255, 255, 255, .2), rgba(0, 0, 0, .7) 100%),
linear-gradient(to bottom, #930, #d50 15%, #fff 50%, #930 80%, #000 100%, #ff0 150%);
filter: drop-shadow(0 0 2px #b00);
-webkit-text-stroke-color: #bbb;
animation: none;
}
}
@keyframes spinwash {
from {
filter: hue-rotate(0) drop-shadow(0 0 2px #000);
}
to {
filter: hue-rotate(360deg) drop-shadow(0 0 2px #000);
}
}
a, a:visited {
font-weight: bold;
color: #c4ad9d;
text-decoration: none;
outline: none;
}
a:hover, a:focus {
color: #e88b44;
}
a:active {
color: #f60;
}
hr {
margin: 20px 10px;
height: 1px;
color: transparent;
border: none;
background: #555;
background: linear-gradient(to right, rgba(0,0,0,0) 35%, rgba(255,255,255,.3), rgba(0,0,0,0) 65%),
linear-gradient(to right, rgba(0, 0, 0, 0), #605555, rgba(0, 0, 0, 0));
}
::selection,
::-moz-selection {
text-shadow: none;
background: #431;
color: #fff;
}
#totals {
padding-top: 6px;
line-height: 140%;
text-shadow: 0 1px 1px #000;
}
#footer {
padding: 4px;
position: absolute;
bottom: 0;
left: 0;
right: 0;
font-size: 11pt;
font-weight: bold;
border-top: 1px solid #555;
box-shadow: inset 0 0 0 1px #000, inset 0 0 2px 1px #333;
background: rgba(0, 0, 0, .5);
-moz-user-select: all;
-webkit-user-select: all;
user-select: all;
}
#footer.version {
padding: 4px;
line-height: 19px;
font-size: 9.5pt;
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
}
#footer.version a {
margin: 0 1px 0 2px;
}
#footer.version::before {
margin-left: -10px;
content: "";
display: inline-block;
margin-top: 1px;
width: 20px;
height: 18px;
vertical-align: middle;
background: url(/favicon.png) left top no-repeat;
background-size: 16px 16px;
mix-blend-mode: luminosity;
}
#initializing::before {
margin-left: -20px;
content: "";
display: inline-block;
width: 28px;
height: 24px;
vertical-align: text-bottom;
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABRhJREFUeNq0Vd1vk1UYP+f9bruPrmu70W1lrLKJzE0o+BEFt4yLRZJpgl4YZ6IXhiuT/Slcqlw6QyIauNEYIhHlAgMrJDjUDQejdF3Xj7Xv24/3+xyf01LWOpArTvLr6XnOOc/X7znPiyml6HkOgf28+cXDxwLMcYgDsBljHAS8AeJjgDFAGMAByoAk4Ddw8GdAihKCmLMcz7N7s7CXu/JpOCE8xbAXMC0KaGYwLMeG9yj7ujuEPkXmAiDnDZNYasUx1jeNqVTWOG3Z6CLIzwK2AfNgaOGRniNPMtADB+ZiEXl8Yn9nTOD4AcMgnXoVydUy4R4FKXtFQT482tU98YIvcvtuuf+fhzUW6RXiuvMfn4zEv/4hnXicIhA209MlYDrz6rg/Gu33BlWViLbtPDW/lQpBoojlw2Pdw8Fu0Xd9uRh9/8TAIU0jiDjODgcuLCBvEqY0fnQyEOzrUXybmzZqFgDsMUWI53F97boU2Tat71sWQrUaRn0BJXRqJhJKpy3U3S3AGXfHAAGCQEn0xeFOPyj3bm5a9ctMsSxjkteqhdRWNV8qWyxFnL9TUgb7fIFgl7fXNCnPzqbTO5FacMxtjQBSJMsSHz4w4vekUnrdQ6Zc8WDnxp+5B4WSsQqCH+HoHRZQxrQnMrnKh71+5fgro6GYoVOptdwtC7cbcGy7JzbUIWsli9drdqOMfDxZupNNbavGZSi975nBJl9w+VdYD23l7COel/sktWi0cWOZHNPZxkHXUL9Pym2V4T+lmMNORrdT2Xx5GRTVlZt6DYJohM7z/DwsFk4eG4kn10u7yDcNuisCiSOE08t19/OixOfXN0oaHPqdUoKqmlo/LCkeNs06jrMwNx2Lq0WoXWl3dVHi/CcCWDimqVpGTW2sOVRUa1XXJduu20KeriNBFHMs3xcu/Z14RpdItEbw+cXLq/Fn9RVK6GkovwSk7EhTBpyIHIdfOjDY6WvKIgM96NK1da2Vg/hHHxz6XwPfnL/FPAoxkiVFqZMNqQKjJNDhk4dtjLtY9cGwq7arurajtUaAdIugm8vpXYoPj0fQt98tMa/PQBP8yTZNVCmVkCBJjGz2+o+HwsFxmxd4m7oFxmFZtwnotNo4qDoUGbzYpnxyfxCdO3ctAX6dgeWiY1moJTUICvdUj987HR7slZPZSg7xHPbKAtpIFyzISksEEGqFYKQL8mMFPkVAEJTlD/i8+az6FqSC9fTbjArAQSD6HdgbfW3qoLyypRead30y56aSOdOxnWJbBJrLI13cMaBDKyEqlV6fjY9m7m323l/deLuU19iLIv5gF9k3OoD7R/aQv7JmfhvuIpFHHTKP0itrulHVs5BSs63ZlVHDQCwgoZTmINMhaAMyks+4/N7IQDg+ujfcIXH17FQsUs5UnOLVjF0wHZDBPVngkJHZqKVXH5SAl2Tz5TcMQD41JKJQQEQ3Fy/c6j06OYijwyGd8cLyojKw7ui2MAQKMLwyoM0jQO9JrldTN/7IU1bGlFqo1QDr3RUsoNTZxQRsLG5dvT7lGytMipMTewzFK0MwT/7egvOKUbP1pdv56spaEu5eBu815O44gtmrFN/9aulR42eluAiyAJD6GZbl9+ThaB8fGwlQf49CPR7WGFys69u4VNxy1+7dN9eTa9Q0meJfADX2uWsO4/wnDQPC3JdxmEOsztlHm8lYGcI8COdOAI4DooBOFjAgC1gBXAVcg3znucabQE808DzHvwIMALq5vhJjsCXwAAAAAElFTkSuQmCC") center center no-repeat;
background-size: 16px 16px;
filter: hue-rotate(180deg) saturate(.6);
animation: spin linear 3s forwards infinite;
}
@keyframes spin {
from {
transform: rotate(0)
}
to {
transform: rotate(360deg)
}
}
@media screen and (max-height: 600px) {
#container {
padding: 1%;
}
}
@media screen and (max-width: 1000px) {
html, body {
font-size: 12pt;
}
#container {
padding: 1%;
}
#sitename, #sitename:hover, #sitename:focus {
font-size: 8em;
}
#stats #sitename, #stats #sitename:hover, #stas #sitename:focus {
font-size: 6em;
}
#footer.b32 {
font-size: 10pt;
}
#footer.version {
margin-top: 0;
line-height: 18px;
font-size: 8.5pt;
}
#initializing::before {
height: 20px;
}
}

View File

@ -1,3 +0,0 @@
# announce interval in seconds
# minimum 900 (15 minutes), maximum 21600 (6 hours)
interval=1620

View File

@ -1,13 +1,13 @@
name=i2pfirefox
signer=idki2p@mail.i2p
consoleLinkName=I2PFirefox
consoleLinkURL=http://127.0.0.1:7662/firefox/
consoleLinkURL=/
consoleLinkTooltip=Firefox process manager for I2P
icon-code=iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABm1BMVEUAAAAZGRkZGRkaGhoZGRkZGRkZGRkZGRkYGBgZGRkYGBgZGRkYGBgZGRkZGRkXFxcYGBgZGRkZGRkZGRkZGRkAAAAZGRnziRYTExPzfhbzbhbzdxbzgxbzlRYLCwvzjhbzcxbMzMzzkBb~~~~~~Pl0dHRdXV3GxsYnJyfe3t7OycbBwcGcnJyHh4cjEgP39~f96dSurq5~f397e3tra2tlZWU7OzseHh7haRSGSAsOBwGpqKeWlpbgpnRUVFRNTU00NDTxmynPbRJwNgpXLwdEJQY4IAUVCwLy8vL83sK7u7uysrL7yqf6v5Tdr4H4t3H4rGz2pEvnjUnqnkQvLy~zii30gyjxdCLqdhXLexK9bhGQTQ1-QAtlLgn-9u~Pxr7Uvqr71KbYuJz6yZn5v4T3pVv3s1rkmVr1nzr1kzLyjiPzex~pbBXJYxLJXRK~XxG4aBCYRQ5iNQlMKgctGgT7-~vas4zhnGj2qlNERETlhRTefxTedRTVfxOsZhC0YBC4UhCpWw9wQgr4sH~kqF7sizVpSyfWXxOZVw56Yx8pAAAAFXRSTlMAjPQOr8vV7eVwaVtPNyUa27WCwoZvol0xAAAEx0lEQVRYw72XZ1PbQBCGXQEnVMNJAjtyjpPcbWxsMB2SQOg1tCT0EiA9kN578rOzd4eQZUuO8iXPjGfkmdv3dm-v7DqsaKht8XhrBKDG6~HXNjj-iTpnlVBClbPOrrXb18htJElmSNK5hs9tx9zp4saCXOgOq6qaH-qWkCQzEZf~rxKXqvnU0c6pCUKIohDKREKNckeqL1U0r~cyc6kzRpTJg8OTILBysji~nyEkpnKJ5npr-8suZp7sUHbvXTFybX6SvEhKVMJ12creSaeXUx1bB6utJqzsKx0pthZOc3sPnX4kpsw-uNozmr5xtZzVGRIboU54zOyb6PQ5kjkWxbdphNBd0YTFDFGpE03m88v9ZD8Ew04R8Fw0I7RLsrKZD05qH1EWqKePEUNz~GGPIY4FMkUVnCXrT-2nlMNWyhhirLM~66MIpZ-0FnGoJKjCZUP-XWCfJTx3txHnNvt3hoBxQ0rvKf2g4CreD83ggErmg4xRxPkUBE7ZZ1~QwALJgQveov0L9iNkpo3Rg855Bn82-Odmm5FZMgIKF7vaXQ0BxDIil7-rCWzo39eDRsRMDIKo1k6WHxxIkcV2TloTGG3~iDjP20s5VlJ6JtywglLHTIDzCHHo2mtfvYEyZjskWEfugg8cSCqrAc4NdEGf9tFTLvBgKwku-JhAFazAi93QOeOojLGQCQfUhUZ2~7EUnoicp6icL6IJ95VOcKGOb2I5NqklaBOZkN589ritlJmYDMvII4iSBW2f9iErxt63GlgkURZDAzigkmtXOHeQNaNXjLAYGhy1sASJjCZ7iiqwbnRhcgoup1pHiyCgiVktMMsI-N428G0C0UVogl1E5kWOdQQmV8xrIkhwsXgFqZu8DnG-oop8CBVzTLolOJI1gjxEVq5yxlFFjBdtgIRlocYBSciTVf0cVOTs7qOAjqLCTnCwLLZzepENbn79-JYP39IEwttBThrZ5IwNx2FNIM7z8gvZ5jMMX8NDIEAXcRgHGbYi0O~LFfwGFpGmcRnznTyGbMJv7Ft4mabRAxsJL7VSxpFtrsPwIww3QhM9zSjxir1AyD70sRpMwFZuYYdpYI~vY~uIwE5SpoepAQS64iLw-98E7rMsQvnXKEgFvAQubSLb9MHwI1yQhKrzKy37EhblJrJNLwzfmz6~0upYDJDIPmSTsQ-0aGIRsOKzkVYGg8H3yB7jX4KUOSzzCPjD0rm99hnZ4sbDNspaPAcO-PSnLTLYa-ckbmjP7FxEpk-bXt7k8c-~GffeCV1wC-fBAX~x8z7dX3HmJ-uGl3Eny5734gIjilXruAMlzOEoLzA0vDSVeBhZ8DRk5DtLYXNpkZWKdFsJiAZu4RQrssrKvGTCQsH4si7FB1iZZ1JoDuBhq9OvcxRPskLTtNRN4Zz5~aMzx~wXPBbFdhj3Ryt58GMHd-nFtpkP0SzOSWX3TxtnbRBPR1m5X6nhyEciaonEO17UDG5H8rzhqNjyyHIO44FhuViAbt6X8Uhn5ZYHqG8WmER4GuN-dWhEYq4Ull7txXG2izdd3nobbZ8sF8LJBGZE4JcY6CrYavsAt98lcA0kLb8ZCofDw8sSor4DLqfbVutbZd76Nvrc~6P51tt~v97-t1i3~38A57d5M52iLPcAAAAASUVORK5CYII=
icon-code=iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAABmJLR0QA/wD/AP+gvaeTAAAGyklEQVRIibWWe0xU2R3Hv+e+5g4zI/NixnFgsIUBqQLulogbtgrF1X1odzXbWmhS2pLs9g9Tk9202wYTLd0IpomkSTebbrK1NpuUuLuxhUXFalEpUZcZFRSKneX9GmEGBubFnbl3Tv+ADviAdk17/jr39/udz/f+7vmd+zvkSE0t/p+D+2+C4vHYxMT4+Pi4zzcly7LeYNhgs9vtGTqd7n8gMDQ0ePly64L04NAh5OYqPI+pKba5WTn7HvvCrhcLCp4RBOEpBSild+64L/615f33lf37WaNx2fXmm3C7cfRoS8u50ZdefEUU1atBmDUEPJ77ly43XbmiVFfDaFQA5d8eheexfbvS2Iji4u6/tV1SFGU1yKoC4XDos5a/NDZi2zZ0d8PlQiSy5AoGcf48zp5FLIa6OiQSnQOD/V9a4It+T3l5eM8eNDQUzcy0EeI6frxqbg6RCE6cqMzKul9UNPLBBz9nWRw7hhvXOxKJxBM5T94DSmnPvbv1JzA6ivz8X5WWllJKTaZj166dtlrx+us/zcnJoZRWVFS7XPUlJRgdGwwEZo1G03/IgDIUBABiMWl4ZNDpRCwGjUbT09Ozc+fOkZERSQLPY2xsrL6+vrOzU5IknofJhN27EQzOL0IESjlKH81AVsdnM3xSSpQkiHZWz3kERVG0WjgcePfdBo2muL29vabmh2fOwGzGxx+/WleXqKqqcjgi77wDQmC3IxKWU5X4zukhS2iaghlPXX/F7FggDDlSU0tZ+iBvTObiSVnBqz711oednbHCQoTDuHED0Si2bYPFAgCyjPv3IcvIzYVKBUqxdy+s5h+9xYRTo4EkxLvO2mzNZgAs6KMr6QDiaQsbs77i8QCARoPycuzdu0QHwHLYvBkFhVCJAMHsLC5cQIGKW0kHYJ2fSlXiDADKPFoAlKVb8gs++gix2BNKgDw86eiA05ln0K17LIyKiQQDQAiJoA/5xEhKliP77+3m1tYnCNAVE980amtRXPzcpKiRWX5lWETQ+HgVA4CLcgZvWnIdF+f1oyZRVL/88r6KCty8uWoGcwHU1MDtxozfFybMTWuuwiyVZZwVOqxOJVlFmgc61bw6plsgCiMG1EQh0Wh0YHAgHEZ5CXnvQ1pZCX7F+ykKbt/GJ0eNFefsTsz94lwTx/Ekv3AysygzGqQE/erUEMti5UGzgmYL8YU4ey+BkfGxCxc+2+wNXEHBs8q6Nxq6Dh4MtrYiEgHPw+tFf7Nxz/kNv4RBBaYMxq8jtbzpU5UoZuc5vWlqUCLMMySBZYEdG31luS6Oic2Fle7b0qk/9DZgYzWe0YF7gNiuQ0FZRtdhe9VAhgKqA2sAT5bzwTdg2Arhuqdde0BMsAoATubNg+u5MM8BsOli5bmfM4wsxenBI30XO6Nnkfcq0vyQr2Laj3jJ8+jqwq6BtHSolreaUEIJgCBkDVg9q9KUZCzSAchc3O+Ysv7DzgDISwswjAxAxZPqfVYQtGEmBvpbjOxD759f8zidaG3m8vFQ/1qkT0Aqh3sK8atK0OK0rAyIqyRZjHMAZGU53W9/05yq4V752RdOJcUCAcDWrZiYgP2kI+WxX28ESp162Muyvw+NW/NsOuujHZRQwgDo8hokWZO07i7Wnzm++0jq7K/TAmdqDvvcLxQUwBZX4bHxT0RK3z7Ydfo3UmXR9k0lKkVc6RVDKazEMQDmJO7T28VzUTMASpn+6Zy+yHOVFd+PJUi23Vb7g++erP7x99B3DbMSEounJQH0I3KKHQ8tLFCKnAybfp3eNLheFV3SUIc0xmELAJK8thCCDVopHGMD0lJpuW913ulzTY9Opeg1Za+VaVO15042llJt4aGX5qyG1Eyr3qRvOtV07+bd+enQ4Z+8zfMCAEWlgIKNsYuQ5XNAKcaDD32HuUCg5nc1DGEEUWBYBoDRYmw+3Vz+refTCKGUAjjwxgH/pH9LtnWRDoCV2JWQtZo+BZWiklqrZjmWEEII2fTspszcTEIIgEULAEVRRFFcDbKWwHqrzdPtecToanP5Jn3Jx2g4qtaoTSbz0wg4HJkX/3TR7/UnLb2u3vSvpre3tEfDUQoamg9d+uSSIAgWi3U1CLtjR9lqPpVK5Zvy9fX2qrXqgC9w6+ot77BXikpptjRPtycSjLjb3PFYXE/N6ekZq0HWutkNDQ3cuN6R7kxv+WMLz/OqFHFmyu+54wkGglmbswZ7ByeHJ3s7e0VRbbFYbbYNX1rA5f5cUZThvuGkxWAw5jg3+cd8d309Ai/wPP+1vC2CIARDQdtTZHBg/3coTSSvIJRShiEMw1JKk4W0xvLF8S/sWeeRQ7BG4QAAAABJRU5ErkJggg==
description=Firefox process manager for I2P
author=idk
updateURL=http://idk.i2p/i2p.plugins.firefox/plugins/i2pfirefox-update.xpi2p
updateURL.su3=http://idk.i2p/i2p.plugins.firefox/plugins/i2pfirefox-update.su3
updateURL=/i2psnark/i2p.plugins.firefox/i2pfirefox-update.xpi2p
updateURL.su3=/i2psnark/i2p.plugins.firefox/i2pfirefox-update.su3
websiteURL=http://idk.i2p/i2p.plugins.firefox/
license=Apache 2.0
min-jetty-version=9

15
showhider.css Normal file
View File

@ -0,0 +1,15 @@
/* edgar showhider CSS file */
#show {display:none; }
#hide {display:block; }
#show:target {display: block; }
#hide:target {display: none; }
#shownav {display:none; }
#hidenav {display:block; }
#shownav:target {display: block; }
#hidenav:target {display: none; }
#donate {display:none; }
#hidedonate {display:block; }
#donate:target {display: block; }
#hidedonate:target {display: none; }

View File

@ -20,12 +20,17 @@
</path>
<target name="all" depends="clean, build" />
<target name="build" depends="jar, war" />
<target name="build" depends="jar" />
<target name="builddep">
</target>
<target name="cp">
<exec executable="echo">
<arg value="${java.class.path}"></arg>
</exec>
</target>
<property name="javac.compilerargs" value="" />
<property name="javac.version" value="1.7" />
<property name="javac.version" value="1.8" />
<target name="compile">
<mkdir dir="./build" />
@ -42,53 +47,12 @@
<target name="jar" depends="builddep, compile">
<jar destfile="build/i2pfirefox.jar" basedir="./build/obj" includes="**/*.class" >
<fileset file="i2p.firefox.base.profile.zip" />
<fileset file="i2p.firefox.usability.profile.zip" />
<fileset file="i2p.chromium.base.profile.zip" />
<fileset file="i2p.chromium.usability.profile.zip" />
<fileset file="icon.png" />
</jar>
</target>
<target name="precompilejsp" depends="compile" >
<mkdir dir="build" />
<mkdir dir="build/war/WEB-INF/classes" />
<path id="jspcp">
<path refid="cp" />
<pathelement location="build/obj" />
</path>
<java classname="org.apache.jasper.JspC" fork="true" classpathref="jspcp" failonerror="true">
<arg value="-d" />
<arg value="build/jspjava" />
<arg value="-v" />
<arg value="-p" />
<arg value="net.i2p.i2pfirefox" />
<arg value="-webinc" />
<arg value="build/web-fragment.xml" />
<arg value="-webapp" />
<arg value="jsp/" />
</java>
<javac
debug="true"
deprecation="on"
source="${javac.version}" target="${javac.version}"
destdir="build/war/WEB-INF/classes"
srcdir="./build/jspjava"
includes="**/*.java"
includeAntRuntime="false"
classpathref="jspcp"
failonerror="true" >
<compilerarg line="${javac.compilerargs}" />
</javac>
<copy file="jsp/WEB-INF/web.xml" tofile="build/web.xml" />
<loadfile property="jspc.web.fragment" srcfile="build/web-fragment.xml" />
<replace file="build/web.xml">
<replacefilter token="&lt;!-- precompiled servlets --&gt;" value="${jspc.web.fragment}" />
</replace>
</target>
<target name="war" depends="precompilejsp">
<war destfile="build/firefox.war.jar" webxml="build/web.xml">
<fileset dir="build/war" />
</war>
</target>
<target name="clean">

BIN
src/icon.icns Normal file

Binary file not shown.

BIN
src/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@ -0,0 +1,468 @@
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
* 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 I2PBrowser extends I2PGenericUnsafeBrowser {
private final I2PFirefox i2pFirefox = new I2PFirefox();
private final I2PChromium i2pChromium = new I2PChromium();
private final I2PGenericUnsafeBrowser i2pGeneral =
new I2PGenericUnsafeBrowser();
private final Toolkit toolkit = Toolkit.getDefaultToolkit();
private final SystemTray tray = initTray();
private final Image image = toolkit.getImage("icon.png");
private final TrayIcon icon = initIcon();
private final PopupMenu menu = initMenu();
private final Menu submenuStrict = new Menu("Strict Mode");
private final MenuItem launchRegularBrowserStrict =
new MenuItem("Launch I2P Browser");
private final MenuItem launchPrivateBrowserStrict =
new MenuItem("Launch I2P Browser - Throwaway Session");
private final Menu submenuUsability = new Menu("Usability Mode");
private final MenuItem launchRegularBrowserUsability =
new MenuItem("Launch I2P Browser");
private final MenuItem launchPrivateBrowserUsability =
new MenuItem("Launch I2P Browser - Throwaway Session");
private final MenuItem launchConfigBrowserUsability =
new MenuItem("Launch I2P Console");
private final MenuItem closeItem = new MenuItem("Close");
public boolean firefox = false;
public boolean chromium = false;
public boolean generic = false;
public boolean chromiumFirst = false;
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);
i2pFirefox.usability = usability;
if (outputConfig)
i2pFirefox.storeFirefoxDefaults();
i2pFirefox.launch(privateWindow, url);
}
private void launchChromium(int privateWindow, String[] url) {
logger.info("I2PChromium" + privateWindow);
i2pChromium.usability = usability;
if (outputConfig)
i2pChromium.storeChromiumDefaults();
i2pChromium.launch(privateWindow, url);
}
private void launchGeneric(int privateWindowInt, String[] url) {
boolean privateWindow = false;
if (privateWindowInt == 1)
privateWindow = true;
if (outputConfig)
i2pGeneral.storeGenericDefaults();
logger.info("I2PGeneric" + privateWindowInt);
i2pGeneral.launch(privateWindow, url);
}
/**
* Construct an I2PBrowser class which automatically determines which browser
* to use.
*
* @since 0.0.16
*/
public I2PBrowser() { initIconFile(); }
/**
* Construct an I2PBrowser class which automatically determines which browser
* to use.
*
* @since 0.0.18
*/
public I2PBrowser(String browserPath) {
this.BROWSER = browserPath;
initIconFile();
}
public void setBrowser(String browserPath) { this.BROWSER = browserPath; }
/**
* Return true if there is a Chromium available
*
* @return true if Chromium is available, false otherwise
* @since 0.0.16
*/
public boolean hasChromium() {
String chrome = i2pChromium.topChromium();
if (chrome == null) {
return false;
}
if (chrome.isEmpty()) {
return false;
}
return true;
}
/**
* Return true if there is a Firefox variant available
*
* @return true if Firefox variant is available, false otherwise
* @since 0.0.16
*/
public boolean hasFirefox() {
String fox = i2pFirefox.topFirefox();
if (fox == null) {
return false;
}
if (fox.isEmpty()) {
return false;
}
return true;
}
/**
* Populates a profile directory with a proxy configuration.
* Waits for an HTTP proxy on the port 4444 to be ready.
* Launches either Firefox or Chromium with the profile directory.
*
* @param bool if true, the profile will be ephemeral(i.e. a --private-window
* profile).
* @since 0.0.17
*/
public void launch(int privateWindow, String[] url) {
validateUserDir();
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);
} else if (firefox) {
this.launchFirefox(privateWindow, url);
} else {
this.launchGeneric(privateWindow, url);
}
return;
}
if (firefox) {
this.launchFirefox(privateWindow, url);
} else if (chromium) {
this.launchChromium(privateWindow, url);
} else {
this.launchGeneric(privateWindow, url);
}
return;
}
/**
* Populates a profile directory with a proxy configuration.
* Waits for an HTTP proxy on the port 4444 to be ready.
* Launches either Firefox or Chromium with the profile directory.
*
* @param bool if true, the profile will be ephemeral(i.e. a --private-window
* profile).
* @since 0.0.16
*/
public void launch(boolean privateWindow) {
int privateWindowInt = 0;
if (privateWindow)
privateWindowInt = 1;
launch(privateWindowInt, null);
}
/**
* Populates a profile directory with a proxy configuration.
* Waits for an HTTP proxy on the port 4444 to be ready.
* Launches either Firefox or Chromium with the profile directory.
*
* @since 0.0.16
*/
public void launch() { launch(false); }
private String ValidURL(String inUrl) {
String[] schemes = {"http", "https"};
for (String scheme : schemes) {
if (inUrl.startsWith(scheme)) {
return inUrl;
}
}
return "";
}
public static void main(String[] args) {
I2PBrowser i2pBrowser = new I2PBrowser();
i2pBrowser.startup(args);
}
public ArrayList<String> parseArgs(String[] args) {
validateUserDir();
logger.info("I2PBrowser");
ArrayList<String> visitURL = new ArrayList<String>();
if (args != null) {
if (args.length > 0) {
for (String arg : args) {
if (arg.equals("-private")) {
this.privateBrowsing = 1;
}
if (arg.equals("-chromium")) {
this.chromium = true;
}
if (arg.equals("-firefox")) {
this.firefox = true;
}
if (arg.equals("-usability")) {
this.usability = true;
}
if (arg.equals("-strict")) {
this.usability = false;
}
if (arg.equals("-generic")) {
this.generic = true;
}
if (arg.equals("-app")) {
this.usability = true;
privateBrowsing = 2;
}
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);
}
if (!arg.startsWith("-")) {
visitURL.add(ValidURL(arg));
}
}
}
}
return visitURL;
}
public void startup(String[] args) {
ArrayList<String> visitURL = parseArgs(args);
try {
if (useSystray) {
startupSystray();
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
shutdownSystray();
}
});
}
} 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;
}
private SystemTray initTray() {
if (systrayRunningExternally()) {
return null;
}
if (!SystemTray.isSupported()) {
logger.warning("SystemTray is not supported");
return null;
}
return SystemTray.getSystemTray();
}
private PopupMenu initMenu() {
PopupMenu menu = new PopupMenu();
return menu;
}
private File initIconFile() {
File iconFile = new File(runtimeDirectory(""), "icon.png");
if (!iconFile.exists()) {
InputStream resources =
I2PBrowser.class.getClassLoader().getResourceAsStream("icon.png");
try {
OutputStream fos = new FileOutputStream(iconFile);
copy(resources, fos);
} catch (IOException e) {
logger.warning(e.toString());
}
}
return iconFile;
}
private TrayIcon initIcon() {
TrayIcon icon = new TrayIcon(image, "I2P Browser Profile Controller", menu);
icon.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
String[] args = {"-usability", "-app", "http://127.0.0.1:7657"};
main(args);
}
}
});
icon.setImageAutoSize(true);
return icon;
}
protected void startupSystray() {
if (!systrayRunningExternally()) {
logger.info("Setting up systray");
try {
if (useSystray) {
logger.info("Starting systray");
try {
if (systray()) {
logger.info("Systray started");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (!createSystrayRunningFile()) {
logger.warning("Failed to create systray running file");
}
}
logger.info("Adding icon to systray");
tray.add(icon);
} catch (AWTException e) {
logger.warning(e.toString());
}
} else {
logger.warning("Systray is already running externally");
}
}
protected void shutdownSystray() {
if (tray != null)
tray.remove(icon);
if (systrayRunningExternally()) {
File systrayIsRunningFile =
new File(runtimeDirectory(""), "systray.running");
systrayIsRunningFile.delete();
}
}
public boolean systray() throws Exception {
if (tray == null)
throw new Exception("System Tray is Null Exception");
launchRegularBrowserStrict.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String[] args = {"-strict"};
main(args);
}
});
submenuStrict.add(launchRegularBrowserStrict);
logger.info("Added strict mode browser");
launchPrivateBrowserStrict.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String[] args = {"-private", "-strict"};
main(args);
}
});
submenuStrict.add(launchPrivateBrowserStrict);
logger.info("Added strict+private mode browser");
menu.add(submenuStrict);
logger.info("Added strict mode submenu");
launchRegularBrowserUsability.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String[] args = {"-usability"};
main(args);
}
});
submenuUsability.add(launchRegularBrowserUsability);
logger.info("Added usability mode browser");
launchPrivateBrowserUsability.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String[] args = {"-private", "-strict"};
main(args);
}
});
submenuUsability.add(launchPrivateBrowserUsability);
logger.info("Added usability+private mode browser");
launchConfigBrowserUsability.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String[] args = {"-usability", "-app", "http://127.0.0.1:7657"};
main(args);
}
});
menu.add(submenuUsability);
menu.add(launchConfigBrowserUsability);
logger.info("Added config-only browser");
logger.info("Added usability mode submenu");
closeItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { shutdownSystray(); }
});
menu.add(closeItem);
icon.setPopupMenu(menu);
logger.info("Added close menu item");
return true;
}
}

View File

@ -0,0 +1,188 @@
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;
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 File threadLogFile() {
validateUserDir();
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;
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();
try {
this.startup(args);
cam.register(this);
cam.notify(this, ClientAppState.RUNNING,
"Starting up profile manager systray", null);
} catch (Exception e) {
logger.info(e.toString());
cam.notify(this, ClientAppState.START_FAILED,
"Error starting profile manager systray", e);
}
}
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.
}
}

View File

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

View File

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

View File

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

View File

@ -0,0 +1,42 @@
package net.i2p.i2pfirefox;
/**
* I2PChromiumProfileUnpacker.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.
*
* I2PChromiumProfileUnpacker is a class that unpacks the Chromium profile zip
* file into the Chromium base profile directory. This is not used by the
* Chromium browser instance, it's unpacked to the disk to be copied to the
* active profile directory.
*
* @author idk
* @since 0.0.1
*/
public class I2PChromiumProfileUnpacker extends I2PChromiumProfileBuilder {
public static void main(String[] args) {
I2PChromiumProfileUnpacker pu = new I2PChromiumProfileUnpacker();
String profileDirectory = pu.profileDirectory("base");
if (profileDirectory == null) {
pu.logger.info("No profile directory found");
return;
}
}
/**
* unpack the profile directory
*
* @return true if the profile directory was successfully unpacked
* @since 0.0.1
*/
public boolean unpackProfile(String profileDirectory, String mode) {
logger.info("Unpacking base profile to " + profileDirectory);
return unpackProfile(profileDirectory, "chromium", mode);
}
}

View File

@ -0,0 +1,489 @@
package net.i2p.i2pfirefox;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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;
/**
* I2PCommonBrowser.java
* Copyright (C) 2022 idk <hankhill19580@gmail.com>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the MIT License. See LICENSE.md for details.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*
* @author idk
* @since 0.0.19
*/
public class I2PCommonBrowser {
public Properties prop = new Properties();
public Logger logger = Logger.getLogger("browserlauncher");
private FileHandler fh;
static 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"));
}
public void loadPropertiesFile(File props) {
try (InputStream propsInput = new FileInputStream(props)) {
prop = new Properties();
prop.load(propsInput);
System.out.println(prop);
} catch (IOException io) {
logger.warning(io.toString());
}
}
public void validateUserDir() {
logger.info("Validating user directory");
String userDir = System.getProperty("user.dir");
String userHome = System.getProperty("user.home");
File userDirFile = new File(userDir);
File userHomeFile = new File(userHome);
logger.info("user.dir testing !" + userHomeFile.getAbsolutePath() +
".equals(" + userDirFile.getAbsolutePath() + ")");
if (!userDirFile.getAbsolutePath().contains("Program Files")) {
if (!userDirFile.getAbsolutePath().equals(
userHomeFile.getAbsolutePath())) {
logger.info("user.dir is not inconvenient");
if (userDirFile.exists()) {
logger.info("user.dir exists");
if (userDirFile.isDirectory()) {
logger.info("user.dir is a directory");
if (userDirFile.canWrite()) {
logger.info("user.dir is writable");
return;
} else {
logger.info("user.dir is not writable");
}
}
{ logger.info("user.dir is not actually a directory"); }
} else {
logger.info("user.dir does not exist");
}
} else {
logger.info("user.dir should not be the same as user.home");
}
} else {
logger.info("user.dir cannot run from inside Program Files");
}
if (isWindows())
userHome = new File(userHome, "AppData/Local/I2P").getAbsolutePath();
File defaultPathFile = new File(userHome, "i2p/i2pbrowser");
if (!defaultPathFile.exists())
defaultPathFile.mkdirs();
if (!defaultPathFile.isDirectory()) {
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());
}
public String getOperatingSystem() {
String os = System.getProperty("os.name");
if (os.startsWith("Windows")) {
return "Windows";
} else if (os.contains("Linux")) {
return "Linux";
} else if (os.contains("BSD")) {
return "BSD";
} else if (os.contains("Mac")) {
return "Mac";
}
return "Unknown";
}
protected boolean isWindows() {
String osName = System.getProperty("os.name");
logger.info("os.name" + osName);
if (osName.contains("windows"))
return true;
if (osName.contains("Windows"))
return true;
if (osName.contains("WINDOWS"))
return true;
return false;
}
protected boolean isOSX() {
String osName = System.getProperty("os.name");
logger.info("os.name" + osName);
if (osName.contains("OSX"))
return true;
if (osName.contains("osx"))
return true;
if (osName.contains("mac"))
return true;
if (osName.contains("Mac"))
return true;
if (osName.contains("apple"))
return true;
if (osName.contains("Apple"))
return true;
if (osName.contains("Darwin"))
return true;
if (osName.contains("darwin"))
return true;
return false;
}
// public void logger.info(String line) { logger.info(line); }
private File logFile() {
validateUserDir();
String userDir = System.getProperty("user.dir");
File log = new File(userDir, "logs");
if (!log.exists())
log.mkdirs();
return new File(log, "browserlauncher.log");
}
/**
* get the runtime directory, creating it if create=true
*
* @param create if true, create the runtime directory if it does not exist
* @return the runtime directory, or null if it could not be created
* @since 0.0.19
*/
protected File runtimeDirectory(boolean create, String override) {
String rtd = runtimeDirectory(override);
File rtdFile = new File(rtd);
if (create) {
if (!rtdFile.exists()) {
rtdFile.mkdir();
}
}
return new File(rtd);
}
/**
* get the correct runtime directory
*
* @return the runtime directory, or null if it could not be created or found
* @since 0.0.19
*/
protected String runtimeDirectory(String override) {
// get the I2P_BROWSER_DIR environment variable
String rtd = System.getenv(override);
// if it is not null and not empty
if (rtd != null && !rtd.isEmpty()) {
// check if the file exists
File rtdFile = new File(rtd);
if (rtdFile.exists()) {
// if it does, return it
return rtd;
}
}
// obtain the PLUGIN environment variable
String plugin = System.getenv("PLUGIN");
if (plugin != null && !plugin.isEmpty()) {
File pluginDir = new File(plugin);
if (pluginDir.exists()) {
return pluginDir.toString();
}
}
String userDir = System.getProperty("user.dir");
if (userDir != null && !userDir.isEmpty()) {
File userDir1 = new File(userDir);
if (userDir1.exists()) {
return userDir1.toString();
}
}
String homeDir = System.getProperty("user.home");
if (homeDir != null && !homeDir.isEmpty()) {
File homeDir1 = new File(homeDir + "/.i2p");
if (homeDir1.exists()) {
return homeDir.toString();
}
File homeDir2 = new File(homeDir + "/i2p");
if (homeDir2.exists()) {
return homeDir2.toString();
}
}
return "";
}
/**
* get the profile directory, creating it if necessary
*
* @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) {
String pd = System.getenv(envVar);
if (pd != null && !pd.isEmpty()) {
File pdf = new File(pd);
if (pdf.exists() && pdf.isDirectory()) {
return pd;
}
}
String rtd = runtimeDirectory("");
return profileDir(rtd, browser, base, app);
}
protected String profileDir(String file, String browser, String base,
boolean app) {
String appString = "";
if (app) {
appString = ".app";
}
File profileDir =
new File(file, "i2p." + browser + ".profile." + base + appString);
return profileDir.getAbsolutePath();
}
protected boolean unpackProfile(String profileDirectory, String browser,
String base) {
logger.info("Unpacking base profile to " + profileDirectory);
try {
final InputStream resources =
this.getClass().getClassLoader().getResourceAsStream(
"i2p." + browser + "." + base + ".profile.zip");
if (resources == null) {
logger.info("Could not find resources");
return false;
}
logger.info(resources.toString());
// InputStream corresponds to a zip file. Unzip it.
// Files.copy(r, new File(profileDirectory).toPath(),
// StandardCopyOption.REPLACE_EXISTING);
ZipInputStream zis = new ZipInputStream(resources);
ZipEntry entry;
// while there are entries I process them
while ((entry = zis.getNextEntry()) != null) {
logger.info("entry: " + entry.getName() + ", " + entry.getSize());
// consume all the data from this entry
if (entry.isDirectory()) {
logger.info("Creating directory: " + entry.getName());
File dir = new File(profileDirectory, entry.getName());
dir.mkdirs();
} else {
logger.info("Creating file: " + entry.getName());
File file = new File(profileDirectory, entry.getName());
file.createNewFile();
Files.copy(zis, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
while (zis.available() > 0)
zis.read();
// I could close the entry, but getNextEntry does it automatically
// zis.closeEntry()
}
// loop through the Enumeration
} catch (Exception e) {
logger.info("Error copying profile files: " + e.getMessage());
return false;
}
return true;
}
protected void copyDirectory(File sourceDirectory, File destinationDirectory,
String browser, String base) throws IOException {
destinationDirectory = new File(destinationDirectory.toString().replace(
"i2p." + browser + "." + base + ".profile", ""));
if (!destinationDirectory.exists()) {
destinationDirectory.mkdir();
}
for (String f : sourceDirectory.list()) {
copyDirectoryCompatibilityMode(new File(sourceDirectory, f),
new File(destinationDirectory, f), browser,
base);
}
}
private void copyDirectoryCompatibilityMode(File source, File destination,
String browser, String base)
throws IOException {
if (source.isDirectory()) {
copyDirectory(source, destination, browser, base);
} else {
copyFile(source, destination);
}
}
public void copy(InputStream source, OutputStream target) throws IOException {
byte[] buf = new byte[8192];
int length;
while ((length = source.read(buf)) != -1) {
target.write(buf, 0, length);
}
}
private void copyFile(File sourceFile, File destinationFile)
throws IOException {
try (InputStream in = new FileInputStream(sourceFile);
OutputStream out = new FileOutputStream(destinationFile)) {
byte[] buf = new byte[1024];
int length;
while ((length = in.read(buf)) > 0) {
out.write(buf, 0, length);
}
}
}
public boolean validateProfileFirstRun(String profileDirectory) {
File profileDir = new File(profileDirectory);
if (!profileDir.exists()) {
logger.info("Profile directory does not exist");
return false;
}
if (!profileDir.isDirectory()) {
logger.info("Profile directory is not a directory");
return false;
}
File frf = new File(profileDir, "first-run");
if (frf.exists()) {
frf.delete();
// is a first run
return true;
}
return false;
}
/**
* Waits for an HTTP proxy on port 4444 to be ready.
* Returns false on timeout of 200 seconds.
*
* @return true if the proxy is ready, false if it is not.
* @since 0.0.1
*/
public boolean waitForProxy() { return waitForProxy(CONFIGURED_TIMEOUT); }
/**
* Waits for an HTTP proxy on port 4444 to be ready.
* Returns false on timeout of the specified number of seconds.
*
* @param timeout the number of seconds to wait for the proxy to be ready.
* @return true if the proxy is ready, false if it is not.
* @since 0.0.1
*/
public boolean waitForProxy(int timeout) {
return waitForProxy(timeout, 4444);
}
/**
* Waits for an HTTP proxy on the specified port to be ready.
* Returns false on timeout of the specified number of seconds.
*
* @param timeout the number of seconds to wait for the proxy to be ready.
* @param port the port to wait for the proxy to be ready on.
* @return true if the proxy is ready, false if it is not.
* @since 0.0.1
*/
public boolean waitForProxy(int timeout, int port) {
return waitForProxy(timeout, port, "localhost");
}
/**
* Waits for an HTTP proxy on the specified port to be ready.
* Returns false on timeout of the specified number of seconds.
* If the timeout is zero or less, the check is disabled and always
* returns true.
*
* @param timeout the number of seconds to wait for the proxy to be ready.
* @param port the port to wait for the proxy to be ready on.
* @param host the host to wait for the proxy to be ready on.
* @return true if the proxy is ready, false if it is not.
* @since 0.0.1
*/
public boolean waitForProxy(int timeout, int port, String host) {
logger.info("waiting up to " + timeout + "seconds for a proxy");
if (timeout <= 0) {
return true;
}
for (int i = 0; i < timeout; i++) {
logger.info("Waiting for proxy");
if (checkifPortIsOccupied(port, host)) {
return true;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return false;
}
public boolean checkifPortIsOccupied(int port, String host) {
try {
Socket socket = new Socket(host, port);
socket.close();
return true;
} catch (IOException e) {
return false;
}
}
/**
* Alters the proxy timeout to customized value time, in seconds.
* May be zero.
*
* @param time
*/
public void setProxyTimeoutTime(int time) { CONFIGURED_TIMEOUT = time; }
/**
*
*/
protected String join(String[] arr) {
StringBuilder val = new StringBuilder("");
for (int x = 0; x < arr.length; x++) {
val.append(" \"");
val.append(arr[x]);
val.append("\"");
}
return val.toString();
}
public void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException bad) {
bad.printStackTrace();
throw new RuntimeException(bad);
}
}
public File searchFile(File file, String search) {
if (file.isDirectory()) {
File[] arr = file.listFiles();
for (File f : arr) {
File found = searchFile(f, search);
if (found != null)
return found;
}
} else {
if (file.getName().equals(search)) {
return file;
}
}
return null;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,263 +1,334 @@
package net.i2p.i2pfirefox;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
public class I2PFirefoxProfileBuilder {
private static boolean strict;
/**
* I2PFirefoxProfileBuilder.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.
*
* I2PFirefoxProfileBuilder is a class that builds a profile directory which
* contains the I2P browser profile for the Firefox browser family. It manages
* the base profile directory and copies it's contents to the active profile
* directory, which is actually used by Firefox.
*
* @author idk
* @since 0.0.1
*/
public class I2PFirefoxProfileBuilder extends I2PFirefoxProfileChecker {
private boolean strict;
private String userChromeCSS() {
String ret =
"@namespace url(\"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\")\n";
private static String profileDir(String file) {
File profileDir = new File(file, "i2p.firefox.profile");
// make sure the directory exists
if (profileDir.exists()) {
return profileDir.getAbsolutePath();
} else {
// create the directory
profileDir.mkdir();
return profileDir.getAbsolutePath();
}
}
/* only needed once */
/*
* get the profile directory, creating it if necessary
*
* @return the profile directory, or null if it could not be created
*/
public static String profileDirectory() {
String pd = System.getenv("I2P_FIREFOX_PROFILE");
if (pd != null && !pd.isEmpty()) {
File pdf = new File(pd);
if (pdf.exists() && pdf.isDirectory()) {
return pd;
}
}
String rtd = runtimeDirectory();
return profileDir(rtd);
}
private static String baseProfileDir(String file) {
File profileDir = new File(file, "i2p.firefox.base.profile");
// make sure the directory exists
if (profileDir.exists()) {
return profileDir.getAbsolutePath();
} else {
// create the directory
profileDir.mkdir();
return profileDir.getAbsolutePath();
}
}
ret += "@namespace html url(\" http : // www.w3.org/1999/xhtml\");\n";
ret += "#PersonalToolbar,\n";
ret += "#PanelUI-Button,\n";
ret += "#PanelUI-menu-button,\n";
ret += "#star-button,\n";
ret += "#forward-button,\n";
ret += "#home-button,\n";
ret += "#bookmarks-toolbar-button,\n";
ret += "#library-button,\n";
ret += "#sidebar-button,\n";
ret += "#pocket-button,\n";
ret += "#fxa-toolbar-menu-button,\n";
ret += "#reader-mode-button,\n";
ret += "#identity-icon {\n";
ret += " visibility: collapse;\n";
ret += "}\n";
ret += "\n";
ret += "#urlbar-background {\n";
ret += " background-color: black !important;\n";
ret += "}\n";
ret += "\n";
ret += "\n";
ret += "/* Remove back button circle */\n";
ret += "\n";
ret += "#back-button:not(:hover),\n";
ret += "#back-button:not(:hover)>.toolbarbutton-icon {\n";
ret += " background: transparent !important;\n";
ret += " border: none !important;\n";
ret += " box-shadow: none !important;\n";
ret += "}\n";
ret += "\n";
ret += "#back-button:hover,\n";
ret += "#back-button:hover>.toolbarbutton-icon {\n";
ret += " border: none !important;\n";
ret += " border-radius: 2px !important;\n";
ret += "}\n";
ret += "\n";
ret += "#urlbar-container {\n";
ret += " visibility: collapse !important;\n";
ret += "}\n";
ret += "\n";
ret += "#TabsToolbar-customization-target {\n";
ret += " min-width: 50vw;\n";
ret += " max-width: 50vw;\n";
ret += " width: 50vw;\n";
ret += "}\n";
ret += "\n";
ret += "#TabsToolbar {";
ret += " display: inherit;";
ret += "}";
ret += "\n";
ret += "toolbar {";
ret += " max-width: 50%;";
ret += "}";
ret += "\n";
ret += "#navigator-toolbox {";
ret += " display: inline-flex;";
ret += "}";
ret += "\n";
return ret;
}
/*
* get the base profile directory, creating it if necessary
*
* @return the base profile directory, or null if it could not be created
*/
public static String baseProfileDirectory() {
String pd = System.getenv("I2P_FIREFOX_BASE_PROFILE");
if (pd != null && !pd.isEmpty()) {
File pdf = new File(pd);
if (pdf.exists() && pdf.isDirectory()) {
return pd;
}
}
String rtd = runtimeDirectory();
return baseProfileDir(rtd);
}
/**
* get the profile directory, creating it if necessary
*
* @return the profile directory, or null if it could not be created
*/
// public String profileDirectory() {
// return profileDirectory("I2P_FIREFOX_PROFILE", "firefox", false);
// }
/*
* get the runtime directory, creating it if create=true
*
* @param create if true, create the runtime directory if it does not exist
* @return the runtime directory, or null if it could not be created
* @since 0.0.1
*/
public static File runtimeDirectory(boolean create) {
String rtd = runtimeDirectory();
File rtdFile = new File(rtd);
if (create) {
if (!rtdFile.exists()) {
rtdFile.mkdir();
}
}
return new File(rtd);
private String baseProfileDir(String file, String base) {
File profileDir = new File(file, "i2p.firefox." + base + ".profile");
// make sure the directory exists
if (profileDir.exists()) {
return profileDir.getAbsolutePath();
} else {
// create the directory
I2PFirefoxProfileUnpacker unpacker = new I2PFirefoxProfileUnpacker();
if (!unpacker.unpackProfile(profileDir.getAbsolutePath(), base)) {
return null;
}
return profileDir.getAbsolutePath();
}
}
/*
* get the correct runtime directory
*
* @return the runtime directory, or null if it could not be created or found
* @since 0.0.1
*/
public static String runtimeDirectory() {
// get the I2P_FIREFOX_DIR environment variable
String rtd = System.getenv("I2P_FIREFOX_DIR");
// if it is not null and not empty
if (rtd != null && !rtd.isEmpty()) {
// check if the file exists
File rtdFile = new File(rtd);
if (rtdFile.exists()) {
// if it does, return it
return rtd;
}
/**
* get the base profile directory, creating it if necessary
*
* @return the base profile directory, or null if it could not be created
*/
public String baseProfileDirectory(String base) {
String pd = System.getenv("I2P_FIREFOX_BASE_PROFILE");
if (pd != null && !pd.isEmpty()) {
File pdf = new File(pd);
if (pdf.exists() && pdf.isDirectory()) {
return pd;
} else {
I2PFirefoxProfileUnpacker unpacker = new I2PFirefoxProfileUnpacker();
if (!unpacker.unpackProfile(pdf.getAbsolutePath(), base)) {
return null;
}
// obtain the PLUGIN environment variable
String plugin = System.getenv("PLUGIN");
if (plugin != null && !plugin.isEmpty()) {
File pluginDir = new File(plugin);
if (pluginDir.exists()) {
return pluginDir.toString();
}
}
String userDir = System.getProperty("user.dir");
if (userDir != null && !userDir.isEmpty()) {
File userDir1 = new File(userDir);
if (userDir1.exists()) {
return userDir1.toString();
}
}
String homeDir = System.getProperty("user.home");
if (homeDir != null && !homeDir.isEmpty()) {
File homeDir1 = new File(homeDir+"/.i2p");
if (homeDir1.exists()) {
return homeDir.toString();
}
File homeDir2 = new File(homeDir+"/i2p");
if (homeDir2.exists()) {
return homeDir2.toString();
}
}
return "";
}
}
String rtd = runtimeDirectory();
return baseProfileDir(rtd, base);
}
/*
* Copy the inert base profile directory to the runtime profile directory
*
* @since 0.0.1
*/
public static boolean copyBaseProfiletoProfile() {
String baseProfile = baseProfileDirectory();
String profile = profileDirectory();
if (baseProfile.isEmpty() || profile.isEmpty()) {
return false;
}
File baseProfileDir = new File(baseProfile);
File profileDir = new File(profile);
if (!baseProfileDir.exists() || profileDir.listFiles() == null ) {
File userJs = new File(baseProfileDir, "user.js");
File profileUserJs = new File(profileDir, "user.js");
if (userJs.exists() && !profileUserJs.exists()) {
try {
Files.copy(userJs.toPath(), profileUserJs.toPath(), StandardCopyOption.REPLACE_EXISTING);
return true;
} catch (Exception e) {
if (strict) {
throw new RuntimeException(e);
} else {
System.err.println("Could not copy user.js to profile directory: " + e.getMessage());
return false;
}
}
}
return false;
}
try {
Files.copy(baseProfileDir.toPath(), profileDir.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (Exception e) {
System.out.println("Error copying base profile to profile"+e);
return false;
}
// if user.js does not exist yet, make an empty one.
if (!touch(profileDir.toString(), "user.js")) {
return false;
}
// if extensions does not exist yet, make an empty one.
if (!mkExtensionsDir(profileDir.toString())){
return false;
}
/**
* get the runtime directory, creating it if create=true
*
* @param create if true, create the runtime directory if it does not exist
* @return the runtime directory, or null if it could not be created
* @since 0.0.1
*/
public File runtimeDirectory(boolean create) {
String rtd = runtimeDirectory();
return runtimeDirectory(create, rtd);
}
return copyStrictOptions();
}
private static boolean touch(String dir, String file){
File f = new File(dir, file);
if (!f.exists()) {
try {
f.createNewFile();
} catch (Exception e) {
System.out.println("Error creating "+file+" in "+dir+" "+e);
return false;
}
}
return true;
}
private static boolean mkExtensionsDir(String dir) {
File f = new File(dir, "extensions");
if (!f.exists()) {
try {
f.mkdir();
} catch (Exception e) {
System.out.println("Error creating extensions directory in "+dir+" "+e);
return false;
}
}
return true;
/**
* get the correct runtime directory
*
* @return the runtime directory, or null if it could not be created or found
* @since 0.0.1
*/
public String runtimeDirectory() {
// get the I2P_FIREFOX_DIR environment variable
String rtd = System.getenv("I2P_FIREFOX_DIR");
// if it is not null and not empty
if (rtd != null && !rtd.isEmpty()) {
// check if the file exists
File rtdFile = new File(rtd);
if (rtdFile.exists()) {
// if it does, return it
return runtimeDirectory(rtd);
}
}
return runtimeDirectory("");
}
/*
* Copy the strict options from the base profile to the profile
*
* @return true if successful, false otherwise
* @since 0.0.1
*/
public static boolean copyStrictOptions() {
if (!strict){
return true;
}
String baseProfile = baseProfileDirectory();
String profile = profileDirectory();
if (baseProfile.isEmpty() || profile.isEmpty()) {
return false;
}
File baseProfileDir = new File(baseProfile);
File profileDir = new File(profile);
if (!baseProfileDir.exists() || !profileDir.exists()) {
return false;
}
File baseOverrides = new File(baseProfile, "strict-overrides.js");
File userOverrides = new File(baseProfile, "user-overrides.js");
if (!baseOverrides.exists()) {
return false;
}
try {
Files.copy(baseOverrides.toPath(), userOverrides.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (Exception e) {
System.out.println("Error copying base profile to profile"+e);
return false;
}
// if user-overrides.js does not exist yet, make an empty one.
if (!touch(profileDir.toString(), "user-overrides.js")) {
return false;
}
return true;
/**
* Copy the inert base profile directory to the runtime profile directory
*
* @since 0.0.1
*/
public boolean copyBaseProfiletoProfile(String base, boolean app) {
String baseProfile = baseProfileDirectory(base);
String profile = profileDirectory(app, base);
logger.info("Copying base profile to profile directory: " + baseProfile +
" -> " + profile);
if (baseProfile.isEmpty() || profile.isEmpty()) {
return false;
}
File baseProfileDir = new File(baseProfile);
File profileDir = new File(profile);
/*
* Construct a new Profile Builder
*
* @since 0.0.1
*/
I2PFirefoxProfileBuilder() {
I2PFirefoxProfileBuilder.strict = false;
if (!profileDir.exists()) {
try {
logger.info("Copying base profile to profile directory");
copyDirectory(baseProfileDir, profileDir, "firefox", base);
} catch (Exception e) {
logger.info("Error copying base profile to profile" + e);
return false;
}
logger.info("Copied base profile to profile directory");
}
// if user.js does not exist yet, make an empty one.
// if (!touch(profileDir.toString(), "user.js")) {
// return false;
//}
// if extensions does not exist yet, make an empty one.
// if (!mkExtensionsDir(profileDir.toString())){
// return false;
//}
/*
* Construct a new Profile Builder
* @param strict if true, the strict overrides will be copied to the profile
*
* @since 0.0.1
*/
I2PFirefoxProfileBuilder(boolean strict) {
I2PFirefoxProfileBuilder.strict = strict;
return copyStrictOptions(base, app);
}
protected boolean writeAppChrome(String profile) {
File dir = new File(profile, "chrome");
if (!dir.exists())
dir.mkdirs();
File f = new File(dir, "userChrome.css");
try {
Files.write(f.toPath(), userChromeCSS().getBytes());
} catch (IOException e) {
logger.warning(e.toString());
return false;
}
return true;
}
protected boolean deleteAppChrome(String profile) {
File dir = new File(profile, "chrome");
if (!dir.exists())
return true;
File f = new File(dir, "userChrome.css");
if (f.exists())
f.delete();
return true;
}
/**
* Copy the strict options from the base profile to the profile
*
* @return true if successful, false otherwise
* @since 0.0.1
*/
public boolean copyStrictOptions(String base, boolean app) {
logger.info("Checking strict options");
String baseProfile = baseProfileDirectory(base);
String profile = profileDirectory(app, base);
if (baseProfile.isEmpty() || profile.isEmpty()) {
logger.info("Empty paths");
return false;
}
File baseProfileDir = new File(baseProfile);
File profileDir = new File(profile);
setupUserChrome(profileDir, app);
if (!baseProfileDir.exists() || !profileDir.exists()) {
logger.info("Empty directories");
return false;
}
File baseOverrides = new File(baseProfile, "strict-overrides.js");
File userOverrides = new File(baseProfile, "user-overrides.js");
try {
if (baseOverrides.exists()) {
if (strict) {
logger.info("Enabling strict options");
Files.copy(baseOverrides.toPath(), userOverrides.toPath(),
StandardCopyOption.REPLACE_EXISTING);
return true;
}
}
} catch (Exception e) {
logger.info("Error copying base profile to profile" + e);
return false;
}
logger.info("Done setting up fancy Firefox options");
return true;
}
public void setupUserChrome(File profileDir, boolean app) {
File workingUserOverrides = new File(profileDir, "user-overrides.js");
logger.info(workingUserOverrides.getAbsolutePath());
if (workingUserOverrides.exists()) {
logger.info("Checking app mode settings");
if (app) {
logger.info("Setting profile to app mode");
this.undoValue(
"toolkit.legacyUserProfileCustomizations.stylesheets\", false",
"toolkit.legacyUserProfileCustomizations.stylesheets\", true",
workingUserOverrides);
writeAppChrome(profileDir.toString());
} else {
logger.info("Taking profile out of app mode");
this.undoValue(
"toolkit.legacyUserProfileCustomizations.stylesheets\", true",
"toolkit.legacyUserProfileCustomizations.stylesheets\", false",
workingUserOverrides);
deleteAppChrome(profileDir.toString());
}
}
logger.info("Done setting up fancy Firefox options");
File workingPrefOverrides = new File(profileDir, "prefs.js");
logger.info(workingPrefOverrides.getAbsolutePath());
if (workingPrefOverrides.exists()) {
logger.info("Checking app mode settings");
if (app) {
logger.info("Setting profile to app mode");
this.undoValue(
"toolkit.legacyUserProfileCustomizations.stylesheets\", false",
"toolkit.legacyUserProfileCustomizations.stylesheets\", true",
workingPrefOverrides);
writeAppChrome(profileDir.toString());
} else {
logger.info("Taking profile out of app mode");
this.undoValue(
"toolkit.legacyUserProfileCustomizations.stylesheets\", true",
"toolkit.legacyUserProfileCustomizations.stylesheets\", false",
workingPrefOverrides);
deleteAppChrome(profileDir.toString());
}
}
}
/**
* Construct a new Profile Builder
*
* @since 0.0.1
*/
public I2PFirefoxProfileBuilder() { this.strict = false; }
/**
* Construct a new Profile Builder
* @param strict if true, the strict overrides will be copied to the profile
*
* @since 0.0.1
*/
public I2PFirefoxProfileBuilder(boolean strict) { this.strict = strict; }
}

View File

@ -1,92 +1,230 @@
package net.i2p.i2pfirefox;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class I2PFirefoxProfileChecker {
public static void main(String[] args) {
String profileDirectory = I2PFirefoxProfileBuilder.profileDirectory();
if (profileDirectory == null) {
System.out.println("No profile directory found");
return;
}
System.out.println("Profile directory: " + profileDirectory);
boolean ok = validateProfileDirectory(profileDirectory);
if (ok) {
System.out.println("Profile directory is valid");
} else {
System.out.println("Profile directory is invalid");
}
}
public static boolean validateProfileDirectory(String profileDirectory) {
File profileDir = new File(profileDirectory);
if (!profileDir.exists()) {
System.out.println("Profile directory does not exist");
return false;
}
if (!profileDir.isDirectory()) {
System.out.println("Profile directory is not a directory");
return false;
}
if (!profileDir.canRead()) {
System.out.println("Profile directory is not readable");
return false;
}
if (!profileDir.canWrite()) {
System.out.println("Profile directory is not writable");
return false;
}
if (!validateFile(profileDir+"/prefs.js")){
System.out.println("prefs.js is not valid");
return false;
}
if (!validateFile(profileDir+"/user.js")){
System.out.println("user.js is not valid");
return false;
}
if (!validateExtensionDirectory(profileDir+"/extensions")){
System.out.println("extensions directory is invalid");
return false;
}
return true;
/**
* I2PFirefoxProfileChecker.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.
*
* I2PFirefoxProfileChecker is a class that checks if the Firefox profile
* directory exists and is valid.
*
* @author idk
* @since 0.0.1
*/
public class I2PFirefoxProfileChecker extends I2PCommonBrowser {
/**
* @param args unused
*/
public static void main(String[] args) {
I2PFirefoxProfileChecker pc = new I2PFirefoxProfileChecker();
String profileDirectory = pc.profileDirectory(false, "base");
if (profileDirectory == null) {
pc.logger.info("No profile directory found");
return;
}
public static boolean validateFile(String file) {
File f = new File(file);
if (!f.exists()) {
System.out.println("User JavaScript file does not exist");
return false;
}
if (!f.isFile()) {
System.out.println("User JavaScript file is not a file");
return false;
}
if (!f.canRead()) {
System.out.println("User JavaScript file is not readable");
return false;
}
if (!f.canWrite()) {
System.out.println("User JavaScript file is not writable");
return false;
}
return true;
pc.logger.info("Profile directory: " + profileDirectory);
boolean ok = pc.validateProfileDirectory(profileDirectory);
if (ok) {
pc.logger.info("Profile directory is valid");
} else {
pc.logger.info("Profile directory is invalid");
}
public static boolean validateExtensionDirectory(String extensionDirectory) {
File extensionDir = new File(extensionDirectory);
if (!extensionDir.exists()) {
System.out.println("Extension directory does not exist");
return false;
}
if (!extensionDir.isDirectory()) {
System.out.println("Extension directory is not a directory");
return false;
}
if (!extensionDir.canRead()) {
System.out.println("Extension directory is not readable");
return false;
}
if (!extensionDir.canWrite()) {
System.out.println("Extension directory is not writable");
return false;
}
return true;
}
/**
* get the profile directory, creating it if necessary
*
* @return the profile directory, or null if it could not be created
*/
public String profileDirectory(boolean app, String base) {
return profileDirectory("I2P_FIREFOX_PROFILE", "firefox", base, app);
}
/**
* Return true if the profile directory is valid.
*
* @param profileDirectory the profile directory to check
* @return true if the profile directory is valid, false otherwise
* @since 0.0.1
*/
public boolean validateProfileDirectory(String profileDirectory) {
File profileDir = new File(profileDirectory);
if (!profileDir.exists()) {
logger.info("Profile directory does not exist");
return false;
}
if (!profileDir.isDirectory()) {
logger.info("Profile directory is not a directory");
return false;
}
if (!profileDir.canRead()) {
logger.info("Profile directory is not readable");
return false;
}
if (!profileDir.canWrite()) {
logger.info("Profile directory is not writable");
return false;
}
if (!validateFile(profileDir + "/prefs.js")) {
logger.info("prefs.js is not valid");
return false;
}
if (!validateFile(profileDir + "/user.js")) {
logger.info("user.js is not valid");
return false;
}
if (!validateExtensionDirectory(profileDir + "/extensions")) {
logger.info("extensions directory is invalid");
return false;
}
return deRestrictHTTPSAndSetupHomepage(profileDir.toString());
}
private boolean deRestrictHTTPSAndSetupHomepage(String profile) {
// String profile = profileDirectory();
File profileDir = new File(profile);
if (profileDir.exists()) {
File prefOverrides = new File(profile, "prefs.js");
if (prefOverrides.exists()) {
undoHttpsOnlyMode(prefOverrides);
undoHomepage(prefOverrides);
}
File userSettings = new File(profile, "user.js");
if (userSettings.exists()) {
undoHttpsOnlyMode(userSettings);
undoHomepage(userSettings);
}
File userOverrides = new File(profile, "user-overrides.js");
if (userOverrides.exists()) {
undoHttpsOnlyMode(userOverrides);
undoHomepage(userOverrides);
}
}
return false;
}
private boolean undoHttpsOnlyMode(File fileToBeModified) {
String oldString = "\"dom.security.https_only_mode\", true";
String newString = "\"dom.security.https_only_mode\", false";
return undoValue(oldString, newString, fileToBeModified);
}
private boolean undoHomepage(File fileToBeModified) {
String oldString = "\"browser.startup.homepage\", true";
File file = new File("Student.txt");
String newString =
"\"browser.startup.homepage\", \"http://127.0.0.1:7657\"";
try {
try (Scanner scanner = new Scanner(file)) {
// now read the file line by line...
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.contains("browser.startup.homepage")) {
oldString = line.toString();
return undoValue(oldString, newString, fileToBeModified);
}
}
}
} catch (FileNotFoundException e) {
// handle this
}
return true;
}
public boolean undoValue(String oldString, String newString,
File fileToBeModified) {
String oldContent = "";
BufferedReader reader = null;
FileWriter writer = null;
try {
reader = new BufferedReader(new FileReader(fileToBeModified));
String line = reader.readLine();
while (line != null) {
oldContent = oldContent + line + System.lineSeparator();
line = reader.readLine();
}
String newContent = oldContent.replaceAll(oldString, newString);
writer = new FileWriter(fileToBeModified);
writer.write(newContent);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
writer.close();
return true;
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
/**
* Return true if the file is valid.
*
* @param file the file to check
* @return true if the file is valid, false otherwise
* @since 0.0.1
*/
public boolean validateFile(String file) {
File f = new File(file);
if (!f.exists()) {
logger.info("User JavaScript file does not exist");
return false;
}
if (!f.isFile()) {
logger.info("User JavaScript file is not a file");
return false;
}
if (!f.canRead()) {
logger.info("User JavaScript file is not readable");
return false;
}
if (!f.canWrite()) {
logger.info("User JavaScript file is not writable");
return false;
}
return true;
}
/**
* Return true if the extension directory is valid.
*
* @param extensionDirectory the extension directory to check
* @return true if the extension directory is valid, false otherwise
* @since 0.0.1
*/
public boolean validateExtensionDirectory(String extensionDirectory) {
File extensionDir = new File(extensionDirectory);
if (!extensionDir.exists()) {
logger.info("Extension directory does not exist");
return false;
}
if (!extensionDir.isDirectory()) {
logger.info("Extension directory is not a directory");
return false;
}
if (!extensionDir.canRead()) {
logger.info("Extension directory is not readable");
return false;
}
if (!extensionDir.canWrite()) {
logger.info("Extension directory is not writable");
return false;
}
return true;
}
}

View File

@ -0,0 +1,41 @@
package net.i2p.i2pfirefox;
/**
* I2PFirefoxProfileUnpacker.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.
*
* I2PFirefoxProfileUnpacker is a class that unpacks the I2P Firefox profile
* from a zip file embedded in the `jar` file. The zip is unpacked to a base
* directory where it is left untouched, and the base profile is copied to the
* active profile directory.
*
* @author idk
* @since 0.0.1
*/
public class I2PFirefoxProfileUnpacker extends I2PFirefoxProfileBuilder {
public static void main(String[] args) {
I2PFirefoxProfileUnpacker up = new I2PFirefoxProfileUnpacker();
String profileDirectory = up.profileDirectory(false, "base");
if (profileDirectory == null) {
up.logger.info("No profile directory found");
return;
}
}
/**
* unpack the profile directory
*
* @return true if the profile directory was successfully unpacked
* @since 0.0.1
*/
public boolean unpackProfile(String profileDirectory, String base) {
return unpackProfile(profileDirectory, "firefox", base);
}
}

Some files were not shown because too many files have changed in this diff Show More