668 Commits
0.51 ... master

Author SHA1 Message Date
eyedeekay
02502e3263 update debian changelog 2025-02-20 14:53:29 -05:00
eyedeekay
3e11daf91f Recreate context after clearing context 2025-02-20 14:50:55 -05:00
eyedeekay
c198bd1b7d mozilla release 2025-02-09 17:47:48 -05:00
eyedeekay
db1f8a11b5 Add changelog 2025-02-07 15:08:09 -05:00
eyedeekay
32a5c79818 Call onContextsGot when windows are created 2025-02-07 14:58:03 -05:00
eyedeekay
c5c7cc649e Fix flipped conditional 2025-02-07 14:57:17 -05:00
eyedeekay
bf641a4ff8 Refactor scrub.js 2025-01-14 18:42:49 -05:00
eyedeekay
c027a3d2ca Refactor in scrub.js, reformat in the rest of the javascript 2025-01-14 18:23:17 -05:00
eyedeekay
57eeef643e Refactor and document info/display elements 2025-01-14 15:52:37 -05:00
eyedeekay
0c9f5fefda refactor bookmarks.js 2025-01-14 15:30:04 -05:00
eyedeekay
81db1dde4f Refactor the configuration system for stability and clarity 2025-01-14 15:16:25 -05:00
eyedeekay
57a9122402 delete some stuff 2024-10-04 23:06:39 -04:00
eyedeekay
2975939027 purge i2psnark-rpc components 2024-10-04 22:26:07 -04:00
eyedeekay
09513a3f28 Remove i2psnark-RPC features that nobody used to put them in their own extension as well 2024-10-04 21:50:01 -04:00
eyedeekay
18e3bb3d3d Remove i2psnark-RPC features that nobody used to put them in their own extension as well 2024-10-04 21:46:31 -04:00
eyedeekay
9b8d27df4c start isolating i2pd specific parts 2024-10-04 21:37:54 -04:00
eyedeekay
a0eae354e7 purge toopie.html from the plugin 2024-10-04 21:14:27 -04:00
eyedeekay
34d243064e purge toopie.html from the plugin 2024-10-04 21:09:53 -04:00
eyedeekay
bd595dd519 sh release 2024-10-04 17:52:01 -04:00
eyedeekay
4f31ad999f mozilla release 2024-10-04 17:45:41 -04:00
eyedeekay
73da982e9e update changelog, bump version 2024-10-04 17:40:03 -04:00
eyedeekay
cc13ba833e update changelog, bump version 2024-10-04 17:39:34 -04:00
eyedeekay
bce9faac1c Only disable referrer headers when in I2P tabs 2024-10-02 23:52:24 -04:00
eyedeekay
8057002c3e Update version, remove redundant function/logging 2024-08-18 21:23:47 -04:00
eyedeekay
bfe4be952e Drop non-local I2P domains if they accidentally make it to firefox-default or firefox-private(not likely but probably worth blocking) 2024-08-02 19:09:06 -04:00
eyedeekay
86c69bb25b More cleanup, remove inelegant workarounds for mistaken domain names 2024-08-02 19:00:03 -04:00
eyedeekay
443e1ad9e0 De-spaghettify some more things 2024-07-28 22:47:17 -04:00
eyedeekay
f091ac5a2d Adds a ROADMAP 2024-07-18 15:54:09 -04:00
eyedeekay
4d934e4d2d fix typo 2024-07-10 14:28:10 -04:00
eyedeekay
76428c4f44 Update version 2024-07-10 13:39:45 -04:00
eyedeekay
7caf54b736 rework proxy error detections 2024-04-15 20:53:05 -04:00
eyedeekay
382111febd greatly simplify all the host-checkers by using proper URL() objects 2024-04-15 20:42:40 -04:00
eyedeekay
54a5d9550c use-submission-api, version bump 2023-12-26 13:44:16 -05:00
eyedeekay
e6066fa31f rm superfluous proxy error 2023-12-26 13:34:47 -05:00
eyedeekay
94e1eb657d Fix web-ext path 2023-12-26 13:34:25 -05:00
idk
93c215ce23 bump version again 2023-06-20 15:41:05 -04:00
idk
00353f5d7a fmt 2023-06-20 15:38:33 -04:00
idk
054348bfb0 fix proxy error page 2023-06-20 15:37:01 -04:00
idk
09640dac97 many, many small QOL bugfixes 2023-06-20 15:24:37 -04:00
idk
933f12e07a more cleanup and refactoring 2023-06-20 13:19:49 -04:00
idk
5bf171f266 refactor bookmarks.js 2023-06-20 10:37:28 -04:00
idk
6e420bbb3c pass URL back from fixURL even if URL is not a moz-extension URL 2023-06-11 15:35:01 -04:00
idk
e15a312b08 only reset the theme if we're resetting from one we own 2023-06-11 14:05:40 -04:00
idk
55229021ee only reset the theme if we're resetting from one we own 2023-06-11 14:03:27 -04:00
idk
c2de99d891 fix seed target 2023-06-11 00:21:36 -04:00
idk
2e2365edb5 update version and changelog 2023-06-10 23:53:46 -04:00
idk
c5148eb0c0 fix theme issue 2023-06-10 23:50:40 -04:00
idk
7ec23bfdad apply default URLs on initial isolations 2023-06-10 23:39:06 -04:00
idk
4f6f545c02 fix isolator spam on torrent isolator 2023-06-04 01:15:12 +00:00
idk
000b165114 fix snark tab discovery 2023-06-04 00:05:55 +00:00
idk
7f497ce0ad a better resolution for #37 or whatever it is on github 2023-06-03 19:43:41 +00:00
idk
e9c9d8730f get rid of old scrub version 2023-05-25 03:49:17 +00:00
idk
00b960fbd2 refactor options.js 2023-05-25 00:19:49 +00:00
idk
7c2171b43f refactor scrub-2.js some more, refactor host.js 2023-05-24 23:24:28 +00:00
idk
3df492c195 start refactored, revised scrub file 2023-05-23 17:36:37 +00:00
idk
ae88ded5b2 fix other eslint errors in i2pcontrol.js 2023-05-21 20:50:03 +00:00
idk
9a7c0ffc77 fix all the eslint issues in toopie.html 2023-05-21 20:34:34 +00:00
idk
a57429b513 fix index 2022-11-18 01:26:46 -05:00
idk
4e352d4dda deny caching when testing the HTTP proxy readiness 2022-11-09 14:38:01 -05:00
idk
ab645401c6 fmt, update changeog 2022-10-24 21:36:56 -04:00
idk
ab95aa0243 update again 2022-10-24 21:35:57 -04:00
idk
413494bc29 fmt, update changeog 2022-10-24 20:00:17 -04:00
idk
e0cd3dd5f1 fmt, update changeog 2022-10-24 19:57:51 -04:00
idk
d1aa9937b2 add beginnings of a CSP to manifestv3 2022-10-24 18:49:57 -04:00
idk
e1ea313c21 mark background scripts non-persistent 2022-10-24 17:31:22 -04:00
idk
f48930fbe9 restore manifest.json to desktop version, android still doesn't have the required APIs 2022-10-24 16:04:35 -04:00
idk
7a5c7e0377 push self-hosted version 2022-10-24 13:28:40 -04:00
idk
0ae6ca1840 optimizations for unsetTheme function 2022-10-16 22:59:18 -04:00
idk
d1e26f8354 optimizations for unsetTheme function 2022-10-16 22:58:48 -04:00
idk
b4f096d4ae fix validation errors in messages.json files 2022-10-16 21:39:11 -04:00
idk
de9c93028d fix validation errors in messages.json files 2022-10-16 21:36:23 -04:00
idk
3cb4526509 update version 2022-10-16 21:26:27 -04:00
idk
297badfe1d update changelog 2022-10-16 21:23:36 -04:00
idk
a0693fda90 update changelog 2022-10-16 21:23:01 -04:00
idk
25540417d6 update versions 2022-10-16 21:19:49 -04:00
idk
450731f200 fix ar, es translations 2022-10-16 21:03:19 -04:00
idk
495fc4700d checkin translations ru 2022-10-16 17:59:11 -04:00
idk
547aa30dac checkin translations pt 2022-10-16 17:51:01 -04:00
idk
3c349d85df checkin translations ja 2022-10-16 17:43:36 -04:00
idk
e2fb3b92c4 checkin translations it 2022-10-16 17:34:19 -04:00
idk
5080190dcb checkin translations de 2022-10-16 17:24:21 -04:00
idk
782c2a3176 checkin translations fr 2022-10-16 17:17:36 -04:00
idk
4d2f633296 checkin translations zh 2022-10-16 17:08:15 -04:00
idk
9dea9fc565 checkin translations ar 2022-10-16 17:00:03 -04:00
idk
b4805af152 update strings 2022-10-16 16:50:28 -04:00
idk
1c343c862c fmt, fix origin check on proxy.i2p check 2022-10-16 16:08:01 -04:00
idk
0ad9db2dc6 increment version in messages.json 2022-10-16 15:42:48 -04:00
idk
d6cf736508 increment version in messages.json 2022-10-16 15:37:01 -04:00
idk
3f338565fc fmt, string changes 2022-10-16 15:00:54 -04:00
idk
b65e6a1cdc fmt, string changes 2022-10-16 14:49:32 -04:00
idk
b2dcc444f8 checkin translations es 2022-10-15 23:39:08 -04:00
idk
a50d72cd08 checkin translations ru 2022-10-15 23:26:20 -04:00
idk
63ff000982 checkin translations pt 2022-10-15 23:19:35 -04:00
idk
b0c69ac2d0 checkin translations ja 2022-10-15 23:09:26 -04:00
idk
89e5d6f437 checkin translations it 2022-10-15 23:00:03 -04:00
idk
edaf060baf checkin translations de 2022-10-15 22:52:48 -04:00
idk
e40d8584b4 checkin translations fr 2022-10-15 22:44:45 -04:00
idk
c33f1bd49c checkin translations zh 2022-10-15 22:38:28 -04:00
idk
7ac239abce checkin translations ar 2022-10-15 22:29:48 -04:00
idk
0a66a38103 update strings 2022-10-15 22:21:15 -04:00
idk
a237116478 update strings 2022-10-15 22:20:39 -04:00
idk
968efec706 fix content wrap CSS on x-i2p-location page 2022-10-15 12:30:34 -04:00
idk
2b71462b79 fix css on pageActions 2022-10-08 17:35:07 -04:00
idk
62313871da simplify onboarding section lyout 2022-10-08 17:21:55 -04:00
idk
19b6c841a1 update PLAN.html 2022-10-07 23:03:00 -04:00
idk
4c82bd352b update GOALS.html 2022-10-07 23:02:56 -04:00
idk
ed37bd4129 update COLORS.html 2022-10-07 23:02:53 -04:00
idk
66abe0ea8f update index.html 2022-10-07 23:02:49 -04:00
idk
64f2b9af97 update PLAN.html 2022-10-07 23:00:53 -04:00
idk
79611fbc68 update GOALS.html 2022-10-07 23:00:50 -04:00
idk
26d886cd5a update COLORS.html 2022-10-07 23:00:46 -04:00
idk
d3d82d9215 update index.html 2022-10-07 23:00:43 -04:00
idk
05c071d00f update PLAN.html 2022-10-07 22:59:06 -04:00
idk
58f9948a8d update GOALS.html 2022-10-07 22:59:03 -04:00
idk
ef9a81bc60 update COLORS.html 2022-10-07 22:58:59 -04:00
idk
2c699d8eb0 update index.html 2022-10-07 22:58:54 -04:00
idk
b896f63be1 update PLAN.html 2022-10-07 22:24:33 -04:00
idk
4bc3aefbc9 update GOALS.html 2022-10-07 22:24:30 -04:00
idk
ee228c23dd update COLORS.html 2022-10-07 22:24:25 -04:00
idk
37687321ca update index.html 2022-10-07 22:24:21 -04:00
idk
c67184e88e fmt 2022-10-07 19:32:52 -04:00
idk
b2e3e7fcf0 update translation generator script 2022-10-07 19:30:57 -04:00
idk
d560cf3967 also allow proxy.i2p check in undefined(firefox-owned) tabs 2022-10-07 19:13:21 -04:00
idk
67fa1d6779 also allow proxy.i2p check in undefined(firefox-owned) tabs 2022-10-07 19:08:25 -04:00
idk
fe29771efd implement new translations 2022-10-07 13:26:09 -04:00
idk
a741b17f21 add new translations to pages 2022-10-07 11:06:05 -04:00
idk
c016efb72e checkin proxyinfo.js 2022-10-07 11:01:16 -04:00
idk
9d0417eceb check in translations 2022-10-07 05:26:41 -04:00
idk
c3cdf76faf checkin translations 2022-10-07 05:00:03 -04:00
idk
3f54f0127b checkin translations 2022-10-07 04:58:52 -04:00
idk
f0e8d45287 check in translations 2022-10-07 04:56:27 -04:00
idk
90b02b7857 checkin translations 2022-10-07 04:47:17 -04:00
idk
d741590bca checkin translations 2022-10-07 04:37:33 -04:00
idk
b02486bade checkin translations 2022-10-07 04:28:51 -04:00
idk
cf35ee04a4 check in translations 2022-10-07 04:26:13 -04:00
idk
8b1ee5fa8d checkin translations 2022-10-07 04:20:06 -04:00
idk
84e463164f check in translations 2022-10-07 03:56:02 -04:00
idk
1ae19ae4ae check in translations 2022-10-07 03:52:20 -04:00
idk
0a99cb5d06 check in translations 2022-10-07 03:51:18 -04:00
idk
14af9fe9a0 Add all the missing translation tags to the English language file 2022-10-07 03:10:35 -04:00
idk
71b77246d3 fmt 2022-10-05 17:11:17 -04:00
idk
ad9374088a fix proxy error page spam 2022-10-05 17:10:53 -04:00
idk
15893f5ff1 minor CSS tweaks 2022-10-04 12:11:14 -04:00
idk
25aeaa3a10 minor CSS tweaks 2022-10-04 12:10:54 -04:00
idk
9d7c46f90f update index.html 2022-10-03 20:51:04 -04:00
idk
4bfab8fae7 update content from i2pcontrol help page 2022-10-03 20:50:33 -04:00
idk
d7561573cd fmt 2022-10-03 20:48:20 -04:00
idk
e41987d700 move IRC presence check to own file 2022-10-03 20:48:08 -04:00
idk
dbe0c17143 fmt 2022-10-03 20:45:32 -04:00
idk
cbbb256970 tweak toopie.html to better accomodate very-narrow widths 2022-10-03 20:45:03 -04:00
idk
15be4e7372 Remove onboarding stuff from the proxy error page 2022-10-03 20:34:46 -04:00
idk
b4fd9ce204 Update images 2022-10-03 20:29:30 -04:00
idk
d6402191fd Update images 2022-10-03 20:29:14 -04:00
idk
57fef4a0c9 fix css for window.html 2022-10-03 20:18:09 -04:00
idk
5cc1ac3485 run formatters 2022-10-03 20:04:31 -04:00
idk
8016c5d20f change color of back panel on the sidebarAction 2022-10-03 20:02:36 -04:00
idk
e09c9c2c33 change color of back panel on the browserAction 2022-10-03 19:58:07 -04:00
idk
b9e950d949 check in new CSS, proxy-error page rules 2022-10-03 17:59:35 -04:00
idk
02e5a63d14 update PLAN.html 2022-10-03 02:05:44 -04:00
idk
ba67babcee update GOALS.html 2022-10-03 02:05:41 -04:00
idk
d6c351db60 update COLORS.html 2022-10-03 02:05:38 -04:00
idk
f6d0b38744 update index.html 2022-10-03 02:05:34 -04:00
idk
08fe8c6b17 fix project link 2022-10-03 02:04:28 -04:00
idk
28ac1e64ea update PLAN.html 2022-10-03 01:36:26 -04:00
idk
0424b73daa update GOALS.html 2022-10-03 01:36:23 -04:00
idk
4d84eeac4b update COLORS.html 2022-10-03 01:36:20 -04:00
idk
14b5aa0f3f update index.html 2022-10-03 01:36:17 -04:00
idk
beb2939067 Everything but the page itself for #83 2022-10-03 01:33:55 -04:00
idk
77fff0c754 Everything but the page itself for #83 2022-10-03 01:31:17 -04:00
idk
2fde749ff9 update index.html 2022-10-02 21:44:59 -04:00
idk
587d8c0d45 update PLAN.html 2022-10-02 21:26:25 -04:00
idk
7035445a48 update GOALS.html 2022-10-02 21:26:22 -04:00
idk
07c49fff04 update COLORS.html 2022-10-02 21:26:19 -04:00
idk
d24bcc0f3c update index.html 2022-10-02 21:26:15 -04:00
idk
e609638816 Define something saner than browser.theme.reset, unsetTheme, which will briefly disable all themes then re-enable the user's preferred theme which more-or-less fixes #105 2022-10-02 21:24:09 -04:00
idk
cb739e7d91 Partial workaround for #105, this will allow it to restore all aspects of a theme that are not images, because I can't reference the images inside the theme from inside my extension 2022-10-02 19:46:37 -04:00
idk
7648360a00 fix link to webextension index page on webextension home page 2022-10-02 17:15:11 -04:00
idk
09f6c0721e make it so the toopie.html links open toopie.html when BRB is already open also 2022-10-02 17:10:50 -04:00
idk
d84fd0141e decouple toopie.html stuff from sidebar stuff 2022-10-02 16:47:48 -04:00
idk
40cd4a869a css and onnboarding fixes 2022-10-02 15:42:52 -04:00
idk
49713fb604 Improve appearance of proxy indicator on homepage 2022-09-30 16:51:29 -04:00
idk
2afd8ca70c Changes for #124 and #121 2022-09-30 16:16:03 -04:00
idk
66f56b4375 change color of tab control headline 2022-09-30 12:21:45 -04:00
idk
dd43916bcf change text of new window and close-all tabs 2022-09-30 12:12:17 -04:00
idk
68f2de5702 unhide the readyness graphic when the content window is ready 2022-09-30 11:52:34 -04:00
idk
936e91aca8 make link next to search box a link to legwork, use b32 for legwork, use headline as new homepage link 2022-09-27 18:39:05 -04:00
idk
0178998fb3 fix debian changelog 2022-05-23 16:30:04 -04:00
idk
36b69ab52d bump version 2022-05-23 16:19:59 -04:00
idk
ad3d22c6bc Fix localizations 2022-05-09 14:13:28 -04:00
idk
458f20def6 fmt 2022-05-08 17:52:14 -04:00
idk
66a36d3e86 Add the ability to detect I2P+ routers too I guess. 2022-05-08 17:44:40 -04:00
idk
da3b6a553b add translations for ar, zh, fr, de, it, ja, pt, ru, revise translation for es 2022-05-08 17:18:54 -04:00
idk
306426ae3c add tor manager tab preferences 2022-02-15 21:16:57 -05:00
idk
2df3ccacf2 add tor manager tab preferences 2022-02-15 21:15:47 -05:00
idk
b0e57dd91a Update the page 2022-02-11 23:09:55 -05:00
idk
ff46fa5f80 Changelog 2022-02-11 20:29:40 -05:00
idk
29d7a0f776 Changelog 2022-02-11 20:29:00 -05:00
idk
4c3520bfd3 Decision is made. We're going to offer to change the homepage and give the user an opportunity to refuse if they want. 2022-02-11 20:25:24 -05:00
idk
8f1d150bad undo a change 2021-12-28 20:53:34 -05:00
idk
4e7381ece9 undo a change 2021-12-28 20:50:25 -05:00
idk
a911fc3126 fmt 2021-12-28 20:37:16 -05:00
idk
c58cf63027 merge 2021-12-28 20:36:17 -05:00
idk
a76e7299c7 Merge branch 'tab_text' into 'master'
fix tab text color

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!27
2021-12-29 01:25:40 +00:00
idk
26b637f201 fix tab text color 2021-12-28 20:22:33 -05:00
idk
c1b55a4feb Merge branch 'innet-updates' into 'master'
Auto-proxy on sites that specify a port

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!26
2021-12-29 01:15:38 +00:00
idk
80c66ba2f7 Auto-proxy on sites that specify a port 2021-12-28 20:13:12 -05:00
idk
6415ee2996 Merge pull request #116 from eyedeekay/fix-torrent-webui-button
fix Open WebUI button on torrent menu
2021-12-03 04:15:58 +00:00
idk
83b5dcc4b4 fix Open WebUI button on torrent menu 2021-12-02 20:45:42 -05:00
idk
26e0228687 Merge pull request #115 from eyedeekay/fix-proxy-check-reversal
address erroneous text issue #113
2021-12-03 01:23:51 +00:00
idk
73f2883fbd address erroneous text issue #113 2021-12-02 19:50:33 -05:00
idk
4d317eac4c Bump and resubmit again 2021-11-03 00:22:37 -04:00
idk
4755637206 fmt and resubmit 2021-10-30 10:12:24 -04:00
idk
b84d8945aa fmt and resubmit 2021-10-30 10:08:09 -04:00
idk
7e1428310b Try and cut a release with the new information from Mozilla. Add details about min Firefox version to readme 2021-10-13 21:29:25 -04:00
idk
7cc6dbfdf0 Try and cut a release with the new information from Mozilla. Add details about min Firefox version to readme 2021-10-13 21:27:02 -04:00
idk
e95d67db4b Try and cut a release with the new information from Mozilla. Add details about min Firefox version to readme 2021-10-13 21:25:54 -04:00
idk
a261f7875a bump changelog 2021-10-13 20:48:07 -04:00
idk
78141f2839 Try and cut a release with the new information from Mozilla. Add details about min Firefox version to readme 2021-10-13 20:46:17 -04:00
idk
75d23a752c make fmt 2021-10-13 20:43:39 -04:00
idk
03cc374c54 Bump strict_min_version to 91.1.0 so that I can release again, see https://discourse.mozilla.org/t/can-anyone-release-extensions-right-now-to-me-it-looks-like-addons-mozilla-org-is-critically-broken/84830/25 for the rising action of what appears to be at least a year of absurdity 2021-10-13 20:38:23 -04:00
idk
89f8496bb8 switch to legwork and release another version. 2021-10-04 20:41:20 -04:00
idk
15489b7f10 Bump version, update changelog 2021-10-01 15:48:07 -04:00
idk
3a67d00741 Fix tab.id check in http-equiv section 2021-10-01 15:07:33 -04:00
idk
d5a0edfd68 Add workaround to makefile 2021-10-01 14:33:11 -04:00
idk
1853292b99 browser.theme.reset does not work without a window.id, contrary to the Mozilla documentation. Themes just won't work on Android I think... 2021-10-01 14:30:41 -04:00
idk
f575f95ee2 make prettier 2021-10-01 14:16:15 -04:00
idk
97146391e8 Reverse application priority of header checks and http-equiv checks 2021-10-01 14:14:56 -04:00
idk
31af292a47 Prevent creation of multiple pinned tabs for a single application 2021-10-01 12:15:28 -04:00
idk
ac548b58b0 Merge branch 'android-compat' into 'master'
Make changes to allow upstream to manage android containers as well, but do...

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!25
2021-09-30 22:03:40 +00:00
idk
aa6a9a0da8 Make changes to allow upstream to manage android containers as well, but do not change manifest.json because we need all the entries for desktop firefox. 2021-09-30 18:00:30 -04:00
idk
7bfc4f8c66 create android-trunk branch 2021-09-30 16:46:20 -04:00
idk
ffc29deb8e bump strict_min_version 85 to shut up the linter 2021-09-26 14:55:10 -04:00
idk
78a01f6cc1 Bump version and prepare to bug Mozilla. 2021-09-26 00:37:45 -04:00
idk
d09bb59a1f Bump version and prepare to bug Mozilla. 2021-09-26 00:35:40 -04:00
idk
e2f8a439b6 Merge branch 'fix-brb-blog' into 'master'
Fix checks on blog and port containers

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!24
2021-09-26 04:27:17 +00:00
idk
95a282c07f Fix checks on blog and port containers 2021-09-26 00:23:48 -04:00
idk
02f3cc871d Wait until after we confirm it's an I2P site to set pageAction 2021-07-08 22:19:22 -04:00
idk
5d260c5a3e Well I guess moz-sign has to fail at release time now because amo is 504 when I try to cut a release 2021-07-08 14:40:24 -04:00
idk
b5758839e1 bump version and release 2021-07-07 23:27:43 -04:00
idk
a473da6a8e bump version and release 2021-07-07 22:58:55 -04:00
idk
75b4ff4b60 Merge pull request #111 from eyedeekay/code-cleanup
Code cleanup
2021-07-08 02:57:13 +00:00
idk
d3cf9e8686 bump strict-min-version so the validator shuts up, nobody's as far back as Firefox 60 right now 2021-07-07 22:53:14 -04:00
idk
7bd7701aeb Remove obsolete workaround to theme reset issue 2021-07-07 22:34:01 -04:00
idk
87c3a62f25 connection interrupted mid release, retry failed validation. Bump and retry 2021-07-07 22:01:36 -04:00
idk
4bc984a72d connection interrupted mid release, retry failed validation. Bump and retry 2021-07-07 21:58:30 -04:00
idk
7b6438dce5 fix some background-theme stuff 2021-07-07 21:55:35 -04:00
idk
80d5367fed Merge pull request #110 from eyedeekay/code-cleanup
Code cleanup
2021-07-08 01:42:55 +00:00
idk
a7902632bc Un-bump version, fix some issues with internationalization on releases 2021-07-07 21:40:53 -04:00
idk
199e6577bb bump version 2021-07-07 21:30:34 -04:00
idk
00fd0aed62 fmt-prettier 2021-07-07 21:28:06 -04:00
idk
daaebe027d add missing names to proxy.js 2021-07-07 15:15:45 -04:00
idk
3d39e75ffd mind our own business re: container tab proxy settings 2021-07-07 15:12:59 -04:00
idk
e013c093d8 Upgrade the version number to build a rhizome 2021-05-31 17:19:42 -04:00
idk
5b51fc2c27 add variant extension name 2021-05-31 15:09:23 -04:00
idk
65e43abe02 Remove a whole bunch of redundant code related to forcing a contextual identity to it's own function. Only Snark(Due to X-I2P-Torrentlocation) needs it's own isolator now, everybody else can use the same one. Makes it easier to add new contexts. 2021-05-28 14:20:57 -04:00
idk
7f810f86d0 update graphics for icons with the ones provided by @shoalsteed 2021-05-26 18:32:58 -04:00
idk
899974c339 Fix quotes, update for release 2021-05-26 18:21:12 -04:00
idk
6f30aeaf06 update graphics for icons with the ones provided by @shoalsteed 2021-05-26 17:25:41 -04:00
idk
d285063b4f add help pages for i2pcontrol and torrents 2021-05-26 15:11:46 -04:00
idk
ffa282671b update transmission-rpc screenshot 2021-05-26 13:15:33 -04:00
idk
e9acc1fe35 update changelog 2021-05-26 12:57:41 -04:00
idk
04ebfedb84 fix options pages 2021-05-26 12:55:34 -04:00
idk
23d451cf92 update site 2021-05-26 12:01:26 -04:00
idk
44628a1358 update site 2021-05-26 11:58:31 -04:00
idk
04782aa099 update site 2021-05-26 11:57:43 -04:00
idk
ff4302eb2b update screeenshots, add more screenshots 2021-05-26 11:32:35 -04:00
idk
9185a4daf2 add a context and proxy rules for railroad blog 2021-05-26 11:31:16 -04:00
idk
6b6a73dbdb update screeenshots, add more screenshots 2021-05-26 11:15:47 -04:00
idk
1729656189 add a context and proxy rules for railroad blog 2021-05-25 16:59:38 -04:00
idk
08b31efbfc Check proxy before extension URL 2021-05-24 15:41:51 -04:00
idk
e124d61115 Check proxy before extension URL 2021-05-24 15:41:17 -04:00
idk
e6e914cefe Check proxy before extension URL 2021-05-24 15:40:35 -04:00
idk
4d2e68f79d fix html 2021-05-24 15:35:35 -04:00
idk
b5bb8ec694 fix broken html 2021-05-24 15:29:02 -04:00
idk
f0651edb06 Merge pull request #107 from eyedeekay/thoroughly-delete-containers
Various Bugfixes
2021-05-24 11:08:12 -07:00
idk
49ce0162d1 update changelog 2021-05-24 14:06:23 -04:00
idk
153a49e18f some style fixes, issue with noscript when visiting susimail for the first time, ready for release 2021-05-24 14:03:11 -04:00
idk
88cc54217c some style fixes, issue with noscript when visiting susimail for the first time, ready for release 2021-05-24 13:58:44 -04:00
idk
83bb92c0cb some style fixes, issue with noscript when visiting susimail for the first time, ready for release 2021-05-24 13:57:37 -04:00
idk
f337e64b81 Merge branch 'secure-marking' into 'master'
Create icon for each indicating state in the toolbar(HTTPS, Bittorrent,...

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!23
2021-04-27 14:16:30 +00:00
idk
42f90273e2 prettier 2021-04-26 17:18:41 -04:00
idk
616d8429b7 Fix HTTPS marking, re-add http+i2p marking 2021-04-26 17:18:08 -04:00
idk
3261fd1505 fix Proxy Readyness visual indicator 2021-04-25 23:22:23 -04:00
idk
4ea8fd4826 start switching back to the old CSS which I liked better all along anyway, and which will be easier to make work in the future 2021-04-25 17:03:43 -04:00
idk
c899f7b1e7 Create icon for each indicating state in the toolbar(HTTPS, Bittorrent, HTTPS+Bittorrent, X-I2P-Location) with our own lock icons for .i2p sites, https .i2p sites 2021-04-25 16:18:41 -04:00
idk
02bc927262 Create icon for each indicating state in the toolbar(HTTPS, Bittorrent, HTTPS+Bittorrent, X-I2P-Location) with our own lock icons for .i2p sites, https .i2p sites 2021-04-25 16:05:07 -04:00
idk
5393d7f26f Add new lock icons for I2P and I2P HTTPS secured sites 2021-04-19 19:07:18 -04:00
idk
fa66c26b09 Merge branch 'themes-again' into 'master'
bump

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!22
2021-02-05 18:04:33 +00:00
idk
eec31ad3db bump 2021-02-05 13:03:30 -05:00
idk
3a770cb518 Merge branch 'themes-again' into 'master'
Themes again

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!21
2021-02-05 18:00:58 +00:00
idk
7de36bc86c bump 2021-02-05 13:00:15 -05:00
idk
c0bf732253 fix merge issues 2021-02-05 12:58:35 -05:00
idk
49948a524e fmt 2021-02-05 12:41:26 -05:00
idk
ac792dbcd5 fix x-i2p-torrentlocation bug 2021-02-01 12:55:39 -05:00
idk
db8508e75b Merge branch 'themes-again' into 'master'
fix the theme issue

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!20
2021-01-31 06:13:58 +00:00
idk
95e0642126 Merge branch 'rpc-over-i2p' into 'master'
Extensions run requests in what is effectively their own container for our...

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!19
2021-01-31 06:11:51 +00:00
idk
54b5be97e2 fix the theme issue 2021-01-31 01:07:14 -05:00
idk
8bebe2a920 Extensions run requests in what is effectively their own container for our purposes, and one that's not exactly easy to determine is in use. But when we don't recognize the context and cannot jump out of context into an I2P tab, we basically it's coming from inside an extension(Or firefox-private, but that's sort of a whole other can of worms I need to tackle soon). TL:DR if it has no context, then we'll need to decide in favor of proxying requests to .i2p urls via I2P HTTP Proxy for it. The effect is that we can set the RPC remote for say, a bittorrent client, to the .b32.i2p URL of our BiglyBT xmwebwebui remote, for instance. 2020-12-23 18:17:36 -05:00
idk
fedb2d3707 update changelog 2020-12-21 18:15:41 -05:00
idk
b605ea515f Merge pull request #104 from eyedeekay/spanish
Spanish
2020-12-21 23:13:19 +00:00
idk
a38d18c049 fix #102 2020-12-21 18:11:30 -05:00
idk
a0be345f86 fix 102 2020-12-21 17:47:23 -05:00
idk
e08ce1c71e add a spanish translation. It's probably not very good, as it's the combination of Google Translate and my high school Spanish, but at least it exists and maybe could spark some interest, being a single checkin of a fairly simple nature 2020-12-21 16:07:38 -05:00
idk
f25a29052f emergency fix for proxy urls, exclusion was too broad 2020-12-14 17:19:20 -05:00
idk
13c5042006 Exclude clearnet code hosting sites from scrub checks 2020-12-14 14:47:34 -05:00
idk
01ce1a2f13 fmt 2020-12-14 14:44:46 -05:00
idk
8430e3b952 git commit -am exclude searches on clearnet code hosting services from scrub checks 2020-12-14 14:43:04 -05:00
idk
ac09b72be3 change the url for the MuWire test 2020-12-13 14:07:10 -05:00
idk
d901711c7b Merge branch 'slightly-better-popup' into 'master'
Slightly better popup

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!18
2020-12-13 04:37:06 +00:00
idk
88517a7b52 bail out when the header has already been detected and the pageaction is already set 2020-12-12 23:33:25 -05:00
idk
39eb695522 fmt 2020-12-12 00:08:27 -05:00
idk
009bac364c fmt 2020-12-11 20:49:16 -05:00
idk
9741b21def fmt 2020-12-11 20:48:35 -05:00
idk
df7bc109ed update popup css 2020-12-11 20:47:49 -05:00
idk
8cd9b53be3 update popup css 2020-12-11 20:18:58 -05:00
idk
9db61be253 Merge branch 'do-less' into 'master'
Be less Interruptive in non-essential ways

Closes #29 and #30

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!17
2020-12-12 01:16:18 +00:00
idk
78a1794568 fix sanity check on torrent proxy 2020-12-11 16:30:22 -05:00
idk
aa9805e107 Fix torrent-proxy sanity check 2020-12-11 15:42:28 -05:00
idk
a992553ffb make embedding torrents in pages faster 2020-12-10 10:15:48 -05:00
idk
3a30961cd1 fix btProxy 2020-12-09 21:58:58 -05:00
idk
a6aba7b5f7 fix btProxy 2020-12-09 20:55:57 -05:00
idk
26c4152bf6 fix btProxy 2020-12-09 20:55:04 -05:00
idk
8230fe92a7 uninstall process 2020-12-09 20:53:15 -05:00
idk
6d0cda9e67 get ready to clean up after the extension when it uninstalls 2020-12-09 20:51:08 -05:00
idk
12992c461b get ready to clean up after the extension when it uninstalls 2020-12-09 20:45:49 -05:00
idk
531963c1c0 filter the headers before we search them 2020-12-09 20:13:20 -05:00
idk
8bfb7cdd27 search the headers backward and break on the first one since the non-standard header is usually near the end 2020-12-09 18:20:48 -05:00
idk
40899889a0 correct promise resolution on scripts.js 2020-12-09 17:59:53 -05:00
idk
bc88ca80fd re-enable tab-to-tab isolation 2020-12-09 17:53:31 -05:00
idk
3b3744ffff Cheat at excluding MuWire from ! 2020-12-09 17:49:36 -05:00
idk
9cd6ce888e Try and bail out of all proxy-setting in the Wire Web App 2020-12-09 17:09:54 -05:00
idk
7b2216a12f Nix timed x-i2p-torrentlocation stuff entirely 2020-12-09 16:43:08 -05:00
idk
1946669b82 pre-filter URL's for so we don't try to run isolator checks on domains that have no chance of needing isolation 2020-12-09 14:36:59 -05:00
idk
bb14021bc0 make it so we only launch containers out of firefox-default, rather than re-checking every single request 2020-12-09 14:19:59 -05:00
idk
51510abaed Merge branch 'torrent-3' into 'master'
Torrent 3

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!16
2020-12-06 18:35:18 +00:00
idk
f837eb18d5 Make it so clicking the pageaction also triggers the torrent check as a manual approach 2020-12-06 13:32:43 -05:00
idk
bf4b160dcd fmt 2020-12-06 13:01:02 -05:00
idk
7bd08ab6e0 Check whether it's a torrent-enabled site much more often. It's still not quite right but it's much better now. Update priorities when it comes as a header instead of as a meta tag 2020-12-06 13:00:11 -05:00
idk
647c0523e8 Merge branch 'torrent-3' into 'master'
Retain much tighter control of x-i2p-torrentlocation priorities

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!15
2020-12-06 17:13:52 +00:00
idk
58b874d17f Merge branch 'fix-the-search-thing' into 'master'
Fix the search thing

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!14
2020-12-06 17:11:22 +00:00
idk
969d2769fd Merge branch 'irc-integration' into 'master'
Irc integration

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!13
2020-12-06 17:07:47 +00:00
idk
d88d6b2f61 Merge branch 'bookmarks-one-time' into 'master'
Bookmarks one time

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!12
2020-12-06 17:07:04 +00:00
idk
b420dc0a28 Merge branch 'master' into 'bookmarks-one-time'
# Conflicts:
#   bookmarks.js
#   options/options.js
#   proxy.js
2020-12-06 17:06:47 +00:00
idk
0489a2774f Merge branch 'i2pbote' into 'master'
add a bote context, and when there are no more I2P browsing tabs, delete and...

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!11
2020-12-06 17:04:33 +00:00
idk
49f394acca resolve merge conflicts in proxy.js 2020-12-06 12:01:27 -05:00
idk
dd788b15ca Merge branch 'dispatch' into 'master'
Dispatch

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!10
2020-12-06 16:45:35 +00:00
idk
84981fa801 fmt 2020-12-06 11:39:50 -05:00
idk
d328dd1ca0 use an onerror event to set the fallback http url for alt torrents 2020-12-06 11:39:14 -05:00
idk
590f2c7cd8 use an onerror event to set the fallback http url for alt torrents 2020-12-06 02:31:36 -05:00
idk
e93ad94c89 Don't preload resources if we think they could be torrents 2020-12-06 02:12:01 -05:00
idk
203decf121 fix the search thing 2020-12-05 23:53:24 -05:00
idk
5ab871b51f fix the search thing 2020-12-05 23:43:37 -05:00
idk
858d03fa2b fix the search thing 2020-12-05 22:06:15 -05:00
idk
374ce51eff fmt 2020-12-03 13:17:06 -05:00
idk
cd3dafe9c8 fmt 2020-12-03 12:20:43 -05:00
idk
8c256241cb only create bookmarks on the initial run, provide option to re-create them in preferences menu 2020-12-03 12:19:58 -05:00
idk
18cc8eb962 add a bote context, and when there are no more I2P browsing tabs, delete and recreate the context to assure privacy 2020-12-01 18:07:25 -05:00
idk
f1fd2f6fb6 Fix a bug I just created 2020-11-11 01:44:09 -05:00
idk
691dff77a0 fmt 2020-11-10 22:57:33 -05:00
idk
0910986d52 add a tab layer of granularity to isolator 2020-11-10 22:56:27 -05:00
idk
8d4e38ccdf Merge branch 'dispatch' into 'master'
disable proxy on requests to self for dispatch

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!9
2020-11-11 03:03:56 +00:00
idk
e67c266ce0 disable proxy on requests to self for dispatch 2020-11-10 22:02:17 -05:00
idk
9c12df60d2 Merge branch 'dispatch' into 'master'
Dispatch

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!8
2020-11-11 02:58:10 +00:00
idk
5fb224fdfa add a prettier target 2020-11-10 21:48:08 -05:00
idk
9a0daa480d add container tab for dispatch IRC 2020-11-10 21:42:52 -05:00
idk
b041f7f8c7 add container tab for dispatch IRC 2020-11-10 21:41:13 -05:00
idk
42cb2aae64 add container tab for dispatch IRC 2020-11-10 21:04:49 -05:00
idk
449e3dbee6 add container tab for dispatch IRC 2020-11-10 20:59:25 -05:00
idk
422bfa6c18 add container tab for dispatch IRC 2020-11-10 20:59:04 -05:00
idk
f1909ec923 update release 2020-11-07 22:23:45 -05:00
idk
a3bb8a6fe9 update pages 2020-11-07 21:44:07 -05:00
idk
3596a7e6fd Merge branch 'styles' into 'master'
Styles

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!7
2020-11-08 02:41:13 +00:00
idk
1d9b3b5001 Update changelog 2020-11-07 21:37:10 -05:00
idk
cf99bde088 change font colors on search boxes 2020-11-07 02:19:37 -05:00
idk
c3d73649a0 Switch back to a simpler light theme 2020-10-30 23:50:23 -04:00
idk
a4336b105f update the css a bit 2020-10-30 22:13:42 -04:00
idk
a56bf3101d update the css a bit 2020-10-30 22:13:29 -04:00
idk
7822c7b9fe Merge branch 'i2p-torrent-location-header' into 'master'
I2p torrent location header

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!5
2020-10-31 01:40:24 +00:00
idk
15fffd25dc make the css slightly better 2020-10-30 21:31:36 -04:00
idk
1c7ec493cb make the css slightly better 2020-10-30 21:30:55 -04:00
idk
11fd9efd31 make the css slightly better 2020-10-30 20:08:11 -04:00
idk
08a1e73008 disable localhost isolator for non-routerconsole pages, I am fairly sure it's safe now 2020-10-25 02:29:15 -04:00
idk
e09546d6bb fixup the screenshot 2020-10-12 17:59:41 -04:00
idk
fa0aedda92 fixup the links replacer 2020-10-12 01:19:50 -04:00
idk
105aaed014 update fix the case for onUpdated listeners 2020-10-11 23:43:28 -04:00
idk
fff55eadd6 update fix the case for onUpdated listeners 2020-10-11 23:43:14 -04:00
idk
db43f2760a trigger meta http-equiv when tabs are updated, instantly 2020-10-09 01:03:27 -04:00
idk
ba0d4abc53 add images and videos to the content replacer script for the bittorrent-as-cdn thing 2020-10-08 23:14:48 -04:00
idk
65636c2b5e add images and videos to the content replacer script for the bittorrent-as-cdn thing 2020-10-08 22:53:18 -04:00
idk
4c2a7978f2 add images and videos to the content replacer script for the bittorrent-as-cdn thing 2020-10-08 22:51:02 -04:00
idk
7e97ab766a undo broken check 2020-10-08 00:25:38 -04:00
idk
16b1990bd9 Only excempt snark URL's from proxy if they end do not end in a backslash, and contain /snark/ 2020-10-07 20:27:43 -04:00
idk
2c7b092376 x-i2p-torrentlocation working prototype, both Header-based and meta http-equiv based 2020-10-07 16:47:22 -04:00
idk
100f27b4be fix up some flow issues, should be OK this way 2020-10-07 12:55:26 -04:00
idk
357b1a93b4 Release the pinned apptabs 2020-09-25 23:36:35 -04:00
idk
d8d075bd76 Merge branch 'apptabs' into 'master'
Affix apptabs to front of tab order

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!4
2020-09-26 03:25:52 +00:00
idk
9fefb82c57 Merge branch 'master' into 'apptabs'
# Conflicts:
#   index.html
#   releases.atom
2020-09-26 03:25:27 +00:00
idk
566f987483 Affix apptabs to front of tab order 2020-09-25 23:20:30 -04:00
idk
0a0d065b6a Merge branch 'affix-apptabs-to-front' into 'master'
Affix apptabs to front

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!2
2020-09-26 03:04:05 +00:00
idk
69186671ed Merge branch 'master' into 'affix-apptabs-to-front'
# Conflicts:
#   debian/changelog
#   index.html
#   manifest.json
2020-09-25 03:29:57 +00:00
idk
ede59d7c3a Merge branch 'i2p-location-header' into 'master'
WIP I2P-Location Header

Closes #1

See merge request idk/I2P-in-Private-Browsing-Mode-Firefox!1
2020-09-25 03:25:03 +00:00
idk
4012bdea45 Update and release 2020-09-24 20:21:16 -04:00
idk
6d6dce88dd Update and release 2020-09-24 20:20:26 -04:00
idk
0ba0aafa7c Update and release 2020-09-24 20:19:10 -04:00
idk
87f9df4af7 update for i2p-location 2020-09-24 20:06:33 -04:00
idk
09de46cadf update for i2p-location 2020-09-24 20:06:24 -04:00
idk
a2be795853 TODO 2020-09-22 01:53:43 -04:00
idk
cf91b77e8d one last theme tweak 2020-09-22 01:51:55 -04:00
idk
a37387fa89 use meta tags too 2020-09-22 01:43:49 -04:00
idk
658f162193 use meta tags too 2020-09-22 01:42:02 -04:00
idk
1e71e8bdce Play nicer with user-supplied themes 2020-09-22 00:59:38 -04:00
idk
53b9732cae Switch to a dark theme 2020-09-21 17:18:53 -04:00
idk
c89bfa8f1e Refresh every tab when the extension is ready to force proper contextual identity 2020-09-21 13:44:26 -04:00
idk
cf7d137d00 fix xhr redirect thing when a router console page is passed to firefox as an argument at startup 2020-09-21 00:20:59 -04:00
idk
bc1ef95a16 fix xhr redirect thing when a router console page is passed to firefox as an argument at startup 2020-09-21 00:20:44 -04:00
idk
342ead307d working implementation of *header-based* x-i2p-location header, meta tag based to follow 2020-09-15 23:32:54 -04:00
idk
2bc6e9dfc2 working implementation of *header-based* x-i2p-location header, meta tag based to follow 2020-09-15 23:31:06 -04:00
idk
7219667fdb more work on alt headers and styles 2020-09-15 20:36:19 -04:00
idk
abc1882004 more work on alt headers and styles 2020-09-15 20:34:58 -04:00
idk
0d0656bcc0 more work on alt headers and styles 2020-09-15 20:21:19 -04:00
idk
bbda71c8b5 more work on alt headers and styles 2020-09-15 20:10:34 -04:00
idk
6eb6afab81 Fix up x-i2p-location 2020-09-15 19:01:05 -04:00
idk
a677552690 Switch some stuff about themes around, correct conditional for new redirector thing 2020-09-15 18:39:34 -04:00
idk
7758822256 update toopie.html 2020-09-09 23:23:02 -04:00
idk
4296fcb132 also do the torrent thing, since it actually happens in the same place and is actually really similar 2020-08-23 00:58:30 -04:00
idk
a7746d867b add first 1/4 of i2p-location header, this is the part that uses an actual header and not a meta head tag 2020-08-23 00:22:31 -04:00
idk
ea333b3cec used a standard order for apptabs 2020-07-08 17:57:41 -04:00
idk
b9ac5a5072 used a standard order for apptabs when they get pinned 2020-07-08 17:53:21 -04:00
idk
1401726f54 Merge pull request #100 from eyedeekay/bookmarks
make the bookmarks part of a subdirectory
2020-06-23 03:21:35 +00:00
idk
11c03fb2aa switch to local web-ext-submit extension 2020-06-22 23:18:58 -04:00
idk
b4d1108e9c switch to fixjssstyle 2020-06-22 21:49:14 -04:00
idk
a6b7f29bbd deprecate webrtc control 2020-06-22 21:27:22 -04:00
idk
1eb293d754 fix changelog directory 2020-06-22 21:15:34 -04:00
idk
f3a61d2619 make the bookmarks part of a subdirectory 2020-06-22 21:13:00 -04:00
idk
0b1aa5941b Merge pull request #94 from eyedeekay/emergency
update changelog
2020-04-01 01:28:52 +00:00
idk
ad5882501d update changelog 2020-03-24 19:46:37 -04:00
idk
e014619881 Merge pull request #93 from eyedeekay/sed
Sed
2020-03-24 23:05:08 +00:00
idk
677c5c6a68 update changelog 2020-03-24 19:03:26 -04:00
idk
a3217e2bcf Merge branch 'master' of github.com:eyedeekay/I2P-in-Private-Browsing-Mode-Firefox into sed 2020-03-24 18:54:38 -04:00
idk
4ab7069015 fmt && 2020-03-24 18:53:27 -04:00
idk
3a13270479 use includes instead of contains, take the oppourtunity to fix release-time version string 2020-03-24 18:51:47 -04:00
idk
a8eb2b90a2 Merge pull request #89 from eyedeekay/dzf
Dzf
2020-03-24 04:22:27 +00:00
idk
e54754a83a update for release 2020-03-24 00:21:07 -04:00
idk
7f3b6c7359 Fix bug with i2p+ console isolation for danrobi, which also requires creating a contextual identity for MuWire which makes this a pretty good commit to write a blog post about 2020-03-23 18:02:23 -04:00
idk
50ff84111d branch for +fix 2020-03-22 16:08:21 -04:00
idk
984643e1b2 branch for +fix 2020-03-22 16:07:03 -04:00
idk
917fd00771 start cert2 2020-03-18 00:55:13 -04:00
idk
97ee549d40 Add torrent 2020-03-18 00:30:01 -04:00
idk
e0232fa3bc Merge pull request #87 from eyedeekay/settings
Settings
2020-03-18 04:16:34 +00:00
idk
8d23820c65 Also add a console bookmark 2020-03-18 00:15:46 -04:00
idk
8a6d11594f fix some settings that needed to be better 2020-03-18 00:03:35 -04:00
idk
58dadaefc7 Merge pull request #86 from eyedeekay/gh-pages
Update page
2020-03-18 03:46:19 +00:00
idk
eb92f1b275 add the torrent link 2020-03-17 23:36:17 -04:00
idk
4862b0692f add the torrent link 2020-03-17 23:25:17 -04:00
idk
377ab1d6b1 Merge pull request #85 from eyedeekay/certs
update release
2020-03-18 03:15:50 +00:00
idk
cceeb4b613 update release 2020-03-17 23:14:15 -04:00
idk
f109d66ab7 Merge pull request #84 from eyedeekay/certs
Certs
2020-03-18 02:57:36 +00:00
idk
0a447caa82 fix the torrent 2020-03-17 22:53:41 -04:00
idk
1f7be5c9c3 one apptab per app 2020-03-17 04:42:24 -04:00
idk
cd0d55d06f one last tweak to the debian thing 2020-03-06 00:34:12 -05:00
idk
8c40a01b2f start cert viewer 2020-03-05 23:25:08 -05:00
idk
8e6832cf6c add debian postinst 2020-03-05 18:30:43 -05:00
idk
311b837ef4 add debian postinst 2020-03-05 18:27:21 -05:00
idk
d751622d7c fix scripts and simplify Debian install 2020-03-05 17:35:53 -05:00
idk
6406f70824 fix scripts and simplify Debian install 2020-03-05 17:31:36 -05:00
idk
96ee234a17 Start branch for experimenting with certificate stuff 2020-03-05 14:47:12 -05:00
idk
87c52a0931 fix release 2020-03-02 17:59:16 -05:00
idk
d0136f2c6d fix release 2020-03-02 17:56:46 -05:00
idk
d0f4ff9fbb Merge pull request #82 from eyedeekay/containerizers
Containerizers
2020-03-02 22:54:00 +00:00
idk
2d1ae1fab8 Fix other containerizers 2020-03-02 17:35:49 -05:00
idk
f8d99c8fca Fix other containerizers 2020-03-02 17:34:39 -05:00
idk
aeeedc8d4c Start the pageaction branch 2020-02-26 13:03:09 -05:00
idk
e9e3ce085a pageaction 2020-02-26 13:00:51 -05:00
idk
a192d17e68 Don't exit container tab when leaving for clearnet 2020-02-26 01:57:07 -05:00
idk
62d93a64c0 add torrent basic guide 2020-02-26 00:29:56 -05:00
idk
aad47b03b1 add torrent basic guide 2020-02-25 23:21:42 -05:00
idk
bc8317bd19 add torrent basic guide 2020-02-25 23:03:47 -05:00
idk
1d209c52c8 add torrent basic guide 2020-02-25 23:00:12 -05:00
idk
28901b8e65 add torrent basic guide 2020-02-25 22:58:51 -05:00
idk
2ba386dc53 make releases a little easier 2020-02-25 22:38:55 -05:00
idk
25b1628b7c fix page 2020-02-25 21:41:43 -05:00
idk
f4d7217ce3 Merge branch 'master' of github.com:eyedeekay/I2P-in-Private-Browsing-Mode-Firefox into gh-pages 2020-02-25 21:33:06 -05:00
idk
89f64fa1be update master 2020-02-25 21:32:04 -05:00
idk
0176755b72 fix page 2020-02-25 21:24:45 -05:00
idk
759b7f930e fix page 2020-02-25 21:24:04 -05:00
idk
7a9f347a5c fix page 2020-02-25 21:23:51 -05:00
idk
7f83404453 re-generate index 2020-02-25 21:17:35 -05:00
idk
e194893227 fix screenshot 2020-02-25 21:16:37 -05:00
idk
299e6c5ba3 fix screenshot 2020-02-25 21:15:03 -05:00
idk
0b2a615048 fix debian build 2020-02-25 20:57:24 -05:00
idk
49c4b09804 fix debian build 2020-02-25 20:55:33 -05:00
idk
be7e76524d Remake index 2020-02-25 20:45:37 -05:00
idk
8be88b92a8 Merge pull request #78 from eyedeekay/bittorrent
Bittorrent
2020-02-26 01:43:39 +00:00
idk
b0014a3a1d version bump 2020-02-25 20:41:54 -05:00
idk
4e8b5ffd72 Fix progressbar width 2020-02-25 20:35:31 -05:00
idk
f87cb9808a Fix snark-rpc session config bug 2020-02-25 20:10:50 -05:00
idk
b8f2d9a2c0 Fix snark-rpc session config bug 2020-02-25 20:03:51 -05:00
idk
76048db188 Fix a bittorrent bug 2020-02-25 19:37:43 -05:00
idk
36a87d8005 re-enable serch, by my search engine instead. It's hardcoded for now. 2020-02-25 17:26:01 -05:00
idk
cab085e88b exit router console tabs when leaving the router console 2020-02-25 16:51:39 -05:00
idk
5fbd32e6eb exit router console tabs when leaving the router console 2020-02-25 15:19:15 -05:00
idk
1de2a9e1c6 inform 2020-01-25 22:25:51 -05:00
idk
a706eaa81f tweaks 2020-01-25 02:06:45 -05:00
idk
90783c8e08 Assure defaults in non-presence of essential settings 2020-01-25 01:58:23 -05:00
idk
3926cea990 Assure defaults in non-presence of essential settings 2020-01-25 01:53:53 -05:00
idk
9eb0ed05ca Assure defaults in non-presence of essential settings 2020-01-25 01:52:43 -05:00
idk
b3b1f138ee Assure defaults in non-presence of essential settings 2020-01-25 01:51:38 -05:00
idk
db7448e19c Assure defaults in non-presence of essential settings 2020-01-25 01:48:31 -05:00
idk
ce6caa0ddb Add router console link to menu 2020-01-25 01:31:42 -05:00
idk
23908bae18 Add router console link to menu 2020-01-25 01:29:54 -05:00
idk
9900d72709 Acknowledge transmitter 2020-01-25 01:06:50 -05:00
idk
0bd4c09b02 formatting improvements and cleanups 2020-01-25 00:50:46 -05:00
idk
7ae922c4bc update installers 2020-01-25 00:29:04 -05:00
idk
2526de4b97 this transmission-rpc adaptation is still a little broken, but it'll be ready soon. 2020-01-25 00:06:28 -05:00
idk
8ee34ffd6a Merge pull request #73 from eyedeekay/i2pcontrol
I2pcontrol + [WIP]Settings Fixup
2020-01-23 04:28:59 +00:00
idk
d92954b738 Merge pull request #71 from eyedeekay/indicator
Indicator
2020-01-23 04:28:36 +00:00
idk
c5dfbe617a Merge pull request #70 from eyedeekay/bookmarks
Bookmarks
2020-01-23 04:28:13 +00:00
idk
bcb7830a63 Merge pull request #69 from eyedeekay/search
Search
2020-01-23 04:27:40 +00:00
idk
47760ab1df quiet some errors where appropriate 2020-01-22 21:18:11 -05:00
idk
52da62dcd3 update the links inside the homepage. The plugin hosts it's own official homepage. How's that for distributed. 2020-01-22 20:15:56 -05:00
idk
62cf0bdb1d update the links inside the homepage. The plugin hosts it's own official homepage. How's that for distributed. 2020-01-22 20:13:55 -05:00
idk
21d44755c3 always also check localhost to see if it matches routerconsole too 2020-01-18 04:06:17 -05:00
idk
38d1170d87 make passwords configurable 2020-01-15 00:44:51 -05:00
idk
eb07a7079c make passwords configurable 2020-01-14 23:31:41 -05:00
idk
4f7a226574 add/correct defaults for all options 2020-01-14 21:40:02 -05:00
idk
e8c94b2255 fix merge conflicts so I can show off this development screenshot 2020-01-14 19:47:55 -05:00
idk
c4b320e8f4 fix the extra /div 2020-01-14 19:46:00 -05:00
idk
bd4cd77905 comment out search until a viable one emerges. 2020-01-14 19:36:05 -05:00
idk
5068856c3d fix homepage 2020-01-14 19:24:30 -05:00
idk
5485ec60a1 fix indicator margins 2020-01-14 19:18:10 -05:00
idk
cd6061def5 fix indicator margins 2020-01-14 19:04:58 -05:00
idk
0e1f5921d6 fix sidebar width 2020-01-14 18:43:55 -05:00
idk
518e04a40b make it so that onboarding slides show in one click the first time 2020-01-14 18:18:13 -05:00
idk
87edb2c448 fix inline js in onboarding menu 2020-01-14 18:11:41 -05:00
idk
c17910e501 get ready for torrent menus 2020-01-14 17:46:26 -05:00
idk
2be96865b6 make toopie.html a sidebar instead of a page 2020-01-14 17:11:23 -05:00
idk
ba8e45d878 start bittorent branch 2020-01-14 15:33:21 -05:00
idk
55c800e048 switch to closure-linter 2020-01-14 14:49:48 -05:00
idk
15a0e838b3 null-checks for extension host testing 2020-01-14 10:26:35 -05:00
idk
fdbc208bfe add snark-rpc page to torrent context 2020-01-13 20:12:09 -05:00
idk
6db47ecca0 document the colors I've used so far prep for change 2020-01-13 17:30:16 -05:00
idk
e2326bcadb ditch the unnecessary context 2020-01-13 17:17:18 -05:00
idk
d94074b0ce take way too much time to fix a couple of commas 2020-01-13 17:15:17 -05:00
idk
b412103994 take way too much time to fix a couple of commas 2020-01-13 17:14:08 -05:00
idk
b84de0b10e remove dead commented out code 2020-01-13 15:27:05 -05:00
idk
3b6c164ce5 remove dead commented out code 2020-01-13 15:22:02 -05:00
idk
2831ab9759 tested fixed-up settings 2020-01-13 15:20:32 -05:00
idk
72954ceda6 tidy up some of my settings stuff and expose configurable router console port 2020-01-13 14:48:02 -05:00
idk
923688b914 remake index 2020-01-12 21:03:35 -05:00
idk
79cdeade98 add functioning graceful shutdown/restart buttons to toopie.html 2020-01-12 20:04:39 -05:00
idk
aeda8818e2 replace divs with spans to toopie.html 2020-01-12 18:48:41 -05:00
idk
aea232e56b make it periodically update 2020-01-12 18:35:02 -05:00
idk
8d1a76922c make it accessible from the menu 2020-01-12 18:30:02 -05:00
idk
708c15308d make it accessible from the menu 2020-01-12 18:01:25 -05:00
idk
b70b112c1b upgrade toopie.html 2020-01-12 17:52:37 -05:00
idk
12b5f8e7cc upgrade toopie.html 2020-01-12 17:51:30 -05:00
idk
14fe263e24 start working on toopie.html 2020-01-12 17:10:14 -05:00
idk
e0226b4645 Fix the outputs, add in toopie.html prototype 2020-01-12 17:00:38 -05:00
idk
b1220ca11c Full i2pcontrol library in Javascript woot 2020-01-12 16:02:17 -05:00
idk
5c3c56e415 app links 2020-01-12 01:56:23 -05:00
idk
f07e6d8173 app links 2020-01-12 01:18:26 -05:00
idk
82b9670f28 Localizations are also ready, just a nit 2020-01-12 00:45:44 -05:00
idk
609cc71f32 Throw a search widget on the landing page real quick. 2020-01-12 00:43:36 -05:00
idk
965311627e Improve the proxy readiness indicator 2020-01-11 23:25:01 -05:00
idk
3b2112076b Improve the proxy readiness indicator 2020-01-11 23:14:58 -05:00
idk
5c268f8b3d Fix up the bookmarks some more 2020-01-11 22:36:14 -05:00
idk
50e198ed2c Slight adjustment to the menu 2020-01-11 22:32:25 -05:00
idk
29d4d0b3c8 Heh I'm getting kind of good at this 2020-01-11 22:01:37 -05:00
idk
01695e812a add HTML and CSS to start a search box 2020-01-11 17:14:30 -05:00
idk
d9dd454e8c add HTML and CSS to start a search box 2020-01-11 17:13:53 -05:00
idk
915a86c223 add HTML and CSS to start a search box 2020-01-11 17:12:46 -05:00
idk
a99a7067cb update page 2020-01-07 15:59:16 -05:00
idk
074ff44066 update torrents 2020-01-06 16:44:27 -05:00
idk
e54435f65d add feed to page index 2020-01-06 15:39:27 -05:00
idk
7c48260713 Merge pull request #68 from eyedeekay/gh-pages
Tidy up the rss feed
2020-01-06 17:29:51 +00:00
idk
bcbe8dfd94 Merge branch 'master' of github.com:eyedeekay/I2P-in-Private-Browsing-Mode-Firefox into gh-pages 2020-01-06 12:28:23 -05:00
idk
7a04512440 atom feed for torrents 2020-01-06 12:25:33 -05:00
idk
84d1600c35 change how the release notes are added to github 2020-01-06 12:15:22 -05:00
idk
03e45cb00d Merge pull request #67 from eyedeekay/gh-pages
Update links and torrent
2020-01-06 17:07:20 +00:00
idk
068548089d Merge branch 'master' of github.com:eyedeekay/I2P-in-Private-Browsing-Mode-Firefox into gh-pages 2020-01-06 12:04:40 -05:00
idk
07cdf98970 update torrent 2020-01-06 12:04:20 -05:00
idk
12461b7277 make a link to the amo page 2020-01-06 12:03:38 -05:00
idk
abb006addf Merge pull request #66 from eyedeekay/rssify
Rssify
2020-01-04 23:30:21 +00:00
idk
8b28bd23c1 add magnet links to the rss feeds and put the modified rss feed in the docs release 2020-01-04 18:28:00 -05:00
idk
3d2cd87b92 do a new release and write a new page 2020-01-04 17:34:50 -05:00
idk
2d91e0c009 Version bumps 2020-01-04 16:50:44 -05:00
idk
4e30e1c613 Version bumps 2020-01-04 16:46:19 -05:00
idk
907a9e7d20 Merge pull request #65 from eyedeekay/snowflake
make it leave WebRTC alone by default if it detects that the user als…
2020-01-04 20:57:16 +00:00
idk
ec7655bfa9 make it leave WebRTC alone by default if it detects that the user also has a snowflake plugin installed 2020-01-04 15:55:42 -05:00
idk
a84f29d9f1 Merge pull request #63 from eyedeekay/gh-pages
Add a magnet link
2020-01-04 18:12:58 +00:00
idk
de8eb976db Add a magnet link 2020-01-04 13:09:09 -05:00
idk
24fd8a98c3 add a magnet link 2020-01-04 13:06:32 -05:00
idk
a06b349d5f Merge pull request #62 from eyedeekay/lint2
Lint2
2020-01-04 17:31:41 +00:00
idk
855febc1b4 More tweaks and refinements 2020-01-04 11:47:25 -05:00
idk
e49f7a7daf always use Firefox proxy for firefox-default and firefox-private 2020-01-04 11:20:12 -05:00
idk
2e9ae83daa Down to the last of the linter errors, most of the remainder are false-positives 2020-01-04 10:29:41 -05:00
idk
c222b4ed0b Merge pull request #61 from eyedeekay/lint2
Lint2
2020-01-04 07:45:21 +00:00
idk
493b1e3cfb try something 2020-01-04 02:44:59 -05:00
idk
85aad86268 Merge branch 'master' of github.com:eyedeekay/i2psetproxy.js into lint2 2020-01-04 02:43:13 -05:00
idk
7946b7592f try something 2020-01-04 02:41:44 -05:00
idk
e79b6c7d22 add images to deb, plugin builds so that the homepage is also embedded in the plugin. 2020-01-04 02:35:31 -05:00
idk
461ec921b2 Merge pull request #60 from eyedeekay/languages
Languages
2020-01-03 23:31:23 +00:00
idk
7169018292 re-localizable woot! 2020-01-03 18:26:11 -05:00
idk
3dbce313a0 more language stuff 2020-01-03 18:09:16 -05:00
idk
db6c275321 Revert "localize the menu stuff"
This reverts commit e2b631fafa.
2020-01-03 17:42:46 -05:00
idk
e2b631fafa localize the menu stuff 2020-01-03 17:19:05 -05:00
idk
95ed7cb751 Merge pull request #59 from eyedeekay/gh-pages
Merge readme updates and page changes
2020-01-03 18:16:46 +00:00
idk
e20f0d8552 Merge branch 'master' of github.com:eyedeekay/i2psetproxy.js into gh-pages 2020-01-03 13:14:47 -05:00
idk
8b44325565 Remove pdf's from master and from future source 2020-01-03 13:13:56 -05:00
idk
4f8db01542 remove pdf's from repo store them in a release instead 2020-01-03 13:07:58 -05:00
idk
e245aff6bd update pages and stuff 2020-01-03 13:06:55 -05:00
idk
7501f4c1a5 merge in changes from master 2020-01-03 12:52:58 -05:00
idk
9b02651985 update how the torrents are created 2020-01-03 12:45:17 -05:00
idk
e04db247e8 make debian build more reliable 2020-01-02 23:15:59 -05:00
idk
4e30e1077b update changelog 2020-01-02 16:50:46 -05:00
idk
040b57781e trim down results of eslint, some of these are false 2020-01-02 16:44:19 -05:00
idk
07ca54a885 Merge pull request #57 from eyedeekay/lint
First round of lint errors
2020-01-02 20:48:34 +00:00
idk
e125b77d11 Fix a whole bunch of linter errors, about half of them 2020-01-02 15:43:24 -05:00
idk
851e3854a7 deal with some lint stuff in background.js 2020-01-02 13:59:21 -05:00
idk
0d414130a7 Merge pull request #55 from eyedeekay/android
Fixes encountered on the way to understanding Android
2020-01-02 18:00:48 +00:00
idk
25a7b523f9 Add localhost tab for non-i2p stuff, remove default container for web browsing 2020-01-02 11:28:10 -05:00
idk
3d0b7db6dc add some explanations to the links on the page 2019-12-25 13:30:43 -05:00
idk
2e8727a309 add some explanations to the links on the page 2019-12-25 13:30:37 -05:00
idk
01fbf32acd figure out why it isn't launching into containers like on desktop 2019-12-25 00:42:16 -05:00
idk
e2642553b5 figure out why it isn't launching into containers like on desktop 2019-12-24 23:52:58 -05:00
idk
d04709e3a5 figure out why it isn't launching into containers like on desktop 2019-12-24 23:43:40 -05:00
idk
10dd0af335 figure out why it isn't launching into containers like on desktop 2019-12-24 23:25:35 -05:00
idk
b33a7b623b figure out why it isn't launching into containers like on desktop 2019-12-24 23:20:33 -05:00
idk
55841f8421 figure out why it isn't launching into containers like on desktop 2019-12-24 23:14:01 -05:00
idk
303bd90d84 figure out why it isn't launching into containers like on desktop 2019-12-24 23:08:35 -05:00
idk
274eb1a98b figure out why it isn't launching into containers like on desktop 2019-12-24 23:06:58 -05:00
idk
4e544dd9e4 figure out why it isn't launching into containers like on desktop 2019-12-24 23:01:25 -05:00
idk
6fe1bc3fb5 figure out why it isn't launching into containers like on desktop 2019-12-24 22:52:56 -05:00
idk
4897ceff7f figure out why it isn't launching into containers like on desktop 2019-12-24 22:50:09 -05:00
idk
8551a13494 figure out why it isn't launching into containers like on desktop 2019-12-24 22:43:27 -05:00
idk
064ec504b5 figure out why it isn't launching into containers like on desktop 2019-12-24 22:37:49 -05:00
idk
16c9fbb19f figure out why it isn't launching into containers like on desktop 2019-12-24 22:21:04 -05:00
idk
ca58d2e307 figure out why it isn't launching into containers like on desktop 2019-12-24 21:53:31 -05:00
idk
fc89fe9ada figure out why it isn't launching into containers like on desktop 2019-12-24 21:23:37 -05:00
idk
d6ece55d71 figure out why it isn't launching into containers like on desktop 2019-12-24 21:18:28 -05:00
idk
ff9a1484b0 figure out why it isn't launching into containers like on desktop 2019-12-24 21:14:40 -05:00
idk
70e3bee4da figure out why it isn't launching into containers like on desktop 2019-12-24 21:09:57 -05:00
idk
cd25d95fdf fmt 2019-12-24 21:03:37 -05:00
idk
65c914a9d0 fmt 2019-12-24 20:58:53 -05:00
idk
c0bb7e234d try and figure out this android thing 2019-12-24 20:57:56 -05:00
idk
3fefc88a38 Merge pull request #42 from eyedeekay/unobtrusive
Co-existence enhancements
2019-12-25 00:04:34 +00:00
idk
5a5cc51536 only close old tabs if the ID differs from the new tab 2019-12-24 18:44:58 -05:00
idk
25ec2d58c1 only close old tabs if the ID differs from the new tab 2019-12-24 18:41:42 -05:00
idk
f896f6ef92 add a mode for semi-safe localhost browsing 2019-12-24 18:31:44 -05:00
idk
e10d96905b Merge pull request #41 from eyedeekay/gh-pages
Readme Updates
2019-12-24 21:53:29 +00:00
idk
9e015c51ef update usage section 2019-12-24 16:51:38 -05:00
idk
ff9ba99476 update usage section 2019-12-24 16:50:47 -05:00
idk
ce4ec0cdfc update usage section 2019-12-24 16:46:51 -05:00
idk
5b9c706cc9 update readme, pages 2019-12-24 15:28:14 -05:00
idk
2aba15f280 update readme, pages 2019-12-24 15:25:16 -05:00
idk
fd5364ab8e update readme, pages 2019-12-24 14:03:01 -05:00
idk
08639cbf43 update readme, pages 2019-12-24 13:46:09 -05:00
idk
52ba8fa837 update readme, pages 2019-12-24 13:44:44 -05:00
idk
2b69ff05cf update readme, pages 2019-12-24 13:42:02 -05:00
idk
6a8a9039c9 update readme, pages 2019-12-24 13:36:18 -05:00
idk
3a52c4e2a6 update readme, pages 2019-12-24 13:33:15 -05:00
idk
2fb1d71ae9 update page 2019-12-24 13:32:57 -05:00
idk
185467937c update page 2019-12-24 13:28:25 -05:00
idk
64c5c05b82 update page 2019-12-24 13:26:21 -05:00
idk
4615513bb2 readme update 2019-12-24 13:25:19 -05:00
idk
3b63ba945d try something different for the readme 2019-12-24 12:11:06 -05:00
idk
1911641cd0 readme update, pdfs 2019-12-24 11:21:07 -05:00
idk
e18eeaf934 hotfix 2019-11-28 19:24:53 -05:00
104 changed files with 15296 additions and 3221 deletions

View File

@@ -2,15 +2,15 @@ module.exports = {
env: {
browser: true,
es6: true,
webextensions: true
webextensions: true,
},
extends: "eslint:recommended",
globals: {
Atomics: "readonly",
SharedArrayBuffer: "readonly"
SharedArrayBuffer: "readonly",
},
parserOptions: {
ecmaVersion: 2018
ecmaVersion: 2018,
},
rules: {
"accessor-pairs": "error",
@@ -24,8 +24,8 @@ module.exports = {
"error",
{
after: true,
before: true
}
before: true,
},
],
"block-scoped-var": "off",
"block-spacing": "error",
@@ -39,8 +39,8 @@ module.exports = {
"error",
{
after: true,
before: false
}
before: false,
},
],
"comma-style": ["error", "last"],
complexity: "error",
@@ -50,7 +50,7 @@ module.exports = {
curly: "error",
"default-case": "error",
"default-param-last": "error",
"dot-location": "error",
"dot-location": "off",
"dot-notation": "off",
"eol-last": "error",
eqeqeq: "off",
@@ -59,7 +59,7 @@ module.exports = {
"func-names": "off",
"func-style": "off",
"function-call-argument-newline": ["error", "consistent"],
"function-paren-newline": "error",
"function-paren-newline": "off",
"generator-star-spacing": "error",
"global-require": "error",
"guard-for-in": "error",
@@ -77,8 +77,8 @@ module.exports = {
"error",
{
after: true,
before: true
}
before: true,
},
],
"line-comment-position": "error",
"linebreak-style": ["error", "unix"],
@@ -88,7 +88,7 @@ module.exports = {
"max-classes-per-file": "error",
"max-depth": "error",
"max-len": "error",
"max-lines": "error",
"max-lines": "off",
"max-lines-per-function": "off",
"max-nested-callbacks": "error",
"max-params": "error",
@@ -96,7 +96,7 @@ module.exports = {
"max-statements-per-line": "error",
"multiline-comment-style": ["error", "bare-block"],
"multiline-ternary": "error",
"new-cap": "error",
"new-cap": "off",
"new-parens": "error",
"newline-after-var": "off",
"newline-before-return": "off",
@@ -127,7 +127,7 @@ module.exports = {
"no-implied-eval": "error",
"no-import-assign": "error",
"no-inline-comments": "error",
"no-inner-declarations": ["error", "functions"],
"no-inner-declarations": "off",
"no-invalid-this": "error",
"no-iterator": "error",
"no-label-var": "error",
@@ -182,6 +182,7 @@ module.exports = {
"no-unmodified-loop-condition": "error",
"no-unneeded-ternary": "error",
"no-unused-expressions": "error",
"no-unused-vars": "off",
"no-use-before-define": "off",
"no-useless-call": "error",
"no-useless-computed-key": "error",
@@ -195,7 +196,7 @@ module.exports = {
"no-whitespace-before-property": "error",
"nonblock-statement-body-position": "error",
"object-curly-newline": "error",
"object-curly-spacing": "error",
"object-curly-spacing": "off",
"object-property-newline": "error",
"object-shorthand": "error",
"one-var": "off",
@@ -246,6 +247,6 @@ module.exports = {
"wrap-iife": "error",
"wrap-regex": "error",
"yield-star-spacing": "error",
yoda: ["error", "never"]
}
yoda: ["error", "never"],
},
};

2
.gitignore vendored
View File

@@ -1,3 +1,5 @@
README.md.asc
node_modules/
web-ext-artifacts
releases.diff
.releases.atom

0
.nojekyll Normal file
View File

3
.web-extension-id Normal file
View File

@@ -0,0 +1,3 @@
# This file was created by https://github.com/mozilla/web-ext
# Your auto-generated extension ID for addons.mozilla.org is:
i2ppb@eyedeekay.github.io

253
COLORS.html Normal file
View File

@@ -0,0 +1,253 @@
<html>
<head>
<title>
I2P in Private B...
</title>
<meta name="author" content="eyedeekay" />
<meta name="description" content="i2p-in-private-browsing-mode-firefox" />
<meta name="keywords" content="master" />
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="stylesheet" type="text/css" href="showhider.css" />
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<div id="navbar">
<a href="#shownav">
Show navigation
</a>
<div id="shownav">
<div id="hidenav">
<ul>
<li>
<a href="..">
Up one level ^
</a>
</li>
<li>
<a href="index.html">
index
</a>
</li>
<li>
<a href="COLORS.html">
COLORS
</a>
</li>
<li>
<a href="GOALS.html">
GOALS
</a>
</li>
<li>
<a href="PLAN.html">
PLAN
</a>
</li>
<li>
<a href="home.html">
home.html
</a>
</li>
<li>
<a href="index.html">
index.html
</a>
</li>
<li>
<a href="location.html">
location.html
</a>
</li>
<li>
<a href="proxyerr.html">
proxyerr.html
</a>
</li>
<li>
<a href="sectorrent.html">
sectorrent.html
</a>
</li>
<li>
<a href="security.html">
security.html
</a>
</li>
<li>
<a href="toopie.html">
toopie.html
</a>
</li>
<li>
<a href="torrent.html">
torrent.html
</a>
</li>
<li>
<a href="window.html">
window.html
</a>
</li>
</ul>
<br>
<a href="#hidenav">
Hide Navigation
</a>
</div>
</div>
</div>
<a id="returnhome" href="/">
/
</a>
<h2>
WIP Style guidelines
</h2>
<h2>
Colors currently in use from CSS
</h2>
<pre><code> home.css:100: color: #41465f;
home.css:10: color: #3b6bbf;
home.css:113: color: #41465f;
home.css:125: color: #41465f;
home.css:139: color: #3b6bbf;
home.css:17: color: #81888f;
home.css:26: color: #495057;
home.css:35: color: #3b6bbf;
home.css:49: color: #495057;
home.css:58: background-color: #f8f8ff;
home.css:66: color: #495057;
search.css:20: background-color: #ddd
search.css:23: background-color: #2196f3;
search.css:24: color: #fff
home.css:135: background: 0 0!important;
home.css:161: background: #dee2e6;
home.css:175: background: #dee2e6;
home.css:188: background: #a48fe1;
home.css:200: background: #dee2e6;
home.css:214: background: #dee2e6;
home.css:228: background: #d9d9d6;
home.css:246: background: #ffc56d;
home.css:260: background: #f7e59a;
home.css:50: background-attachment: fixed;
home.css:51: background-size: 100% 100%;
home.css:57:.background {
home.css:58: background-color: #f8f8ff;
home.css:79: background: #f8f8ff;
home.css:91: background: #f8f8ff;
search.css:20: background-color: #ddd
search.css:23: background-color: #2196f3;
search.css:5: background: #dee2e6;
</code></pre>
<h2>
Colors currently in use from Javascript
</h2>
<pre><code> background.js:172: colors: {
background.js-173- frame: &quot;#FFC56D&quot;,
background.js-174- toolbar: &quot;#FFC56D&quot;
background.js-175- }
--
background.js:179: colors: {
background.js-180- frame: &quot;#FFC56D&quot;,
background.js-181- toolbar: &quot;#FFC56D&quot;
background.js-182- }
--
background.js:189: colors: {
background.js-190- frame: &quot;#A4C8E1&quot;,
background.js-191- toolbar: &quot;#A4C8E1&quot;
background.js-192- }
--
background.js:196: colors: {
background.js-197- frame: &quot;#A4C8E1&quot;,
background.js-198- toolbar: &quot;#A4C8E1&quot;
background.js-199- }
--
background.js:206: colors: {
background.js-207- frame: &quot;#D9D9D6&quot;,
background.js-208- toolbar: &quot;#D9D9D6&quot;
background.js-209- }
--
background.js:213: colors: {
background.js-214- frame: &quot;#D9D9D6&quot;,
background.js-215- toolbar: &quot;#D9D9D6&quot;
background.js-216- }
--
background.js:223: colors: {
background.js-224- frame: &quot;#F7E59A&quot;,
background.js-225- toolbar: &quot;#F7E59A&quot;
background.js-226- }
--
background.js:230: colors: {
background.js-231- frame: &quot;#F7E59A&quot;,
background.js-232- toolbar: &quot;#F7E59A&quot;
background.js-233- }
--
background.js:240: colors: {
background.js-241- frame: &quot;#A48FE1&quot;,
background.js-242- toolbar: &quot;#A48FE1&quot;
background.js-243- }
--
background.js:247: colors: {
background.js-248- frame: &quot;#A48FE1&quot;,
background.js-249- toolbar: &quot;#A48FE1&quot;
background.js-250- }
</code></pre>
<div id="sourcecode">
<span id="sourcehead">
<strong>
Get the source code:
</strong>
</span>
<ul>
<li>
<a href="https://github.com/eyedeekay/i2p-in-private-browsing-mode-firefox">
Source Repository: (https://github.com/eyedeekay/i2p-in-private-browsing-mode-firefox)
</a>
</li>
</ul>
</div>
<div>
<a href="#show">
Show license
</a>
<div id="show">
<div id="hide">
<pre><code>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.
</code></pre>
<a href="#hide">
Hide license
</a>
</div>
</div>
</div>
<div>
<iframe src="https://snowflake.torproject.org/embed.html" width="320" height="240" frameborder="0" scrolling="no"></iframe>
</div>
<div>
<a href="https://geti2p.net/">
<img src="i2plogo.png"></img>
I2P
</a>
</div>
</body>
</html>

94
COLORS.md Normal file
View File

@@ -0,0 +1,94 @@
WIP Style guidelines
--------------------
Colors currently in use from CSS
--------------------------------
home.css:100: color: #41465f;
home.css:10: color: #3b6bbf;
home.css:113: color: #41465f;
home.css:125: color: #41465f;
home.css:139: color: #3b6bbf;
home.css:17: color: #81888f;
home.css:26: color: #495057;
home.css:35: color: #3b6bbf;
home.css:49: color: #495057;
home.css:58: background-color: #f8f8ff;
home.css:66: color: #495057;
search.css:20: background-color: #ddd
search.css:23: background-color: #2196f3;
search.css:24: color: #fff
home.css:135: background: 0 0!important;
home.css:161: background: #dee2e6;
home.css:175: background: #dee2e6;
home.css:188: background: #a48fe1;
home.css:200: background: #dee2e6;
home.css:214: background: #dee2e6;
home.css:228: background: #d9d9d6;
home.css:246: background: #ffc56d;
home.css:260: background: #f7e59a;
home.css:50: background-attachment: fixed;
home.css:51: background-size: 100% 100%;
home.css:57:.background {
home.css:58: background-color: #f8f8ff;
home.css:79: background: #f8f8ff;
home.css:91: background: #f8f8ff;
search.css:20: background-color: #ddd
search.css:23: background-color: #2196f3;
search.css:5: background: #dee2e6;
Colors currently in use from Javascript
---------------------------------------
background.js:172: colors: {
background.js-173- frame: "#FFC56D",
background.js-174- toolbar: "#FFC56D"
background.js-175- }
--
background.js:179: colors: {
background.js-180- frame: "#FFC56D",
background.js-181- toolbar: "#FFC56D"
background.js-182- }
--
background.js:189: colors: {
background.js-190- frame: "#A4C8E1",
background.js-191- toolbar: "#A4C8E1"
background.js-192- }
--
background.js:196: colors: {
background.js-197- frame: "#A4C8E1",
background.js-198- toolbar: "#A4C8E1"
background.js-199- }
--
background.js:206: colors: {
background.js-207- frame: "#D9D9D6",
background.js-208- toolbar: "#D9D9D6"
background.js-209- }
--
background.js:213: colors: {
background.js-214- frame: "#D9D9D6",
background.js-215- toolbar: "#D9D9D6"
background.js-216- }
--
background.js:223: colors: {
background.js-224- frame: "#F7E59A",
background.js-225- toolbar: "#F7E59A"
background.js-226- }
--
background.js:230: colors: {
background.js-231- frame: "#F7E59A",
background.js-232- toolbar: "#F7E59A"
background.js-233- }
--
background.js:240: colors: {
background.js-241- frame: "#A48FE1",
background.js-242- toolbar: "#A48FE1"
background.js-243- }
--
background.js:247: colors: {
background.js-248- frame: "#A48FE1",
background.js-249- toolbar: "#A48FE1"
background.js-250- }

414
GOALS.html Normal file
View File

@@ -0,0 +1,414 @@
<html>
<head>
<title>
I2P in Private B...
</title>
<meta name="author" content="eyedeekay" />
<meta name="description" content="i2p-in-private-browsing-mode-firefox" />
<meta name="keywords" content="master" />
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="stylesheet" type="text/css" href="showhider.css" />
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<div id="navbar">
<a href="#shownav">
Show navigation
</a>
<div id="shownav">
<div id="hidenav">
<ul>
<li>
<a href="..">
Up one level ^
</a>
</li>
<li>
<a href="index.html">
index
</a>
</li>
<li>
<a href="COLORS.html">
COLORS
</a>
</li>
<li>
<a href="GOALS.html">
GOALS
</a>
</li>
<li>
<a href="PLAN.html">
PLAN
</a>
</li>
<li>
<a href="home.html">
home.html
</a>
</li>
<li>
<a href="index.html">
index.html
</a>
</li>
<li>
<a href="location.html">
location.html
</a>
</li>
<li>
<a href="proxyerr.html">
proxyerr.html
</a>
</li>
<li>
<a href="sectorrent.html">
sectorrent.html
</a>
</li>
<li>
<a href="security.html">
security.html
</a>
</li>
<li>
<a href="toopie.html">
toopie.html
</a>
</li>
<li>
<a href="torrent.html">
torrent.html
</a>
</li>
<li>
<a href="window.html">
window.html
</a>
</li>
</ul>
<br>
<a href="#hidenav">
Hide Navigation
</a>
</div>
</div>
</div>
<a id="returnhome" href="/">
/
</a>
<h1>
These are the goals of the I2P Browser, and not really this plugin in-and-of-itself
</h1>
<p>
A
</p>
<h2>
User Interface:
</h2>
<ul>
<li>
Remove search engines
</li>
<li>
Replace bookmarks
</li>
<li>
Donate banner / UI
</li>
<li>
Patch Firefox to have relative (from the binary) profile directory
</li>
<li>
Start use the Firefox update process to update browser installations
</li>
<li>
Mark .i2p cookies as secure
</li>
<li>
Mark .i2p domains as secure connection
</li>
<li>
Add tests for .i2p secure marking
</li>
<li>
Improve the delay-the-user XUL dialogs to be more accurate in regards
of where the router is in its bootup progress
</li>
<li>
Disable the WebIDE
</li>
<li>
Disable GamePad API by default
</li>
<li>
Disable Web Speech API by default
</li>
<li>
Disable the Web Audio API by default
</li>
<li>
UI redesign bootstrapping and configuration screens (delay-the-user dialogs)
</li>
<li>
Default browser choose wining should de disabled like
browser.shell.checkDefaultBrowser, it can be default, but then
choosen by the user without any begging ahead
</li>
<li>
Extend the firefox preferences UI for I2P router configuration thought
of as &ldquo;must have&rdquo; or &ldquo;very nice to have&rdquo;
</li>
<li>
Shrink the BroadcastChannel API&rsquo;s boundaries of access or disable completely
</li>
<li>
Make a API white/grey/black -list, in super paranoia mode we should
probably disable almost all, while in most cases the user probably want
to be as close to a normal browser/web experinence that
they are used to from before
</li>
</ul>
<h2>
Leak Avoidance:
</h2>
<ul>
<li>
Stop web socket DNS leak
</li>
<li>
If doable, slim down the CA store from unnecessary CAs
</li>
<li>
Disable the microphone by default
</li>
<li>
Ensure WebRTC is disabled in compile time
</li>
<li>
Disable mDNS features
</li>
<li>
Ensure links like sftp:// and smb:// ,
as well as \samba-share is blocked/denied
</li>
<li>
Dont allow IndexedDB storage for third party domains (likability issue)
</li>
<li>
Patch the DNS service to prevent any browser or addon DNS resolution
</li>
<li>
Restrict what MIME types that are exposed to content scripts
</li>
</ul>
<h2>
General Security:
</h2>
<ul>
<li>
Backport any security patches that might appear from Mozilla
</li>
<li>
Dont allow XHR/Websockets requests towards 127.0.0.1/localhost
</li>
<li>
Always use the most sane form of preferences defaults in context
of privacy and security.
</li>
</ul>
<h2>
Unnecessary Connections:
</h2>
<ul>
<li>
Disable getpocket.com features and alike
</li>
<li>
Remove sync option from preferences
</li>
<li>
Clear state when the app exits, by default
</li>
<li>
Disable updater telemetry
</li>
<li>
Make firefox stop call home to mozilla for different reasons
</li>
<li>
Prevent non-Necko network connections
</li>
<li>
Figure out how to approach prerender, preconnect, and prefetch link tags
</li>
</ul>
<h2>
Disk Avoidance:
</h2>
<ul>
<li>
Dont allow SSL key logging
</li>
<li>
Only cache media in memory
</li>
<li>
Disable the password saving functionality to avoid such being written to disk
</li>
<li>
Disable the Auto form-fill to keep as much as possible not written to disk
</li>
</ul>
<h2>
Platforms:
</h2>
<ul>
<li>
Support for Android?
</li>
<li>
Support for iOS?
</li>
</ul>
<h2>
Anti-Fingerprinting:
</h2>
<ul>
<li>
Test for preferences which ensures a sane default and
something to tell when/if we break it
</li>
<li>
Disable support for system adding
</li>
<li>
Disable Firefox enterprise policies
</li>
<li>
Disable NTLM authentication
</li>
<li>
Disable SPNEGO authentication
</li>
<li>
Handle privacy issues regarding window.name
</li>
<li>
Test runner for I2P Browser test cases
</li>
<li>
Block loading of plugins
</li>
<li>
Disable OS spesific firefox features that can help fingerprint
the end user&rsquo;s operating system
</li>
<li>
Block html5 canvas by default
</li>
<li>
Block by default or disable WebGL completely?
</li>
<li>
Never start fullscreen, always start with fixed width/height to
avoid expose screen resolution
</li>
<li>
Report fake system uptime to content scripts
</li>
<li>
Spoof Accept-Language and Accept-Charset headers no matter browser language
</li>
<li>
Spoof timezone to always be UTC
</li>
<li>
Develop methods to reduce the accuracy of JavaScript
performance fingerprinting
</li>
<li>
Always report only one CPU core (dom.maxHardwareConcurrencys)
</li>
<li>
Avoid Keystroke fingerprinting by messing with the event resolution
</li>
<li>
Disable GeoIP-based search results
</li>
</ul>
<h2>
???
</h2>
<ul>
<li>
SVG drawing
</li>
<li>
MathML drawing
</li>
<li>
I2Pd flavor
</li>
</ul>
<div id="sourcecode">
<span id="sourcehead">
<strong>
Get the source code:
</strong>
</span>
<ul>
<li>
<a href="https://github.com/eyedeekay/i2p-in-private-browsing-mode-firefox">
Source Repository: (https://github.com/eyedeekay/i2p-in-private-browsing-mode-firefox)
</a>
</li>
</ul>
</div>
<div>
<a href="#show">
Show license
</a>
<div id="show">
<div id="hide">
<pre><code>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.
</code></pre>
<a href="#hide">
Hide license
</a>
</div>
</div>
</div>
<div>
<iframe src="https://snowflake.torproject.org/embed.html" width="320" height="240" frameborder="0" scrolling="no"></iframe>
</div>
<div>
<a href="https://geti2p.net/">
<img src="i2plogo.png"></img>
I2P
</a>
</div>
</body>
</html>

274
Makefile
View File

@@ -1,45 +1,46 @@
PREFIX:=/usr
PREFIX?=/usr
default: zip
PWD=`pwd`
install: uninstall
mkdir -p $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io \
$(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/i2pcontrol \
$(PREFIX)/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
cp -r ./icons/ $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/
cp -r ./_locales/ $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/
cp -r ./options/ $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/
cp ./*.js $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/
cp ./i2pcontrol/i2pcontrol.js $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/i2pcontrol/i2pcontrol.js
cp ./*.html $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/
cp ./*.css $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/
cp ./*.md $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/
cp ./*.xpi $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/
cp ./manifest.json $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/
cp ./LICENSE $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/
ln -s $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io \
$(PREFIX)/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
@echo $(PWD)
cp -v ./* $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/; true
cp -vr ./i2pcontrol $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/i2pcontrol
cp -vr ./torrent $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/torrent
cp -vr ./_locales $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/_locales
cp -vr ./icons $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/icons
cp -vr ./options $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io/options
make link
link:
ln -sf $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io \
$(PREFIX)/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/i2ppb@eyedeekay.github.io
uninstall:
rm -rf $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io \
$(PREFIX)/share/webext/i2psetproxy.js@eyedeekay.github.io \
$(PREFIX)/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
$(PREFIX)/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/i2ppb@eyedeekay.github.io
ls:
ls -lah $(PREFIX)/share/webext/i2ppb@eyedeekay.github.io; \
ls -lah $(PREFIX)/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
clean:
rm -fr ../i2psetproxy.js.zip ../i2p_proxy*.xpi ../i2p*.xpi #../i2psetproxy.js_*.*
clean: rc clean-artifacts
rm -fr ../i2psetproxy.js.zip ../i2p_proxy*.xpi *.torrent #../i2psetproxy.js_*.*
## EVEN RELEASES are AMO RELEASES
## ODD RELEASES are SELFHOSTED RELEASES
MOZ_VERSION=0.48
VERSION=0.49
#VERSION=$(MOZ_VERSION)
#VERSION=1.27
MOZ_VERSION=2.8.2
VERSION=2.8.3
LAST_VERSION=$(shell grep '"version"' manifest.json | sed 's|"version"||g' | tr -d " :,'" | tr -d '"')
YELLOW=F7E59A
ORANGE=FFC56D
@@ -48,6 +49,7 @@ BLUE=A4C8E1
PURPLE=A48fE1
colors:
@echo "'$(LAST_VERSION)'"
@echo " yellow $(YELLOW) \n orange $(ORANGE) \n grey $(GREY) \n blue $(BLUE) \n purple $(PURPLE)"
amo-readme:
@@ -60,28 +62,49 @@ amo-readme:
sed 's|</h2>|</strong>|g' | \
sed 's|<h3>|<strong>|g' | \
sed 's|</h3>|</strong>|g' | \
grep -v '<img' > index.html
grep -v '<img' > amo-index.html
xpi:
#wget -O ../i2ppb@eyedeekay.github.io.xpi \
#https://addons.mozilla.org/firefox/downloads/file/3419789/i2psetproxyjs-$(MOZ_VERSION)-an+fx.xpi
#cp ../i2ppb@eyedeekay.github.io.xpi ./i2ppb@eyedeekay.github.io.xpi
cp ~/Downloads/i2p_in_private_browsing-$(VERSION)-an+fx.xpi ./i2ppb@eyedeekay.github.io.xpi
MAGNET=`rhash --magnet i2ppb@eyedeekay.github.io.xpi.torrent`
index:
@echo "<!DOCTYPE html>" > index.html
@echo "<html>" >> index.html
@echo "<head>" >> index.html
@echo " <title>I2P in Private Browsing Mode</title>" >> index.html
@echo " <link rel=\"stylesheet\" type=\"text/css\" href=\"home.css\" />" >> index.html
@echo " <link rel=\"stylesheet\" type=\"text/css\" href=\"sidebar.css\" />" >> index.html
@echo "</head>" >> index.html
@echo "<body>" >> index.html
@echo "<div class=\"content\" id=\"browserpanel\">" >> index.html
sed "s|magnetsub|[Magnet Link]($(MAGNET))|g" README.md | sed 's|README.md|index.html|g' | markdown >> index.html
@echo "</div>" >> index.html
@echo "</body>" >> index.html
@echo "</html>" >> index.html
torrenthelp:
@echo "<!DOCTYPE html>" > torrent/index.html
@echo "<html>" >> torrent/index.html
@echo "<head>" >> torrent/index.html
@echo " <title>I2P in Private Browsing Mode</title>" >> torrent/index.html
@echo " <link rel=\"stylesheet\" type=\"text/css\" href=\"../home.css\" />" >> torrent/index.html
@echo " <link rel=\"stylesheet\" type=\"text/css\" href=\"../sidebar.css\" />" >> torrent/index.html
@echo "</head>" >> torrent/index.html
@echo "<body>" >> torrent/index.html
sed "s|magnetsub|[Magnet Link]($(MAGNET))|g" torrent/README.md | markdown >> torrent/index.html
@echo "</body>" >> torrent/index.html
@echo "</html>" >> torrent/index.html
xpi: getxpi
version:
sed -i 's|7647|7657|g' *.js* */*.js*
sed -i 's|$(shell grep "\"version\": " manifest.json)| \"version\": \"$(VERSION)\",|g' manifest.json
sed -i 's|$(shell grep "\"version_name\": " manifest.json)| \"version_name\": \"$(VERSION)\",|g' manifest.json
find . -name '*.json' -exec sed -i 's|$(LAST_VERSION)|$(VERSION)|g' {} \;
find . -name '*.json' -exec sed -i 's|$(MOZ_VERSION)|$(VERSION)|g' {} \;
moz-version:
sed -i 's|7647|7657|g' *.js* */*.js*
sed -i 's|$(shell grep "\"version\": " manifest.json)| \"version\": \"$(MOZ_VERSION)\",|g' manifest.json
sed -i 's|$(shell grep "\"version_name\": " manifest.json)| \"version_name\": \"$(MOZ_VERSION)\",|g' manifest.json
find . -name '*.json' -exec sed -i 's|$(LAST_VERSION)|$(MOZ_VERSION)|g' {} \;
find . -name '*.json' -exec sed -i 's|$(VERSION)|$(MOZ_VERSION)|g' {} \;
rhz-version:
sed -i 's|$(shell grep "\"version\": " manifest.json)| \"version\": \"$(VERSION)\",|g' manifest.json
sed -i 's|$(shell grep "\"version_name\": " manifest.json)| \"version_name\": \"$(VERSION)-rhizome\",|g' manifest.json
sed -i 's|7657|7647|g' *.js* */*.js*
zip: version
zip --exclude="./i2ppb@eyedeekay.github.io.xpi" \
@@ -92,18 +115,35 @@ zip: version
--exclude="./package-lock.json" \
--exclude="./.node_modules" \
--exclude="./node_modules" \
--exclude="./.git" -r -FS ../i2psetproxy.js.zip *
--exclude="./.git" \
--exclude="*/*.xpi" \
--exclude="web-ext-artifacts" \
--exclude="./*.pdf" -r -FS ../i2psetproxy.js.zip *
release:
cat desc debian/changelog | gothub release -p -u eyedeekay -r i2psetproxy.js -t $(VERSION) -n $(VERSION) -d -
rc:
@grep "$(VERSION)" debian/changelog
@echo "changelog is prepared"
rm -f *.xpi
rtest: rc index torrenthelp
release: rc index torrenthelp
cat desc debian/changelog | grep -B 10 "$(LAST_VERSION)" | github-release release -p -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION) -n $(VERSION) -d -; true
update-release:
cat desc debian/changelog | grep -B 10 "$(LAST_VERSION)" | github-release edit -p -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION) -n $(VERSION) -d -; true
delete-release:
gothub delete -u eyedeekay -r i2psetproxy.js -t $(VERSION); true
github-release delete -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION); true
recreate-release: delete-release release upload
upload: upload-xpi upload-deb
moz-release: release moz-submit
#upload-xpi torrent upload-torrent deb upload-deb upload-rss seed
full-sign: moz-sign upload-xpi torrent upload-torrent deb upload-deb upload-rss seed
WEB_EXT_API_KEY=AMO_KEY
WEB_EXT_API_SECRET=AMO_SECRET
@@ -114,58 +154,126 @@ WEB_EXT_API_SECRET=AMO_SECRET
tk:
echo $(WEB_EXT_API_KEY)
submit: moz-sign rhz-submit moz-submit
submit: moz-submit moz-sign
clean-artifacts:
rm -fr web-ext-artifacts/*
##ODD NUMBERED, SELF-DISTRIBUTED VERSIONS HERE!
moz-sign: version
moz-sign: version clean-artifacts
@echo "Using the 'sign' target to instantly sign an extension for self-distribution"
@echo "requires a JWT API Key and Secret from addons.mozilla.org to be made available"
@echo "to the Makefile under the variables WEB_EXT_API_KEY and WEB_EXT_API_SECRET."
web-ext-submit --channel unlisted --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET); true
cp web-ext-artifacts/*.xpi ./i2ppb@eyedeekay.github.io.xpi
$(HOME)/node_modules/.bin/web-ext sign --use-submission-api --channel unlisted --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET) --timeout 900000 #--api-url-prefix http://localhost:3000/api/v4
make copyss
sleep 5
copyss:
cp web-ext-artifacts/*.xpi ../i2ppb@eyedeekay.github.io.xpi; true
##EVEN NUMBERED, MOZILLA-DISTRIBUTED VERSIONS HERE!
moz-submit: moz-version
@echo "Using the 'submit' target to instantly sign an extension for Mozilla distribution"
@echo "requires a JWT API Key and Secret from addons.mozilla.org to be made available"
@echo "to the Makefile under the variables WEB_EXT_API_KEY and WEB_EXT_API_SECRET."
web-ext sign --channel listed --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET); true
mv manifest.json .manifest.json
grep -v update_url .manifest.json > manifest.json
$(HOME)/node_modules/.bin/web-ext sign --use-submission-api --channel listed --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET) --timeout 900000 --verbose; true #--api-url-prefix http://localhost:3000/api/v4
sleep 5
mv .manifest.json manifest.json
rhz-submit: rhz-version
@echo "Using the 'sign' target to instantly sign an extension for self-distribution"
@echo "requires a JWT API Key and Secret from addons.mozilla.org to be made available"
@echo "to the Makefile under the variables WEB_EXT_API_KEY and WEB_EXT_API_SECRET."
web-ext-submit --channel unlisted --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET); true
@echo "Rhizome releases are disabled while browser is completed."
#@echo "Using the 'sign' target to instantly sign an extension for self-distribution"
#@echo "requires a JWT API Key and Secret from addons.mozilla.org to be made available"
#@echo "to the Makefile under the variables WEB_EXT_API_KEY and WEB_EXT_API_SECRET."
#$PWD/node_modules/web-ext-submit/extender.sh --channel unlisted --config-discovery false --api-key $(WEB_EXT_API_KEY) --api-secret $(WEB_EXT_API_SECRET); true
#cp web-ext-artifacts/*.xpi ./i2ppb@eyedeekay.github.io.xpi
getxpi:
github-release download -t $(VERSION) -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -n i2ppb@eyedeekay.github.io.xpi
mv ./i2ppb@eyedeekay.github.io.xpi ../i2ppb-$(VERSION)@eyedeekay.github.io.xpi
cp ../i2ppb-$(VERSION)@eyedeekay.github.io.xpi ../i2ppb@eyedeekay.github.io.xpi
torrent: getxpi
rm -f "./i2ppb-$(VERSION)@eyedeekay.github.io.xpi.torrent"
mktorrent -a http://w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa.b32.i2p/a \
-a http://zviyq72xcmjupynn5y2f5qa3u7bxyu34jnqmwt6czte2l7idxm7q.b32.i2p/announce \
-a http://s5ikrdyjwbcgxmqetxb3nyheizftms7euacuub2hic7defkh3xhq.b32.i2p/a \
-a http://uajd4nctepxpac4c4bdyrdw7qvja2a5u3x25otfhkptcjgd53ioq.b32.i2p/announce \
-n "i2ppb-$(VERSION)@eyedeekay.github.io.xpi" \
-o "i2ppb-$(VERSION)@eyedeekay.github.io.xpi.torrent" \
-w https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/download/$(VERSION)/i2ppb@eyedeekay.github.io.xpi \
../i2ppb@eyedeekay.github.io.xpi; true
cp -v "./i2ppb-$(VERSION)@eyedeekay.github.io.xpi.torrent" "./i2ppb@eyedeekay.github.io.xpi.torrent"
make index
upload-torrent:
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION) -n "i2ppb@eyedeekay.github.io.xpi.torrent" -f "./i2ppb-$(VERSION)@eyedeekay.github.io.xpi.torrent"
upload-xpi:
gothub upload -R -u eyedeekay -r i2psetproxy.js -t $(VERSION) -n "i2ppb@eyedeekay.github.io.xpi" -f "./i2ppb@eyedeekay.github.io.xpi"
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION) -n "i2ppb@eyedeekay.github.io.xpi" -f "../i2ppb@eyedeekay.github.io.xpi"
upload-deb:
gothub upload -R -u eyedeekay -r i2psetproxy.js -t $(VERSION) -n "i2psetproxy.js_$(VERSION)-1_amd64.deb" -f "../i2psetproxy.js_$(VERSION)-1_amd64.deb"
gothub upload -R -u eyedeekay -r i2psetproxy.js -t $(VERSION) -n "i2psetproxy.js_$(VERSION).orig.tar.gz" -f "../i2psetproxy.js_$(VERSION).orig.tar.gz"
gothub upload -R -u eyedeekay -r i2psetproxy.js -t $(VERSION) -n "i2psetproxy.js_$(VERSION)-1.debian.tar.xz" -f "../i2psetproxy.js_$(VERSION)-1.debian.tar.xz"
gothub upload -R -u eyedeekay -r i2psetproxy.js -t $(VERSION) -n "i2psetproxy.js_$(VERSION)-1.dsc" -f "../i2psetproxy.js_$(VERSION)-1.dsc"
gothub upload -R -u eyedeekay -r i2psetproxy.js -t $(VERSION) -n "i2psetproxy.js_$(VERSION)-1_amd64.changes" -f "../i2psetproxy.js_$(VERSION)-1_amd64.changes"
gothub upload -R -u eyedeekay -r i2psetproxy.js -t $(VERSION) -n "i2psetproxy.js_$(VERSION)-1_amd64.buildinfo" -f "../i2psetproxy.js_$(VERSION)-1_amd64.buildinfo"
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION) -n "i2psetproxy.js_$(VERSION)-1_amd64.deb" -f "../i2psetproxy.js_$(VERSION)-1_amd64.deb"
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION) -n "i2psetproxy.js_$(VERSION).orig.tar.gz" -f "../i2psetproxy.js_$(VERSION).orig.tar.gz"
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION) -n "i2psetproxy.js_$(VERSION)-1.debian.tar.xz" -f "../i2psetproxy.js_$(VERSION)-1.debian.tar.xz"
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION) -n "i2psetproxy.js_$(VERSION)-1.dsc" -f "../i2psetproxy.js_$(VERSION)-1.dsc"
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION) -n "i2psetproxy.js_$(VERSION)-1_amd64.changes" -f "../i2psetproxy.js_$(VERSION)-1_amd64.changes"
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION) -n "i2psetproxy.js_$(VERSION)-1_amd64.buildinfo" -f "../i2psetproxy.js_$(VERSION)-1_amd64.buildinfo"
fmt:
upload-docs:
github-release release -p -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t docs -n "Documentation" -d "PDF's and text about the extension"; true
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t docs -n "Landing Page Documentation.pdf" -f ../smartlander.pdf
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t docs -n "Browser Design Documentation.pdf" -f ../browser.pdf
fmt: fmt-css fmt-html fmt-js
fmt-css:
cleancss -O1 all -O2 all --format beautify home.css -o .home.css && mv .home.css home.css
cleancss -O1 all -O2 all --format beautify info.css -o .info.css && mv .info.css info.css
#find . -path ./node_modules -prune -o -name '*.css' -exec cleancss -O1 --format beautify {} \;
find . -path ./node_modules -prune -o -name '*.js*' -exec prettier --write {} \;
cleancss -O1 all -O2 all --format beautify search.css -o .search.css && mv .search.css search.css
cleancss -O1 all -O2 all --format beautify sidebar.css -o .sidebar.css && mv .sidebar.css sidebar.css
cleancss -O1 all -O2 all --format beautify options/options.css -o options/.options.css && mv options/.options.css options/options.css
fmt-html:
tidy --as-xhtml --drop-empty-elements no --input-xml --tidy-mark no -indent --indent-spaces 4 -wrap 0 --new-blocklevel-tags article,header,footer --new-inline-tags video,audio,canvas,ruby,rt,rp --break-before-br yes --sort-attributes alpha --vertical-space yes index.html > .index.html; mv .index.html index.html
tidy --as-xhtml --drop-empty-elements no --input-xml --tidy-mark no -indent --indent-spaces 4 -wrap 0 --new-blocklevel-tags article,header,footer --new-inline-tags video,audio,canvas,ruby,rt,rp --break-before-br yes --sort-attributes alpha --vertical-space yes window.html > .window.html; mv .window.html window.html
tidy --as-xhtml --drop-empty-elements no --input-xml --tidy-mark no -indent --indent-spaces 4 -wrap 0 --new-blocklevel-tags article,header,footer --new-inline-tags video,audio,canvas,ruby,rt,rp --break-before-br yes --sort-attributes alpha --vertical-space yes home.html > .home.html; mv .home.html home.html
tidy --as-xhtml --drop-empty-elements no --input-xml --tidy-mark no -indent --indent-spaces 4 -wrap 0 --new-blocklevel-tags article,header,footer --new-inline-tags video,audio,canvas,ruby,rt,rp --break-before-br yes --sort-attributes alpha --vertical-space yes security.html > .security.html; mv .security.html security.html
tidy --as-xhtml --drop-empty-elements no --input-xml --tidy-mark no -indent --indent-spaces 4 -wrap 0 --new-blocklevel-tags article,header,footer --new-inline-tags video,audio,canvas,ruby,rt,rp --break-before-br yes --sort-attributes alpha --vertical-space yes options/options.html > options/.options.html; mv options/.options.html options/options.html
fmt-js:
fixjsstyle *.js
fixjsstyle options/*.js
#fixjsstyle torrent/*.js
#fixjsstyle i2pcontrol/*.js
fixjsstyle manifest.json
#work around fixjsstyle issue
sed -i 's|= >|=>|g' *.js */*.js
#find . -path ./node_modules -prune -o -name '*.json' -exec fixjsstyle --write {} \;
fmt-locales:
find _locales -name '*.js*' -exec $(HOME)/node_modules/.bin/prettier -w {} \;
fmt-prettier:
find . -name '*.js*' -exec $(HOME)/node_modules/.bin/prettier -w {} \;
lint:
eslint --fix *.js
deborig:
gjslint *.js; true
#eslint --color *.js
deborig: version
rm -rf ../i2psetproxy.js-$(VERSION)
cp -r . ../i2psetproxy.js-$(VERSION)
mkdir -p ../i2psetproxy.js-$(VERSION)
cp -r ./* ../i2psetproxy.js-$(VERSION)
cd ../i2psetproxy.js-$(VERSION) && \
rm -rf web-ext-artifacts .git node_modules && \
tar \
-cvz \
--exclude=.git \
--exclude=i2psetproxy.js.gif \
--exclude=node_modules \
--exclude=*.pdf \
-f ../i2psetproxy.js_$(VERSION).orig.tar.gz \
.
@@ -175,4 +283,38 @@ deb: deborig
-include mirrors.mk
dat:
wget -c -O dat.js https://bundle.run/dat-js
wget -c -O dat.js https://bundle.run/dat-js
rss: torrent
rm -f releases.diff
mv releases.atom .releases.atom
wget https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases.atom
sed -i "s|<title>$(VERSION)</title>|<title>$(VERSION)</title>\n <enclosure url=\"$(MAGNET)\" type=\"application/x-bittorrent\" />|g" releases.atom
upload-rss: rss
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t docs -n "releases.atom" -f releases.atom
upload-updatemanifest:
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t docs -n "updateManifest.json" -f updateManifest.json
webext:
mkdir -p profile
$(HOME)/node_modules/.bin/web-ext run --firefox /usr/bin/firefox --firefox-profile ./profile -u "about:devtools-toolbox?type=extension&id=i2ppb%40eyedeekay.github.io" http://idk.i2p http://localhost:7657 https://github.com/i2p/i2p.i2p https://i2pgit.org/i2p-hackers/i2p.i2p
snark-mirror:
http_proxy=http://127.0.0.1:4444 wget -c -O ../i2psnark-rpc.su3 http://stats.i2p/i2p/plugins/i2psnark-rpc.su3
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION) -n "i2psnark-rpc.su3" -f ../i2psnark-rpc.su3
http_proxy=http://127.0.0.1:4444 wget -c -O ../i2psnark-rpc-update.su3 http://stats.i2p/i2p/plugins/i2psnark-rpc-update.su3
github-release upload -R -u eyedeekay -r I2P-in-Private-Browsing-Mode-Firefox -t $(VERSION) -n "i2psnark-rpc-update.su3" -f ../i2psnark-rpc-update.su3
seed:
cp -v "./i2ppb-$(VERSION)@eyedeekay.github.io.xpi.torrent" "$(HOME)/.i2p/i2psnark"
cp -v "../i2ppb-$(VERSION)@eyedeekay.github.io.xpi" "$(HOME)/.i2p/i2psnark"
android:
$(HOME)/node_modules/.bin/web-ext run \
--target firefox-android \
--android-device HT78N1A00453 \
--firefox-apk org.mozilla.fenix
run: webext

247
PLAN.html Normal file
View File

@@ -0,0 +1,247 @@
<html>
<head>
<title>
I2P in Private B...
</title>
<meta name="author" content="eyedeekay" />
<meta name="description" content="i2p-in-private-browsing-mode-firefox" />
<meta name="keywords" content="master" />
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="stylesheet" type="text/css" href="showhider.css" />
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<div id="navbar">
<a href="#shownav">
Show navigation
</a>
<div id="shownav">
<div id="hidenav">
<ul>
<li>
<a href="..">
Up one level ^
</a>
</li>
<li>
<a href="index.html">
index
</a>
</li>
<li>
<a href="COLORS.html">
COLORS
</a>
</li>
<li>
<a href="GOALS.html">
GOALS
</a>
</li>
<li>
<a href="PLAN.html">
PLAN
</a>
</li>
<li>
<a href="home.html">
home.html
</a>
</li>
<li>
<a href="index.html">
index.html
</a>
</li>
<li>
<a href="location.html">
location.html
</a>
</li>
<li>
<a href="proxyerr.html">
proxyerr.html
</a>
</li>
<li>
<a href="sectorrent.html">
sectorrent.html
</a>
</li>
<li>
<a href="security.html">
security.html
</a>
</li>
<li>
<a href="toopie.html">
toopie.html
</a>
</li>
<li>
<a href="torrent.html">
torrent.html
</a>
</li>
<li>
<a href="window.html">
window.html
</a>
</li>
</ul>
<br>
<a href="#hidenav">
Hide Navigation
</a>
</div>
</div>
</div>
<a id="returnhome" href="/">
/
</a>
<p>
The I2P Browser has made strides at improving users anonymity when browsing
the anonymous web inside of I2P. However, it has in many ways simply re-hashed
the existing work of Tor on the Tor Browser. This is mostly a good thing, but it
is unfortunate because in a sense we have failed to add I2P specific features
that could improve the user experience and set us apart from the Tor Browser.
</p>
<p>
I think that moving forward, we should try to extend the functionality of I2P
Browser into more I2P-specific realms and make an effort to make those things
more accessible and highlight that they are in use. I don&rsquo;t really know how to
explain what I mean without describing what I want to do, so
</p>
<h2>
Let&rsquo;s avoid
<em>
adding
</em>
features to i2pbutton
</h2>
<p>
i2pbutton contains alot of code from Tor which even they don&rsquo;t really want to
maintain. It&rsquo;s dying the same long, slow death it&rsquo;s always been dying, since
back before there was a Tor Browser and torbutton was just an easy way to
configure Tor in your Firefox browser. I don&rsquo;t relish the thought of being one
the last two groups on the planet maintaining an XUL extension, so I think that
we should always be trying to do less with i2pbutton and more with a modern
extension. Other advantages of modern extensions are better debugging tools
and easier-to-use, more understandable API&rsquo;s for doing the following other
things.
</p>
<h2>
Contexts for Security and Placing Router Applications under their own Origin
</h2>
<p>
It is possible, however unlikely, for an attack on a local service or a router
plugin to leak information about what&rsquo;s going on on the router console because
they will share the same origin. We can resolve this issue, though, by placing
applications each into their own origin under a so-called &ldquo;Container Tab,&rdquo;
completely separating eepWeb traffic and Router Console administration. The
origin of the application will be the same as the part of the application URL
<em>
after
</em>
localhost:7657, so for instance &ldquo;
<a href="http://localhost:7657/torrents&quot;">
http://localhost:7657/torrents&rdquo;
</a>
would become just &ldquo;torrents&rdquo; in the URL bar and have that origin.
</p>
<h2>
Dynamic Themes
</h2>
<p>
Since I2P Browsing and Router Console Administration are going to be separated
to their own contextual identities, we can manipulate the appearance of the
Firefox browser to accomplish 2 things: We can indicate which context we are in
both by manipulating the UI text and color, and manipulate UI elements based on
what context we&rsquo;re in or even what URL(In the router console) we&rsquo;re on. We can
use this to make router console applications appear more tightly integrated with
the functionality of the browser. It&rsquo;s kind of obliquely like how many
applications are written with user-interfaces that are actually just
browsers(Including Mattermost), but with us using the whole browser,
acknowledging it&rsquo;s presence and utility but quite literally highlighting(in
color) our unique features. So for instance, when the user is using snark it
could change color to match snark and change text to say &ldquo;Torrent Client.&rdquo;
</p>
<h2>
Application Integration - Torrents
</h2>
<p>
I2P&rsquo;s strengths are in it&rsquo;s applications, but many users never even make it to
the applications, and even if they do, the I2P applications often lack the
familiar workflows that people are used to. For instance, when one downloads
a torrent on the non-anonymous internet, you simply click a link and the browser
&ldquo;Handles&rdquo; the link, automatically launching the torrent client, adding the
torrent, and sometimes prompting the user for more actions. This isn&rsquo;t possible
yet with i2psnark and an external browser, but in I2P browser we can write a
&ldquo;Protocol Handler&rdquo; which talks to snark-rpc, replicating the ease of just
clicking a torrent link to automatically add it to a torrent client. Of course
that does require us to bundle the snark-rpc plugin. Besides that, once we&rsquo;ve
added the torrent, we can keep talking to snark-rpc to keep track of the
download progress and display information about that in the already-available
Firefox downloads menu that users are already familiar with, so that they can
keep track of the files they are downloading after navigating away from the
snark interface, or perhaps even without needing to interact with snark at all.
</p>
<div id="sourcecode">
<span id="sourcehead">
<strong>
Get the source code:
</strong>
</span>
<ul>
<li>
<a href="https://github.com/eyedeekay/i2p-in-private-browsing-mode-firefox">
Source Repository: (https://github.com/eyedeekay/i2p-in-private-browsing-mode-firefox)
</a>
</li>
</ul>
</div>
<div>
<a href="#show">
Show license
</a>
<div id="show">
<div id="hide">
<pre><code>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.
</code></pre>
<a href="#hide">
Hide license
</a>
</div>
</div>
</div>
<div>
<iframe src="https://snowflake.torproject.org/embed.html" width="320" height="240" frameborder="0" scrolling="no"></iframe>
</div>
<div>
<a href="https://geti2p.net/">
<img src="i2plogo.png"></img>
I2P
</a>
</div>
</body>
</html>

218
README.md
View File

@@ -1,50 +1,51 @@
i2psetproxy.js
==============
I2P in Private Browsing Mode(Firefox-Only)
==========================================
WebExtension that does extended configuration of a dedicated I2P browser. While
**experimental**, it's capable of enforcing the use of the I2P Proxy without
needing to touch about:config and disables several
fingerprinting/de-anonymization vectors on it's own. It is also the easiest way
to configure an I2P browser on Android without requiring the user to root their
device, although this support may be somewhat spotty in recent versions it it
beginning to improve again. It aims to be as similar to a fully-fledged I2P
Rhizome as possible and borrows some code from I2P Rhizome(Which it is also
compatible with).
- **This extension requires a running I2P Router on the Host System**
The Old Version
---------------
- [**This extension comes pre-installed in the Easy-Install Beta for Windows**](https://geti2p.net/en/download/easyinstall)
New versions of this extension create an I2P in Private Browsing mode instead.
Since this is a drastic change to the behavior of the old plugin, a new entry
for the new plugin has been made at a new location on addons.mozilla.org.
This is an webextension which introduces a set of new "Private Browsing" modes
to Firefox-based browsers(Supporting webextensions, must be current ESR or
greater) that makes it easier to configure a browser to use I2P securely and
adds features for making I2P applications easier to use. It does this by
isolating I2P-specific settings to Contextual Identities within Firefox, then
loading them automatically when the user requests them. It also adds convenience
and management features, like an embedded I2P console and Bittorrent integration
with clients using the transmission-rpc API and via in-browser protocol handling
integrations.
* This is the new version: [[link]](https://addons.mozilla.org/en-US/firefox/addon/i2p-in-private-browsing/)
* This is the old version: [[link]](https://addons.mozilla.org/en-US/firefox/addon/I2P-Proxy/)
Android usage:
Privacy Policy
--------------
Open the following link
[Github Releases Version](https://github.com/eyedeekay/i2psetproxy.js/releases/)
in the browser you want to use for I2P. Firefox will warn you that it is about
to install an extension and indicate the permissions required. Read them over
and when you're ready, accept them. That's all it should take, your browser is
now configured to use I2P.
This browser extension does not collect any personal information. It requires
access to local storage and browsing data permissions in order to delete them
when directed to by the user. This browser extension does not transmit any
information to any third party, nor will it, ever.
### addons.mozilla.org
This browser extension cannot influence telemetry carried out by browser vendors
to determine performance in their distribution channels, nor can it mitigate any
other browser vendor telemetry.
If you would prefer to recieve automatic updates from AMO, the correct product
page for this plugin is
[I2P In Private Browsing](https://addons.mozilla.org/en-US/firefox/addon/i2p-in-private-browsing/).
This absolutely requires a working outproxy. If you want to avoid the use of AMO
for updates, you can download the identical plugin from this repository's
releases page. The latest AMO Plugin will always be identical to the latest
github release, except for the version number, which must be incremented for
submission to AMO.
This browser extension is entirely Free, Open-Source software.
Debian usage:
-------------
Installation(Cross-Platform):
-----------------------------
For desktop users this addon is available from addons.mozilla.org, where you
will be able to recive automatic updates:
[I2P in Private Browsing](https://addons.mozilla.org/en-US/firefox/addon/i2p-in-private-browsing/).
### Setting the Homepage
The first time you run the extension, Firefox will offer you the option of setting
your homepage and new tab page to the homepage contained *within* the extension. You
can decline this or edit it later and it will not affect your anonymity. Enabling
this feature allows the extension to set your homepage to a local document with a
number of useful I2P links.
Debian Installation:
--------------------
Should you prefer, it is possible to install this extension system-wide by
side-loading it into Debian. You can generate your own deb file by running the
@@ -52,6 +53,44 @@ command:
make deb
and then you can install it with:
sudo apt install ../i2psetproxy.js_*.deb
Bittorrent Download:
--------------------
The self-hosted plugin is available from bittorrent both within the I2P and
Clearnet Bittorrent network(With a web seed to support it in case one goes
dead).
* magnetsub
* [Get the .torrent file](./i2ppb@eyedeekay.github.io.xpi.torrent)
Usage:
------
* Basically, it "Just Works." After you install the plugin, browsing to an I2P
domain will automatically stop the current tab and re-open the I2P site in an
I2P Browser tab.
* Besides that, four bookmarks are added to the "Bookmarks Toolbar," which
will take you to visit your Java I2P applications, or the "Simplified I2P
Landing Page" embedded in the plugin:
* ![Landing page](lander.png)
* Also, there's a menu for accessing I2P functionality while you're browsing.
It lets you control a few settings in a granular way.
* ![Menu](menu.png)
* You can re-enable WebRTC but force it to always use the proxy that is
enforced by the tab.
* You can either force the browser to delete all history for I2P sites
immediately, or you can close all your I2P Browser tabs at once and delete
the history for I2P browsing when you're done.
* That's all there is to it! Your browser is configured to safely use and
administer I2P.
* Optionally, you can add I2PSnark-RPC and use Bittorrent-over-I2P via the
transmission-rpc interface. To do this, have a look at the torrent guide:
[Torrent guide](torrent/README.md)
### Features
* [done] **Provide** a way to launch into an I2P-Specific contextual identity
@@ -59,8 +98,10 @@ command:
to the I2P container. Isolate the router console from other local
applications by automatically intercepting requests to the router console to
another container.
* ![Visiting i2p-projekt.i2p](i2psetproxy.js.png)
* [done] **Indicate** the I2P browser is in use visually. Find an
acceptable way to indicate it on Android.
* ![Visiting webmail](susimail.png)
* [done] **Set** the http proxy to use the local I2P proxy automatically.
Provide specific configuration for other types of I2P proxies(SOCKS,
isolating HTTP)
@@ -68,21 +109,35 @@ command:
them with the proxy enforced.
* [done] **Change** the color of the browser window to indicate that I2P is in
use
* [ready/broken/wip] **Provide** help in a variety sof languages.
* [wip] **Monitor** the health and readiness of the I2P router it is
* ![Visiting i2ptunnel](i2ptunnel.png)
* [ready] **Provide** help in a variety of languages.
* [done] **Monitor** the health and readiness of the I2P router it is
instructed to use. Currently the plugin checks whether the HTTP Proxy is
working by fetching an image from "http://proxy.i2p" and displaying a result.
A work-in-progress binding to i2pcontrol is available in ./i2pcontrol, it is
inert at this time.
* ![Visiting toopie.html](toopie.png)
* [Done] **Handle** router console applications under their own origins and
within their own contextual identity. (1) The router console is automatically
confined to it's own container tab. (2) Use a custom protocol handler to
place each i2p application/plugin under it's own origin, shortening router
console URL's and placing applications under their own origin.
* [wip] **Handle Torrents** by talking to i2psnark-rpc plugin and then
adding them directly into the Firefox downloads drop-downs, menus, etc. If I
can. Right now instead of talking to snark-rpc, it uses a web-based protocl
handler that simply auto-fills the torrent into i2psnark.
* ![Visiting routerconsole](routerconsole.png)
* [Done] **Handle Torrents** by talking to i2psnark-rpc plugin and then
adding them directly into the Firefox downloads drop-downs, menus, etc. Enable
the use of I2PSnark as a peer-to-peer delivery mechanism for media files.
* ![Visiting i2psnark](i2psnark.png)
* ![Monitoring torrents](transmissionrpc.png)
* [Done] **Enhance** the I2P browsing experience by allowing site developers
distribute some or all of their resources as torrents, allowing the torrents to
be treated effectively as a CDN.
* ![Distribute your site as a torrent.](x-i2p-torrentlocation.png)
* [Done] **Indicate** the level of authenticity provided by TLS. TLS is
optional on I2P for now, but some sites offer it anyway. TLS support is
experimental and in the works.
* ![Use HTTPS with your I2P Site.](i2p-https.png)
* [Done] **Provide** alternate, in-I2P destinations for web sites that want to
mirror their content within I2P.
* [barely started] **Isolate** traffic by contextual identity to it's own HTTP
Proxy tunnel, each reflecting it's own pseudonymous identity within I2P. The
contextual identities. For now, the contextual identities used to manage
@@ -98,22 +153,21 @@ command:
tunnel-close timeout and key-reuse until specifically invoked.
- I2P Blogging: Use this for posting content to the web interface of your
blog or to other similar websites that you create content on.
* ![Visiting clearweb](clearweb.png)
### Screenshot
### Video
![Visiting i2p-projekt.i2p](i2psetproxy.js.png)
* ![Video of the plugin in action](i2psetproxy.js.gif)
![Visiting routerconsole](routerconsole.png)
Documents
------------
![Visiting webmail](susimail.png)
![Visiting i2psnark](i2psnark.png)
![Visiting i2ptunnel](i2ptunnel.png)
![Visiting clearweb](clearweb.png)
![Video of the plugin in action](i2psetproxy.js.gif)
* **[Browser Outline](https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/download/docs/Browser.Design.Documentation.pdf)**: This document is an outline of each of
the browser extension's feature panels in presentation form.
* **[Smart Lander Design](https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/download/docs/Landing.Page.Documentation.pdf)**: This is the original outline of
the smart landing page which became the I2P home page within the browser and
the drop-down control panel.
* **[Other extensions](https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/wiki/Other-Extensions)**: and how they work with this one.
Super Extra Important Background Info:
--------------------------------------
@@ -124,16 +178,52 @@ Tor's work on hardening Firefox itself and of particular interest are the
### Links about Project Uplift
* https://wiki.mozilla.org/Security/Tor_Uplift
* https://wiki.mozilla.org/Security/FirstPartyIsolation
* https://wiki.mozilla.org/Security/Fingerprinting
* https://wiki.mozilla.org/Security/Fennec%2BTor_Project
* https://wiki.mozilla.org/Security/Tor_Uplift/Tracking
* [Tor Uplift](https://wiki.mozilla.org/Security/Tor_Uplift) is a project which
brings important features of the Tor Browser to the mainstream of Firefox
users by including patches from Tor Browser Bundle into Firefox where it is
appropriate.
* [First Party Isolation](https://wiki.mozilla.org/Security/FirstPartyIsolation)
is a feature in Firefox and other browsers which keeps information from
leaking across first-party domains.
* [Fingerprinting](https://wiki.mozilla.org/Security/Fingerprinting) is a
technique where a tracker attempts to extract unique information about a user
from a side-channel in order to create an identifier that can be used to
correlate the user across many sites.
* [Fennec](https://wiki.mozilla.org/Security/Fennec%2BTor_Project) is Firefox
for Android and this link has some analysis of the privacy consequences of the
Android platform.
* [Tracking](https://wiki.mozilla.org/Security/Tor_Uplift/Tracking) in Firefox
is surveyed here.
Project uplift seems to have largely been accomplished?
### Links about Project Fusion
* https://wiki.mozilla.org/Security/Fusion
* https://trac.torproject.org/projects/tor/wiki/org/meetings/2018Rome/Notes/FusionProject
* https://blog.torproject.org/tor-heart-firefox
* [Project Fusion](https://wiki.mozilla.org/Security/Fusion) or Firefox using
Onions is a joint Mozilla/Tor effort to create an enhanced Private Browsing
mode for Firefox which uses Tor.
* [Notes](https://trac.torproject.org/projects/tor/wiki/org/meetings/2018Rome/Notes/FusionProject)
from a meeting about Fusion.
* [Tor at the Heart: Firefox](https://blog.torproject.org/tor-heart-firefox) is
a blog about Tor and the relationship they have to Firefox re: TBB, Fusion.
The **Other** Version
---------------------
New versions of this extension create an I2P in Private Browsing mode instead,
using container tabs.
Since this is a drastic change to the behavior of the old plugin, and since there
is no UI a new entry
for the new plugin has been made at a new location on addons.mozilla.org.
* This is the new version: [[link]](https://addons.mozilla.org/en-US/firefox/addon/i2p-in-private-browsing/)
* This is the old version: [[link]](https://addons.mozilla.org/en-US/firefox/addon/I2P-Proxy/)
Android usage:
--------------
Use the old version, on either an old version of Firefox(pre-68) or by enabling
this custom collection: [Recommended Plugins] https://addons.mozilla.org/en-US/firefox/collections/14614396/I2P-Browser-Fork/

36
ROADMAP.md Normal file
View File

@@ -0,0 +1,36 @@
Roadmap:
========
2.5.8:
------
Refactor the codebase to make more use of reusable code. De-spaghettify and DRY things out.
2.6.0:
------
Refactor the codebase to make more use of reusable code. De-spaghettify and DRY things out.
2.7.0:
------
# Finished Feature Breakout:
Create 2 new extensions which include functionality which has remained entirely the same for as long as it has existed, and which is suitable for use in it's own extensions. This is to decrease the maintenance burden of this extension, which has grown significant functionality outside it's original scope, and improve UI by providing clearer and less complex user-interfaces which are limited by the constraints of the WebExtensions system.
- Remove i2psnark-rpc functionality and place it into it's own, separate extension.
1. Remove options for configuring i2psnark-rpc from options menu and place them into a separate browser extension. This step initializes a new browser extension.
2. Remove Download control menu from Browser Action panel, and place it into the new browser extension.
3. Move torrent Navbar Buttons from old extension to new extension.
4. Remove torrent-on-page discovery functionality from background scripts, and place it into the new browser extension.
5. Set up reliable, straightforward release process.
- Remove i2pcontrol-rpc functionality and place it into it's own, separate extension.
1. Remove options for configuring i2pcontrol-rpc from options menu and place them into a separate browser extension. This step initializes a new browser extension.
2. Set up `toopie.html` as a browser extension, drawing upon the options which are now controlled by the browser extension options page.
3. Set up reliable, straightforward release process.
- Create an "Extension Template" for plugins which require outgoing traffic to be proxied over I2P.
- Create options for configuring the proxy
- Create reference extension-bound proxification function and set it up for the onRequest event.
- Create example WebExtension I2P application

738
_locales/ar/messages.json Normal file
View File

@@ -0,0 +1,738 @@
{
"CertLabel": {
"description": "شهادة المعلومات:",
"message": "شهادة المعلومات:"
},
"SignedLabel": {
"description": "توقيع:",
"message": "توقيع:"
},
"TorrentTypeLabel": {
"description": "Torrent Links:",
"message": "Torrent Links:"
},
"TypeLabel": {
"description": "Torrent Links:",
"message": "Torrent Links:"
},
"aboutconsole": {
"description": "للولوج إلى الصفحة الرئيسية لجهاز التحكم، يذهب هنا:",
"message": "للولوج إلى الصفحة الرئيسية لجهاز التحكم، يذهب هنا:"
},
"abouthome": {
"description": "وصف لصفحة الزر.",
"message": "وللمزيد من المعلومات عن هذا التمديد، يرجى زيارة هذه الصفحة."
},
"addresstype": {
"description": "العنوان:",
"message": "العنوان:"
},
"applicationExplain": {
"description": "Description for application section.",
"message": "The I2P router console and applications open in their own tab, providing them with the same security benefits as browsing with this extension. This adds more protection by isolating each application and preventing other tabs (ie social media, etc) from fingerprinting or scripts. جميع المشابك تستخدم ألوان تحديد لتتبع تدفق العمل الخاص بك I2P."
},
"applicationHeader": {
"description": "رئيس قسم الطلبات.",
"message": "التطبيقات"
},
"beta": {
"description": "هذا منتج تجريبي.",
"message": "هذا منتج تجريبي."
},
"blogPreface": {
"description": "وجه لقب المصفح",
"message": "Blog"
},
"blogPrefacePrivate": {
"description": "وجه لقب المصفح",
"message": "Blog (Private)"
},
"bookmarksButton": {
"description": "Re-Create Bookmarks",
"message": "Re-Create Bookmarks"
},
"botePreface": {
"description": "وجه لقب المصفح",
"message": "I2P-Bote Mail"
},
"botePrefacePrivate": {
"description": "وجه لقب المصفح",
"message": "I2P-Bote Mail (Private)"
},
"browser-action": {
"description": "Browse",
"message": "Browse"
},
"btRpcHostText": {
"description": "التجمع الكونغولي من أجل الديمقراطية المضيف:",
"message": "التجمع الكونغولي من أجل الديمقراطية المضيف:"
},
"btRpcPathText": {
"description": "التجمع الكونغولي من أجل الديمقراطية الطريق:",
"message": "التجمع الكونغولي من أجل الديمقراطية الطريق:"
},
"btRpcPortText": {
"description": "التجمع الكونغولي من أجل الديمقراطية بورت:",
"message": "التجمع الكونغولي من أجل الديمقراطية بورت:"
},
"certAbsent": {
"description": "مضمون المعلومات المتعلقة بالشهادة إذا لم يكن هناك",
"message": "هذا الموقع لا يستخدم جهاز تحديد المواقع ما زالَ يُتأكّدُ مِنْ المُبْكَرَةِ مِن قِبل I2P."
},
"certPresent": {
"description": "مضمون المعلومات المتعلقة بالشهادة إذا كان حاضرا",
"message": "هذا الموقعِ يَستعملُ HTTPS. HTTPS over I2P is experimental and requires self-signed certificates or alternate root authorites."
},
"clearData": {
"description": "تصفية قائمة البيانات.",
"message": "بيانات الحشد:"
},
"clearDesc": {
"description": "مسح وصف إجراءات البيانات.",
"message": "إستخدم هذا لمسح بياناتك."
},
"controlExplain": {
"description": "أدخل لوحة التحكم.",
"message": "هذه الضوابط تُستخدم لتكييف تجربتك في الحشد"
},
"controlHeader": {
"description": "عنوان لوحة التحكم.",
"message": "الرقابة"
},
"controlHelpText": {
"description": "المساعدة على تشكيل خيارات زر نفق ريست",
"message": "إعترفوا بأن مرشدكم هنا."
},
"controlHostText": {
"description": "(مضيف (روتر كونسول",
"message": "الجهة المضيفة:"
},
"controlHostValue": {
"description": "(مضيف (روتر كونسول",
"message": "127.0.0.1"
},
"controlPortText": {
"description": "Port for the Router Console",
"message": "مركز المراقبة:"
},
"controlPortValue": {
"description": "Port for the Router Console",
"message": "7657"
},
"description": {
"description": "أنت الآن قادرة على استخدام I2P في هذا بروزر.",
"message": "أنت الآن قادرة على استخدام I2P في هذا بروزر."
},
"description2": {
"description": "إذا كنت ترى هذه الصفحة، هو لأن خطأ محترف حدث. تم تقديم بعض المعلومات لمساعدتك في تشخيص المسألة.",
"message": "إذا كنت ترى هذه الصفحة، هو لأن خطأ محترف حدث. تم تقديم بعض المعلومات لمساعدتك في تشخيص المسألة."
},
"disableHistory": {
"description": "بطاقة تدقيق التاريخ.",
"message": "تاريخ معزول في تابس I2P؟?"
},
"enableWebRTC": {
"description": "(ويرتك).",
"message": "هل تستطيع أن تُخبر (ويك) بالوكالة؟?"
},
"extensionDescription": {
"description": "وصف التمديد.",
"message": "شبكة \"آي 2 بي\" سهلت."
},
"extensionName": {
"description": "اسم التمديد.",
"message": "I2P In Private Browsing"
},
"extensionNameVariant": {
"description": "اسم التمديد.",
"message": "I2P In Private Browsing - Rhizome Variant"
},
"extensionPreface": {
"description": "وجه لقب المصفح",
"message": "I2P Management"
},
"extensionVersion": {
"description": "صورة التمديد.",
"message": "1.28"
},
"fliplinks": {
"description": "تمديد ونفقات الموارد",
"message": "تمديد ونفقات الموارد"
},
"forumMessage": {
"description": "رسالة المساعدة",
"message": "زيارة منتدى شركاء التنفيذ لتعلم المزيد أو طلب المساعدة"
},
"headline": {
"description": "قاذفة الإنترنت غير المرئية",
"message": "قاذفة الإنترنت غير المرئية"
},
"help": {
"description": "وصف لصفحة الزر.",
"message": "وللمزيد من المعلومات عن هذا التمديد، يرجى زيارة هذه الصفحة."
},
"helpMessage": {
"description": "رسالة المساعدة",
"message": "الحصول على مساعدة إضافية"
},
"histDesc": {
"description": "وصف الإجراءات التاريخية",
"message": "التاريخ يُبرّر تلقائياً عندما تُغلق رسومات I2P الخاصة بك. إذا كنت تريد تصفية التاريخ كما تذهب، تحقق من هذا الصندوق."
},
"homepage": {
"description": "البحث عن المزيد من المعلومات",
"message": "هناك المزيد من المعلومات المتاحة هنا"
},
"hostText": {
"description": "المضيف لشركة HTTP أو شركة SOCKS5",
"message": "المضيف:"
},
"i2ppage": {
"description": "وهناك المزيد من المعلومات المتاحة هنا.",
"message": "وهناك المزيد من المعلومات المتاحة هنا."
},
"i2ptunnel": {
"description": "Description for i2ptunnel",
"message": "نشاهد رسائل عن وضعية المحترفين و نصادر الخدمات والأنفاق."
},
"i2ptunnelPreface": {
"description": "وجه لقب المصفح",
"message": "مدير خدمات مخفي"
},
"i2ptunnelPrefacePrivate": {
"description": "وجه لقب المصفح",
"message": "مدير خدمات مخفي )مدير("
},
"infoMessage": {
"description": "رسالة المساعدة",
"message": "أنت الآن حرّ لتَغْطّمْ فوق ويب! مصففك الآن مجهز ليتصفح بشكل مجهول على شبكة I2P كما تَتصفحُ، حركة المرور الخاصة بكَ سَتُوجّهُ من خلال عقدِ شبكةِ أخرى لإخفاء هو أصلُ، كِلاً مِنْ الخادمِ و مِنْ العقدِ نفسهِ."
},
"infoTitle": {
"description": "عنوان قائمة المساعدة",
"message": "I2P النجدة"
},
"ircPreface": {
"description": "وجه لقب المصفح",
"message": "Dispatch IRC"
},
"ircPrefacePrivate": {
"description": "وجه لقب المصفح",
"message": "الهيئة الدولية لمراقبة المخدرات"
},
"isBase32": {
"description": "رسالة إلى قاعدة معلومات الموقع 32",
"message": "I2P Base32-Formatted Address"
},
"isHostName": {
"description": "رسالة لاستضافة لوحة معلومات الموقع",
"message": "I2P القفزة المضيفة"
},
"label-router-activepeers": {
"description": "ناشطين",
"message": "ناشطين"
},
"label-router-bandwidth": {
"description": "Bandwidth",
"message": "Bandwidth"
},
"label-router-bw-inbound-15s": {
"description": "في حدود 15",
"message": "في حدود 15"
},
"label-router-bw-inbound-1s": {
"description": "مقياس الجسم 1:",
"message": "مقياس الجسم 1:"
},
"label-router-bw-outbound-15s": {
"description": "مقاس 15 بوصة:",
"message": "مقاس 15 بوصة:"
},
"label-router-bw-outbound-1s": {
"description": "الرصيف الأول",
"message": "الرصيف الأول"
},
"label-router-net-tunnels-participating": {
"description": "سلالات العبور:",
"message": "سلالات العبور:"
},
"label-router-netdb-fastpeers": {
"description": "بسرعة",
"message": "بسرعة"
},
"label-router-netdb-highcapacitypeers": {
"description": "القدرات العالية بيرز:",
"message": "القدرات العالية بيرز:"
},
"label-router-netdb-isreseeding": {
"description": "Reseed status:",
"message": "Reseed status:"
},
"label-router-netdb-knownpeers": {
"description": "المعلمة بيرز:",
"message": "المعلمة بيرز:"
},
"label-router-peers": {
"description": "Peers",
"message": "Peers"
},
"label-router-status": {
"description": "Status Router Status:",
"message": "Status Router Status:"
},
"label-router-uptime": {
"description": "وقت التخرج",
"message": "وقت التخرج"
},
"label-router-version": {
"description": "الراقصة:",
"message": "الراقصة:"
},
"links": {
"description": "تمديد ونفقات الموارد",
"message": "تمديد ونفقات الموارد"
},
"linksExplain": {
"description": "إذا كنت تريد الحصول على المزيد من المعلومات عن I2P، يمكنك زيارة هذه الروابط.",
"message": "إذا كنت تريد الحصول على المزيد من المعلومات عن I2P، يمكنك زيارة هذه الروابط."
},
"mailPreface": {
"description": "وجه لقب المصفح",
"message": "البريد الشبكي"
},
"mailPrefacePrivate": {
"description": "وجه لقب المصفح",
"message": "البريد الإلكتروني (Private)"
},
"muwirePreface": {
"description": "وجه لقب المصفح",
"message": "MuWire"
},
"muwirePrefacePrivate": {
"description": "وجه لقب المصفح",
"message": "مووير (بريفيت)"
},
"newsMessage": {
"description": "رسالة المساعدة",
"message": "زيارة I2P اعتذر لتعلم آخر شيء عن (اي2ب)."
},
"onboardingButtonFive": {
"description": "تحسين الخبرة",
"message": "تحسين الخبرة"
},
"onboardingButtonFour": {
"description": "Sharing Files",
"message": "تبادل الملفات"
},
"onboardingButtonOne": {
"description": "I2P Network Browsing and Non-I2P Network Browsing",
"message": "I2P Network Browsing and Non-I2P Network Browsing"
},
"onboardingButtonThree": {
"description": "البريد الإلكتروني المخفي",
"message": "البريد الإلكتروني المخفي"
},
"onboardingButtonTwo": {
"description": "شبكة الحماية",
"message": "شبكة الحماية"
},
"onboardingButtonZero": {
"description": "احمي خصوصيتك",
"message": "احمي خصوصيتك"
},
"onboardingContentFive": {
"description": "هذا التمديد يمكن أن يقترن بتمديدات أخرى التي تُحسّن أحياناً وظيفتها شركة أوبلوك أوريغين، وشركة محلية، وشركة jShelter مفيدة للتعجيل بتحميل الصفحات، وحجب الإعلانات، والحد من قوة جافرين. وبالنسبة للمستعملين الذين يرغبون في حجب كل الجافوري، يوصى بـ \" NoScript \" .",
"message": "هذا التمديد يمكن أن يقترن بتمديدات أخرى التي تُحسّن أحياناً وظيفتها شركة أوبلوك أوريغين، وشركة محلية، وشركة jShelter مفيدة للتعجيل بتحميل الصفحات، وحجب الإعلانات، والحد من قوة جافرين. وبالنسبة للمستعملين الذين يرغبون في حجب كل الجافوري، يوصى بـ \" NoScript \" ."
},
"onboardingContentFour": {
"description": "I2P is capable of using peer-to-peer applications like Bit Torrent, protecting your identity when you share files. زبوننا الصغير المجهول متوفر في المسبح.",
"message": "I2P is capable of using peer-to-peer applications like Bit Torrent, protecting your identity when you share files. زبوننا الصغير المجهول متوفر في المسبح."
},
"onboardingContentOne": {
"description": "هذا التوسيع يعمل تلقائياً عندما تنظف مواقع I2P إذا كنت ترغب في استخدام I2P كوكيل للمواقع غير I2P، استخدام زر I2P In Private Browsing in the toolbar خبرتك بينما تنظف الانترنت قد تكون مختلفة قليلا قد تكون الأمور أبطأ قليلاً، ورهناً بمستوى أمنك، قد لا تعمل بعض العناصر أو تحملها. قد يُطلب منك أيضاً أن تثبت أنك إنسان وليس إنسان آلي.",
"message": "هذا التوسيع يعمل تلقائياً عندما تنظف مواقع I2P إذا كنت ترغب في استخدام I2P كوكيل للمواقع غير I2P، استخدام زر I2P In Private Browsing in the toolbar خبرتك بينما تنظف الانترنت قد تكون مختلفة قليلا قد تكون الأمور أبطأ قليلاً، ورهناً بمستوى أمنك، قد لا تعمل بعض العناصر أو تحملها. قد يُطلب منك أيضاً أن تثبت أنك إنسان وليس إنسان آلي."
},
"onboardingContentThree": {
"description": "وهناك أيضاً خدمة بريد إلكتروني مجهولة الهوية متاحة داخل I2P، ويمكن الحصول عليها من منظفنا عن طريق القائمة مباشرة إلى اليمين.",
"message": "وهناك أيضاً خدمة بريد إلكتروني مجهولة الهوية متاحة داخل I2P، ويمكن الحصول عليها من منظفنا عن طريق القائمة مباشرة إلى اليمين."
},
"onboardingContentTwo": {
"description": "I2P is normally administered via a WebUI (The \"Router Console \"), which the user sometimes views in the same browser they use to visit remote sites. ومن الضروري منع المواقع من الحصول على المعلومات من هذا الموقع وغيره من الخدمات التي يديرها محليا. ولا تزال مواقع شبكة التطهير في حاوية الدفء - الديوكس، ولكن بمجرد أن تطلب حاوية دفوكس - قاذف الديوكس (A)-onion أو *.i2p موقعا، ستتم حاويته فورا. أداة إدارة هوية (تور بروزر) تتحكم في تابوتات الشبكه النظيفه و هم يقتربون من استخدام المعالجه الخارجيه لـ (آي 2 بي) أو (بلوجين).",
"message": "I2P is normally administered via a WebUI (The Router Console) which the user sometimes views in the same browser they use to visit remote sites. ومن الضروري منع المواقع من الحصول على المعلومات من هذا الموقع وغيره من الخدمات التي يديرها محليا. ولا تزال مواقع شبكة التطهير في حاوية الدفء - الديوكس، ولكن بمجرد أن تطلب حاوية دفوكس - قاذف الديوكس (A)-onion أو *.i2p موقعا، ستتم حاويته فورا. أداة إدارة هوية (تور بروزر) تتحكم في تابوتات الشبكه النظيفه و هم يقتربون من استخدام المعالجه الخارجيه لـ (آي 2 بي) أو (بلوجين)."
},
"onboardingContentZero": {
"description": "عندما تستخدم (إي تو بي) في (مود) الخاص، فأنت محمي من التتبع والمراقبة. الـ (إي تو بي بروزر) يعزل الكعك ويحذف تاريخك بعد دورتك هذه التعديلات تضمن أن خصوصيتك وأمنك محمية كبروزك.",
"message": "عندما تستخدم (إي تو بي) في (مود) الخاص، فأنت محمي من التتبع والمراقبة. الـ (إي تو بي بروزر) يعزل الكعك ويحذف تاريخك بعد دورتك هذه التعديلات تضمن أن خصوصيتك وأمنك محمية كبروزك."
},
"onboardingFive": {
"description": "الخبرة",
"message": "الخبرة"
},
"onboardingFour": {
"description": "تحشد الشبكة",
"message": "تحشد الشبكة"
},
"onboardingOne": {
"description": "إئتمنْك الخبرة",
"message": "إئتمنْك الخبرة"
},
"onboardingThree": {
"description": "البريد الإلكتروني المخفي",
"message": "البريد الإلكتروني المخفي"
},
"onboardingTitle": {
"description": "حول I2P In Private Browsing",
"message": "حول I2P In Private Browsing"
},
"onboardingTwo": {
"description": "Share Files",
"message": "Share Files"
},
"onboardingZero": {
"description": "احمي خصوصيتك",
"message": "احمي خصوصيتك"
},
"portText": {
"description": "Port for the HTTP or SOCKS5 Proxy",
"message": "بورت:"
},
"protocolHandlerValue": {
"description": "قيمة معالج بروتوكول المغناطيس",
"message": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%saction=Addfoo=Add+torrent"
},
"proxy-check": {
"description": "الوكيل جاهز.",
"message": "الوكيل جاهز."
},
"proxyFailedStatus": {
"description": "فشل الوكيل.",
"message": "الوكيل لَيسَ جاهزَ"
},
"proxyHelpText": {
"description": "المساعدة على تشكيل خيارات زر نفق ريست",
"message": "إعترف بوكيلك هنا."
},
"proxySuccessStatus": {
"description": "فشل الوكيل.",
"message": "الوكيل جاهز"
},
"readyness": {
"description": "الوكيل جاهز.",
"message": "الوكيل جاهز."
},
"releases": {
"description": "Description for new release page",
"message": "تحقق من الإطلاقات الجديدة هنا"
},
"resetMessage": {
"description": "رسالة لزر نفق ريست",
"message": "Reset Tunnel"
},
"returnhome": {
"description": "/",
"message": "/"
},
"router-net-bw-inbound-15s": {
"description": "يستعاض عن عبارة Router Bandwidth Outbound 15s",
"message": "يستعاض عن عبارة Router Bandwidth Outbound 15s"
},
"router-net-bw-inbound-1s": {
"description": "يستعاض عن عبارة Router Bandwidth Inbound 1s",
"message": "يستعاض عن عبارة Router Bandwidth Inbound 1s"
},
"router-net-bw-outbound-15s": {
"description": "يستعاض عن عبارة Router Bandwidth Outbound 15s",
"message": "يستعاض عن عبارة Router Bandwidth Outbound 15s"
},
"router-net-bw-outbound-1s": {
"description": "يستعاض عن عبارة Router Bandwidth Outbound 1s",
"message": "يستعاض عن عبارة Router Bandwidth Outbound 1s"
},
"router-net-tunnels-participating": {
"description": "يستعاض عن عبارة \" روتر \" التي تشارك في الكونت",
"message": "يستعاض عن عبارة \" روتر \" التي تشارك في الكونت"
},
"router-netdb-activepeers": {
"description": "يستعاض عن عبارة \" ناشطين \"",
"message": "يستعاض عن عبارة \" ناشطين \""
},
"router-netdb-fastpeers": {
"description": "يستعاض عن عبارة Router Fast Peers",
"message": "يستعاض عن عبارة Router Fast Peers"
},
"router-netdb-highcapacitypeers": {
"description": "يستعاض عن عبارة \" أصحاب القدرات العالية \"",
"message": "يستعاض عن عبارة \" أصحاب القدرات العالية \""
},
"router-netdb-isreseeding": {
"description": "يستعاض عن عبارة \" شبكة Router netDB Reseeding Status \"",
"message": "يستعاض عن عبارة \" شبكة Router netDB Reseeding Status \""
},
"router-netdb-knownpeers": {
"description": "يستعاض عن عبارة Router Known Peers",
"message": "يستعاض عن عبارة Router Known Peers"
},
"router-restart": {
"description": "ممر راحه",
"message": "ممر راحه"
},
"router-shutdown": {
"description": "ممر مقفل",
"message": "ممر مقفل"
},
"router-status": {
"description": "يستعاض عن عبارة \" Router Status \"",
"message": "يستعاض عن عبارة \" Router Status \""
},
"router-uptime": {
"description": "يستعاض عن عبارة \" الروت \" في وقت العمل",
"message": "يستعاض عن عبارة \" الروت \" في وقت العمل"
},
"router-version": {
"description": "يستعاض عن عبارة Router Version",
"message": "يستعاض عن عبارة Router Version"
},
"routerConsole": {
"description": "وصف لجهاز التحكم.",
"message": "إدخلوا جهاز التحكم بالجهاز الآلي الخاص بكم و مجموعة كاملة من التطبيقات والتشكيلات."
},
"routerPreface": {
"description": "وجه لقب المصفح",
"message": "Router Console"
},
"routerPrefacePrivate": {
"description": "وجه لقب المصفح",
"message": "Router Console (Private)"
},
"rpcHelpText": {
"description": "إعترف بخياراتك هنا إعترف بخياراتك هنا.",
"message": "إعترف بخياراتك هنا إعترف بخياراتك هنا."
},
"rpcHostText": {
"description": "مركز المراقبة:",
"message": "مركز المراقبة:"
},
"rpcPassText": {
"description": "كلمة سر المراقبة: رشاش من طراز RPC كلمة السر:",
"message": "كلمة سر المراقبة: رشاش من طراز RPC كلمة السر:"
},
"rpcPathText": {
"description": "مركز التحكم:",
"message": "مركز التحكم:"
},
"rpcPortText": {
"description": "الجهة المضيفة:",
"message": "الجهة المضيفة:"
},
"rtcDesc": {
"description": "وصف عمل الشبكة",
"message": "(ويرتي سي) معوقة بسبب الفشل، لكن يمكنك إعادة تشغيله وإجباره على تكريم العميل. إذا كنت مستعملاً لتمديد \"سنوفليك برووزر\" هذا الخيار معوق و \"ويب آر تي سي\" يتحول إلى عجز."
},
"signingcert": {
"description": "توقيع:",
"message": "توقيع:"
},
"siteLabel": {
"description": "Label for i2p site info",
"message": "العنوان/الموقع:"
},
"sitecert": {
"description": "شهادة المعلومات:",
"message": "شهادة المعلومات:"
},
"snark": {
"description": "Description for Bittorrent",
"message": "الوصول السريع إلى (سنارك)، وشبكة (بير - بير - بير - إي 2 بي) الخاصة بتقاسم الملفات."
},
"sourcehead": {
"description": "الحصول على رمز المصدر:",
"message": "الحصول على رمز المصدر:"
},
"sources": {
"description": "Description for the Source code link",
"message": "فجر رمز المصدر هنا"
},
"susimail": {
"description": "وصف البريد الإلكتروني",
"message": "الوصول السريع إلى موكّل البريد الإلكتروني لشبكة سوزي ماييل I2P."
},
"text-section-header": {
"description": "قاذفة الإنترنت غير المرئية",
"message": "قاذفة الإنترنت غير المرئية"
},
"text-section-proxyerr-header": {
"description": "\"المحقق (إير)\"",
"message": "\"المحقق (إير)\""
},
"text-section-torrents-header": {
"description": "الحمولات المروعة",
"message": "الحمولات المروعة"
},
"titlePreface": {
"description": "وجه لقب المصفح",
"message": "I2P Browser"
},
"titlePrefacePrivate": {
"description": "وجه لقب المصفح",
"message": "I2P Browser (Private)"
},
"toopie": {
"description": "للحصول على معلومات عن وضعية جهاز توجيه I2P الخاص بك، انتقل هنا:",
"message": "للحصول على معلومات عن وضعية جهاز توجيه I2P الخاص بك، انتقل هنا:"
},
"toopieHtmlHeadline": {
"description": "I2P Router Information",
"message": "I2P Router Information"
},
"toopieName": {
"description": "اسم الجانب.",
"message": "أيضاً html"
},
"toopieTLS": {
"description": "اسم فريق الأمن.",
"message": "Site Properties"
},
"topbar": {
"description": "الحمولة",
"message": "الحمولة"
},
"torPreface": {
"description": "وجه لقب المصفح",
"message": "Tor Manager"
},
"torPrefacePrivate": {
"description": "وجه لقب المصفح",
"message": "Tor Manager (Private)"
},
"torrent-action": {
"description": "تحميل",
"message": "تحميل"
},
"torrentControls": {
"description": "الضوابط الرهيبة",
"message": "الضوابط الرهيبة"
},
"torrentDownloads": {
"description": "الحمولات المروعة",
"message": "الحمولات المروعة"
},
"torrentPreface": {
"description": "وجه لقب المصفح",
"message": "Bittorrent"
},
"torrentPrefacePrivate": {
"description": "وجه لقب المصفح",
"message": "Bittorrent (Private)"
},
"torrentui-opener": {
"description": "Open WebUI",
"message": "Open WebUI"
},
"visit-irc": {
"description": "Visit IRC",
"message": "Visit IRC"
},
"webPreface": {
"description": "وجه لقب المصفح",
"message": "Web Browser"
},
"webPrefacePrivate": {
"description": "وجه لقب المصفح",
"message": "بروزر (بريفيت)"
},
"webpage": {
"description": "وهناك المزيد من المعلومات المتاحة هنا.",
"message": "وهناك المزيد من المعلومات المتاحة هنا."
},
"window-visit-console": {
"description": "I2P Router Console",
"message": "I2P Router Console"
},
"window-visit-help": {
"description": "تقديم المساعدة",
"message": "تقديم المساعدة"
},
"window-visit-homepage": {
"description": "قاذفة الإنترنت غير المرئية",
"message": "قاذفة الإنترنت غير المرئية"
},
"window-visit-i2p": {
"description": "I2P Project Homepage:",
"message": "I2P Project Homepage:"
},
"window-visit-i2ptunnel": {
"description": "مدير خدمات مخفي",
"message": "مدير خدمات مخفي"
},
"window-visit-index": {
"description": "Webextension Homepage:",
"message": "Webextension Homepage:"
},
"window-visit-releases": {
"description": "الإطلاقات:",
"message": "الإطلاقات:"
},
"window-visit-router": {
"description": "Router Console",
"message": "Router Console"
},
"window-visit-settings": {
"description": "افتحي البيئات",
"message": "افتحي البيئات"
},
"window-visit-snark": {
"description": "Bit Torrent",
"message": "Bit Torrent"
},
"window-visit-sources": {
"description": "المصدر:",
"message": "المصدر:"
},
"window-visit-susimail": {
"description": "E-Mail",
"message": "E-Mail"
},
"window-visit-toopie": {
"description": "Toopie",
"message": "Toopie"
},
"window-visit-torrent": {
"description": "For assistance, visit the torrent help page",
"message": "For assistance, visit the torrent help page"
},
"windowVisitConsole": {
"description": "(روتر كونسول).",
"message": "Router Console:"
},
"windowVisitHelppage": {
"description": "صفحة مساعدة لعلامة التمديد.",
"message": "معلومات توسيع الشبكة:"
},
"windowVisitHomepage": {
"description": "صفحة منزل لعلامة التمديد.",
"message": "Home Page:"
},
"windowVisitI2ptunnel": {
"description": "العنوان: i2ptunnel",
"message": "مدير الخدمات المخفية:"
},
"windowVisitReleases": {
"description": "زيارة الصفحة",
"message": "إصدارات التمديد:"
},
"windowVisitSnark": {
"description": "Title for Bittorrent",
"message": "بيتيرنت:"
},
"windowVisitSources": {
"description": "Title for source code link",
"message": "قانون التمديد"
},
"windowVisitSusimail": {
"description": "عنوان البريد الإلكتروني",
"message": "E-Mail:"
},
"windowVisitWebPage": {
"description": "صحيفة \" غيثوب \" لتوسيع نطاق الزيارات",
"message": "Home Page:"
}
}

738
_locales/de/messages.json Normal file
View File

@@ -0,0 +1,738 @@
{
"CertLabel": {
"description": "Zertifikat Information:",
"message": "Zertifikat Information:"
},
"SignedLabel": {
"description": "Unterzeichnet von:",
"message": "Unterzeichnet von:"
},
"TorrentTypeLabel": {
"description": "Torrent Links:",
"message": "Torrent Links:"
},
"TypeLabel": {
"description": "Torrent Links:",
"message": "Torrent Links:"
},
"aboutconsole": {
"description": "Um auf die Homepage der Router-Konsole zuzugreifen, gehen Sie hier:",
"message": "Um auf die Homepage der Router-Konsole zuzugreifen, gehen Sie hier:"
},
"abouthome": {
"description": "Beschreibung für die Schaltfläche Erweiterung.",
"message": "Weitere Informationen zu dieser Erweiterung finden Sie auf dieser Seite."
},
"addresstype": {
"description": "Anschrift:",
"message": "Anschrift:"
},
"applicationExplain": {
"description": "Beschreibung für Anwendungsbereich.",
"message": "Die I2P Router-Konsole und Anwendungen öffnen sich in ihrem eigenen Tab und bieten ihnen die gleichen Sicherheitsvorteile wie das Surfen mit dieser Erweiterung. Dies fügt mehr Schutz hinzu, indem jede Anwendung isoliert und andere Registerkarten (z.B. Social Media, etc.) vor Fingerabdrücken oder Skripten verhindert werden. Alle Registerkarten verwenden Farben, um Ihren I2P-Workflow zu verfolgen."
},
"applicationHeader": {
"description": "Header für Anwendungsbereiche.",
"message": "Anwendungen"
},
"beta": {
"description": "Dies ist ein experimentelles Produkt.",
"message": "Dies ist ein experimentelles Produkt."
},
"blogPreface": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Blog"
},
"blogPrefacePrivate": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Blog (Privat)"
},
"bookmarksButton": {
"description": "Re-Create Bookmarks",
"message": "Re-Create Bookmarks"
},
"botePreface": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "I2P-Bote Mail"
},
"botePrefacePrivate": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "I2P-Bote Mail (Private)"
},
"browser-action": {
"description": "Nach oben",
"message": "Nach oben"
},
"btRpcHostText": {
"description": "Torrent RPC Host:",
"message": "Torrent RPC Host:"
},
"btRpcPathText": {
"description": "Torrent RPC Pfad:",
"message": "Torrent RPC Pfad:"
},
"btRpcPortText": {
"description": "Torrent RPC Hafen:",
"message": "Torrent RPC Hafen:"
},
"certAbsent": {
"description": "Inhalt für Zertifikatsinfo, wenn abwesend",
"message": "Diese Website verwendet nicht HTTPS. Es wird noch kryptographisch von I2P überprüft."
},
"certPresent": {
"description": "Inhalt für Zertifikatsinfo, wenn vorhanden",
"message": "Diese Website verwendet HTTPS. HTTPS über I2P ist experimentell und erfordert selbstsignierte Zertifikate oder alternative Wurzelautoriten."
},
"clearData": {
"description": "Löschen Sie den Menüpunkt Browserdaten.",
"message": "Löschen von Browserdaten:"
},
"clearDesc": {
"description": "Löschen Sie die Daten Aktion Beschreibung.",
"message": "Verwenden Sie dies, um Ihre I2P-Browserdaten zu löschen."
},
"controlExplain": {
"description": "Schalttafel einführen.",
"message": "Diese Steuerungen werden verwendet, um Ihre I2P Browsing Experience zuzuschneiden"
},
"controlHeader": {
"description": "Headline für Bedienfeld.",
"message": "Steuerung"
},
"controlHelpText": {
"description": "Hilfe zur Konfiguration der Optionen für den Reset Tunnel Button",
"message": "Konfigurieren Sie hier Ihre Router-Konsole."
},
"controlHostText": {
"description": "Host für die Router-Konsole",
"message": "Kontroll Host:"
},
"controlHostValue": {
"description": "Host für die Router-Konsole",
"message": "127.0.0.1"
},
"controlPortText": {
"description": "Hafen für die Router-Konsole",
"message": "Kontrollhafen:"
},
"controlPortValue": {
"description": "Hafen für die Router-Konsole",
"message": "7657"
},
"description": {
"description": "Sie können jetzt I2P in diesem Browser verwenden.",
"message": "Sie können jetzt I2P in diesem Browser verwenden."
},
"description2": {
"description": "Wenn Sie diese Seite sehen, ist es, weil ein Proxy-Fehler aufgetreten ist. Einige Informationen wurden zur Diagnose des Problems bereitgestellt.",
"message": "Wenn Sie diese Seite sehen, ist es, weil ein Proxy-Fehler aufgetreten ist. Einige Informationen wurden zur Diagnose des Problems bereitgestellt."
},
"disableHistory": {
"description": "History Checkbox Label.",
"message": "Die Geschichte in I2P Tabs deaktivieren?"
},
"enableWebRTC": {
"description": "WebRTC-Checkbox-Label.",
"message": "WebRTC mit Proxy aktivieren?"
},
"extensionDescription": {
"description": "Beschreibung der Erweiterung.",
"message": "I2P Netzwerk-Browsing leicht gemacht."
},
"extensionName": {
"description": "Name der Erweiterung.",
"message": "I2P Im privaten Browsing"
},
"extensionNameVariant": {
"description": "Name der Erweiterung.",
"message": "I2P In Private Browsing - Rhizome Variant"
},
"extensionPreface": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "I2P Management"
},
"extensionVersion": {
"description": "Ausführung der Erweiterung.",
"message": "1.28"
},
"fliplinks": {
"description": "Erweiterung und I2P-Ressourcen",
"message": "Erweiterung und I2P-Ressourcen"
},
"forumMessage": {
"description": "Hilfe",
"message": "Besuchen Sie das I2P Forum, um mehr zu erfahren oder um Hilfe zu bitten"
},
"headline": {
"description": "Der unsichtbare Internet-Browser",
"message": "Der unsichtbare Internet-Browser"
},
"help": {
"description": "Beschreibung für die Schaltfläche Erweiterung.",
"message": "Weitere Informationen zu dieser Erweiterung finden Sie auf dieser Seite."
},
"helpMessage": {
"description": "Hilfe",
"message": "Zusätzliche Hilfe"
},
"histDesc": {
"description": "Beschreibung der Geschichte",
"message": "Die Geschichte wird automatisch gelöscht, wenn Ihre I2P Tabs geschlossen sind. Wenn Sie die Geschichte wie Sie gehen, überprüfen Sie diese Box."
},
"homepage": {
"description": "Weitere Informationen",
"message": "Weitere Informationen finden Sie hier"
},
"hostText": {
"description": "Host für das HTTP oder SOCKS5 Proxy",
"message": "Host:"
},
"i2ppage": {
"description": "Weitere Informationen finden Sie hier.",
"message": "Weitere Informationen finden Sie hier."
},
"i2ptunnel": {
"description": "Beschreibung für i2ptunnel",
"message": "Anzeigen von Proxystatus-Nachrichten und Konfigurieren von Diensten und Tunneln."
},
"i2ptunnelPreface": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Hidden Services Manager"
},
"i2ptunnelPrefacePrivate": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Hidden Services Manager (Private)"
},
"infoMessage": {
"description": "Hilfe",
"message": "Sie sind jetzt frei, das eepWeb zu durchsuchen! Ihr Browser ist nun dazu konfiguriert, anonym auf dem I2P-Netzwerk zu surfen. Beim Durchsuchen wird Ihr Traffic über andere Netzknoten geleitet, um seinen Ursprung zu verbergen, sowohl vom Server als auch von den Knoten selbst."
},
"infoTitle": {
"description": "Titel für das Hilfemenü",
"message": "I2P Hilfe"
},
"ircPreface": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Versand IRC"
},
"ircPrefacePrivate": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Versand IRC (Private)"
},
"isBase32": {
"description": "Nachricht für Site Info Panel base32",
"message": "I2P Base32-Formatierte Adresse"
},
"isHostName": {
"description": "Nachricht für die Website Info Panel Hostname",
"message": "I2P Vorheriger Hostname"
},
"label-router-activepeers": {
"description": "Aktive Peers:",
"message": "Aktive Peers:"
},
"label-router-bandwidth": {
"description": "Bandbreite",
"message": "Bandbreite"
},
"label-router-bw-inbound-15s": {
"description": "Inbound bw 15s:",
"message": "Inbound bw 15s:"
},
"label-router-bw-inbound-1s": {
"description": "Inbound bw 1s:",
"message": "Inbound bw 1s:"
},
"label-router-bw-outbound-15s": {
"description": "Ausstoß bw 15s:",
"message": "Ausstoß bw 15s:"
},
"label-router-bw-outbound-1s": {
"description": "Ausstoß bw 1s:",
"message": "Ausstoß bw 1s:"
},
"label-router-net-tunnels-participating": {
"description": "Transit Tunnels:",
"message": "Transit Tunnels:"
},
"label-router-netdb-fastpeers": {
"description": "Fast Peers:",
"message": "Fast Peers:"
},
"label-router-netdb-highcapacitypeers": {
"description": "Hohe Kapazität Peers:",
"message": "Hohe Kapazität Peers:"
},
"label-router-netdb-isreseeding": {
"description": "Status:",
"message": "Status:"
},
"label-router-netdb-knownpeers": {
"description": "Bekannte Peers:",
"message": "Bekannte Peers:"
},
"label-router-peers": {
"description": "Pestizid",
"message": "Pestizid"
},
"label-router-status": {
"description": "Status Router Status:",
"message": "Status Router Status:"
},
"label-router-uptime": {
"description": "Router-Uptime(Ms):",
"message": "Router-Uptime(Ms):"
},
"label-router-version": {
"description": "Router Version:",
"message": "Router Version:"
},
"links": {
"description": "Erweiterung und I2P-Ressourcen",
"message": "Erweiterung und I2P-Ressourcen"
},
"linksExplain": {
"description": "Wenn Sie mehr Informationen über I2P erhalten möchten, können Sie diese Links besuchen.",
"message": "Wenn Sie mehr Informationen über I2P erhalten möchten, können Sie diese Links besuchen."
},
"mailPreface": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Web Mail"
},
"mailPrefacePrivate": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Web Mail (Privat)"
},
"muwirePreface": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "MuWire"
},
"muwirePrefacePrivate": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "MuWire (Privat)"
},
"newsMessage": {
"description": "Hilfe",
"message": "Besuchen Sie die I2P Blog, um das neueste über i2p zu erfahren."
},
"onboardingButtonFive": {
"description": "Verbesserung Ihrer Erfahrung",
"message": "Verbesserung Ihrer Erfahrung"
},
"onboardingButtonFour": {
"description": "Dateien teilen",
"message": "Dateien teilen"
},
"onboardingButtonOne": {
"description": "I2P Network Browsing und Non-I2P Network Browsing",
"message": "I2P Network Browsing und Non-I2P Network Browsing"
},
"onboardingButtonThree": {
"description": "Versteckte E-Mail",
"message": "Versteckte E-Mail"
},
"onboardingButtonTwo": {
"description": "Schutz von Netzwerk-Boundaries",
"message": "Schutz von Netzwerk-Boundaries"
},
"onboardingButtonZero": {
"description": "Schutz Ihrer Privatsphäre",
"message": "Schutz Ihrer Privatsphäre"
},
"onboardingContentFive": {
"description": "Diese Erweiterung kann mit anderen Erweiterungen kombiniert werden, die manchmal die Funktionalität verbessern. uBlock Origin, LocalCDN und jShelter sind nützlich, um das Seitenaufladen zu beschleunigen, Anzeigen zu blockieren und die Leistung von Javascript zu begrenzen. Für Benutzer, die alle Javascript blockieren möchten, wird NoScript empfohlen.",
"message": "Diese Erweiterung kann mit anderen Erweiterungen kombiniert werden, die manchmal die Funktionalität verbessern. uBlock Origin, LocalCDN und jShelter sind nützlich, um das Seitenaufladen zu beschleunigen, Anzeigen zu blockieren und die Leistung von Javascript zu begrenzen. Für Benutzer, die alle Javascript blockieren möchten, wird NoScript empfohlen."
},
"onboardingContentFour": {
"description": "I2P ist in der Lage, Peer-to-Peer-Anwendungen wie BitTorrent zu verwenden, um Ihre Identität zu schützen, wenn Sie Dateien teilen. Unser anonymer Bittorrent-Client ist im Browser verfügbar.",
"message": "I2P ist in der Lage, Peer-to-Peer-Anwendungen wie BitTorrent zu verwenden, um Ihre Identität zu schützen, wenn Sie Dateien teilen. Unser anonymer Bittorrent-Client ist im Browser verfügbar."
},
"onboardingContentOne": {
"description": "Diese Erweiterung funktioniert automatisch, wenn Sie I2P-Seiten durchsuchen. Wenn Sie I2P als Proxy für Nicht-I2P-Seiten verwenden möchten, verwenden Sie die I2P In Private Browsing Taste in der Symbolleiste und klicken Sie auf Neu I2P Browser Tab, um auf I2P Browsing in einem neuen Tab zu wechseln. Ihre Erfahrung beim Surfen im Internet kann ein wenig anders sein. Die Dinge können etwas langsamer sein, und je nach Sicherheitsniveau können einige Elemente nicht funktionieren oder laden. Sie können auch gebeten werden, zu beweisen, dass Sie ein Mensch und kein Roboter sind.",
"message": "Diese Erweiterung funktioniert automatisch, wenn Sie I2P-Seiten durchsuchen. Wenn Sie I2P als Proxy für Nicht-I2P-Seiten verwenden möchten, verwenden Sie die I2P In Private Browsing Taste in der Symbolleiste und klicken Sie auf Neu I2P Browser Tab, um auf I2P Browsing in einem neuen Tab zu wechseln. Ihre Erfahrung beim Surfen im Internet kann ein wenig anders sein. Die Dinge können etwas langsamer sein, und je nach Sicherheitsniveau können einige Elemente nicht funktionieren oder laden. Sie können auch gebeten werden, zu beweisen, dass Sie ein Mensch und kein Roboter sind."
},
"onboardingContentThree": {
"description": "Es gibt auch einen anonymen E-Mail-Service innerhalb von I2P, der von unserem Browser über das Menü direkt nach rechts zugänglich ist.",
"message": "Es gibt auch einen anonymen E-Mail-Service innerhalb von I2P, der von unserem Browser über das Menü direkt nach rechts zugänglich ist."
},
"onboardingContentTwo": {
"description": "I2P wird normalerweise über eine WebUI (The \"Router Console \") verwaltet, die der Benutzer manchmal im gleichen Browser ansieht, den sie verwenden, um Remote-Sites zu besuchen. Es ist wichtig zu verhindern, dass Websites auf Informationen von dieser WebUI und anderen lokal laufenden Dienstleistungen zugreifen können. Clearnet-Stellplätze bleiben im Firefox-Default-Container, aber sobald der Firefox-Default-Container eine *.onion oder *.i2p-Stelle anfordert, wird er sofort befüllt. Tor Browsers Identity-Management-Tooling steuert clearnet Tabs, und sie werden mit dem Standard I2P outproxy oder Outproxy Plugin proxied.",
"message": "I2P wird normalerweise über eine WebUI (The \" Router Console \") verwaltet, die der Benutzer manchmal in dem gleichen Browser ansieht, den sie verwenden, um Remote-Sites zu besuchen. Es ist wichtig zu verhindern, dass Websites auf Informationen von dieser WebUI und anderen lokal laufenden Dienstleistungen zugreifen können. Clearnet-Stellplätze bleiben im Firefox-Default-Container, aber sobald der Firefox-Default-Container eine *.onion oder *.i2p-Stelle anfordert, wird er sofort befüllt. Tor Browsers Identity-Management-Tooling steuert clearnet Tabs, und sie werden mit dem Standard I2P outproxy oder Outproxy Plugin proxied."
},
"onboardingContentZero": {
"description": "Wenn Sie I2P In Private Browsing Modus verwenden, sind Sie vor Verfolgung und Überwachung geschützt. Der I2P Browser isoliert Cookies und löscht Ihren Browserverlauf nach Ihrer Sitzung. Diese Änderungen stellen sicher, dass Ihre Privatsphäre und Sicherheit als Ihr Browser geschützt sind.",
"message": "Wenn Sie I2P In Private Browsing Modus verwenden, sind Sie vor Verfolgung und Überwachung geschützt. Der I2P Browser isoliert Cookies und löscht Ihren Browserverlauf nach Ihrer Sitzung. Diese Änderungen stellen sicher, dass Ihre Privatsphäre und Sicherheit als Ihr Browser geschützt sind."
},
"onboardingFive": {
"description": "Erfahrungen Tipps",
"message": "Erfahrungen Tipps"
},
"onboardingFour": {
"description": "Das Web durchsuchen",
"message": "Das Web durchsuchen"
},
"onboardingOne": {
"description": "Konfigurieren Sie Ihre Erfahrung",
"message": "Konfigurieren Sie Ihre Erfahrung"
},
"onboardingThree": {
"description": "Versteckte E-Mail",
"message": "Versteckte E-Mail"
},
"onboardingTitle": {
"description": "Über I2P In Private Browsing",
"message": "Über I2P In Private Browsing"
},
"onboardingTwo": {
"description": "Teilen von Dateien",
"message": "Teilen von Dateien"
},
"onboardingZero": {
"description": "Schutz Ihrer Privatsphäre",
"message": "Schutz Ihrer Privatsphäre"
},
"portText": {
"description": "Port für das HTTP oder SOCKS5 Proxy",
"message": "Hafen:"
},
"protocolHandlerValue": {
"description": "Wert für den Magnetprotokoll-Handler",
"message": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%s\u0026action=Add\u0026foo=Add+torrent"
},
"proxy-check": {
"description": "Proxy ist bereit.",
"message": "Proxy ist bereit."
},
"proxyFailedStatus": {
"description": "Proxy hat den Status versagt.",
"message": "Proxy ist nicht bereit"
},
"proxyHelpText": {
"description": "Hilfe zur Konfiguration der Optionen für den Reset Tunnel Button",
"message": "Konfigurieren Sie Ihren I2P-Proxy hier."
},
"proxySuccessStatus": {
"description": "Proxy hat den Status versagt.",
"message": "Proxy ist bereit"
},
"readyness": {
"description": "Proxy ist bereit.",
"message": "Proxy ist bereit."
},
"releases": {
"description": "Beschreibung für neue Release-Seite",
"message": "Hier finden Sie neue Releases"
},
"resetMessage": {
"description": "Nachricht für den Reset Tunnel Knopf",
"message": "Zurück zur Übersicht"
},
"returnhome": {
"description": "/",
"message": "/"
},
"router-net-bw-inbound-15s": {
"description": "Ersetzen mit Router Bandwidth Outbound 15s",
"message": "Ersetzen mit Router Bandwidth Outbound 15s"
},
"router-net-bw-inbound-1s": {
"description": "Ersetzen mit Router Bandbreite Inbound 1s",
"message": "Ersetzen mit Router Bandbreite Inbound 1s"
},
"router-net-bw-outbound-15s": {
"description": "Ersetzen mit Router Bandwidth Outbound 15s",
"message": "Ersetzen mit Router Bandwidth Outbound 15s"
},
"router-net-bw-outbound-1s": {
"description": "Ersetzen mit Router Bandwidth Outbound 1s",
"message": "Ersetzen mit Router Bandwidth Outbound 1s"
},
"router-net-tunnels-participating": {
"description": "Ersetzen mit Router Participing Tunnel Count",
"message": "Ersetzen mit Router Participing Tunnel Count"
},
"router-netdb-activepeers": {
"description": "Ersetzen mit Router Active Peers",
"message": "Ersetzen mit Router Active Peers"
},
"router-netdb-fastpeers": {
"description": "Ersetzen mit Router Fast Peers",
"message": "Ersetzen mit Router Fast Peers"
},
"router-netdb-highcapacitypeers": {
"description": "Ersetzen mit High Capacity Peers",
"message": "Ersetzen mit High Capacity Peers"
},
"router-netdb-isreseeding": {
"description": "Ersetzen mit Router netDB Ersatzstatus",
"message": "Ersetzen mit Router netDB Ersatzstatus"
},
"router-netdb-knownpeers": {
"description": "Ersetzen mit Router bekannten Peers",
"message": "Ersetzen mit Router bekannten Peers"
},
"router-restart": {
"description": "Angenehm Router neu starten",
"message": "Angenehm Router neu starten"
},
"router-shutdown": {
"description": "Anmutig herunterfahren Router",
"message": "Anmutig herunterfahren Router"
},
"router-status": {
"description": "Ersetzen mit Router Status",
"message": "Ersetzen mit Router Status"
},
"router-uptime": {
"description": "Ersetzen mit Router-Uptime",
"message": "Ersetzen mit Router-Uptime"
},
"router-version": {
"description": "Ersetzen mit Router Version",
"message": "Ersetzen mit Router Version"
},
"routerConsole": {
"description": "Beschreibung für die Router-Konsole.",
"message": "Greifen Sie auf Ihre I2P Router-Konsole und das gesamte Spektrum an Anwendungen und Konfigurationen zu."
},
"routerPreface": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Router Console"
},
"routerPrefacePrivate": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Router Console (Private)"
},
"rpcHelpText": {
"description": "Konfigurieren Sie hier Ihre I2PControl-Optionen. Konfigurieren Sie hier Ihre Bittorrent-Optionen.",
"message": "Konfigurieren Sie hier Ihre I2PControl-Optionen. Konfigurieren Sie hier Ihre Bittorrent-Optionen."
},
"rpcHostText": {
"description": "Kontrollhafen:",
"message": "Kontrollhafen:"
},
"rpcPassText": {
"description": "Kontroll-Passwort: Torrent RPC Passwort:",
"message": "Kontroll-Passwort: Torrent RPC Passwort:"
},
"rpcPathText": {
"description": "Kontrollpfad:",
"message": "Kontrollpfad:"
},
"rpcPortText": {
"description": "Kontroll Host:",
"message": "Kontroll Host:"
},
"rtcDesc": {
"description": "WebRTC Aktionsbeschreibung",
"message": "WebRTC ist standardmäßig deaktiviert, aber Sie können es wieder einschalten und zwingen, die Proxy zu ehren. Wenn Sie ein Benutzer der Snowflake Browser-Erweiterung sind, ist diese Option deaktiviert und WebRTC wird standardmäßig eingeschaltet."
},
"signingcert": {
"description": "Unterzeichnet von:",
"message": "Unterzeichnet von:"
},
"siteLabel": {
"description": "Label für i2p Site Info",
"message": "Anschrift/Site Information:"
},
"sitecert": {
"description": "Zertifikat Information:",
"message": "Zertifikat Information:"
},
"snark": {
"description": "Beschreibung für Bittorrent",
"message": "Schneller Zugriff auf Snark, die Peer-to-peer I2P Netzwerk-spezifische Dateifreigabe-Anwendung."
},
"sourcehead": {
"description": "Erhalten Sie den Quellcode:",
"message": "Erhalten Sie den Quellcode:"
},
"sources": {
"description": "Beschreibung des Quellcode-Links",
"message": "Hier den Quellcode durchsuchen"
},
"susimail": {
"description": "Beschreibung für E-Mail",
"message": "Schneller Zugriff auf den SusiMail I2P Netzwerk-E-Mail-Client."
},
"text-section-header": {
"description": "Der unsichtbare Internet-Browser",
"message": "Der unsichtbare Internet-Browser"
},
"text-section-proxyerr-header": {
"description": "Ein Proxy-Fehler wurde behoben",
"message": "Ein Proxy-Fehler wurde behoben"
},
"text-section-torrents-header": {
"description": "Torrent Downloads",
"message": "Torrent Downloads"
},
"titlePreface": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "I2P Browser"
},
"titlePrefacePrivate": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "I2P Browser (Privat)"
},
"toopie": {
"description": "Informationen Ã14ber Ihren I2P-Routerstatus finden Sie hier:",
"message": "Informationen Ã14ber Ihren I2P-Routerstatus finden Sie hier:"
},
"toopieHtmlHeadline": {
"description": "I2P Router Informationen",
"message": "I2P Router Informationen"
},
"toopieName": {
"description": "Name der Seitenleiste.",
"message": "auch. html"
},
"toopieTLS": {
"description": "Name des Sicherheitspanels.",
"message": "Site Properties"
},
"topbar": {
"description": "Nach oben",
"message": "Nach oben"
},
"torPreface": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Tor Manager"
},
"torPrefacePrivate": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Tor Manager (Private)"
},
"torrent-action": {
"description": "Downloads",
"message": "Downloads"
},
"torrentControls": {
"description": "Torrent Controls",
"message": "Torrent Controls"
},
"torrentDownloads": {
"description": "Torrent Downloads",
"message": "Torrent Downloads"
},
"torrentPreface": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "In den Warenkorb"
},
"torrentPrefacePrivate": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Bittorrent (Privat)"
},
"torrentui-opener": {
"description": "Open WebUI",
"message": "Open WebUI"
},
"visit-irc": {
"description": "Besuchen Sie IRC",
"message": "Besuchen Sie IRC"
},
"webPreface": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Web Browser"
},
"webPrefacePrivate": {
"description": "Vorwort für die Browser-Titelleiste",
"message": "Web Browser (Private)"
},
"webpage": {
"description": "Weitere Informationen finden Sie hier.",
"message": "Weitere Informationen finden Sie hier."
},
"window-visit-console": {
"description": "I2P Router Konsole",
"message": "I2P Router Konsole"
},
"window-visit-help": {
"description": "Unterstützungsseite",
"message": "Unterstützungsseite"
},
"window-visit-homepage": {
"description": "Der unsichtbare Internet-Browser",
"message": "Der unsichtbare Internet-Browser"
},
"window-visit-i2p": {
"description": "I2P Projektseite:",
"message": "I2P Projektseite:"
},
"window-visit-i2ptunnel": {
"description": "Hidden Services Manager",
"message": "Hidden Services Manager"
},
"window-visit-index": {
"description": "Webextension Homepage:",
"message": "Webextension Homepage:"
},
"window-visit-releases": {
"description": "Veröffentlichungen:",
"message": "Veröffentlichungen:"
},
"window-visit-router": {
"description": "Router Console",
"message": "Router Console"
},
"window-visit-settings": {
"description": "Öffnen Sie die Einstellungen",
"message": "Öffnen Sie die Einstellungen"
},
"window-visit-snark": {
"description": "BitTorrent",
"message": "BitTorrent"
},
"window-visit-sources": {
"description": "Quelle Code:",
"message": "Quelle Code:"
},
"window-visit-susimail": {
"description": "E-Mail",
"message": "E-Mail"
},
"window-visit-toopie": {
"description": "Toopie",
"message": "Toopie"
},
"window-visit-torrent": {
"description": "Für Hilfe, besuchen Sie die Torrent Hilfe Seite",
"message": "Für Hilfe, besuchen Sie die Torrent Hilfe Seite"
},
"windowVisitConsole": {
"description": "Router Console Label.",
"message": "Router Console:"
},
"windowVisitHelppage": {
"description": "Hilfeseite für das Erweiterungslabel.",
"message": "WebExtension Informationen:"
},
"windowVisitHomepage": {
"description": "Startseite für das Erweiterungslabel.",
"message": "Startseite:"
},
"windowVisitI2ptunnel": {
"description": "Titel für i2ptunnel",
"message": "Hidden Services Manager:"
},
"windowVisitReleases": {
"description": "Besuchen Sie die Veröffentlichungsseite",
"message": "Erweiterung:"
},
"windowVisitSnark": {
"description": "Titel für Bittorrent",
"message": "Bittorrent:"
},
"windowVisitSources": {
"description": "Titel für Quellcode-Link",
"message": "Code der Erweiterung:"
},
"windowVisitSusimail": {
"description": "Titel für E-Mail",
"message": "E-Mail:"
},
"windowVisitWebPage": {
"description": "Besuchen Sie die Erweiterung Homepage auf Github",
"message": "Startseite:"
}
}

View File

@@ -1,118 +1,699 @@
{
"extensionName": {
"message": "I2P In Private Browsing",
"description": "Name of the extension."
"CertLabel": {
"description": "Certificate Information:",
"message": "Certificate Information:"
},
"extensionDescription": {
"message": "Set up a browser to use the i2p http proxy automatically",
"description": "Description of the extension."
"SignedLabel": { "description": "Signed By:", "message": "Signed By:" },
"TorrentTypeLabel": {
"description": "Torrent Links:",
"message": "Torrent Links:"
},
"titlePreface": {
"message": "I2P Browser",
"description": "Preface for the browser titlebar"
"TypeLabel": { "description": "Torrent Links:", "message": "Torrent Links:" },
"aboutconsole": {
"description": "To access the homepage of the router console, go here:",
"message": "To access the homepage of the router console, go here:"
},
"titlePrefacePrivate": {
"message": "I2P Browser (Private)",
"description": "Preface for the browser titlebar"
"abouthome": {
"description": "Description for the extension button page.",
"message": "For more information about this extension, visit this page."
},
"webPreface": {
"message": "Web Browser",
"description": "Preface for the browser titlebar"
"addresstype": { "description": "Address Type:", "message": "Address Type:" },
"applicationExplain": {
"description": "Description for application section.",
"message": "The I2P router console and applications open in their own tab, providing them with the same security benefits as browsing with this extension. This adds more protection by isolating each application and preventing other tabs ( ie social media, etc ) from fingerprinting or scripts. All tabs use identifying colours to keep track of your I2P workflow."
},
"webPrefacePrivate": {
"message": "Web Browser (Private)",
"description": "Preface for the browser titlebar"
"applicationHeader": {
"description": "Header for applications section.",
"message": "Applications"
},
"routerPreface": {
"message": "Router Console",
"description": "Preface for the browser titlebar"
"beta": {
"description": "This is an experimental product.",
"message": "This is an experimental product."
},
"routerPrefacePrivate": {
"message": "Router Console (Private)",
"description": "Preface for the browser titlebar"
"blogPreface": {
"description": "Preface for the browser titlebar",
"message": "Blog"
},
"torrentPreface": {
"message": "Bittorrent",
"description": "Preface for the browser titlebar"
"blogPrefacePrivate": {
"description": "Preface for the browser titlebar",
"message": "Blog (Private)"
},
"torrentPrefacePrivate": {
"message": "Bittorrent (Private)",
"description": "Preface for the browser titlebar"
"bookmarksButton": {
"description": "Re-Create Bookmarks",
"message": "Re-Create Bookmarks"
},
"mailPreface": {
"message": "Web Mail",
"description": "Preface for the browser titlebar"
"botePreface": {
"description": "Preface for the browser titlebar",
"message": "I2P-Bote Mail"
},
"mailPrefacePrivate": {
"message": "Web Mail (Private)",
"description": "Preface for the browser titlebar"
"botePrefacePrivate": {
"description": "Preface for the browser titlebar",
"message": "I2P-Bote Mail (Private)"
},
"i2ptunnelPreface": {
"message": "Hidden Services Manager",
"description": "Preface for the browser titlebar"
"browser-action": { "description": "Browse", "message": "Browse" },
"btRpcHostText": {
"description": "Torrent RPC Host:",
"message": "Torrent RPC Host:"
},
"i2ptunnelPrefacePrivate": {
"message": "Hidden Services Manager (Private)",
"description": "Preface for the browser titlebar"
"btRpcPathText": {
"description": "Torrent RPC Path:",
"message": "Torrent RPC Path:"
},
"resetMessage": {
"message": "Reset Tunnel",
"description": "Message for the Reset Tunnel button"
"btRpcPortText": {
"description": "Torrent RPC Port:",
"message": "Torrent RPC Port:"
},
"infoTitle": {
"message": "I2P Help",
"description": "Title for the help menu"
"certAbsent": {
"description": "Content for certificate info if absent",
"message": "This site is not using HTTPS. It is still verified cryptographically by I2P."
},
"infoMessage": {
"message": "You are now free to browse the eepWeb! Your browser is now configured to browse anonymously on the I2P network. As you browse, your traffic will be routed through other network nodes to disguise it's origin, both from the server and from the nodes themselves.",
"description": "Help Message"
},
"helpMessage": {
"message": "Get additional help",
"description": "Help Message"
},
"newsMessage": {
"message": "Visit the I2P Blog to learn the latest about i2p.",
"description": "Help Message"
},
"forumMessage": {
"message": "Visit the I2P Forum to learn more or ask for assistance",
"description": "Help Message"
"certPresent": {
"description": "Content for certificate info if present",
"message": "This site is using HTTPS. HTTPS over I2P is experimental and requires self-signed certificates or alternate root authorites."
},
"clearData": {
"message": "Clear all browsing data",
"description": "Help Message"
"description": "Clear Browsing Data menu item.",
"message": "Clear Browsing Data: "
},
"hostText": {
"message": "Host: ",
"description": "Host for the HTTP or SOCKS5 Proxy"
"clearDesc": {
"description": "Clear browsing data action description.",
"message": "Use this to erase your I2P browsing data."
},
"portText": {
"message": "Port: ",
"description": "Port for the HTTP or SOCKS5 Proxy"
"controlExplain": {
"description": "Introduce the control panel.",
"message": "These controls are used to tailor your I2P Browsing Experience"
},
"controlHeader": {
"description": "Headline for control panel.",
"message": "Control"
},
"controlHelpText": {
"message": "These options will be inert if used with the default i2p HTTP or SOCKS proxy.",
"description": "Help for configuring the options for the Reset Tunnel button"
"description": "Help for configuring the options for the Reset Tunnel button",
"message": "Configure your router console here."
},
"controlHostText": {
"message": "Control Host: ",
"description": "Host for the Router Console"
},
"controlPortText": {
"message": "Control Port: ",
"description": "Port for the Router Console"
"description": "Host for the Router Console",
"message": "Control Host: "
},
"controlHostValue": {
"message": "127.0.0.1",
"description": "Host for the Router Console"
"description": "Host for the Router Console",
"message": "127.0.0.1"
},
"controlPortText": {
"description": "Port for the Router Console",
"message": "Control Port: "
},
"controlPortValue": {
"message": "7657",
"description": "Port for the Router Console"
"description": "Port for the Router Console",
"message": "7657"
},
"description": {
"description": "You are now able to use I2P in this browser.",
"message": "You are now able to use I2P in this browser."
},
"description2": {
"description": "If you're seeing this page, it is because a proxy error has occurred. Some information has been provided to help you diagnose the issue.",
"message": "If you're seeing this page, it is because a proxy error has occurred. Some information has been provided to help you diagnose the issue."
},
"disableHistory": {
"description": "History checkbox label.",
"message": "Disable History in I2P Tabs?"
},
"enableWebRTC": {
"description": "WebRTC checkbox label.",
"message": "Enable WebRTC with proxy?"
},
"extensionDescription": {
"description": "Description of the extension.",
"message": "I2P network browsing made easy."
},
"extensionName": {
"description": "Name of the extension.",
"message": "I2P In Private Browsing"
},
"extensionNameVariant": {
"description": "Name of the extension.",
"message": "I2P In Private Browsing - Rhizome Variant"
},
"extensionPreface": {
"description": "Preface for the browser titlebar",
"message": "I2P Management"
},
"extensionVersion": {
"description": "Version of the extension.",
"message": "1.28"
},
"fliplinks": {
"description": "Extension and I2P Resources",
"message": "Extension and I2P Resources"
},
"forumMessage": {
"description": "Help Message",
"message": "Visit the I2P Forum to learn more or ask for assistance"
},
"headline": {
"description": "The Invisible Internet Browser",
"message": "The Invisible Internet Browser"
},
"help": {
"description": "Description for the extension button page.",
"message": "For more information about this extension, visit this page."
},
"helpMessage": {
"description": "Help Message",
"message": "Get additional help"
},
"histDesc": {
"description": "History action description",
"message": "History is automatically cleared when your I2P tabs are closed. If you want to clear history as you go, check this box."
},
"homepage": {
"description": "Find more information",
"message": "More information is available here"
},
"hostText": {
"description": "Host for the HTTP or SOCKS5 Proxy",
"message": "Host: "
},
"i2ppage": {
"description": "More information is available here.",
"message": "More information is available here."
},
"i2ptunnel": {
"description": "Description for i2ptunnel",
"message": "View proxy status messages and configure services and tunnels."
},
"i2ptunnelPreface": {
"description": "Preface for the browser titlebar",
"message": "Hidden Services Manager"
},
"i2ptunnelPrefacePrivate": {
"description": "Preface for the browser titlebar",
"message": "Hidden Services Manager (Private)"
},
"infoMessage": {
"description": "Help Message",
"message": "You are now free to browse the eepWeb! Your browser is now configured to browse anonymously on the I2P network. As you browse, your traffic will be routed through other network nodes to disguise it's origin, both from the server and from the nodes themselves."
},
"infoTitle": {
"description": "Title for the help menu",
"message": "I2P Help"
},
"ircPreface": {
"description": "Preface for the browser titlebar",
"message": "Dispatch IRC"
},
"ircPrefacePrivate": {
"description": "Preface for the browser titlebar",
"message": "Dispatch IRC (Private)"
},
"isBase32": {
"description": "Message for site info panel base32",
"message": "I2P Base32-Formatted Address"
},
"isHostName": {
"description": "Message for the site info panel hostname",
"message": "I2P Jump Hostname"
},
"label-router-activepeers": {
"description": "Active Peers:",
"message": "Active Peers:"
},
"label-router-bandwidth": {
"description": "Bandwidth",
"message": "Bandwidth"
},
"label-router-bw-inbound-15s": {
"description": "Inbound bw 15s:",
"message": "Inbound bw 15s:"
},
"label-router-bw-inbound-1s": {
"description": "Inbound bw 1s:",
"message": "Inbound bw 1s:"
},
"label-router-bw-outbound-15s": {
"description": "Outbound bw 15s:",
"message": "Outbound bw 15s:"
},
"label-router-bw-outbound-1s": {
"description": "Outbound bw 1s:",
"message": "Outbound bw 1s:"
},
"label-router-net-tunnels-participating": {
"description": "Transit Tunnels:",
"message": "Transit Tunnels:"
},
"label-router-netdb-fastpeers": {
"description": "Fast Peers:",
"message": "Fast Peers:"
},
"label-router-netdb-highcapacitypeers": {
"description": "High Capacity Peers:",
"message": "High Capacity Peers:"
},
"label-router-netdb-isreseeding": {
"description": "Reseed status:",
"message": "Reseed status:"
},
"label-router-netdb-knownpeers": {
"description": "Known Peers:",
"message": "Known Peers:"
},
"label-router-peers": { "description": "Peers", "message": "Peers" },
"label-router-status": {
"description": "Status Router Status:",
"message": "Status Router Status:"
},
"label-router-uptime": {
"description": "Router Uptime(Ms):",
"message": "Router Uptime(Ms):"
},
"label-router-version": {
"description": "Router Version:",
"message": "Router Version:"
},
"links": {
"description": "Extension and I2P Resources",
"message": "Extension and I2P Resources"
},
"linksExplain": {
"description": "If you want to get more information about I2P, you can visit these links.",
"message": "If you want to get more information about I2P, you can visit these links."
},
"mailPreface": {
"description": "Preface for the browser titlebar",
"message": "Web Mail"
},
"mailPrefacePrivate": {
"description": "Preface for the browser titlebar",
"message": "Web Mail (Private)"
},
"muwirePreface": {
"description": "Preface for the browser titlebar",
"message": "MuWire"
},
"muwirePrefacePrivate": {
"description": "Preface for the browser titlebar",
"message": "MuWire (Private)"
},
"newsMessage": {
"description": "Help Message",
"message": "Visit the I2P Blog to learn the latest about i2p."
},
"onboardingButtonFive": {
"description": "Improving your Experience",
"message": "Improving your Experience"
},
"onboardingButtonFour": {
"description": "Sharing Files",
"message": "Sharing files"
},
"onboardingButtonOne": {
"description": "I2P Network Browsing and Non-I2P Network Browsing",
"message": "I2P Network Browsing and Non-I2P Network Browsing"
},
"onboardingButtonThree": {
"description": "Hidden e-mail",
"message": "Hidden e-mail"
},
"onboardingButtonTwo": {
"description": "Protecting Network Boundaries",
"message": "Protecting Network Boundaries"
},
"onboardingButtonZero": {
"description": "Protect your Privacy",
"message": "Protect your Privacy"
},
"onboardingContentFive": {
"description": "This extension can be combined with other extensions which sometimes improve it's functionality. uBlock Origin, LocalCDN, and jShelter are useful for speeding up page loading, blocking ads, and limiting the power of Javascript. For users who want to block all Javascript, NoScript is recommended.",
"message": "This extension can be combined with other extensions which sometimes improve it's functionality. uBlock Origin, LocalCDN, and jShelter are useful for speeding up page loading, blocking ads, and limiting the power of Javascript. For users who want to block all Javascript, NoScript is recommended."
},
"onboardingContentFour": {
"description": "I2P is capable of using peer-to-peer applications like BitTorrent, protecting your identity when you share files. Our anonymous bittorrent client is available in the browser.",
"message": "I2P is capable of using peer-to-peer applications like BitTorrent, protecting your identity when you share files. Our anonymous bittorrent client is available in the browser."
},
"onboardingContentOne": {
"description": "This extension works automatically when you are browsing I2P sites. If you want to use I2P as a proxy to non-I2P sites, use the I2P In Private Browsing button in the toolbar and click New I2P Browser Tab to switch to I2P Browsing in a new tab. Your experience while browsing the internet may be a little different. Things may be a bit slower, and depending on your security level, some elements may not work or load. You may also be asked to prove you are a human and not a robot.",
"message": "This extension works automatically when you are browsing I2P sites. If you want to use I2P as a proxy to non-I2P sites, use the I2P In Private Browsing button in the toolbar and click New I2P Browser Tab to switch to I2P Browsing in a new tab. Your experience while browsing the internet may be a little different. Things may be a bit slower, and depending on your security level, some elements may not work or load. You may also be asked to prove you are a human and not a robot."
},
"onboardingContentThree": {
"description": "There is also an anonymous e-mail service available inside of I2P, which is accessible from our browser via the menu directly to the right.",
"message": "There is also an anonymous e-mail service available inside of I2P, which is accessible from our browser via the menu directly to the right."
},
"onboardingContentTwo": {
"description": "I2P is normally administered via a WebUI(The \"Router Console \"), which the user sometimes views in the same browser they use to visit remote sites. It is essential to prevent sites from being able to access information from this WebUI and other locally running services. Clearnet sites remain in the firefox-default container, but as soon as the firefox-default container requests a *.onion or *.i2p site, it will be instantly containerized. Tor Browser's identity management tooling controls clearnet tabs, and they are proxied using the default I2P outproxy or outproxy plugin.",
"message": "I2P is normally administered via a WebUI(The \" Router Console \"), which the user sometimes views in the same browser they use to visit remote sites. It is essential to prevent sites from being able to access information from this WebUI and other locally running services. Clearnet sites remain in the firefox-default container, but as soon as the firefox-default container requests a *.onion or *.i2p site, it will be instantly containerized. Tor Browser's identity management tooling controls clearnet tabs, and they are proxied using the default I2P outproxy or outproxy plugin."
},
"onboardingContentZero": {
"description": " When using I2P In Private Browsing Mode, you are protected against tracking and surveillance.The I2P Browser isolates cookies and deletes your browser history after your session. These modifications ensure your privacy and security are protected as your browse.",
"message": " When using I2P In Private Browsing Mode, you are protected against tracking and surveillance.The I2P Browser isolates cookies and deletes your browser history after your session. These modifications ensure your privacy and security are protected as your browse."
},
"onboardingFive": {
"description": "Experience Tips",
"message": "Experience Tips"
},
"onboardingFour": {
"description": "Browsing the Web",
"message": "Browsing the Web"
},
"onboardingOne": {
"description": "Configure your Experience",
"message": "Configure your Experience"
},
"onboardingThree": {
"description": "Hidden e-mail",
"message": "Hidden e-mail"
},
"onboardingTitle": {
"description": "About I2P In Private Browsing",
"message": "About I2P In Private Browsing"
},
"onboardingTwo": { "description": "Share Files", "message": "Share Files" },
"onboardingZero": {
"description": "Protect your Privacy",
"message": "Protect your Privacy"
},
"portText": {
"description": "Port for the HTTP or SOCKS5 Proxy",
"message": "Port: "
},
"protocolHandlerValue": {
"message": "http://__MSG_controlHostValue__:__MSG_controlPortValue__/i2psnark/?nofilter_newURL=%s&action=Add&foo=Add+torrent",
"description": "Value for the magnet protocol handler"
"description": "Value for the magnet protocol handler",
"message": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%s\u0026action=Add\u0026foo=Add+torrent"
},
"proxy-check": {
"description": "Proxy is ready.",
"message": "Proxy is ready."
},
"proxyFailedStatus": {
"description": "Proxy failed status.",
"message": "Proxy is not ready"
},
"consoleFailedStatus": {
"description": "Proxy failed status.",
"message": "Console is not available, I2P is not started yet. If you have not intstalled I2P yet, please get it from https://geti2p.net."
},
"proxyHelpText": {
"description": "Help for configuring the options for the Reset Tunnel button",
"message": "Configure your I2P proxy here."
},
"proxySuccessStatus": {
"description": "Proxy failed status.",
"message": "Proxy is ready"
},
"proxyConsoleSuccessStatus": {
"description": "Proxy failed status.",
"message": "I2P is running."
},
"readyness": {
"description": "Proxy is ready.",
"message": "Proxy is ready."
},
"routerness": {
"description": "Proxy is ready.",
"message": "Router is ready."
},
"releases": {
"description": "Description for new release page",
"message": "Check for new releases here"
},
"resetMessage": {
"description": "Message for the Reset Tunnel button",
"message": "Reset Tunnel"
},
"returnhome": { "description": "/", "message": "/" },
"router-net-bw-inbound-15s": {
"description": "Replace with Router Bandwidth Outbound 15s",
"message": "Replace with Router Bandwidth Outbound 15s"
},
"router-net-bw-inbound-1s": {
"description": "Replace with Router Bandwidth Inbound 1s",
"message": "Replace with Router Bandwidth Inbound 1s"
},
"router-net-bw-outbound-15s": {
"description": "Replace with Router Bandwidth Outbound 15s",
"message": "Replace with Router Bandwidth Outbound 15s"
},
"router-net-bw-outbound-1s": {
"description": "Replace with Router Bandwidth Outbound 1s",
"message": "Replace with Router Bandwidth Outbound 1s"
},
"router-net-tunnels-participating": {
"description": "Replace with Router Participating Tunnel Count",
"message": "Replace with Router Participating Tunnel Count"
},
"router-netdb-activepeers": {
"description": "Replace with Router Active Peers",
"message": "Replace with Router Active Peers"
},
"router-netdb-fastpeers": {
"description": "Replace with Router Fast Peers",
"message": "Replace with Router Fast Peers"
},
"router-netdb-highcapacitypeers": {
"description": "Replace with High Capacity Peers",
"message": "Replace with High Capacity Peers"
},
"router-netdb-isreseeding": {
"description": "Replace with Router netDB Reseeding Status",
"message": "Replace with Router netDB Reseeding Status"
},
"router-netdb-knownpeers": {
"description": "Replace with Router Known Peers",
"message": "Replace with Router Known Peers"
},
"router-restart": {
"description": "Gracefully restart router",
"message": "Gracefully restart router"
},
"router-shutdown": {
"description": "Gracefully shutdown router",
"message": "Gracefully shutdown router"
},
"router-status": {
"description": "Replace with Router Status",
"message": "Replace with Router Status"
},
"router-uptime": {
"description": "Replace with Router Uptime",
"message": "Replace with Router Uptime"
},
"router-version": {
"description": "Replace with Router Version",
"message": "Replace with Router Version"
},
"routerConsole": {
"description": "Description for the router console.",
"message": "Access your I2P router console and its full range of applications and configurations."
},
"routerPreface": {
"description": "Preface for the browser titlebar",
"message": "Router Console"
},
"routerPrefacePrivate": {
"description": "Preface for the browser titlebar",
"message": "Router Console (Private)"
},
"rpcHelpText": {
"description": "Configure your I2PControl options here. Configure your Bittorrent options here.",
"message": "Configure your I2PControl options here. Configure your Bittorrent options here."
},
"rpcHostText": { "description": "Control Port:", "message": "Control Port:" },
"rpcPassText": {
"description": "Control Password: Torrent RPC Password:",
"message": "Control Password: Torrent RPC Password:"
},
"rpcPathText": { "description": "Control Path:", "message": "Control Path:" },
"rpcPortText": { "description": "Control Host:", "message": "Control Host:" },
"rtcDesc": {
"description": "WebRTC action description",
"message": "WebRTC is disabled by default, but you can turn it back on and force it to honor the proxy. If you are a user of the Snowflake browser extension, this option is disabled and WebRTC is turned on by default."
},
"signingcert": { "description": "Signed By:", "message": "Signed By:" },
"siteLabel": {
"description": "Label for i2p site info",
"message": "Address/Site Information:"
},
"sitecert": {
"description": "Certificate Information:",
"message": "Certificate Information:"
},
"snark": {
"description": "Description for Bittorrent",
"message": "Quick access to Snark, the Peer-to-peer I2P network specific file sharing application."
},
"sourcehead": {
"description": "Get the source code:",
"message": "Get the source code:"
},
"sources": {
"description": "Description for the Source code link",
"message": "Browse the source code here"
},
"susimail": {
"description": "Description for e-mail",
"message": "Quick access to the SusiMail I2P network email client."
},
"text-section-header": {
"description": "The Invisible Internet Browser",
"message": "The Invisible Internet Browser"
},
"text-section-proxyerr-header": {
"description": "A Proxy Error has Occurred",
"message": "A Proxy Error has Occurred"
},
"text-section-torrents-header": {
"description": "Torrent Downloads",
"message": "Torrent Downloads"
},
"titlePreface": {
"description": "Preface for the browser titlebar",
"message": "I2P Browser"
},
"titlePrefacePrivate": {
"description": "Preface for the browser titlebar",
"message": "I2P Browser (Private)"
},
"toopie": {
"description": "For information about your I2P router status, go here:",
"message": "For information about your I2P router status, go here:"
},
"toopieHtmlHeadline": {
"description": "I2P Router Information",
"message": "I2P Router Information"
},
"toopieName": {
"description": "Name of the sidebar.",
"message": "toopie.html"
},
"toopieTLS": {
"description": "Name of the security panel.",
"message": "Site Properties"
},
"topbar": { "description": "Browse Download", "message": "Browse Download" },
"torPreface": {
"description": "Preface for the browser titlebar",
"message": "Tor Manager"
},
"torPrefacePrivate": {
"description": "Preface for the browser titlebar",
"message": "Tor Manager (Private)"
},
"torrent-action": { "description": "Download", "message": "Download" },
"torrentControls": {
"description": "Torrent Controls",
"message": "Torrent Controls"
},
"torrentDownloads": {
"description": "Torrent Downloads",
"message": "Torrent Downloads"
},
"torrentPreface": {
"description": "Preface for the browser titlebar",
"message": "Bittorrent"
},
"torrentPrefacePrivate": {
"description": "Preface for the browser titlebar",
"message": "Bittorrent (Private)"
},
"torrentui-opener": { "description": "Open WebUI", "message": "Open WebUI" },
"visit-irc": { "description": "Visit IRC", "message": "Visit IRC" },
"webPreface": {
"description": "Preface for the browser titlebar",
"message": "Web Browser"
},
"webPrefacePrivate": {
"description": "Preface for the browser titlebar",
"message": "Web Browser (Private)"
},
"webpage": {
"description": "More information is available here.",
"message": "More information is available here."
},
"window-visit-console": {
"description": "I2P Router Console",
"message": "I2P Router Console"
},
"window-visit-help": {
"description": "Extension Help Page",
"message": "Extension Help Page"
},
"window-visit-homepage": {
"description": "The Invisible Internet Browser",
"message": "The Invisible Internet Browser"
},
"window-visit-i2p": {
"description": "I2P Project Homepage:",
"message": "I2P Project Homepage:"
},
"window-visit-i2ptunnel": {
"description": "Hidden Services Manager",
"message": "Hidden Services Manager"
},
"window-visit-index": {
"description": "Webextension Homepage:",
"message": "Webextension Homepage:"
},
"window-visit-releases": {
"description": "Releases:",
"message": "Releases:"
},
"window-visit-router": {
"description": "Router Console",
"message": "Router Console"
},
"window-visit-settings": {
"description": "Open the settings",
"message": "Open the settings"
},
"window-visit-snark": {
"description": "BitTorrent",
"message": "BitTorrent"
},
"window-visit-sources": {
"description": "Source Code:",
"message": "Source Code:"
},
"window-visit-susimail": { "description": "E-Mail", "message": "E-Mail" },
"window-visit-toopie": { "description": "Toopie", "message": "Toopie" },
"window-visit-torrent": {
"description": "For assistance, visit the torrent help page",
"message": "For assistance, visit the torrent help page"
},
"windowVisitConsole": {
"description": "Router Console label.",
"message": "Router Console: "
},
"windowVisitHelppage": {
"description": "Help page for the extension label.",
"message": "WebExtension Information: "
},
"windowVisitHomepage": {
"description": "Home page for the extension label.",
"message": "Home Page: "
},
"windowVisitI2ptunnel": {
"description": "Title for i2ptunnel",
"message": "Hidden Services Manager: "
},
"windowVisitReleases": {
"description": "Visit the release page",
"message": "Extension Releases: "
},
"windowVisitSnark": {
"description": "Title for Bittorrent",
"message": "Bittorrent: "
},
"windowVisitSources": {
"description": "Title for source code link",
"message": "Extension Source Code: "
},
"windowVisitSusimail": {
"description": "Title for e-mail",
"message": "E-Mail: "
},
"windowVisitWebPage": {
"description": "Visit extension homepage on Github",
"message": "Extension Home Page: "
}
}

738
_locales/es/messages.json Normal file
View File

@@ -0,0 +1,738 @@
{
"CertLabel": {
"description": "Información del certificado:",
"message": "Información del certificado:"
},
"SignedLabel": {
"description": "Firmada por:",
"message": "Firmada por:"
},
"TorrentTypeLabel": {
"description": "Torrent Links:",
"message": "Torrent Links:"
},
"TypeLabel": {
"description": "Torrent Links:",
"message": "Torrent Links:"
},
"aboutconsole": {
"description": "Para acceder a la página principal de la consola router, vaya aquí:",
"message": "Para acceder a la página principal de la consola router, vaya aquí:"
},
"abouthome": {
"description": "Descripción para la página de botón de extensión.",
"message": "Para obtener más información sobre esta extensión, visite esta página."
},
"addresstype": {
"description": "Tipo de dirección:",
"message": "Tipo de dirección:"
},
"applicationExplain": {
"description": "Descripción para sección de aplicación.",
"message": "La consola de router I2P y las aplicaciones se abren en su propia pestaña, proporcionándoles los mismos beneficios de seguridad que navegar con esta extensión. Esto añade más protección al aislar cada aplicación y prevenir otras pestañas (es decir, redes sociales, etc) de las huellas dactilares o scripts. Todas las pestañas utilizan colores de identificación para hacer un seguimiento de su flujo de trabajo I2P."
},
"applicationHeader": {
"description": "Header for applications section.",
"message": "Aplicaciones"
},
"beta": {
"description": "Este es un producto experimental.",
"message": "Este es un producto experimental."
},
"blogPreface": {
"description": "Prefacio para la barra de título del navegador",
"message": "Blog"
},
"blogPrefacePrivate": {
"description": "Prefacio para la barra de título del navegador",
"message": "Blog (Privada)"
},
"bookmarksButton": {
"description": "Re-Crear marcadores",
"message": "Re-Crear marcadores"
},
"botePreface": {
"description": "Prefacio para la barra de título del navegador",
"message": "I2P-Bote Mail"
},
"botePrefacePrivate": {
"description": "Prefacio para la barra de título del navegador",
"message": "I2P-Bote Mail (Privado)"
},
"browser-action": {
"description": "Navega",
"message": "Navega"
},
"btRpcHostText": {
"description": "Torrent RPC Host:",
"message": "Torrent RPC Host:"
},
"btRpcPathText": {
"description": "Torrent RPC Sendero:",
"message": "Torrent RPC Sendero:"
},
"btRpcPortText": {
"description": "Torrent RPC Puerto:",
"message": "Torrent RPC Puerto:"
},
"certAbsent": {
"description": "Contenido para información de certificado si ausente",
"message": "Este sitio no está utilizando HTTPS. Todavía está verificada criptográficamente por I2P."
},
"certPresent": {
"description": "Contenido para información de certificados si está presente",
"message": "Este sitio está utilizando HTTPS. HTTPS sobre I2P es experimental y requiere certificados auto-firmados o autoritas de raíz alternativa."
},
"clearData": {
"description": "Borrar el menú de datos de navegación.",
"message": "Datos claros de navegación:"
},
"clearDesc": {
"description": "Descripción clara de la acción de datos de navegación.",
"message": "Utilice esto para borrar sus datos de navegación I2P."
},
"controlExplain": {
"description": "Introduce el panel de control.",
"message": "Estos controles se utilizan para adaptar su experiencia de navegación I2P"
},
"controlHeader": {
"description": "Directo para panel de control.",
"message": "Control"
},
"controlHelpText": {
"description": "Ayuda para configurar las opciones del botón Reset Tunnel",
"message": "Configure su consola de router aquí."
},
"controlHostText": {
"description": "Host for the Router Console",
"message": "Control Host:"
},
"controlHostValue": {
"description": "Host for the Router Console",
"message": "127.0.0.1"
},
"controlPortText": {
"description": "Puerto para la consola Router",
"message": "Puerto de control:"
},
"controlPortValue": {
"description": "Puerto para la consola Router",
"message": "7657"
},
"description": {
"description": "Ahora puede utilizar I2P en este navegador.",
"message": "Ahora puede utilizar I2P en este navegador."
},
"description2": {
"description": "Si estás viendo esta página, es porque se ha producido un error proxy. Se ha proporcionado información para ayudarle a diagnosticar el problema.",
"message": "Si estás viendo esta página, es porque se ha producido un error proxy. Se ha proporcionado información para ayudarle a diagnosticar el problema."
},
"disableHistory": {
"description": "Etiquetas de la caja de verificación de historia.",
"message": "Historia deshabilitación en pestañas I2P?"
},
"enableWebRTC": {
"description": "Etiquetas de la casilla de verificación WebRTC.",
"message": "¿Habilitar WebRTC con proxy?"
},
"extensionDescription": {
"description": "Descripción de la extensión.",
"message": "La navegación por red I2P se hizo fácil."
},
"extensionName": {
"description": "Nombre de la extensión.",
"message": "I2P En Cuervos Privados"
},
"extensionNameVariant": {
"description": "Nombre de la extensión.",
"message": "I2P en la navegación privada - Variante de Rhizome"
},
"extensionPreface": {
"description": "Prefacio para la barra de título del navegador",
"message": "I2P Management"
},
"extensionVersion": {
"description": "Versión de la extensión.",
"message": "1.28"
},
"fliplinks": {
"description": "Extension and I2P Resources",
"message": "Extension and I2P Resources"
},
"forumMessage": {
"description": "Mensaje de ayuda",
"message": "Visite el Foro I2P para aprender más o pedir asistencia"
},
"headline": {
"description": "El navegador de Internet invisible",
"message": "El navegador de Internet invisible"
},
"help": {
"description": "Descripción para la página de botón de extensión.",
"message": "Para obtener más información sobre esta extensión, visite esta página."
},
"helpMessage": {
"description": "Mensaje de ayuda",
"message": "Obtener ayuda adicional"
},
"histDesc": {
"description": "Descripción de la acción de la historia",
"message": "La historia se limpia automáticamente cuando las pestañas I2P están cerradas. Si quieres aclarar la historia mientras vas, compruebe esta caja."
},
"homepage": {
"description": "Encontrar más información",
"message": "Más información está disponible aquí"
},
"hostText": {
"description": "Host for the HTTP or SOCKS5 Proxy",
"message": "Host:"
},
"i2ppage": {
"description": "Aquí hay más información.",
"message": "Aquí hay más información."
},
"i2ptunnel": {
"description": "Descripción para i2ptunnel",
"message": "Ver mensajes de estado proxy y configurar servicios y túneles."
},
"i2ptunnelPreface": {
"description": "Prefacio para la barra de título del navegador",
"message": "Hidden Services Manager"
},
"i2ptunnelPrefacePrivate": {
"description": "Prefacio para la barra de título del navegador",
"message": "Hidden Services Manager (Private)"
},
"infoMessage": {
"description": "Mensaje de ayuda",
"message": "¡Ahora eres libre de navegar por el eepWeb! Su navegador ahora está configurado para navegar de forma anónima en la red I2P. Mientras navega, su tráfico será enrutado a través de otros nodos de red para ocultar su origen, tanto desde el servidor como desde los propios nodos."
},
"infoTitle": {
"description": "Título para el menú de ayuda",
"message": "I2P Ayuda"
},
"ircPreface": {
"description": "Prefacio para la barra de título del navegador",
"message": "Dispatch IRC"
},
"ircPrefacePrivate": {
"description": "Prefacio para la barra de título del navegador",
"message": "Dispatch IRC (Private)"
},
"isBase32": {
"description": "Mensaje para la base del panel info del sitio32",
"message": "Dirección I2P Base32-Formatted"
},
"isHostName": {
"description": "Mensaje para el nombre de host del panel info site",
"message": "I2P Jump Hostname"
},
"label-router-activepeers": {
"description": "Peers activos:",
"message": "Peers activos:"
},
"label-router-bandwidth": {
"description": "Ancho de banda",
"message": "Ancho de banda"
},
"label-router-bw-inbound-15s": {
"description": "Inbound bw 15s:",
"message": "Inbound bw 15s:"
},
"label-router-bw-inbound-1s": {
"description": "Inbound bw 1s:",
"message": "Inbound bw 1s:"
},
"label-router-bw-outbound-15s": {
"description": "Saliente bw 15s:",
"message": "Saliente bw 15s:"
},
"label-router-bw-outbound-1s": {
"description": "Saliente bw 1s:",
"message": "Saliente bw 1s:"
},
"label-router-net-tunnels-participating": {
"description": "Tunels de tránsito:",
"message": "Tunels de tránsito:"
},
"label-router-netdb-fastpeers": {
"description": "Peers rápidos:",
"message": "Peers rápidos:"
},
"label-router-netdb-highcapacitypeers": {
"description": "Alta capacidad Peers:",
"message": "Alta capacidad Peers:"
},
"label-router-netdb-isreseeding": {
"description": "Estado civil:",
"message": "Estado civil:"
},
"label-router-netdb-knownpeers": {
"description": "Peers conocidos:",
"message": "Peers conocidos:"
},
"label-router-peers": {
"description": "Peers",
"message": "Peers"
},
"label-router-status": {
"description": "Status Router Status:",
"message": "Status Router Status:"
},
"label-router-uptime": {
"description": "Router Uptime(Ms):",
"message": "Router Uptime(Ms):"
},
"label-router-version": {
"description": "Versión del router:",
"message": "Versión del router:"
},
"links": {
"description": "Extension and I2P Resources",
"message": "Extension and I2P Resources"
},
"linksExplain": {
"description": "Si desea obtener más información sobre I2P, puede visitar estos enlaces.",
"message": "Si desea obtener más información sobre I2P, puede visitar estos enlaces."
},
"mailPreface": {
"description": "Prefacio para la barra de título del navegador",
"message": "Web Mail"
},
"mailPrefacePrivate": {
"description": "Prefacio para la barra de título del navegador",
"message": "Web Mail (Privada)"
},
"muwirePreface": {
"description": "Prefacio para la barra de título del navegador",
"message": "MuWire"
},
"muwirePrefacePrivate": {
"description": "Prefacio para la barra de título del navegador",
"message": "MuWire (Privada)"
},
"newsMessage": {
"description": "Mensaje de ayuda",
"message": "Visita el I2P Blog para aprender lo último sobre i2p."
},
"onboardingButtonFive": {
"description": "Mejora tu Experiencia",
"message": "Mejora tu Experiencia"
},
"onboardingButtonFour": {
"description": "Compartir archivos",
"message": "Compartir archivos"
},
"onboardingButtonOne": {
"description": "Browsing de red I2P y Browsing de red no I2P",
"message": "Browsing de red I2P y Browsing de red no I2P"
},
"onboardingButtonThree": {
"description": "Correo electrónico oculto",
"message": "Correo electrónico oculto"
},
"onboardingButtonTwo": {
"description": "Red de protección de límites",
"message": "Red de protección de límites"
},
"onboardingButtonZero": {
"description": "Protege tu privacidad",
"message": "Protege tu privacidad"
},
"onboardingContentFive": {
"description": "Esta extensión se puede combinar con otras extensiones que a veces mejoran su funcionalidad. uBlock Origin, LocalCDN y jShelter son útiles para acelerar la carga de página, bloquear anuncios y limitar el poder de Javascript. Para los usuarios que quieren bloquear todo Javascript, NoScript es recomendado.",
"message": "Esta extensión se puede combinar con otras extensiones que a veces mejoran su funcionalidad. uBlock Origin, LocalCDN y jShelter son útiles para acelerar la carga de página, bloquear anuncios y limitar el poder de Javascript. Para los usuarios que quieren bloquear todo Javascript, NoScript es recomendado."
},
"onboardingContentFour": {
"description": "I2P es capaz de usar aplicaciones entre pares como BitTorrent, protegiendo su identidad cuando comparte archivos. Nuestro cliente de bittorrent anónimo está disponible en el navegador.",
"message": "I2P es capaz de usar aplicaciones entre pares como BitTorrent, protegiendo su identidad cuando comparte archivos. Nuestro cliente de bittorrent anónimo está disponible en el navegador."
},
"onboardingContentOne": {
"description": "Esta extensión funciona automáticamente cuando está navegando por sitios I2P. Si desea utilizar I2P como un proxy a sitios no I2P, utilice el botón I2P En el Browsing privado en la barra de herramientas y haga clic en Nueva pestaña de navegador I2P para cambiar a I2P Browsing en una nueva pestaña. Su experiencia mientras navega por Internet puede ser un poco diferente. Las cosas pueden ser un poco más lentas, y dependiendo de su nivel de seguridad, algunos elementos pueden no funcionar o cargar. También se le puede pedir que demuestre que usted es un humano y no un robot.",
"message": "Esta extensión funciona automáticamente cuando está navegando por sitios I2P. Si desea utilizar I2P como un proxy a sitios no I2P, utilice el botón I2P En el Browsing privado en la barra de herramientas y haga clic en Nueva pestaña de navegador I2P para cambiar a I2P Browsing en una nueva pestaña. Su experiencia mientras navega por Internet puede ser un poco diferente. Las cosas pueden ser un poco más lentas, y dependiendo de su nivel de seguridad, algunos elementos pueden no funcionar o cargar. También se le puede pedir que demuestre que usted es un humano y no un robot."
},
"onboardingContentThree": {
"description": "También hay un servicio de correo electrónico anónimo disponible dentro de I2P, que es accesible desde nuestro navegador a través del menú directamente a la derecha.",
"message": "También hay un servicio de correo electrónico anónimo disponible dentro de I2P, que es accesible desde nuestro navegador a través del menú directamente a la derecha."
},
"onboardingContentTwo": {
"description": "I2P se administra normalmente a través de un WebUI (La \"Consola de red\", que el usuario a veces ve en el mismo navegador que utilizan para visitar sitios remotos. Es esencial evitar que los sitios puedan acceder a la información de este WebUI y otros servicios de gestión local. Los sitios de Clearnet permanecen en el contenedor predeterminado Firefox, pero tan pronto como el contenedor predeterminado Firefox solicite un sitio *.onion o *.i2p, será inmediatamente containerizzato. La herramienta de gestión de la identidad de Tor Browser controla las pestañas de las redes claras, y son proxidas utilizando el plugin predeterminado I2P outproxy o outproxy.",
"message": "I2P se administra normalmente a través de un WebUI (La \"Consola de Router\", que el usuario a veces ve en el mismo navegador que utilizan para visitar sitios remotos. Es esencial evitar que los sitios puedan acceder a la información de este WebUI y otros servicios de gestión local. Los sitios de Clearnet permanecen en el contenedor predeterminado Firefox, pero tan pronto como el contenedor predeterminado Firefox solicite un sitio *.onion o *.i2p, será inmediatamente containerizzato. La herramienta de gestión de la identidad de Tor Browser controla las pestañas de las redes claras, y son proxidas utilizando el plugin predeterminado I2P outproxy o outproxy."
},
"onboardingContentZero": {
"description": "Al utilizar I2P In Private Browsing Mode, usted está protegido contra el seguimiento y la vigilancia. El navegador I2P aísla las cookies y elimina la historia de su navegador después de su sesión. Estas modificaciones aseguran que su privacidad y seguridad estén protegidos como su navegación.",
"message": "Al utilizar I2P In Private Browsing Mode, usted está protegido contra el seguimiento y la vigilancia. El navegador I2P aísla las cookies y elimina la historia de su navegador después de su sesión. Estas modificaciones aseguran que su privacidad y seguridad estén protegidos como su navegación."
},
"onboardingFive": {
"description": "Consejos de experiencia",
"message": "Consejos de experiencia"
},
"onboardingFour": {
"description": "Browsing the Web",
"message": "Browsing the Web"
},
"onboardingOne": {
"description": "Configure su Experiencia",
"message": "Configure su Experiencia"
},
"onboardingThree": {
"description": "Correo electrónico oculto",
"message": "Correo electrónico oculto"
},
"onboardingTitle": {
"description": "Acerca de I2P en la navegación privada",
"message": "Acerca de I2P en la navegación privada"
},
"onboardingTwo": {
"description": "Compartir archivos",
"message": "Compartir archivos"
},
"onboardingZero": {
"description": "Protege tu privacidad",
"message": "Protege tu privacidad"
},
"portText": {
"description": "Puerto para HTTP o SOCKS5 Proxy",
"message": "Puerto:"
},
"protocolHandlerValue": {
"description": "Valor para el controlador de protocolo magnético",
"message": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%s implicaaction=Add coinfoo=Add+torrent"
},
"proxy-check": {
"description": "Proxy está listo.",
"message": "Proxy está listo."
},
"proxyFailedStatus": {
"description": "Estado fallido.",
"message": "Proxy no está listo"
},
"proxyHelpText": {
"description": "Ayuda para configurar las opciones del botón Reset Tunnel",
"message": "Configure su proxy I2P aquí."
},
"proxySuccessStatus": {
"description": "Estado fallido.",
"message": "Proxy está listo"
},
"readyness": {
"description": "Proxy está listo.",
"message": "Proxy está listo."
},
"releases": {
"description": "Descripción para nueva página de lanzamiento",
"message": "Comprueba nuevos lanzamientos aquí"
},
"resetMessage": {
"description": "Mensaje para el botón Reset",
"message": "Reiniciar el túnel"
},
"returnhome": {
"description": "/",
"message": "/"
},
"router-net-bw-inbound-15s": {
"description": "Reemplazar con Router ancho de banda 15",
"message": "Reemplazar con Router ancho de banda 15"
},
"router-net-bw-inbound-1s": {
"description": "Reemplazar con el ancho de banda de router 1s",
"message": "Reemplazar con el ancho de banda de router 1s"
},
"router-net-bw-outbound-15s": {
"description": "Reemplazar con Router ancho de banda 15",
"message": "Reemplazar con Router ancho de banda 15"
},
"router-net-bw-outbound-1s": {
"description": "Reemplazar con Router ancho de banda 1",
"message": "Reemplazar con Router ancho de banda 1"
},
"router-net-tunnels-participating": {
"description": "Reemplazar con el Conde de túnel participante de Router",
"message": "Reemplazar con el Conde de túnel participante de Router"
},
"router-netdb-activepeers": {
"description": "Reemplazar con los Peers Activos Router",
"message": "Reemplazar con los Peers Activos Router"
},
"router-netdb-fastpeers": {
"description": "Reemplazar con los Peers Rápidas Router",
"message": "Reemplazar con los Peers Rápidas Router"
},
"router-netdb-highcapacitypeers": {
"description": "Sustitúyase por los trabajadores de alta capacidad",
"message": "Sustitúyase por los trabajadores de alta capacidad"
},
"router-netdb-isreseeding": {
"description": "Sustitúyase por Router netDB Estado de repaso",
"message": "Sustitúyase por Router netDB Estado de repaso"
},
"router-netdb-knownpeers": {
"description": "Reemplazar con los Peers Conocidos Router",
"message": "Reemplazar con los Peers Conocidos Router"
},
"router-restart": {
"description": "Router de reiniciar",
"message": "Router de reiniciar"
},
"router-shutdown": {
"description": "Router de apagado elegante",
"message": "Router de apagado elegante"
},
"router-status": {
"description": "Sustitúyase por Router Status",
"message": "Sustitúyase por Router Status"
},
"router-uptime": {
"description": "Reemplazar con Router Uptime",
"message": "Reemplazar con Router Uptime"
},
"router-version": {
"description": "Reemplazar con la versión Router",
"message": "Reemplazar con la versión Router"
},
"routerConsole": {
"description": "Descripción para la consola del router.",
"message": "Acceda a su consola de router I2P y a su gama completa de aplicaciones y configuraciones."
},
"routerPreface": {
"description": "Prefacio para la barra de título del navegador",
"message": "Router Console"
},
"routerPrefacePrivate": {
"description": "Prefacio para la barra de título del navegador",
"message": "Router Console (Privada)"
},
"rpcHelpText": {
"description": "Configura tus opciones de I2PControl aquí. Configure sus opciones Bittorrent aquí.",
"message": "Configura tus opciones de I2PControl aquí. Configure sus opciones Bittorrent aquí."
},
"rpcHostText": {
"description": "Puerto de control:",
"message": "Puerto de control:"
},
"rpcPassText": {
"description": "Contraseña de control: Torrent RPC Contraseña:",
"message": "Contraseña de control: Torrent RPC Contraseña:"
},
"rpcPathText": {
"description": "Sendero de control:",
"message": "Sendero de control:"
},
"rpcPortText": {
"description": "Control Host:",
"message": "Control Host:"
},
"rtcDesc": {
"description": "Descripción de la acción WebRTC",
"message": "WebRTC está deshabilitado por defecto, pero puede activarlo y forzarlo a honrar al proxy. Si usted es un usuario de la extensión del navegador Snowflake, esta opción está deshabilitada y WebRTC se activa por defecto."
},
"signingcert": {
"description": "Firmada por:",
"message": "Firmada por:"
},
"siteLabel": {
"description": "Etiquetas para el sitio i2p info",
"message": "Address/Site Information:"
},
"sitecert": {
"description": "Información del certificado:",
"message": "Información del certificado:"
},
"snark": {
"description": "Descripción para Bittorrent",
"message": "Quick access to Snark, the Peer-to-peer I2P network specific file sharing application."
},
"sourcehead": {
"description": "Obtener el código fuente:",
"message": "Obtener el código fuente:"
},
"sources": {
"description": "Descripción para el enlace de código fuente",
"message": "Examine el código fuente aquí"
},
"susimail": {
"description": "Descripción para e-mail",
"message": "Acceso rápido al cliente de correo electrónico de red SusiMail I2P."
},
"text-section-header": {
"description": "El navegador de Internet invisible",
"message": "El navegador de Internet invisible"
},
"text-section-proxyerr-header": {
"description": "Un error proxy ha corrido",
"message": "Un error proxy ha corrido"
},
"text-section-torrents-header": {
"description": "Descarga Torrent",
"message": "Descarga Torrent"
},
"titlePreface": {
"description": "Prefacio para la barra de título del navegador",
"message": "Navegador I2P"
},
"titlePrefacePrivate": {
"description": "Prefacio para la barra de título del navegador",
"message": "Navegador I2P (Privado)"
},
"toopie": {
"description": "Para obtener información sobre su estado de router I2P, vaya aquí:",
"message": "Para obtener información sobre su estado de router I2P, vaya aquí:"
},
"toopieHtmlHeadline": {
"description": "I2P Router Information",
"message": "I2P Router Information"
},
"toopieName": {
"description": "Nombre de la barra lateral.",
"message": "también. html"
},
"toopieTLS": {
"description": "Nombre del panel de seguridad.",
"message": "Propiedades del sitio"
},
"topbar": {
"description": "Descargar",
"message": "Descargar"
},
"torPreface": {
"description": "Prefacio para la barra de título del navegador",
"message": "Tor Manager"
},
"torPrefacePrivate": {
"description": "Prefacio para la barra de título del navegador",
"message": "Tor Manager (Private)"
},
"torrent-action": {
"description": "Descargar",
"message": "Descargar"
},
"torrentControls": {
"description": "Controles Torrent",
"message": "Controles Torrent"
},
"torrentDownloads": {
"description": "Descarga Torrent",
"message": "Descarga Torrent"
},
"torrentPreface": {
"description": "Prefacio para la barra de título del navegador",
"message": "Bittorrent"
},
"torrentPrefacePrivate": {
"description": "Prefacio para la barra de título del navegador",
"message": "Bittorrent (Private)"
},
"torrentui-opener": {
"description": "Open WebUI",
"message": "Open WebUI"
},
"visit-irc": {
"description": "Visit IRC",
"message": "Visit IRC"
},
"webPreface": {
"description": "Prefacio para la barra de título del navegador",
"message": "Web Browser"
},
"webPrefacePrivate": {
"description": "Prefacio para la barra de título del navegador",
"message": "Web Browser (Privada)"
},
"webpage": {
"description": "Aquí hay más información.",
"message": "Aquí hay más información."
},
"window-visit-console": {
"description": "I2P Router Console",
"message": "I2P Router Console"
},
"window-visit-help": {
"description": "Extension Help Page",
"message": "Extension Help Page"
},
"window-visit-homepage": {
"description": "El navegador de Internet invisible",
"message": "El navegador de Internet invisible"
},
"window-visit-i2p": {
"description": "I2P Project Homepage:",
"message": "I2P Project Homepage:"
},
"window-visit-i2ptunnel": {
"description": "Hidden Services Manager",
"message": "Hidden Services Manager"
},
"window-visit-index": {
"description": "Webextension Homepage:",
"message": "Webextension Homepage:"
},
"window-visit-releases": {
"description": "Comunicados:",
"message": "Comunicados:"
},
"window-visit-router": {
"description": "Router Console",
"message": "Router Console"
},
"window-visit-settings": {
"description": "Abra la configuración",
"message": "Abra la configuración"
},
"window-visit-snark": {
"description": "BitTorrent",
"message": "BitTorrent"
},
"window-visit-sources": {
"description": "Código fuente:",
"message": "Código fuente:"
},
"window-visit-susimail": {
"description": "E-Mail",
"message": "E-Mail"
},
"window-visit-toopie": {
"description": "Toopie",
"message": "Toopie"
},
"window-visit-torrent": {
"description": "Para asistencia, visite la página de ayuda torrent",
"message": "Para asistencia, visite la página de ayuda torrent"
},
"windowVisitConsole": {
"description": "Consola Router.",
"message": "Consola Router:"
},
"windowVisitHelppage": {
"description": "Ayuda página para la etiqueta de extensión.",
"message": "WebExtension Information:"
},
"windowVisitHomepage": {
"description": "Página principal para la etiqueta de extensión.",
"message": "Página principal:"
},
"windowVisitI2ptunnel": {
"description": "Título para i2ptunnel",
"message": "Administrador de servicios ocultos:"
},
"windowVisitReleases": {
"description": "Visita la página de lanzamiento",
"message": "Extension Releases:"
},
"windowVisitSnark": {
"description": "Título para Bittorrent",
"message": "Bittorrent:"
},
"windowVisitSources": {
"description": "Título del enlace de código fuente",
"message": "Código fuente de extensión:"
},
"windowVisitSusimail": {
"description": "Título del correo electrónico",
"message": "E-Mail:"
},
"windowVisitWebPage": {
"description": "Visita la página principal de extensión en Github",
"message": "Extension Home Page:"
}
}

738
_locales/fr/messages.json Normal file
View File

@@ -0,0 +1,738 @@
{
"CertLabel": {
"description": "Renseignements sur le certificat:",
"message": "Renseignements sur le certificat:"
},
"SignedLabel": {
"description": "Signé par:",
"message": "Signé par:"
},
"TorrentTypeLabel": {
"description": "Torrent Links:",
"message": "Torrent Links:"
},
"TypeLabel": {
"description": "Torrent Links:",
"message": "Torrent Links:"
},
"aboutconsole": {
"description": "Pour accéder à la page d'accueil de la console routeur, allez ici:",
"message": "Pour accéder à la page d'accueil de la console routeur, allez ici:"
},
"abouthome": {
"description": "Description pour la page du bouton d'extension.",
"message": "Pour plus d'informations sur cette extension, visitez cette page."
},
"addresstype": {
"description": "Type d ' adresse:",
"message": "Type d ' adresse:"
},
"applicationExplain": {
"description": "Description pour la section de demande.",
"message": "La console de routeur I2P et les applications s'ouvrent dans leur propre onglet, leur fournissant les mêmes avantages de sécurité que la navigation avec cette extension. Cela ajoute plus de protection en isolant chaque application et en empêchant d'autres onglets (c'est-à-dire les médias sociaux, etc ) de l'empreinte ou des scripts. Tous les onglets utilisent des couleurs d'identification pour suivre votre flux de travail I2P."
},
"applicationHeader": {
"description": "Header for applications section.",
"message": "Applications"
},
"beta": {
"description": "C'est un produit expérimental.",
"message": "C'est un produit expérimental."
},
"blogPreface": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Blog"
},
"blogPrefacePrivate": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Blog (Private)"
},
"bookmarksButton": {
"description": "Re-Create Signets",
"message": "Re-Create Signets"
},
"botePreface": {
"description": "Préface pour la barre de titre du navigateur",
"message": "I2P-Bote Mail"
},
"botePrefacePrivate": {
"description": "Préface pour la barre de titre du navigateur",
"message": "I2P-Bote Mail (Private)"
},
"browser-action": {
"description": "Parcourir",
"message": "Parcourir"
},
"btRpcHostText": {
"description": "Torrent RPC Hébergement :",
"message": "Torrent RPC Hébergement :"
},
"btRpcPathText": {
"description": "Torrent RPC Sentier :",
"message": "Torrent RPC Sentier :"
},
"btRpcPortText": {
"description": "Torrent RPC Port:",
"message": "Torrent RPC Port:"
},
"certAbsent": {
"description": "Contenu de l'information de certificat si absent",
"message": "Ce site n'utilise pas HTTPS. Il est encore vérifié cryptographiquement par I2P."
},
"certPresent": {
"description": "Contenu pour les informations de certificat si présent",
"message": "Ce site utilise HTTPS. HTTPS sur I2P est expérimental et nécessite des certificats autosignés ou des auteurs root alternatifs."
},
"clearData": {
"description": "Clear Browsing Data menu item.",
"message": "Données de croissance claire:"
},
"clearDesc": {
"description": "Effacer la description des données de navigation.",
"message": "Utilisez ceci pour effacer vos données de navigation I2P."
},
"controlExplain": {
"description": "Introduisez le panneau de commande.",
"message": "Ces contrôles sont utilisés pour adapter votre expérience de croissance I2P"
},
"controlHeader": {
"description": "Headline pour panneau de commande.",
"message": "Contrôle"
},
"controlHelpText": {
"description": "Aide pour configurer les options pour le bouton Reset Tunnel",
"message": "Configurez votre routeur."
},
"controlHostText": {
"description": "Host for the Router Console",
"message": "Hostie de contrôle:"
},
"controlHostValue": {
"description": "Host for the Router Console",
"message": "127.0.0.1"
},
"controlPortText": {
"description": "Port pour la Console Routeur",
"message": "Port de contrôle:"
},
"controlPortValue": {
"description": "Port pour la Console Routeur",
"message": "7657"
},
"description": {
"description": "Vous pouvez maintenant utiliser I2P dans ce navigateur.",
"message": "Vous pouvez maintenant utiliser I2P dans ce navigateur."
},
"description2": {
"description": "Si vous voyez cette page, c'est parce qu'une erreur de procuration s'est produite. Certaines informations ont été fournies pour vous aider à diagnostiquer le problème.",
"message": "Si vous voyez cette page, c'est parce qu'une erreur de procuration s'est produite. Certaines informations ont été fournies pour vous aider à diagnostiquer le problème."
},
"disableHistory": {
"description": "L'étiquette de la case à cocher.",
"message": "Histoire désactive dans I2P Tabs?"
},
"enableWebRTC": {
"description": "WebRTC checkbox label.",
"message": "Activer WebRTC avec proxy?"
},
"extensionDescription": {
"description": "Description de l'extension.",
"message": "La navigation du réseau I2P est facile."
},
"extensionName": {
"description": "Nom de l'extension.",
"message": "I2P Dans la foule privée"
},
"extensionNameVariant": {
"description": "Nom de l'extension.",
"message": "I2P In Private Browsing - Variante Rhizome"
},
"extensionPreface": {
"description": "Préface pour la barre de titre du navigateur",
"message": "I2P Management"
},
"extensionVersion": {
"description": "Version de l'extension.",
"message": "1.28"
},
"fliplinks": {
"description": "Extension et ressources I2P",
"message": "Extension et ressources I2P"
},
"forumMessage": {
"description": "Message d'aide",
"message": "Visitez le Forum I2P pour en savoir plus ou demandez de l'aide"
},
"headline": {
"description": "Le navigateur Internet invisible",
"message": "Le navigateur Internet invisible"
},
"help": {
"description": "Description pour la page du bouton d'extension.",
"message": "Pour plus d'informations sur cette extension, visitez cette page."
},
"helpMessage": {
"description": "Message d'aide",
"message": "Obtenez de l'aide supplémentaire"
},
"histDesc": {
"description": "Historique",
"message": "L'histoire est automatiquement effacée lorsque vos onglets I2P sont fermés. Si vous voulez effacer l'histoire comme vous allez, cochez cette case."
},
"homepage": {
"description": "Trouver plus d'informations",
"message": "Plus d'informations sont disponibles ici"
},
"hostText": {
"description": "Host for the HTTP or SOCKS5 Proxy",
"message": "Hébergement :"
},
"i2ppage": {
"description": "Plus d'informations sont disponibles ici.",
"message": "Plus d'informations sont disponibles ici."
},
"i2ptunnel": {
"description": "Description pour i2ptunnel",
"message": "Voir les messages de statut proxy et configurer les services et les tunnels."
},
"i2ptunnelPreface": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Hidden Services Manager"
},
"i2ptunnelPrefacePrivate": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Hidden Services Manager (Private)"
},
"infoMessage": {
"description": "Message d'aide",
"message": "Vous êtes maintenant libre de parcourir l'eepWeb! Votre navigateur est maintenant configuré pour naviguer anonymement sur le réseau I2P. Lorsque vous naviguez, votre trafic sera acheminé par d'autres nœuds réseau pour déguiser son origine, à la fois du serveur et des nœuds eux-mêmes."
},
"infoTitle": {
"description": "Titre du menu Aide",
"message": "I2P Aide"
},
"ircPreface": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Dispatch IRC"
},
"ircPrefacePrivate": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Dispatch IRC (Private)"
},
"isBase32": {
"description": "Message pour le site info panel base32",
"message": "I2P Base32-Formatted Address"
},
"isHostName": {
"description": "Message pour le site info panel hostname",
"message": "I2P Jump Hostname"
},
"label-router-activepeers": {
"description": "Peers actifs:",
"message": "Peers actifs:"
},
"label-router-bandwidth": {
"description": "Bandwidth",
"message": "Bandwidth"
},
"label-router-bw-inbound-15s": {
"description": "Inbound bw 15s:",
"message": "Inbound bw 15s:"
},
"label-router-bw-inbound-1s": {
"description": "Inbound bw 1s:",
"message": "Inbound bw 1s:"
},
"label-router-bw-outbound-15s": {
"description": "Outbound bw 15s:",
"message": "Outbound bw 15s:"
},
"label-router-bw-outbound-1s": {
"description": "Bw 1s :",
"message": "Bw 1s :"
},
"label-router-net-tunnels-participating": {
"description": "Tunnels de transit:",
"message": "Tunnels de transit:"
},
"label-router-netdb-fastpeers": {
"description": "Fast Peers:",
"message": "Fast Peers:"
},
"label-router-netdb-highcapacitypeers": {
"description": "Capacité élevée Peers:",
"message": "Capacité élevée Peers:"
},
"label-router-netdb-isreseeding": {
"description": "Statut :",
"message": "Statut :"
},
"label-router-netdb-knownpeers": {
"description": "Known Peers:",
"message": "Known Peers:"
},
"label-router-peers": {
"description": "Peers",
"message": "Peers"
},
"label-router-status": {
"description": "Statut Routeur:",
"message": "Statut Routeur:"
},
"label-router-uptime": {
"description": "Temps d ' acheminement (Ms):",
"message": "Temps d ' acheminement (Ms):"
},
"label-router-version": {
"description": "Version du routeur:",
"message": "Version du routeur:"
},
"links": {
"description": "Extension et ressources I2P",
"message": "Extension et ressources I2P"
},
"linksExplain": {
"description": "Si vous voulez obtenir plus d'informations sur I2P, vous pouvez visiter ces liens.",
"message": "Si vous voulez obtenir plus d'informations sur I2P, vous pouvez visiter ces liens."
},
"mailPreface": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Web Mail"
},
"mailPrefacePrivate": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Web Mail (Private)"
},
"muwirePreface": {
"description": "Préface pour la barre de titre du navigateur",
"message": "MuWire"
},
"muwirePrefacePrivate": {
"description": "Préface pour la barre de titre du navigateur",
"message": "MuWire (Private)"
},
"newsMessage": {
"description": "Message d'aide",
"message": "Visitez le I2P Blog pour en savoir plus sur i2p."
},
"onboardingButtonFive": {
"description": "Améliorer votre Expérience",
"message": "Améliorer votre Expérience"
},
"onboardingButtonFour": {
"description": "Partage des fichiers",
"message": "Partage de fichiers"
},
"onboardingButtonOne": {
"description": "I2P Network Browsing and Non-I2P Network Browsing",
"message": "I2P Network Browsing and Non-I2P Network Browsing"
},
"onboardingButtonThree": {
"description": "E-mail caché",
"message": "E-mail caché"
},
"onboardingButtonTwo": {
"description": "Protéger les limites du réseau",
"message": "Protéger les limites du réseau"
},
"onboardingButtonZero": {
"description": "Protégez votre confidentialité",
"message": "Protégez votre confidentialité"
},
"onboardingContentFive": {
"description": "Cette extension peut être combinée avec d'autres extensions qui améliorent parfois sa fonctionnalité. uBlock Origin, LocalCDN et jShelter sont utiles pour accélérer le chargement de page, bloquer les annonces et limiter la puissance de Javascript. Pour les utilisateurs qui veulent bloquer tout Javascript, NoScript est recommandé.",
"message": "Cette extension peut être combinée avec d'autres extensions qui améliorent parfois sa fonctionnalité. uBlock Origin, LocalCDN et jShelter sont utiles pour accélérer le chargement de page, bloquer les annonces et limiter la puissance de Javascript. Pour les utilisateurs qui veulent bloquer tout Javascript, NoScript est recommandé."
},
"onboardingContentFour": {
"description": "I2P est capable d'utiliser des applications de pairs comme BitTorrent, en protégeant votre identité lorsque vous partagez des fichiers. Notre client Bitcoin anonyme est disponible dans le navigateur.",
"message": "I2P est capable d'utiliser des applications de pairs comme BitTorrent, en protégeant votre identité lorsque vous partagez des fichiers. Notre client Bitcoin anonyme est disponible dans le navigateur."
},
"onboardingContentOne": {
"description": "Cette extension fonctionne automatiquement lorsque vous naviguez sur les sites I2P. Si vous voulez utiliser I2P comme proxy aux sites non-I2P, utilisez le bouton I2P dans la barre d'outils et cliquez sur Nouvel onglet navigateur I2P pour passer à I2P Browsing dans un nouvel onglet. Votre expérience tout en naviguant sur Internet peut être un peu différente. Les choses peuvent être un peu plus lentes, et selon votre niveau de sécurité, certains éléments peuvent ne pas fonctionner ou charger. On peut aussi vous demander de prouver que vous êtes un humain et non un robot.",
"message": "Cette extension fonctionne automatiquement lorsque vous naviguez sur les sites I2P. Si vous voulez utiliser I2P comme proxy aux sites non-I2P, utilisez le bouton I2P dans la barre d'outils et cliquez sur Nouvel onglet navigateur I2P pour passer à I2P Browsing dans un nouvel onglet. Votre expérience tout en naviguant sur Internet peut être un peu différente. Les choses peuvent être un peu plus lentes, et selon votre niveau de sécurité, certains éléments peuvent ne pas fonctionner ou charger. On peut aussi vous demander de prouver que vous êtes un humain et non un robot."
},
"onboardingContentThree": {
"description": "Il y a aussi un service d'e-mail anonyme disponible à l'intérieur de I2P, qui est accessible depuis notre navigateur via le menu directement à droite.",
"message": "Il y a aussi un service d'e-mail anonyme disponible à l'intérieur de I2P, qui est accessible depuis notre navigateur via le menu directement à droite."
},
"onboardingContentTwo": {
"description": "I2P est normalement administré via un WebUI(The \"Router Console\"), que l'utilisateur voit parfois dans le même navigateur qu'il utilise pour visiter des sites distants. Il est essentiel d'empêcher les sites d'accéder à l'information de cette interface Web et d'autres services locaux. Les sites Clearnet restent dans le conteneur par défaut firefox, mais dès que le conteneur par défaut firefox demande un site *.onion ou *.i2p, il sera instantanément containerizzato. Tor Browser's identity management tooling controls clearnet tabs, and they are proxied using the default I2P outproxy or outproxy plugin.",
"message": "I2P est normalement administré via un WebUI(The \" Router Console \"), que l'utilisateur voit parfois dans le même navigateur qu'il utilise pour visiter des sites distants. Il est essentiel d'empêcher les sites d'accéder à l'information de cette interface Web et d'autres services locaux. Les sites Clearnet restent dans le conteneur par défaut firefox, mais dès que le conteneur par défaut firefox demande un site *.onion ou *.i2p, il sera instantanément containerizzato. Tor Browser's identity management tooling controls clearnet tabs, and they are proxied using the default I2P outproxy or outproxy plugin."
},
"onboardingContentZero": {
"description": "Lorsque vous utilisez I2P En mode de navigation privée, vous êtes protégé contre le suivi et la surveillance. Le navigateur I2P isole les cookies et supprime l'historique de votre navigateur après votre session. Ces modifications assurent la protection de votre vie privée et de votre sécurité.",
"message": "Lorsque vous utilisez I2P En mode de navigation privée, vous êtes protégé contre le suivi et la surveillance. Le navigateur I2P isole les cookies et supprime l'historique de votre navigateur après votre session. Ces modifications assurent la protection de votre vie privée et de votre sécurité."
},
"onboardingFive": {
"description": "Conseils d'expérience",
"message": "Conseils d'expérience"
},
"onboardingFour": {
"description": "Browsing the Web",
"message": "Browsing the Web"
},
"onboardingOne": {
"description": "Configurez votre Expérience",
"message": "Configurez votre Expérience"
},
"onboardingThree": {
"description": "E-mail caché",
"message": "E-mail caché"
},
"onboardingTitle": {
"description": "À propos d'I2P dans la foule privée",
"message": "À propos d'I2P dans la foule privée"
},
"onboardingTwo": {
"description": "Partager Fichiers",
"message": "Partager Fichiers"
},
"onboardingZero": {
"description": "Protégez votre confidentialité",
"message": "Protégez votre confidentialité"
},
"portText": {
"description": "Port pour la proxy HTTP ou SOCKS5",
"message": "Port:"
},
"protocolHandlerValue": {
"description": "Valeur pour le gestionnaire du protocole magnétique",
"message": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%s d ' action=Add);foo=Add+torrent"
},
"proxy-check": {
"description": "Proxy est prêt.",
"message": "Proxy est prêt."
},
"proxyFailedStatus": {
"description": "Proxy a échoué.",
"message": "Proxy n'est pas prêt"
},
"proxyHelpText": {
"description": "Aide pour configurer les options pour le bouton Reset Tunnel",
"message": "Configurez votre proxy I2P ici."
},
"proxySuccessStatus": {
"description": "Proxy a échoué.",
"message": "Proxy est prêt"
},
"readyness": {
"description": "Proxy est prêt.",
"message": "Proxy est prêt."
},
"releases": {
"description": "Description pour la nouvelle page de sortie",
"message": "Consultez les nouvelles versions ici"
},
"resetMessage": {
"description": "Message pour le bouton Reset Tunnel",
"message": "Réinitialiser le tunnel"
},
"returnhome": {
"description": "/",
"message": "/"
},
"router-net-bw-inbound-15s": {
"description": "Remplacer par Router Bandwidth Outbound 15s",
"message": "Remplacer par Router Bandwidth Outbound 15s"
},
"router-net-bw-inbound-1s": {
"description": "Remplacer par Router Bandwidth Inbound 1s",
"message": "Remplacer par Router Bandwidth Inbound 1s"
},
"router-net-bw-outbound-15s": {
"description": "Remplacer par Router Bandwidth Outbound 15s",
"message": "Remplacer par Router Bandwidth Outbound 15s"
},
"router-net-bw-outbound-1s": {
"description": "Remplacer par Router Bandwidth Outbound 1s",
"message": "Remplacer par Router Bandwidth Outbound 1s"
},
"router-net-tunnels-participating": {
"description": "Remplacer par le nombre de tunnels participants du routeur",
"message": "Remplacer par le nombre de tunnels participants du routeur"
},
"router-netdb-activepeers": {
"description": "Remplacer par Router Active Peers",
"message": "Remplacer par Router Active Peers"
},
"router-netdb-fastpeers": {
"description": "Remplacer par Router Fast Peers",
"message": "Remplacer par Router Fast Peers"
},
"router-netdb-highcapacitypeers": {
"description": "Remplacer par des Peers de haute capacité",
"message": "Remplacer par des Peers de haute capacité"
},
"router-netdb-isreseeding": {
"description": "Remplacer par Router netDB Reseeding Status",
"message": "Remplacer par Router netDB Reseeding Status"
},
"router-netdb-knownpeers": {
"description": "Remplacer par Router Known Peers",
"message": "Remplacer par Router Known Peers"
},
"router-restart": {
"description": "Bien redémarrer routeur",
"message": "Bien redémarrer routeur"
},
"router-shutdown": {
"description": "Routeur d'arrêt Gracely",
"message": "Routeur d'arrêt Gracely"
},
"router-status": {
"description": "Remplacer par le statut Routeur",
"message": "Remplacer par le statut Routeur"
},
"router-uptime": {
"description": "Remplacer par Router Uptime",
"message": "Remplacer par Router Uptime"
},
"router-version": {
"description": "Remplacer par la version Router",
"message": "Remplacer par la version Router"
},
"routerConsole": {
"description": "Description pour la console routeur.",
"message": "Accédez à votre console de routeur I2P et à toute sa gamme d'applications et de configurations."
},
"routerPreface": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Router Console"
},
"routerPrefacePrivate": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Console Routeur (Private)"
},
"rpcHelpText": {
"description": "Configurez vos options I2PControl ici. Configurez vos options Bittorrent ici.",
"message": "Configurez vos options I2PControl ici. Configurez vos options Bittorrent ici."
},
"rpcHostText": {
"description": "Port de contrôle:",
"message": "Port de contrôle:"
},
"rpcPassText": {
"description": "Mot de passe de contrôle: Torrent RPC Mot de passe :",
"message": "Mot de passe de contrôle: Torrent RPC Mot de passe :"
},
"rpcPathText": {
"description": "Voie de contrôle:",
"message": "Voie de contrôle:"
},
"rpcPortText": {
"description": "Hostie de contrôle:",
"message": "Hostie de contrôle:"
},
"rtcDesc": {
"description": "WebRTC action description",
"message": "WebRTC est désactivé par défaut, mais vous pouvez le retourner et le forcer à honorer le proxy. Si vous êtes un utilisateur de l'extension de navigateur Snowflake, cette option est désactivée et WebRTC est activé par défaut."
},
"signingcert": {
"description": "Signé par:",
"message": "Signé par:"
},
"siteLabel": {
"description": "Étiquette pour info site i2p",
"message": "Adresse/Site Information:"
},
"sitecert": {
"description": "Renseignements sur le certificat:",
"message": "Renseignements sur le certificat:"
},
"snark": {
"description": "Description pour Bittorrent",
"message": "Accès rapide à Snark, l'application de partage de fichiers I2P par réseau Peer-to-peer."
},
"sourcehead": {
"description": "Obtenez le code source:",
"message": "Obtenez le code source:"
},
"sources": {
"description": "Description du lien de code source",
"message": "Parcourez le code source ici"
},
"susimail": {
"description": "Description pour e-mail",
"message": "Accès rapide au client de messagerie réseau SusiMail I2P."
},
"text-section-header": {
"description": "Le navigateur Internet invisible",
"message": "Le navigateur Internet invisible"
},
"text-section-proxyerr-header": {
"description": "A Proxy Error has Occurred",
"message": "A Proxy Error has Occurred"
},
"text-section-torrents-header": {
"description": "Téléchargements de Torrent",
"message": "Téléchargements de Torrent"
},
"titlePreface": {
"description": "Préface pour la barre de titre du navigateur",
"message": "I2P Browser"
},
"titlePrefacePrivate": {
"description": "Préface pour la barre de titre du navigateur",
"message": "I2P Browser (Private)"
},
"toopie": {
"description": "Pour des informations sur votre statut de routeur I2P, allez ici:",
"message": "Pour des informations sur votre statut de routeur I2P, allez ici:"
},
"toopieHtmlHeadline": {
"description": "I2P Router Information",
"message": "I2P Router Information"
},
"toopieName": {
"description": "Nom de la barre latérale.",
"message": "aussi. html"
},
"toopieTLS": {
"description": "Nom du panneau de sécurité.",
"message": "Propriétés du site"
},
"topbar": {
"description": "Parcourir",
"message": "Parcourir"
},
"torPreface": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Tor Manager"
},
"torPrefacePrivate": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Tor Manager (Private)"
},
"torrent-action": {
"description": "Télécharger",
"message": "Télécharger"
},
"torrentControls": {
"description": "Torrent Controls",
"message": "Torrent Controls"
},
"torrentDownloads": {
"description": "Téléchargements de Torrent",
"message": "Téléchargements de Torrent"
},
"torrentPreface": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Bittorrent"
},
"torrentPrefacePrivate": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Bittorrent (Private)"
},
"torrentui-opener": {
"description": "Open WebUI",
"message": "Open WebUI"
},
"visit-irc": {
"description": "Visiter IRC",
"message": "Visiter IRC"
},
"webPreface": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Navigateur Web"
},
"webPrefacePrivate": {
"description": "Préface pour la barre de titre du navigateur",
"message": "Navigateur Web (Private)"
},
"webpage": {
"description": "Plus d'informations sont disponibles ici.",
"message": "Plus d'informations sont disponibles ici."
},
"window-visit-console": {
"description": "Console Routeur I2P",
"message": "Console Routeur I2P"
},
"window-visit-help": {
"description": "Extension Page",
"message": "Extension Page"
},
"window-visit-homepage": {
"description": "Le navigateur Internet invisible",
"message": "Le navigateur Internet invisible"
},
"window-visit-i2p": {
"description": "I2P Page d'accueil du projet :",
"message": "I2P Page d'accueil du projet :"
},
"window-visit-i2ptunnel": {
"description": "Hidden Services Manager",
"message": "Hidden Services Manager"
},
"window-visit-index": {
"description": "Webextension Homepage:",
"message": "Webextension Homepage:"
},
"window-visit-releases": {
"description": "Sorties:",
"message": "Sorties:"
},
"window-visit-router": {
"description": "Router Console",
"message": "Router Console"
},
"window-visit-settings": {
"description": "Ouvrez les paramètres",
"message": "Ouvrez les paramètres"
},
"window-visit-snark": {
"description": "BitTorrent",
"message": "BitTorrent"
},
"window-visit-sources": {
"description": "Code source:",
"message": "Code source:"
},
"window-visit-susimail": {
"description": "E-Mail",
"message": "E-Mail"
},
"window-visit-toopie": {
"description": "Toopie",
"message": "Toopie"
},
"window-visit-torrent": {
"description": "Pour l'assistance, visitez la page d'aide du torrent",
"message": "Pour l'assistance, visitez la page d'aide du torrent"
},
"windowVisitConsole": {
"description": "Router Console label.",
"message": "Router Console:"
},
"windowVisitHelppage": {
"description": "Page d'aide pour l'étiquette d'extension.",
"message": "WebExtension Information:"
},
"windowVisitHomepage": {
"description": "Page d'accueil pour l'étiquette d'extension.",
"message": "Page d'accueil :"
},
"windowVisitI2ptunnel": {
"description": "Titre de i2ptunnel",
"message": "Hidden Services Manager:"
},
"windowVisitReleases": {
"description": "Visitez la page de sortie",
"message": "Extension Releases:"
},
"windowVisitSnark": {
"description": "Titre de Bittorrent",
"message": "Bittorrent:"
},
"windowVisitSources": {
"description": "Titre du lien de code source",
"message": "Code d ' extension:"
},
"windowVisitSusimail": {
"description": "Titre de l ' e-mail",
"message": "E-Mail:"
},
"windowVisitWebPage": {
"description": "Page d'accueil de visite sur Github",
"message": "Extension Home Page:"
}
}

738
_locales/it/messages.json Normal file
View File

@@ -0,0 +1,738 @@
{
"CertLabel": {
"description": "Informazioni sul certificato:",
"message": "Informazioni sul certificato:"
},
"SignedLabel": {
"description": "Firmato da:",
"message": "Firmato da:"
},
"TorrentTypeLabel": {
"description": "Collegamenti Torrent:",
"message": "Collegamenti Torrent:"
},
"TypeLabel": {
"description": "Collegamenti Torrent:",
"message": "Collegamenti Torrent:"
},
"aboutconsole": {
"description": "Per accedere alla homepage della console router, vai qui:",
"message": "Per accedere alla homepage della console router, vai qui:"
},
"abouthome": {
"description": "Descrizione per la pagina del pulsante estensione.",
"message": "Per maggiori informazioni su questa estensione, visita questa pagina."
},
"addresstype": {
"description": "Indirizzo Tipo:",
"message": "Indirizzo Tipo:"
},
"applicationExplain": {
"description": "Descrizione per sezione applicazione.",
"message": "La console router I2P e le applicazioni si aprono nella propria scheda, fornendo loro gli stessi vantaggi di sicurezza come la navigazione con questa estensione. Questo aggiunge più protezione isolando ogni applicazione e impedendo altre schede (cioè i social media, ecc ) da impronta digitale o script. Tutte le schede utilizzano l'identificazione dei colori per tenere traccia del flusso di lavoro I2P."
},
"applicationHeader": {
"description": "Intestazione per la sezione applicazioni.",
"message": "Applicazioni"
},
"beta": {
"description": "Questo è un prodotto sperimentale.",
"message": "Questo è un prodotto sperimentale."
},
"blogPreface": {
"description": "Prefazione per la barra del browser",
"message": "Blog"
},
"blogPrefacePrivate": {
"description": "Prefazione per la barra del browser",
"message": "Blog (Private)"
},
"bookmarksButton": {
"description": "Segnalibri di recupero",
"message": "Segnalibri di recupero"
},
"botePreface": {
"description": "Prefazione per la barra del browser",
"message": "I2P-Bote Mail"
},
"botePrefacePrivate": {
"description": "Prefazione per la barra del browser",
"message": "I2P-Bote Mail (Private)"
},
"browser-action": {
"description": "Sfoglia",
"message": "Sfoglia"
},
"btRpcHostText": {
"description": "Torrent RPC Host:",
"message": "Torrent RPC Host:"
},
"btRpcPathText": {
"description": "Torrent RPC Percorso:",
"message": "Torrent RPC Percorso:"
},
"btRpcPortText": {
"description": "Torrent RPC Porto:",
"message": "Torrent RPC Porto:"
},
"certAbsent": {
"description": "Contenuto per informazioni sul certificato se assente",
"message": "Questo sito non utilizza HTTPS. È ancora verificata crittograficamente da I2P."
},
"certPresent": {
"description": "Contenuto per informazioni sul certificato se presente",
"message": "Questo sito utilizza HTTPS. HTTPS su I2P è sperimentale e richiede certificati auto-firmati o autoriti radice alternativi."
},
"clearData": {
"description": "Cancella voce del menu di navigazione dati.",
"message": "Dati di navigazione trasparenti:"
},
"clearDesc": {
"description": "Cancella la descrizione dell'azione dei dati di navigazione.",
"message": "Utilizzare questo per cancellare i dati di navigazione I2P."
},
"controlExplain": {
"description": "Introdurre il pannello di controllo.",
"message": "Questi controlli vengono utilizzati per personalizzare la tua I2P Browsing Experience"
},
"controlHeader": {
"description": "Headline per pannello di controllo.",
"message": "Controllo"
},
"controlHelpText": {
"description": "Aiuto per configurare le opzioni per il pulsante Reset Tunnel",
"message": "Configura la console router qui."
},
"controlHostText": {
"description": "Host per la console Router",
"message": "Host di controllo:"
},
"controlHostValue": {
"description": "Host per la console Router",
"message": "127.0.0.1"
},
"controlPortText": {
"description": "Porto per la console Router",
"message": "Porto di controllo:"
},
"controlPortValue": {
"description": "Porto per la console Router",
"message": "7657"
},
"description": {
"description": "Ora è possibile utilizzare I2P in questo browser.",
"message": "Ora è possibile utilizzare I2P in questo browser."
},
"description2": {
"description": "Se stai vedendo questa pagina, è perché si è verificato un errore proxy. Alcune informazioni sono state fornite per aiutarvi a diagnosticare il problema.",
"message": "Se stai vedendo questa pagina, è perché si è verificato un errore proxy. Alcune informazioni sono state fornite per aiutarvi a diagnosticare il problema."
},
"disableHistory": {
"description": "Etichetta della casella di controllo di storia.",
"message": "Disattivare la storia nelle schede I2P?"
},
"enableWebRTC": {
"description": "Etichetta della casella di controllo WebRTC.",
"message": "Attiva WebRTC con proxy?"
},
"extensionDescription": {
"description": "Descrizione dell'estensione.",
"message": "La navigazione della rete I2P è stata facile."
},
"extensionName": {
"description": "Nome dell'estensione.",
"message": "I2P In navigazione privata"
},
"extensionNameVariant": {
"description": "Nome dell'estensione.",
"message": "I2P In navigazione privata - Variante Rhizome"
},
"extensionPreface": {
"description": "Prefazione per la barra del browser",
"message": "Gestione I2P"
},
"extensionVersion": {
"description": "Versione dell'estensione.",
"message": "1.2"
},
"fliplinks": {
"description": "Estensione e risorse I2P",
"message": "Estensione e risorse I2P"
},
"forumMessage": {
"description": "Messaggio di aiuto",
"message": "Visita il Forum I2P per saperne di più o chiedere assistenza"
},
"headline": {
"description": "Il browser Internet invisibile",
"message": "Il browser Internet invisibile"
},
"help": {
"description": "Descrizione per la pagina del pulsante estensione.",
"message": "Per maggiori informazioni su questa estensione, visita questa pagina."
},
"helpMessage": {
"description": "Messaggio di aiuto",
"message": "Ottieni ulteriore aiuto"
},
"histDesc": {
"description": "Descrizione dell'azione",
"message": "La storia viene automaticamente cancellata quando le schede I2P sono chiuse. Se vuoi cancellare la storia mentre vai, controlla questa scatola."
},
"homepage": {
"description": "Trova maggiori informazioni",
"message": "Ulteriori informazioni sono disponibili qui"
},
"hostText": {
"description": "Host per il proxy HTTP o SOCKS5",
"message": "Host:"
},
"i2ppage": {
"description": "Ulteriori informazioni sono disponibili qui.",
"message": "Ulteriori informazioni sono disponibili qui."
},
"i2ptunnel": {
"description": "Descrizione per i2ptunnel",
"message": "Visualizza i messaggi di stato del proxy e configura i servizi e i tunnel."
},
"i2ptunnelPreface": {
"description": "Prefazione per la barra del browser",
"message": "Gestione dei servizi nascosti"
},
"i2ptunnelPrefacePrivate": {
"description": "Prefazione per la barra del browser",
"message": "Gestione Servizi Nascosti (Private)"
},
"infoMessage": {
"description": "Messaggio di aiuto",
"message": "Ora siete liberi di navigare in eepWeb! Il browser è ora configurato per navigare in modo anonimo sulla rete I2P. Mentre si naviga, il traffico sarà indirizzato attraverso altri nodi di rete per mascherare l'origine, sia dal server che dai nodi stessi."
},
"infoTitle": {
"description": "Titolo per il menu di aiuto",
"message": "I2P Aiuto"
},
"ircPreface": {
"description": "Prefazione per la barra del browser",
"message": "IRC di distribuzione"
},
"ircPrefacePrivate": {
"description": "Prefazione per la barra del browser",
"message": "Dispatch IRC (Private)"
},
"isBase32": {
"description": "Messaggio per il sito info panel base32",
"message": "I2P Base32-Formatted Indirizzo"
},
"isHostName": {
"description": "Messaggio per il sito info pannello hostname",
"message": "I2P Jump Hostname"
},
"label-router-activepeers": {
"description": "Pari attivi:",
"message": "Pari attivi:"
},
"label-router-bandwidth": {
"description": "Larghezza di banda",
"message": "Larghezza di banda"
},
"label-router-bw-inbound-15s": {
"description": "Inbound bw 15s:",
"message": "Inbound bw 15s:"
},
"label-router-bw-inbound-1s": {
"description": "Inbound bw 1s:",
"message": "Inbound bw 1s:"
},
"label-router-bw-outbound-15s": {
"description": "In uscita bw 15s:",
"message": "In uscita bw 15s:"
},
"label-router-bw-outbound-1s": {
"description": "In uscita bw 1s:",
"message": "In uscita bw 1s:"
},
"label-router-net-tunnels-participating": {
"description": "Tunnel di transito:",
"message": "Tunnel di transito:"
},
"label-router-netdb-fastpeers": {
"description": "Fast Peers:",
"message": "Fast Peers:"
},
"label-router-netdb-highcapacitypeers": {
"description": "Alta capacità Pari:",
"message": "Alta capacità Pari:"
},
"label-router-netdb-isreseeding": {
"description": "Stato di recupero:",
"message": "Stato di recupero:"
},
"label-router-netdb-knownpeers": {
"description": "Pari conosciuti:",
"message": "Pari conosciuti:"
},
"label-router-peers": {
"description": "Pari",
"message": "Pari"
},
"label-router-status": {
"description": "Status Router Status:",
"message": "Status Router Status:"
},
"label-router-uptime": {
"description": "Router Uptime(Ms):",
"message": "Router Uptime(Ms):"
},
"label-router-version": {
"description": "Versione Router:",
"message": "Versione Router:"
},
"links": {
"description": "Estensione e risorse I2P",
"message": "Estensione e risorse I2P"
},
"linksExplain": {
"description": "Se si desidera ottenere maggiori informazioni su I2P, è possibile visitare questi link.",
"message": "Se si desidera ottenere maggiori informazioni su I2P, è possibile visitare questi link."
},
"mailPreface": {
"description": "Prefazione per la barra del browser",
"message": "Web Mail"
},
"mailPrefacePrivate": {
"description": "Prefazione per la barra del browser",
"message": "Web Mail (Private)"
},
"muwirePreface": {
"description": "Prefazione per la barra del browser",
"message": "MuWire"
},
"muwirePrefacePrivate": {
"description": "Prefazione per la barra del browser",
"message": "MuWire (Privato)"
},
"newsMessage": {
"description": "Messaggio di aiuto",
"message": "Visita l'I2P Blog per conoscere le ultime informazioni su i2p."
},
"onboardingButtonFive": {
"description": "Migliorare il tuo Esperienza",
"message": "Migliorare il tuo Esperienza"
},
"onboardingButtonFour": {
"description": "Condivisione dei file",
"message": "Condivisione dei file"
},
"onboardingButtonOne": {
"description": "Navigazione di rete I2P e navigazione di rete non I2P",
"message": "Navigazione di rete I2P e navigazione di rete non I2P"
},
"onboardingButtonThree": {
"description": "E-mail nascosta",
"message": "E-mail nascosta"
},
"onboardingButtonTwo": {
"description": "Protezione dei rimbalzi di rete",
"message": "Protezione dei rimbalzi di rete"
},
"onboardingButtonZero": {
"description": "Proteggi la tua privacy",
"message": "Proteggi la tua privacy"
},
"onboardingContentFive": {
"description": "Questa estensione può essere combinata con altre estensioni che a volte migliorano la sua funzionalità. uBlock Origin, LocalCDN e jShelter sono utili per accelerare il caricamento della pagina, bloccare gli annunci e limitare la potenza di Javascript. Per gli utenti che vogliono bloccare tutti i Javascript, NoScript è raccomandato.",
"message": "Questa estensione può essere combinata con altre estensioni che a volte migliorano la sua funzionalità. uBlock Origin, LocalCDN e jShelter sono utili per accelerare il caricamento della pagina, bloccare gli annunci e limitare la potenza di Javascript. Per gli utenti che vogliono bloccare tutti i Javascript, NoScript è raccomandato."
},
"onboardingContentFour": {
"description": "I2P è in grado di utilizzare applicazioni peer-to-peer come BitTorrent, proteggendo la tua identità quando condividi i file. Il nostro client bittorrent anonimo è disponibile nel browser.",
"message": "I2P è in grado di utilizzare applicazioni peer-to-peer come BitTorrent, proteggendo la tua identità quando condividi i file. Il nostro client bittorrent anonimo è disponibile nel browser."
},
"onboardingContentOne": {
"description": "Questa estensione funziona automaticamente durante la navigazione nei siti I2P. Se si desidera utilizzare I2P come proxy per i siti non I2P, utilizzare il pulsante I2P In Private Browsing nella barra degli strumenti e fare clic su Nuova scheda Browser I2P per passare alla navigazione I2P in una nuova scheda. La tua esperienza durante la navigazione in internet può essere un po 'diverso. Le cose possono essere un po 'più lente, e a seconda del livello di sicurezza, alcuni elementi potrebbero non funzionare o caricare. Si può anche essere chiesto di dimostrare di essere un umano e non un robot.",
"message": "Questa estensione funziona automaticamente durante la navigazione nei siti I2P. Se si desidera utilizzare I2P come proxy per i siti non I2P, utilizzare il pulsante I2P In Private Browsing nella barra degli strumenti e fare clic su Nuova scheda Browser I2P per passare alla navigazione I2P in una nuova scheda. La tua esperienza durante la navigazione in internet può essere un po 'diverso. Le cose possono essere un po 'più lente, e a seconda del livello di sicurezza, alcuni elementi potrebbero non funzionare o caricare. Si può anche essere chiesto di dimostrare di essere un umano e non un robot."
},
"onboardingContentThree": {
"description": "C'è anche un servizio di posta elettronica anonimo disponibile all'interno di I2P, che è accessibile dal nostro browser tramite il menu direttamente a destra.",
"message": "C'è anche un servizio di posta elettronica anonimo disponibile all'interno di I2P, che è accessibile dal nostro browser tramite il menu direttamente a destra."
},
"onboardingContentTwo": {
"description": "I2P viene normalmente somministrato tramite un WebUI (The \"Router Console \"), che l'utente a volte vede nello stesso browser utilizzato per visitare siti remoti. E 'essenziale per impedire ai siti di essere in grado di accedere alle informazioni da questo WebUI e altri servizi localmente in esecuzione. I siti Clearnet rimangono nel contenitore firefox-default, ma non appena il contenitore firefox-default richiede un sito *.onion o *.i2p, sarà immediatamente containerizzato. La gestione dell'identità di Tor Browser controlla le schede Clearnet, e sono proxied utilizzando il plugin predefinito I2P outproxy o outproxy.",
"message": "I2P viene normalmente somministrato tramite un WebUI (The \" Router Console \"), che l'utente a volte vede nello stesso browser utilizzato per visitare siti remoti. E 'essenziale per impedire ai siti di essere in grado di accedere alle informazioni da questo WebUI e altri servizi localmente in esecuzione. I siti Clearnet rimangono nel contenitore firefox-default, ma non appena il contenitore firefox-default richiede un sito *.onion o *.i2p, sarà immediatamente containerizzato. La gestione dell'identità di Tor Browser controlla le schede Clearnet, e sono proxied utilizzando il plugin predefinito I2P outproxy o outproxy."
},
"onboardingContentZero": {
"description": "Quando si utilizza I2P In modalità navigazione privata, si è protetti contro il monitoraggio e la sorveglianza. Il browser I2P isola i cookie e cancella la cronologia del browser dopo la sessione. Queste modifiche assicurano che la vostra privacy e sicurezza siano protette come vostra navigazione.",
"message": "Quando si utilizza I2P In modalità navigazione privata, si è protetti contro il monitoraggio e la sorveglianza. Il browser I2P isola i cookie e cancella la cronologia del browser dopo la sessione. Queste modifiche assicurano che la vostra privacy e sicurezza siano protette come vostra navigazione."
},
"onboardingFive": {
"description": "Consigli sull'esperienza",
"message": "Consigli sull'esperienza"
},
"onboardingFour": {
"description": "Navigare sul Web",
"message": "Navigare sul Web"
},
"onboardingOne": {
"description": "Configurare il Esperienza",
"message": "Configurare il Esperienza"
},
"onboardingThree": {
"description": "E-mail nascosta",
"message": "E-mail nascosta"
},
"onboardingTitle": {
"description": "Informazioni su I2P In Private Browsing",
"message": "Informazioni su I2P In Private Browsing"
},
"onboardingTwo": {
"description": "Condividi i file",
"message": "Condividi i file"
},
"onboardingZero": {
"description": "Proteggi la tua privacy",
"message": "Proteggi la tua privacy"
},
"portText": {
"description": "Porta per il proxy HTTP o SOCKS5",
"message": "Porto:"
},
"protocolHandlerValue": {
"description": "Valore per il gestore del protocollo magnete",
"message": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%s\u0026action=Add\u0026foo=Add+torrent"
},
"proxy-check": {
"description": "Il proxy è pronto.",
"message": "Il proxy è pronto."
},
"proxyFailedStatus": {
"description": "Lo stato del fallimento del proxy.",
"message": "Il proxy non è pronto"
},
"proxyHelpText": {
"description": "Aiuto per configurare le opzioni per il pulsante Reset Tunnel",
"message": "Configura il proxy I2P qui."
},
"proxySuccessStatus": {
"description": "Lo stato del fallimento del proxy.",
"message": "Il proxy è pronto"
},
"readyness": {
"description": "Il proxy è pronto.",
"message": "Il proxy è pronto."
},
"releases": {
"description": "Descrizione per la nuova pagina di rilascio",
"message": "Controlla le nuove versioni qui"
},
"resetMessage": {
"description": "Messaggio per il pulsante Reset Tunnel",
"message": "Tunnel di reset"
},
"returnhome": {
"description": "/",
"message": "/"
},
"router-net-bw-inbound-15s": {
"description": "Sostituire con Router Bandwidth Outbound 15s",
"message": "Sostituire con Router Bandwidth Outbound 15s"
},
"router-net-bw-inbound-1s": {
"description": "Sostituire con Router Bandwidth Inbound 1s",
"message": "Sostituire con Router Bandwidth Inbound 1s"
},
"router-net-bw-outbound-15s": {
"description": "Sostituire con Router Bandwidth Outbound 15s",
"message": "Sostituire con Router Bandwidth Outbound 15s"
},
"router-net-bw-outbound-1s": {
"description": "Sostituire con Router Bandwidth Outbound 1s",
"message": "Sostituire con Router Bandwidth Outbound 1s"
},
"router-net-tunnels-participating": {
"description": "Sostituire con il conteggio Tunnel partecipante Router",
"message": "Sostituire con il conteggio Tunnel partecipante Router"
},
"router-netdb-activepeers": {
"description": "Sostituisci con Router Active Peers",
"message": "Sostituisci con Router Active Peers"
},
"router-netdb-fastpeers": {
"description": "Sostituire con Router Fast Peers",
"message": "Sostituire con Router Fast Peers"
},
"router-netdb-highcapacitypeers": {
"description": "Sostituire con i pari ad alta capacità",
"message": "Sostituire con i pari ad alta capacità"
},
"router-netdb-isreseeding": {
"description": "Sostituisci con Router netDB Reseeding Status",
"message": "Sostituisci con Router netDB Reseeding Status"
},
"router-netdb-knownpeers": {
"description": "Sostituisci con Router Known Peers",
"message": "Sostituisci con Router Known Peers"
},
"router-restart": {
"description": "Riavviare Gracely router",
"message": "Riavviare Gracely router"
},
"router-shutdown": {
"description": "Router di arresto Gracefully",
"message": "Router di arresto Gracefully"
},
"router-status": {
"description": "Sostituisci con lo stato Router",
"message": "Sostituisci con lo stato Router"
},
"router-uptime": {
"description": "Sostituire con Router Uptime",
"message": "Sostituire con Router Uptime"
},
"router-version": {
"description": "Sostituisci con la versione Router",
"message": "Sostituisci con la versione Router"
},
"routerConsole": {
"description": "Descrizione per la console router.",
"message": "Accedere alla console router I2P e alla sua gamma completa di applicazioni e configurazioni."
},
"routerPreface": {
"description": "Prefazione per la barra del browser",
"message": "Router Console"
},
"routerPrefacePrivate": {
"description": "Prefazione per la barra del browser",
"message": "Router Console (Private)"
},
"rpcHelpText": {
"description": "Configura le opzioni I2PControl qui. Configura le opzioni Bittorrent qui.",
"message": "Configura le opzioni I2PControl qui. Configura le opzioni Bittorrent qui."
},
"rpcHostText": {
"description": "Porto di controllo:",
"message": "Porto di controllo:"
},
"rpcPassText": {
"description": "Password di controllo: Torrent RPC Password:",
"message": "Password di controllo: Torrent RPC Password:"
},
"rpcPathText": {
"description": "Percorso di controllo:",
"message": "Percorso di controllo:"
},
"rpcPortText": {
"description": "Host di controllo:",
"message": "Host di controllo:"
},
"rtcDesc": {
"description": "Descrizione dell'azione WebRTC",
"message": "WebRTC è disabilitato per impostazione predefinita, ma è possibile accenderlo e forzarlo per onorare il proxy. Se sei un utente dell'estensione del browser Snowflake, questa opzione è disabilitata e WebRTC è attivata per impostazione predefinita."
},
"signingcert": {
"description": "Firmato da:",
"message": "Firmato da:"
},
"siteLabel": {
"description": "Etichetta per i2p sito info",
"message": "Indirizzo/Sito Informazioni:"
},
"sitecert": {
"description": "Informazioni sul certificato:",
"message": "Informazioni sul certificato:"
},
"snark": {
"description": "Descrizione per Bittorrent",
"message": "Accesso rapido a Snark, l'applicazione di condivisione di file di rete I2P Peer-to-peer."
},
"sourcehead": {
"description": "Ottieni il codice sorgente:",
"message": "Ottieni il codice sorgente:"
},
"sources": {
"description": "Descrizione per il collegamento codice sorgente",
"message": "Sfoglia il codice sorgente qui"
},
"susimail": {
"description": "Descrizione per e-mail",
"message": "Accesso rapido al client di posta elettronica di rete SusiMail I2P."
},
"text-section-header": {
"description": "Il browser Internet invisibile",
"message": "Il browser Internet invisibile"
},
"text-section-proxyerr-header": {
"description": "Un errore di proxy ha superato",
"message": "Un errore di proxy ha superato"
},
"text-section-torrents-header": {
"description": "Scarica Torrent",
"message": "Scarica Torrent"
},
"titlePreface": {
"description": "Prefazione per la barra del browser",
"message": "I2P Browser"
},
"titlePrefacePrivate": {
"description": "Prefazione per la barra del browser",
"message": "I2P Browser (Privato)"
},
"toopie": {
"description": "Per informazioni sullo stato del router I2P, vai qui:",
"message": "Per informazioni sullo stato del router I2P, vai qui:"
},
"toopieHtmlHeadline": {
"description": "Informazioni sul router I2P",
"message": "Informazioni sul router I2P"
},
"toopieName": {
"description": "Nome della barra laterale.",
"message": "anch'io. html"
},
"toopieTLS": {
"description": "Nome del pannello di sicurezza.",
"message": "Proprietà del sito"
},
"topbar": {
"description": "Sfoglia Download",
"message": "Sfoglia Download"
},
"torPreface": {
"description": "Prefazione per la barra del browser",
"message": "Tor Manager"
},
"torPrefacePrivate": {
"description": "Prefazione per la barra del browser",
"message": "Tor Manager (Private)"
},
"torrent-action": {
"description": "Scarica",
"message": "Scarica"
},
"torrentControls": {
"description": "Controllo Torrent",
"message": "Controllo Torrent"
},
"torrentDownloads": {
"description": "Scarica Torrent",
"message": "Scarica Torrent"
},
"torrentPreface": {
"description": "Prefazione per la barra del browser",
"message": "Bittorrent"
},
"torrentPrefacePrivate": {
"description": "Prefazione per la barra del browser",
"message": "Bittorrent (Private)"
},
"torrentui-opener": {
"description": "Aprire WebUI",
"message": "Aprire WebUI"
},
"visit-irc": {
"description": "Visita IRC",
"message": "Visita IRC"
},
"webPreface": {
"description": "Prefazione per la barra del browser",
"message": "Browser Web"
},
"webPrefacePrivate": {
"description": "Prefazione per la barra del browser",
"message": "Web Browser (Privato)"
},
"webpage": {
"description": "Ulteriori informazioni sono disponibili qui.",
"message": "Ulteriori informazioni sono disponibili qui."
},
"window-visit-console": {
"description": "Console Router I2P",
"message": "Console Router I2P"
},
"window-visit-help": {
"description": "Pagina di aiuto di estensione",
"message": "Pagina di aiuto di estensione"
},
"window-visit-homepage": {
"description": "Il browser Internet invisibile",
"message": "Il browser Internet invisibile"
},
"window-visit-i2p": {
"description": "I2P Pagina principale del progetto:",
"message": "I2P Pagina principale del progetto:"
},
"window-visit-i2ptunnel": {
"description": "Gestione dei servizi nascosti",
"message": "Gestione dei servizi nascosti"
},
"window-visit-index": {
"description": "Webextension Homepage:",
"message": "Webextension Homepage:"
},
"window-visit-releases": {
"description": "Comunicati:",
"message": "Comunicati:"
},
"window-visit-router": {
"description": "Router Console",
"message": "Router Console"
},
"window-visit-settings": {
"description": "Aprire le impostazioni",
"message": "Aprire le impostazioni"
},
"window-visit-snark": {
"description": "BitTorrent",
"message": "BitTorrent"
},
"window-visit-sources": {
"description": "Codice sorgente:",
"message": "Codice sorgente:"
},
"window-visit-susimail": {
"description": "E-Mail",
"message": "E-Mail"
},
"window-visit-toopie": {
"description": "Toopie",
"message": "Toopie"
},
"window-visit-torrent": {
"description": "Per assistenza, visita la pagina di aiuto torrent",
"message": "Per assistenza, visita la pagina di aiuto torrent"
},
"windowVisitConsole": {
"description": "Etichetta Router Console.",
"message": "Router Console:"
},
"windowVisitHelppage": {
"description": "Pagina di aiuto per l'etichetta di estensione.",
"message": "Informazioni sul WebExtension:"
},
"windowVisitHomepage": {
"description": "Pagina iniziale per l'etichetta di estensione.",
"message": "Pagina iniziale:"
},
"windowVisitI2ptunnel": {
"description": "Titolo per i2ptunnel",
"message": "Hidden Services Manager:"
},
"windowVisitReleases": {
"description": "Visita la pagina di rilascio",
"message": "Rilasci di estensione:"
},
"windowVisitSnark": {
"description": "Titolo per Bittorrent",
"message": "Bittorrent:"
},
"windowVisitSources": {
"description": "Titolo per codice sorgente link",
"message": "Codice sorgente di estensione:"
},
"windowVisitSusimail": {
"description": "Titolo per e-mail",
"message": "E-Mail:"
},
"windowVisitWebPage": {
"description": "Visita l'estensione homepage su Github",
"message": "Pagina iniziale di estensione:"
}
}

738
_locales/ja/messages.json Normal file
View File

@@ -0,0 +1,738 @@
{
"CertLabel": {
"description": "証明書情報:",
"message": "証明書情報:"
},
"SignedLabel": {
"description": "署名:",
"message": "署名:"
},
"TorrentTypeLabel": {
"description": "トレントリンク:",
"message": "トレントリンク:"
},
"TypeLabel": {
"description": "トレントリンク:",
"message": "トレントリンク:"
},
"aboutconsole": {
"description": "ルーターコンソールのホームページにアクセスするには、以下を参照してください。",
"message": "ルーターコンソールのホームページにアクセスするには、以下を参照してください。"
},
"abouthome": {
"description": "延長ボタンページの説明。.",
"message": "この拡張機能の詳細については、このページをご覧ください。."
},
"addresstype": {
"description": "アドレス タイプ:",
"message": "アドレス タイプ:"
},
"applicationExplain": {
"description": "アプリケーションセクションの説明。.",
"message": "I2P ルータコンソールとアプリケーションは、独自のタブで開き、この拡張機能をブラウジングするのと同じセキュリティの利点を提供します。 これにより、各アプリケーションを分離し、指紋やスクリプトから他のタブ(ソーシャルメディアなど)を防ぐことで、より保護が向上します。 すべてのタブでは、I2P ワークフローを追跡するために色を特定する機能を使用します。."
},
"applicationHeader": {
"description": "アプリケーションセクションのヘッダー。.",
"message": "アプリケーション"
},
"beta": {
"description": "実験製品です。.",
"message": "実験製品です。."
},
"blogPreface": {
"description": "ブラウザのタイトルバーのPreface",
"message": "ニュース"
},
"blogPrefacePrivate": {
"description": "ブラウザのタイトルバーのPreface",
"message": "ブログ(プライベート)"
},
"bookmarksButton": {
"description": "ブックマークを再作成する",
"message": "ブックマークを再作成する"
},
"botePreface": {
"description": "ブラウザのタイトルバーのPreface",
"message": "I2P-Bote メール"
},
"botePrefacePrivate": {
"description": "ブラウザのタイトルバーのPreface",
"message": "I2P-Bote メール(プライベート)"
},
"browser-action": {
"description": "サイトマップ",
"message": "サイトマップ"
},
"btRpcHostText": {
"description": "トレント RPC ホスト:",
"message": "トレント RPC ホスト:"
},
"btRpcPathText": {
"description": "トレント RPC パス:",
"message": "トレント RPC パス:"
},
"btRpcPortText": {
"description": "トレント RPC 港:",
"message": "トレント RPC 港:"
},
"certAbsent": {
"description": "不在の場合の証明書情報のためのコンテンツ",
"message": "このサイトはHTTPSを利用していません。 I2Pによって暗号化されても検証されています。."
},
"certPresent": {
"description": "証明書情報の内容 提示すれば",
"message": "このサイトは HTTPS を使用しています。 I2P上のHTTPSは実験的であり、自己署名された証明書または代替ルートの作者を必要とします。."
},
"clearData": {
"description": "データのメニュー項目を消去します。.",
"message": "データの閲覧をクリア:"
},
"clearDesc": {
"description": "閲覧データアクションの説明をクリアします。.",
"message": "これにより、I2Pの閲覧データを消去できます。."
},
"controlExplain": {
"description": "コントロールパネルを導入.",
"message": "これらのコントロールは、I2P ブラウジングエクスペリエンスを調整するために使用されます。"
},
"controlHeader": {
"description": "制御のパネルのための見出し。.",
"message": "コントロール"
},
"controlHelpText": {
"description": "リセットトンネルボタンのオプションを設定するのに役立ちます",
"message": "ルーターのコンソールをここに構成します。."
},
"controlHostText": {
"description": "ルーターコンソールのホスト",
"message": "制御ホスト:"
},
"controlHostValue": {
"description": "ルーターコンソールのホスト",
"message": "127.0.0.1の"
},
"controlPortText": {
"description": "ルーターコンソール用のポート",
"message": "制御港:"
},
"controlPortValue": {
"description": "ルーターコンソール用のポート",
"message": "ディストリクト7657"
},
"description": {
"description": "このブラウザでI2Pを使うことができます。.",
"message": "このブラウザでI2Pを使うことができます。."
},
"description2": {
"description": "このページを見ていると、プロキシエラーが発生したためです。 問題の診断に役立つ情報をいくつか提供しました。.",
"message": "このページを見ていると、プロキシエラーが発生したためです。 問題の診断に役立つ情報をいくつか提供しました。."
},
"disableHistory": {
"description": "履歴チェックボックスラベル。.",
"message": "I2Pタブで履歴を無効にできますか?"
},
"enableWebRTC": {
"description": "WebRTC チェックボックスラベル。.",
"message": "プロキシでWebRTCを有効にする?"
},
"extensionDescription": {
"description": "拡張子の説明。.",
"message": "I2Pネットワークの閲覧が容易になりました。."
},
"extensionName": {
"description": "拡張子の名前。.",
"message": "I2Pについて プライベートブラウジング"
},
"extensionNameVariant": {
"description": "拡張子の名前。.",
"message": "I2P で プライベートブラウジング - Rhizome Variant"
},
"extensionPreface": {
"description": "ブラウザのタイトルバーのPreface",
"message": "I2P管理"
},
"extensionVersion": {
"description": "拡張子のバージョン。.",
"message": "1.28の"
},
"fliplinks": {
"description": "エクステンションとI2Pリソース",
"message": "エクステンションとI2Pリソース"
},
"forumMessage": {
"description": "サポートメッセージ",
"message": "I2Pフォーラムにアクセスして、より多くのことを学ぶか、援助を求める"
},
"headline": {
"description": "目に見えないインターネットブラウザ",
"message": "目に見えないインターネットブラウザ"
},
"help": {
"description": "延長ボタンページの説明。.",
"message": "この拡張機能の詳細については、このページをご覧ください。."
},
"helpMessage": {
"description": "サポートメッセージ",
"message": "追加ヘルプを入手"
},
"histDesc": {
"description": "履歴アクションの説明",
"message": "I2Pタブが閉じられたときに履歴は自動的に消去されます。 あなたが行くように歴史をクリアしたい場合は、このボックスをチェックしてください。."
},
"homepage": {
"description": "詳細情報",
"message": "詳しくはこちらをご覧ください。"
},
"hostText": {
"description": "HTTP または SOCKS 5 プロキシのホスト",
"message": "ホスト:"
},
"i2ppage": {
"description": "詳しくはこちらをご覧ください。.",
"message": "詳しくはこちらをご覧ください。."
},
"i2ptunnel": {
"description": "I2ptunnelの説明",
"message": "プロキシステータスメッセージを表示し、サービスやトンネルの設定を行います。."
},
"i2ptunnelPreface": {
"description": "ブラウザのタイトルバーのPreface",
"message": "隠されたサービスマネージャ"
},
"i2ptunnelPrefacePrivate": {
"description": "ブラウザのタイトルバーのPreface",
"message": "隠しサービスマネージャ(プライベート)"
},
"infoMessage": {
"description": "サポートメッセージ",
"message": "EepWeb を閲覧できるようになりました。 お使いのブラウザは、I2Pネットワーク上で匿名で閲覧するように設定されています。 ご覧のとおり、トラフィックは他のネットワークノードを介してルーティングされ、サーバーとノード自身の両方の起源を偽装します。."
},
"infoTitle": {
"description": "ヘルプメニューのタイトル",
"message": "I2Pについて お問い合わせ"
},
"ircPreface": {
"description": "ブラウザのタイトルバーのPreface",
"message": "ディスパッチIRC"
},
"ircPrefacePrivate": {
"description": "ブラウザのタイトルバーのPreface",
"message": "ディスパッチIRC(プライベート)"
},
"isBase32": {
"description": "サイト情報パネルベース32のメッセージ",
"message": "I2P Base32-Formatted アドレス"
},
"isHostName": {
"description": "サイト情報パネルのホスト名のためのメッセージ",
"message": "I2Pについて ジャンプのホスト名"
},
"label-router-activepeers": {
"description": "活動的なピア:",
"message": "活動的なピア:"
},
"label-router-bandwidth": {
"description": "バンド幅",
"message": "バンド幅"
},
"label-router-bw-inbound-15s": {
"description": "インバウンドbw 15s:",
"message": "インバウンドbw 15s:"
},
"label-router-bw-inbound-1s": {
"description": "インバウンドbw 1s:",
"message": "インバウンドbw 1s:"
},
"label-router-bw-outbound-15s": {
"description": "アウトバウンドbw 15s:",
"message": "アウトバウンドbw 15s:"
},
"label-router-bw-outbound-1s": {
"description": "アウトバウンドbw 1s:",
"message": "アウトバウンドbw 1s:"
},
"label-router-net-tunnels-participating": {
"description": "トランジットトンネル:",
"message": "トランジットトンネル:"
},
"label-router-netdb-fastpeers": {
"description": "速い皮:",
"message": "速い皮:"
},
"label-router-netdb-highcapacitypeers": {
"description": "高容量 ピーラー:",
"message": "高容量 ピーラー:"
},
"label-router-netdb-isreseeding": {
"description": "残された状態:",
"message": "残された状態:"
},
"label-router-netdb-knownpeers": {
"description": "既知のピアーズ:",
"message": "既知のピアーズ:"
},
"label-router-peers": {
"description": "ピーラー",
"message": "ピーラー"
},
"label-router-status": {
"description": "状態のルーターの状態:",
"message": "状態のルーターの状態:"
},
"label-router-uptime": {
"description": "ルーターの稼働時間(Ms):",
"message": "ルーターの稼働時間(Ms):"
},
"label-router-version": {
"description": "ルーター版:",
"message": "ルーター版:"
},
"links": {
"description": "エクステンションとI2Pリソース",
"message": "エクステンションとI2Pリソース"
},
"linksExplain": {
"description": "I2Pについて詳しく知りたい方は、こちらのリンクをご覧ください。.",
"message": "I2Pについて詳しく知りたい方は、こちらのリンクをご覧ください。."
},
"mailPreface": {
"description": "ブラウザのタイトルバーのPreface",
"message": "Webメール"
},
"mailPrefacePrivate": {
"description": "ブラウザのタイトルバーのPreface",
"message": "Webメール(プライベート)"
},
"muwirePreface": {
"description": "ブラウザのタイトルバーのPreface",
"message": "メニュー"
},
"muwirePrefacePrivate": {
"description": "ブラウザのタイトルバーのPreface",
"message": "MuWire(プライベート)"
},
"newsMessage": {
"description": "サポートメッセージ",
"message": "I2Pにアクセス i2pの最新情報を知るブログです。."
},
"onboardingButtonFive": {
"description": "あなたの改善 体験プラン",
"message": "あなたの改善 体験プラン"
},
"onboardingButtonFour": {
"description": "ファイル共有",
"message": "ファイル共有"
},
"onboardingButtonOne": {
"description": "I2Pネットワークブラウジングと非I2Pネットワークブラウジング",
"message": "I2Pネットワークブラウジングと非I2Pネットワークブラウジング"
},
"onboardingButtonThree": {
"description": "隠しメール",
"message": "隠しメール"
},
"onboardingButtonTwo": {
"description": "ネットワーク境界の保護",
"message": "ネットワーク境界の保護"
},
"onboardingButtonZero": {
"description": "プライバシーを守る",
"message": "プライバシーを守る"
},
"onboardingContentFive": {
"description": "このエクステンションは他のエクステンションと組み合わせて機能を改善することができます。 uBlock の起源、ローカル CDN および jShelter は、ページの読み込みを高速化し、広告をブロックし、Javascript の電力を制限するのに便利です。 すべてのJavascriptをブロックしたい方は、NoScriptをお勧めします。.",
"message": "このエクステンションは他のエクステンションと組み合わせて機能を改善することができます。 uBlock の起源、ローカル CDN および jShelter は、ページの読み込みを高速化し、広告をブロックし、Javascript の電力を制限するのに便利です。 すべてのJavascriptをブロックしたい方は、NoScriptをお勧めします。."
},
"onboardingContentFour": {
"description": "I2Pは、BitTorrentのようなピアツーピアアプリケーションを使用して、ファイルを共有するときにあなたのアイデンティティを保護することができます。 当社の匿名bittorrentクライアントは、ブラウザでご利用いただけます。.",
"message": "I2Pは、BitTorrentのようなピアツーピアアプリケーションを使用して、ファイルを共有するときにあなたのアイデンティティを保護することができます。 当社の匿名bittorrentクライアントは、ブラウザでご利用いただけます。."
},
"onboardingContentOne": {
"description": "I2Pサイトを閲覧する際に自動的に機能します。 I2Pをプロキシとして非I2Pサイトに使用したい場合は、ツールバーのI2P In Private Browsingボタンを使用して、新しいI2Pブラウザタブをクリックして、新しいタブでI2Pブラウジングを切り替えます。 インターネットを閲覧する際の体験は若干異なります。 物事は少し遅くなり、セキュリティレベルに応じて、一部の要素は動作しません。 また、ロボットではなく、人間であることを証明するように求められます。.",
"message": "I2Pサイトを閲覧する際に自動的に機能します。 I2Pをプロキシとして非I2Pサイトに使用したい場合は、ツールバーのI2P In Private Browsingボタンを使用して、新しいI2Pブラウザタブをクリックして、新しいタブでI2Pブラウジングを切り替えます。 インターネットを閲覧する際の体験は若干異なります。 物事は少し遅くなり、セキュリティレベルに応じて、一部の要素は動作しません。 また、ロボットではなく、人間であることを証明するように求められます。."
},
"onboardingContentThree": {
"description": "また、I2Pの内側に匿名のメールサービスもあります。ブラウザから直接メニューからアクセス可能です。.",
"message": "また、I2Pの内側に匿名のメールサービスもあります。ブラウザから直接メニューからアクセス可能です。."
},
"onboardingContentTwo": {
"description": "I2Pは通常、WebUI(「Router Console」)を介して管理されます。これにより、ユーザーはリモートサイトにアクセスするために使用している同じブラウザで閲覧できます。 このWebUIや他のローカルランニングサービスから情報にアクセスできるサイトを防ぐことは不可欠です。 Clearnet サイトは firefox デフォルトコンテナに残っていますが、 firefox デフォルトコンテナが *.onion または *.i2p サイトをリクエストするとすぐにコンテナ化されます。 Tor Browser の ID 管理ツールは clearnet タブを制御し、デフォルト I2P outproxy または outproxy プラグインを使用してプロキシされます。.",
"message": "I2Pは、通常、WebUI(「ルーターコンソール」)を介して管理されます。これにより、ユーザーはリモートサイトにアクセスするために使用している同じブラウザで閲覧できます。 このWebUIや他のローカルランニングサービスから情報にアクセスできるサイトを防ぐことは不可欠です。 Clearnet サイトは firefox デフォルトコンテナに残っていますが、 firefox デフォルトコンテナが *.onion または *.i2p サイトをリクエストするとすぐにコンテナ化されます。 Tor Browser の ID 管理ツールは clearnet タブを制御し、デフォルト I2P outproxy または outproxy プラグインを使用してプロキシされます。."
},
"onboardingContentZero": {
"description": "I2Pをプライベートブラウジングモードで使用する場合、追跡と監視から保護されています。 I2Pブラウザはクッキーを分離し、セッション後にブラウザの履歴を削除します。 これらの変更により、プライバシーとセキュリティが保護されます。.",
"message": "I2Pをプライベートブラウジングモードで使用する場合、追跡と監視から保護されています。 I2Pブラウザはクッキーを分離し、セッション後にブラウザの履歴を削除します。 これらの変更により、プライバシーとセキュリティが保護されます。."
},
"onboardingFive": {
"description": "体験のヒント",
"message": "体験のヒント"
},
"onboardingFour": {
"description": "ウェブ閲覧",
"message": "ウェブ閲覧"
},
"onboardingOne": {
"description": "設定する 体験プラン",
"message": "設定する 体験プラン"
},
"onboardingThree": {
"description": "隠しメール",
"message": "隠しメール"
},
"onboardingTitle": {
"description": "I2Pについて プライベートブラウジング",
"message": "I2Pについて プライベートブラウジング"
},
"onboardingTwo": {
"description": "ファイル共有",
"message": "ファイル共有"
},
"onboardingZero": {
"description": "プライバシーを守る",
"message": "プライバシーを守る"
},
"portText": {
"description": "HTTP または SOCKS 5 プロキシのポート",
"message": "港:"
},
"protocolHandlerValue": {
"description": "マグネットプロトコルハンドラの値",
"message": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%s\u0026action=Add\u0026foo=Add+torrent"
},
"proxy-check": {
"description": "プロキシは準備が整います。.",
"message": "プロキシは準備が整います。."
},
"proxyFailedStatus": {
"description": "プロキシが失敗したステータス。.",
"message": "プロキシは準備が整っていない"
},
"proxyHelpText": {
"description": "リセットトンネルボタンのオプションを設定するのに役立ちます",
"message": "ここでは、I2P プロキシを設定します。."
},
"proxySuccessStatus": {
"description": "プロキシが失敗したステータス。.",
"message": "プロキシは準備ができています"
},
"readyness": {
"description": "プロキシは準備が整います。.",
"message": "プロキシは準備が整います。."
},
"releases": {
"description": "新しいリリースページの説明",
"message": "新規リリースはこちら"
},
"resetMessage": {
"description": "リセットトンネルボタンのメッセージ",
"message": "リセットトンネル"
},
"returnhome": {
"description": "・",
"message": "・"
},
"router-net-bw-inbound-15s": {
"description": "ルーターの帯域幅Outbound 15sと取り替えて下さい",
"message": "ルーターの帯域幅Outbound 15sと取り替えて下さい"
},
"router-net-bw-inbound-1s": {
"description": "ルーターの帯域幅のインバウンド1sと取り替えて下さい",
"message": "ルーターの帯域幅のインバウンド1sと取り替えて下さい"
},
"router-net-bw-outbound-15s": {
"description": "ルーターの帯域幅Outbound 15sと取り替えて下さい",
"message": "ルーターの帯域幅Outbound 15sと取り替えて下さい"
},
"router-net-bw-outbound-1s": {
"description": "ルーターの帯域幅Outbound 1sと取り替えて下さい",
"message": "ルーターの帯域幅Outbound 1sと取り替えて下さい"
},
"router-net-tunnels-participating": {
"description": "ルーターのParticipatingのトンネルの計算と取り替えて下さい",
"message": "ルーターのParticipatingのトンネルの計算と取り替えて下さい"
},
"router-netdb-activepeers": {
"description": "ルーターのアクティブ ピアーズと取り替えて下さい",
"message": "ルーターのアクティブ ピアーズと取り替えて下さい"
},
"router-netdb-fastpeers": {
"description": "ルーターの速いピアーズと取り替えて下さい",
"message": "ルーターの速いピアーズと取り替えて下さい"
},
"router-netdb-highcapacitypeers": {
"description": "高容量のピアーズと取り替えて下さい",
"message": "高容量のピアーズと取り替えて下さい"
},
"router-netdb-isreseeding": {
"description": "ルーターのnetDBの参照の状態と取り替えて下さい",
"message": "ルーターのnetDBの参照の状態と取り替えて下さい"
},
"router-netdb-knownpeers": {
"description": "ルーターの既知のピアーズと取り替えて下さい",
"message": "ルーターの既知のピアーズと取り替えて下さい"
},
"router-restart": {
"description": "うまくルーターを再起動",
"message": "うまくルーターを再起動"
},
"router-shutdown": {
"description": "グレースフルシャットダウンルータ",
"message": "グレースフルシャットダウンルータ"
},
"router-status": {
"description": "ルーターの状態に置換",
"message": "ルーターの状態に置換"
},
"router-uptime": {
"description": "ルーターの稼働時間と取り替えて下さい",
"message": "ルーターの稼働時間と取り替えて下さい"
},
"router-version": {
"description": "ルーター版と取り替えて下さい",
"message": "ルーター版と取り替えて下さい"
},
"routerConsole": {
"description": "ルーターコンソールの説明。.",
"message": "I2P ルータコンソールとアプリケーションと構成のフルレンジにアクセスします。."
},
"routerPreface": {
"description": "ブラウザのタイトルバーのPreface",
"message": "ルーターコンソール"
},
"routerPrefacePrivate": {
"description": "ブラウザのタイトルバーのPreface",
"message": "ルーターコンソール(プライベート)"
},
"rpcHelpText": {
"description": "ここでは、I2PControl オプションを設定します。 Bittorrentオプションをここに設定します。.",
"message": "ここでは、I2PControl オプションを設定します。 Bittorrentオプションをここに設定します。."
},
"rpcHostText": {
"description": "制御港:",
"message": "制御港:"
},
"rpcPassText": {
"description": "制御パスワード:トレントRPC パスワード:",
"message": "制御パスワード:トレントRPC パスワード:"
},
"rpcPathText": {
"description": "制御パス:",
"message": "制御パス:"
},
"rpcPortText": {
"description": "制御ホスト:",
"message": "制御ホスト:"
},
"rtcDesc": {
"description": "WebRTC アクションの説明",
"message": "WebRTC はデフォルトで無効になっていますが、それをオンにしてプロキシを称えるように強制することができます。 Snowflakeブラウザの拡張機能をご利用の場合、このオプションは無効になっており、デフォルトではWebRTCがオンになっています。."
},
"signingcert": {
"description": "署名:",
"message": "署名:"
},
"siteLabel": {
"description": "I2pサイトのラベル",
"message": "アドレス/サイト情報:"
},
"sitecert": {
"description": "証明書情報:",
"message": "証明書情報:"
},
"snark": {
"description": "Bittorrentの記述",
"message": "Snark、Peer-to-peer I2Pネットワーク固有のファイル共有アプリケーションへの迅速なアクセス。."
},
"sourcehead": {
"description": "ソースコードを取得する:",
"message": "ソースコードを取得する:"
},
"sources": {
"description": "ソースコードリンクの記述",
"message": "ソースコードを参照"
},
"susimail": {
"description": "電子メールの記述",
"message": "SusiMail I2Pネットワークメールクライアントへの迅速なアクセス."
},
"text-section-header": {
"description": "目に見えないインターネットブラウザ",
"message": "目に見えないインターネットブラウザ"
},
"text-section-proxyerr-header": {
"description": "プロキシエラーが発生した",
"message": "プロキシエラーが発生した"
},
"text-section-torrents-header": {
"description": "トレントダウンロード",
"message": "トレントダウンロード"
},
"titlePreface": {
"description": "ブラウザのタイトルバーのPreface",
"message": "I2Pブラウザ"
},
"titlePrefacePrivate": {
"description": "ブラウザのタイトルバーのPreface",
"message": "I2Pブラウザ(プライベート)"
},
"toopie": {
"description": "I2P ルーターのステータスに関する情報は、以下を参照してください。",
"message": "I2P ルーターのステータスに関する情報は、以下を参照してください。"
},
"toopieHtmlHeadline": {
"description": "I2P ルーター情報",
"message": "I2P ルーター情報"
},
"toopieName": {
"description": "サイドバーの名前。.",
"message": "お問い合わせ ツイート"
},
"toopieTLS": {
"description": "セキュリティパネルの名前。.",
"message": "サイトのプロパティ"
},
"topbar": {
"description": "ダウンロード",
"message": "ダウンロード"
},
"torPreface": {
"description": "ブラウザのタイトルバーのPreface",
"message": "トー・マネージャー"
},
"torPrefacePrivate": {
"description": "ブラウザのタイトルバーのPreface",
"message": "トー・マネージャー(プライベート)"
},
"torrent-action": {
"description": "ダウンロード",
"message": "ダウンロード"
},
"torrentControls": {
"description": "トレントコントロール",
"message": "トレントコントロール"
},
"torrentDownloads": {
"description": "トレントダウンロード",
"message": "トレントダウンロード"
},
"torrentPreface": {
"description": "ブラウザのタイトルバーのPreface",
"message": "ビットトレント"
},
"torrentPrefacePrivate": {
"description": "ブラウザのタイトルバーのPreface",
"message": "Bittorrent(プライベート)"
},
"torrentui-opener": {
"description": "WebUIを開く",
"message": "WebUIを開く"
},
"visit-irc": {
"description": "IRCにアクセス",
"message": "IRCにアクセス"
},
"webPreface": {
"description": "ブラウザのタイトルバーのPreface",
"message": "ウェブブラウザ"
},
"webPrefacePrivate": {
"description": "ブラウザのタイトルバーのPreface",
"message": "ウェブブラウザ(プライベート)"
},
"webpage": {
"description": "詳しくはこちらをご覧ください。.",
"message": "詳しくはこちらをご覧ください。."
},
"window-visit-console": {
"description": "I2P ルーターコンソール",
"message": "I2P ルーターコンソール"
},
"window-visit-help": {
"description": "拡張ヘルプページ",
"message": "拡張ヘルプページ"
},
"window-visit-homepage": {
"description": "目に見えないインターネットブラウザ",
"message": "目に見えないインターネットブラウザ"
},
"window-visit-i2p": {
"description": "I2Pについて プロジェクトのホームページ:",
"message": "I2Pについて プロジェクトのホームページ:"
},
"window-visit-i2ptunnel": {
"description": "隠されたサービスマネージャ",
"message": "隠されたサービスマネージャ"
},
"window-visit-index": {
"description": "Webex のホームページ:",
"message": "Webex のホームページ:"
},
"window-visit-releases": {
"description": "リリース:",
"message": "リリース:"
},
"window-visit-router": {
"description": "ルーターコンソール",
"message": "ルーターコンソール"
},
"window-visit-settings": {
"description": "設定を開く",
"message": "設定を開く"
},
"window-visit-snark": {
"description": "ビットトレント",
"message": "ビットトレント"
},
"window-visit-sources": {
"description": "ソースコード:",
"message": "ソースコード:"
},
"window-visit-susimail": {
"description": "Eメール",
"message": "Eメール"
},
"window-visit-toopie": {
"description": "トッピー",
"message": "トッピー"
},
"window-visit-torrent": {
"description": "援助のために、トレントヘルプページをご覧ください",
"message": "援助のために、トレントヘルプページをご覧ください"
},
"windowVisitConsole": {
"description": "ルーターコンソールラベル。.",
"message": "ルーターコンソール:"
},
"windowVisitHelppage": {
"description": "拡張ラベルのヘルプページ。.",
"message": "Web拡張情報:"
},
"windowVisitHomepage": {
"description": "エクステンションラベルのトップページです。.",
"message": "ホームページ:"
},
"windowVisitI2ptunnel": {
"description": "I2ptunnelのタイトル",
"message": "隠されたサービスマネージャ:"
},
"windowVisitReleases": {
"description": "リリースページへ",
"message": "延長リリース:"
},
"windowVisitSnark": {
"description": "Bittorrentのタイトル",
"message": "Bittorrent:"
},
"windowVisitSources": {
"description": "ソースコードリンクのタイトル",
"message": "延長ソースコード:"
},
"windowVisitSusimail": {
"description": "メールのタイトル",
"message": "メール:"
},
"windowVisitWebPage": {
"description": "Githubの拡張ホームページにアクセス",
"message": "延長ホームページ:"
}
}

738
_locales/pt/messages.json Normal file
View File

@@ -0,0 +1,738 @@
{
"CertLabel": {
"description": "Informação do Certificado:",
"message": "Informação do Certificado:"
},
"SignedLabel": {
"description": "Assinado por:",
"message": "Assinado por:"
},
"TorrentTypeLabel": {
"description": "Ligações Torrent:",
"message": "Ligações Torrent:"
},
"TypeLabel": {
"description": "Ligações Torrent:",
"message": "Ligações Torrent:"
},
"aboutconsole": {
"description": "Para acessar a página inicial do console do roteador, vá aqui:",
"message": "Para acessar a página inicial do console do roteador, vá aqui:"
},
"abouthome": {
"description": "Descrição para a página do botão de extensão.",
"message": "Para mais informações sobre esta extensão, visite esta página."
},
"addresstype": {
"description": "Tipo de endereço:",
"message": "Tipo de endereço:"
},
"applicationExplain": {
"description": "Descrição para seção de aplicação.",
"message": "O console de roteador I2P e aplicações abrem em sua própria aba, fornecendo-lhes os mesmos benefícios de segurança que navegar com esta extensão. Isso adiciona mais proteção isolando cada aplicativo e impedindo outras abas (ou seja, mídia social, etc) de impressões digitais ou scripts. Todas as abas usam cores de identificação para acompanhar seu fluxo de trabalho I2P."
},
"applicationHeader": {
"description": "Cabeçalho para seção de aplicações.",
"message": "Aplicações"
},
"beta": {
"description": "Este é um produto experimental.",
"message": "Este é um produto experimental."
},
"blogPreface": {
"description": "Prefácio para a barra de título do navegador",
"message": "Blog"
},
"blogPrefacePrivate": {
"description": "Prefácio para a barra de título do navegador",
"message": "Blog (Privado)"
},
"bookmarksButton": {
"description": "Marcas de referência",
"message": "Marcas de referência"
},
"botePreface": {
"description": "Prefácio para a barra de título do navegador",
"message": "I2P-Bote Mail"
},
"botePrefacePrivate": {
"description": "Prefácio para a barra de título do navegador",
"message": "I2P-Bote Mail (Privado)"
},
"browser-action": {
"description": "Navegar",
"message": "Navegar"
},
"btRpcHostText": {
"description": "Torrent RPC Anfitrião:",
"message": "Torrent RPC Anfitrião:"
},
"btRpcPathText": {
"description": "Torrent RPC Caminho:",
"message": "Torrent RPC Caminho:"
},
"btRpcPortText": {
"description": "Torrent RPC Porto:",
"message": "Torrent RPC Porto:"
},
"certAbsent": {
"description": "Conteúdo para informações do certificado se ausente",
"message": "Este site não está usando HTTPS. Ainda é verificado criptograficamente pelo I2P."
},
"certPresent": {
"description": "Conteúdo para informações do certificado se presente",
"message": "Este site está usando HTTPS. HTTPS sobre I2P é experimental e requer certificados auto-assinados ou autorites de raiz alternativos."
},
"clearData": {
"description": "Item de menu de dados de navegação clara.",
"message": "Limpar dados de navegação:"
},
"clearDesc": {
"description": "Descrição de ação de dados de navegação clara.",
"message": "Use isso para apagar seus dados de navegação I2P."
},
"controlExplain": {
"description": "Introduza o painel de controlo.",
"message": "Estes controles são usados para adaptar sua experiência de navegação I2P"
},
"controlHeader": {
"description": "Headline para painel de controle.",
"message": "Controlo"
},
"controlHelpText": {
"description": "Ajuda para configurar as opções para o botão Reset Tunnel",
"message": "Configure o console do roteador aqui."
},
"controlHostText": {
"description": "Anfitrião para o console do roteador",
"message": "Anfitrião de controle:"
},
"controlHostValue": {
"description": "Anfitrião para o console do roteador",
"message": "127.0.0.1"
},
"controlPortText": {
"description": "Porta para o console do roteador",
"message": "Porta de controle:"
},
"controlPortValue": {
"description": "Porta para o console do roteador",
"message": "7657"
},
"description": {
"description": "Agora você pode usar o I2P neste navegador.",
"message": "Agora você pode usar o I2P neste navegador."
},
"description2": {
"description": "Se você está vendo esta página, é porque um erro proxy ocorreu. Algumas informações foram fornecidas para ajudá-lo a diagnosticar o problema.",
"message": "Se você está vendo esta página, é porque um erro proxy ocorreu. Algumas informações foram fornecidas para ajudá-lo a diagnosticar o problema."
},
"disableHistory": {
"description": "Marca da caixa de seleção de história.",
"message": "Disable History in I2P Tabs?"
},
"enableWebRTC": {
"description": "Etiqueta da caixa de seleção WebRTC.",
"message": "Ativar WebRTC com proxy?"
},
"extensionDescription": {
"description": "Descrição da extensão.",
"message": "I2P navegação de rede facilitada."
},
"extensionName": {
"description": "Nome da extensão.",
"message": "I2P Em Navegação Privada"
},
"extensionNameVariant": {
"description": "Nome da extensão.",
"message": "I2P Em Navegação Privada - Variante de Rhizome"
},
"extensionPreface": {
"description": "Prefácio para a barra de título do navegador",
"message": "Gestão de I2P"
},
"extensionVersion": {
"description": "Versão da extensão.",
"message": "1.28"
},
"fliplinks": {
"description": "Recursos de extensão e I2P",
"message": "Recursos de extensão e I2P"
},
"forumMessage": {
"description": "Mensagem de Ajuda",
"message": "Visite o Fórum I2P para saber mais ou pedir ajuda"
},
"headline": {
"description": "O Navegador de Internet Invisível",
"message": "O Navegador de Internet Invisível"
},
"help": {
"description": "Descrição para a página do botão de extensão.",
"message": "Para mais informações sobre esta extensão, visite esta página."
},
"helpMessage": {
"description": "Mensagem de Ajuda",
"message": "Obtenha ajuda adicional"
},
"histDesc": {
"description": "Descrição da ação",
"message": "A história é automaticamente limpa quando suas abas I2P estão fechadas. Se você quiser limpar a história como você vai, verifique esta caixa."
},
"homepage": {
"description": "Encontre mais informações",
"message": "Mais informações estão disponíveis aqui"
},
"hostText": {
"description": "Anfitrião para o Proxy HTTP ou SOCKS5",
"message": "Anfitrião:"
},
"i2ppage": {
"description": "Mais informações estão disponíveis aqui.",
"message": "Mais informações estão disponíveis aqui."
},
"i2ptunnel": {
"description": "Descrição para i2ptunnel",
"message": "Ver mensagens de status proxy e configurar serviços e túneis."
},
"i2ptunnelPreface": {
"description": "Prefácio para a barra de título do navegador",
"message": "Gerente de Serviços Escondidos"
},
"i2ptunnelPrefacePrivate": {
"description": "Prefácio para a barra de título do navegador",
"message": "Gestor de Serviços Escondidos (Privado)"
},
"infoMessage": {
"description": "Mensagem de Ajuda",
"message": "Agora você está livre para navegar no eepWeb! Seu navegador agora está configurado para navegar anonimamente na rede I2P. Como você navega, seu tráfego será encaminhado através de outros nós de rede para disfarçar sua origem, tanto do servidor quanto dos próprios nós."
},
"infoTitle": {
"description": "Título para o menu de ajuda",
"message": "I2P Ajuda"
},
"ircPreface": {
"description": "Prefácio para a barra de título do navegador",
"message": "Despacho IRC"
},
"ircPrefacePrivate": {
"description": "Prefácio para a barra de título do navegador",
"message": "IRC (Privado)"
},
"isBase32": {
"description": "Mensagem para o site info painel base32",
"message": "Endereço I2P Base32-Formatted"
},
"isHostName": {
"description": "Mensagem para o site info painel hostname",
"message": "I2P Jump Hostname"
},
"label-router-activepeers": {
"description": "Active Peers:",
"message": "Active Peers:"
},
"label-router-bandwidth": {
"description": "Largura de banda",
"message": "Largura de banda"
},
"label-router-bw-inbound-15s": {
"description": "Inbound bw 15s:",
"message": "Inbound bw 15s:"
},
"label-router-bw-inbound-1s": {
"description": "Inbound bw 1s:",
"message": "Inbound bw 1s:"
},
"label-router-bw-outbound-15s": {
"description": "15s",
"message": "15s"
},
"label-router-bw-outbound-1s": {
"description": "Fora da frente 1s:",
"message": "Fora da frente 1s:"
},
"label-router-net-tunnels-participating": {
"description": "Túnels de trânsito:",
"message": "Túnels de trânsito:"
},
"label-router-netdb-fastpeers": {
"description": "Peers rápidos:",
"message": "Peers rápidos:"
},
"label-router-netdb-highcapacitypeers": {
"description": "Alta capacidade Peers:",
"message": "Alta capacidade Peers:"
},
"label-router-netdb-isreseeding": {
"description": "Reseed status:",
"message": "Reseed status:"
},
"label-router-netdb-knownpeers": {
"description": "Known Peers:",
"message": "Known Peers:"
},
"label-router-peers": {
"description": "Peers",
"message": "Peers"
},
"label-router-status": {
"description": "Status do roteador:",
"message": "Status do roteador:"
},
"label-router-uptime": {
"description": "Tempo de funcionamento do roteador (Ms):",
"message": "Tempo de funcionamento do roteador (Ms):"
},
"label-router-version": {
"description": "Versão do roteador:",
"message": "Versão do roteador:"
},
"links": {
"description": "Recursos de extensão e I2P",
"message": "Recursos de extensão e I2P"
},
"linksExplain": {
"description": "Se você quiser obter mais informações sobre I2P, você pode visitar esses links.",
"message": "Se você quiser obter mais informações sobre I2P, você pode visitar esses links."
},
"mailPreface": {
"description": "Prefácio para a barra de título do navegador",
"message": "Web Mail"
},
"mailPrefacePrivate": {
"description": "Prefácio para a barra de título do navegador",
"message": "Web Mail (Privado)"
},
"muwirePreface": {
"description": "Prefácio para a barra de título do navegador",
"message": "MuWire"
},
"muwirePrefacePrivate": {
"description": "Prefácio para a barra de título do navegador",
"message": "MuWire (Privado)"
},
"newsMessage": {
"description": "Mensagem de Ajuda",
"message": "Visite o I2P Blog para aprender o mais recente sobre i2p."
},
"onboardingButtonFive": {
"description": "Melhorar a sua Experiência",
"message": "Melhorar a sua Experiência"
},
"onboardingButtonFour": {
"description": "Arquivos de compartilhamento",
"message": "Compartilhando arquivos"
},
"onboardingButtonOne": {
"description": "Navegação de Rede I2P e Navegação de Rede Não-I2P",
"message": "Navegação de Rede I2P e Navegação de Rede Não-I2P"
},
"onboardingButtonThree": {
"description": "E-mail oculto",
"message": "E-mail oculto"
},
"onboardingButtonTwo": {
"description": "Proteção de Boundaries de rede",
"message": "Proteção de Boundaries de rede"
},
"onboardingButtonZero": {
"description": "Proteja sua privacidade",
"message": "Proteja sua privacidade"
},
"onboardingContentFive": {
"description": "Esta extensão pode ser combinada com outras extensões que às vezes melhoram sua funcionalidade. uBlock Origin, LocalCDN e jShelter são úteis para acelerar o carregamento da página, bloquear anúncios e limitar o poder do Javascript. Para usuários que querem bloquear todo o Javascript, NoScript é recomendado.",
"message": "Esta extensão pode ser combinada com outras extensões que às vezes melhoram sua funcionalidade. uBlock Origin, LocalCDN e jShelter são úteis para acelerar o carregamento da página, bloquear anúncios e limitar o poder do Javascript. Para usuários que querem bloquear todo o Javascript, NoScript é recomendado."
},
"onboardingContentFour": {
"description": "I2P é capaz de usar aplicativos peer-to-peer como BitTorrent, protegendo sua identidade quando você compartilha arquivos. Nosso cliente bittorrent anônimo está disponível no navegador.",
"message": "I2P é capaz de usar aplicativos peer-to-peer como BitTorrent, protegendo sua identidade quando você compartilha arquivos. Nosso cliente bittorrent anônimo está disponível no navegador."
},
"onboardingContentOne": {
"description": "Esta extensão funciona automaticamente quando você está navegando sites I2P. Se você quiser usar o I2P como um proxy para sites não-I2P, use o botão I2P In Private Browsing na barra de ferramentas e clique em New I2P Browser Tab para mudar para I2P Browsing em uma nova guia. Sua experiência enquanto navega na internet pode ser um pouco diferente. As coisas podem ser um pouco mais lentas, e dependendo do seu nível de segurança, alguns elementos podem não funcionar ou carregar. Você também pode ser solicitado a provar que você é um humano e não um robô.",
"message": "Esta extensão funciona automaticamente quando você está navegando sites I2P. Se você quiser usar o I2P como um proxy para sites não-I2P, use o botão I2P In Private Browsing na barra de ferramentas e clique em New I2P Browser Tab para mudar para I2P Browsing em uma nova guia. Sua experiência enquanto navega na internet pode ser um pouco diferente. As coisas podem ser um pouco mais lentas, e dependendo do seu nível de segurança, alguns elementos podem não funcionar ou carregar. Você também pode ser solicitado a provar que você é um humano e não um robô."
},
"onboardingContentThree": {
"description": "Há também um serviço de e-mail anônimo disponível dentro do I2P, que é acessível a partir do nosso navegador através do menu diretamente à direita.",
"message": "Há também um serviço de e-mail anônimo disponível dentro do I2P, que é acessível a partir do nosso navegador através do menu diretamente à direita."
},
"onboardingContentTwo": {
"description": "O I2P é normalmente administrado por meio de um WebUI (O \"Consola de Usuário \"), que o usuário às vezes visualiza no mesmo navegador que eles usam para visitar sites remotos. É essencial evitar que os sites possam acessar informações deste WebUI e outros serviços em execução local. Os sites da Clearnet permanecem no recipiente firefox-default, mas assim que o recipiente firefox-default solicitar um *.onion ou *.i2p, ele será instantaneamente contêiner. A ferramenta de gerenciamento de identidade do navegador do Tor controla as abas de clearnet, e eles são proxied usando o padrão I2P outproxy ou outproxy plugin.",
"message": "O I2P é normalmente administrado através de um WebUI (The \" Router Console \"), que o usuário às vezes visualiza no mesmo navegador que eles usam para visitar sites remotos. É essencial evitar que os sites possam acessar informações deste WebUI e outros serviços em execução local. Os sites da Clearnet permanecem no recipiente firefox-default, mas assim que o recipiente firefox-default solicitar um *.onion ou *.i2p, ele será instantaneamente contêiner. A ferramenta de gerenciamento de identidade do navegador do Tor controla as abas de clearnet, e eles são proxied usando o padrão I2P outproxy ou outproxy plugin."
},
"onboardingContentZero": {
"description": "Ao usar o I2P In Private Browsing Mode, você está protegido contra rastreamento e vigilância. O navegador I2P isola cookies e exclui o histórico do navegador após sua sessão. Essas modificações garantem que sua privacidade e segurança sejam protegidas como seu navegador.",
"message": "Ao usar o I2P In Private Browsing Mode, você está protegido contra rastreamento e vigilância. O navegador I2P isola cookies e exclui o histórico do navegador após sua sessão. Essas modificações garantem que sua privacidade e segurança sejam protegidas como seu navegador."
},
"onboardingFive": {
"description": "Dicas de experiência",
"message": "Dicas de experiência"
},
"onboardingFour": {
"description": "Navegação da Web",
"message": "Navegação da Web"
},
"onboardingOne": {
"description": "Configurar o seu Experiência",
"message": "Configurar o seu Experiência"
},
"onboardingThree": {
"description": "E-mail oculto",
"message": "E-mail oculto"
},
"onboardingTitle": {
"description": "Sobre I2P Em Navegação Privada",
"message": "Sobre I2P Em Navegação Privada"
},
"onboardingTwo": {
"description": "Compartilhe arquivos",
"message": "Compartilhe arquivos"
},
"onboardingZero": {
"description": "Proteja sua privacidade",
"message": "Proteja sua privacidade"
},
"portText": {
"description": "Porta para o Proxy HTTP ou SOCKS5",
"message": "Porto:"
},
"protocolHandlerValue": {
"description": "Valor para o manipulador de protocolo de ímã",
"message": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%s\u0026action=Add\u0026foo=Add+torrent"
},
"proxy-check": {
"description": "A Proxy está pronta.",
"message": "A Proxy está pronta."
},
"proxyFailedStatus": {
"description": "O estado falhado da Proxy.",
"message": "Proxy não está pronto"
},
"proxyHelpText": {
"description": "Ajuda para configurar as opções para o botão Reset Tunnel",
"message": "Configure o seu proxy I2P aqui."
},
"proxySuccessStatus": {
"description": "O estado falhado da Proxy.",
"message": "Proxy está pronto"
},
"readyness": {
"description": "A Proxy está pronta.",
"message": "A Proxy está pronta."
},
"releases": {
"description": "Descrição para nova página de lançamento",
"message": "Confira novas versões aqui"
},
"resetMessage": {
"description": "Mensagem para o botão Reset Tunnel",
"message": "Repor túnel"
},
"returnhome": {
"description": "/",
"message": "/"
},
"router-net-bw-inbound-15s": {
"description": "Substitua com largura de banda Router Outbound 15s",
"message": "Substitua com largura de banda Router Outbound 15s"
},
"router-net-bw-inbound-1s": {
"description": "Substitua com largura de banda Router Inbound 1s",
"message": "Substitua com largura de banda Router Inbound 1s"
},
"router-net-bw-outbound-15s": {
"description": "Substitua com largura de banda Router Outbound 15s",
"message": "Substitua com largura de banda Router Outbound 15s"
},
"router-net-bw-outbound-1s": {
"description": "Substitua com largura de banda Router Outbound 1s",
"message": "Substitua com largura de banda Router Outbound 1s"
},
"router-net-tunnels-participating": {
"description": "Substitua com Contagem de Túnel Participante de Roteador",
"message": "Substitua com Contagem de Túnel Participante de Roteador"
},
"router-netdb-activepeers": {
"description": "Substituir com Router Active Peers",
"message": "Substituir com Router Active Peers"
},
"router-netdb-fastpeers": {
"description": "Substituir com Router Fast Peers",
"message": "Substituir com Router Fast Peers"
},
"router-netdb-highcapacitypeers": {
"description": "Substituir com Peers de alta capacidade",
"message": "Substituir com Peers de alta capacidade"
},
"router-netdb-isreseeding": {
"description": "Substituir com Router netDB Reseeding Status",
"message": "Substituir com Router netDB Reseeding Status"
},
"router-netdb-knownpeers": {
"description": "Substitua com Router Known Peers",
"message": "Substitua com Router Known Peers"
},
"router-restart": {
"description": "Roteador de reinício graciosamente",
"message": "Roteador de reinício graciosamente"
},
"router-shutdown": {
"description": "Roteador de desligamento graciosamente",
"message": "Roteador de desligamento graciosamente"
},
"router-status": {
"description": "Substituir com status de roteador",
"message": "Substituir com status de roteador"
},
"router-uptime": {
"description": "Substitua com Router Uptime",
"message": "Substitua com Router Uptime"
},
"router-version": {
"description": "Substituir com Router Versão",
"message": "Substituir com Router Versão"
},
"routerConsole": {
"description": "Descrição para o console do roteador.",
"message": "Acesse seu console de roteador I2P e sua gama completa de aplicações e configurações."
},
"routerPreface": {
"description": "Prefácio para a barra de título do navegador",
"message": "Console de roteador"
},
"routerPrefacePrivate": {
"description": "Prefácio para a barra de título do navegador",
"message": "Console de roteador (Privado)"
},
"rpcHelpText": {
"description": "Configure as opções do I2PControl aqui. Configure suas opções Bittorrent aqui.",
"message": "Configure as opções do I2PControl aqui. Configure suas opções Bittorrent aqui."
},
"rpcHostText": {
"description": "Porta de controle:",
"message": "Porta de controle:"
},
"rpcPassText": {
"description": "Senha de controle: Torrent RPC Senha:",
"message": "Senha de controle: Torrent RPC Senha:"
},
"rpcPathText": {
"description": "Caminho de controle:",
"message": "Caminho de controle:"
},
"rpcPortText": {
"description": "Anfitrião de controle:",
"message": "Anfitrião de controle:"
},
"rtcDesc": {
"description": "Descrição da ação WebRTC",
"message": "WebRTC é desativado por padrão, mas você pode ligá-lo e forçá-lo a honrar o proxy. Se você é um usuário da extensão do navegador Snowflake, esta opção é desativada e WebRTC é ativada por padrão."
},
"signingcert": {
"description": "Assinado por:",
"message": "Assinado por:"
},
"siteLabel": {
"description": "Label for i2p site info",
"message": "Endereço/Site Informações:"
},
"sitecert": {
"description": "Informação do Certificado:",
"message": "Informação do Certificado:"
},
"snark": {
"description": "Descrição para Bittorrent",
"message": "Acesso rápido ao Snark, o aplicativo de compartilhamento de arquivos específico da rede Peer-to-peer I2P."
},
"sourcehead": {
"description": "Obter o código fonte:",
"message": "Obter o código fonte:"
},
"sources": {
"description": "Descrição para o link de código fonte",
"message": "Procurar o código fonte aqui"
},
"susimail": {
"description": "Descrição para e-mail",
"message": "Acesso rápido ao cliente de e-mail da rede SusiMail I2P."
},
"text-section-header": {
"description": "O Navegador de Internet Invisível",
"message": "O Navegador de Internet Invisível"
},
"text-section-proxyerr-header": {
"description": "Um erro Proxy tem Occurred",
"message": "Um erro Proxy tem Occurred"
},
"text-section-torrents-header": {
"description": "Baixar Torrent",
"message": "Baixar Torrent"
},
"titlePreface": {
"description": "Prefácio para a barra de título do navegador",
"message": "Navegador I2P"
},
"titlePrefacePrivate": {
"description": "Prefácio para a barra de título do navegador",
"message": "Navegador I2P (Privado)"
},
"toopie": {
"description": "Para obter informações sobre o seu status de roteador I2P, vá aqui:",
"message": "Para obter informações sobre o seu status de roteador I2P, vá aqui:"
},
"toopieHtmlHeadline": {
"description": "I2P Router Informações",
"message": "I2P Router Informações"
},
"toopieName": {
"description": "Nome da barra lateral.",
"message": "também. html"
},
"toopieTLS": {
"description": "Nome do painel de segurança.",
"message": "Propriedades do Site"
},
"topbar": {
"description": "Browse Download",
"message": "Browse Download"
},
"torPreface": {
"description": "Prefácio para a barra de título do navegador",
"message": "Gerente de Torno"
},
"torPrefacePrivate": {
"description": "Prefácio para a barra de título do navegador",
"message": "Tor Manager (Privado)"
},
"torrent-action": {
"description": "Baixar",
"message": "Baixar"
},
"torrentControls": {
"description": "Controles Torrent",
"message": "Controles Torrent"
},
"torrentDownloads": {
"description": "Baixar Torrent",
"message": "Baixar Torrent"
},
"torrentPreface": {
"description": "Prefácio para a barra de título do navegador",
"message": "Bittorrent"
},
"torrentPrefacePrivate": {
"description": "Prefácio para a barra de título do navegador",
"message": "Bittorrent (Privado)"
},
"torrentui-opener": {
"description": "Abrir WebUI",
"message": "Abrir WebUI"
},
"visit-irc": {
"description": "Visite IRC",
"message": "Visite IRC"
},
"webPreface": {
"description": "Prefácio para a barra de título do navegador",
"message": "Navegador de Web"
},
"webPrefacePrivate": {
"description": "Prefácio para a barra de título do navegador",
"message": "Navegador Web (Privado)"
},
"webpage": {
"description": "Mais informações estão disponíveis aqui.",
"message": "Mais informações estão disponíveis aqui."
},
"window-visit-console": {
"description": "Console de roteador I2P",
"message": "Console de roteador I2P"
},
"window-visit-help": {
"description": "Página de Ajuda de Extensão",
"message": "Página de Ajuda de Extensão"
},
"window-visit-homepage": {
"description": "O Navegador de Internet Invisível",
"message": "O Navegador de Internet Invisível"
},
"window-visit-i2p": {
"description": "I2P Página inicial do projeto:",
"message": "I2P Página inicial do projeto:"
},
"window-visit-i2ptunnel": {
"description": "Gerente de Serviços Escondidos",
"message": "Gerente de Serviços Escondidos"
},
"window-visit-index": {
"description": "Página inicial da Webextension:",
"message": "Página inicial da Webextension:"
},
"window-visit-releases": {
"description": "Lançamentos:",
"message": "Lançamentos:"
},
"window-visit-router": {
"description": "Console de roteador",
"message": "Console de roteador"
},
"window-visit-settings": {
"description": "Abra as configurações",
"message": "Abra as configurações"
},
"window-visit-snark": {
"description": "BitTorrent",
"message": "BitTorrent"
},
"window-visit-sources": {
"description": "Código de origem:",
"message": "Código de origem:"
},
"window-visit-susimail": {
"description": "E-Mail",
"message": "E-Mail"
},
"window-visit-toopie": {
"description": "Toopie",
"message": "Toopie"
},
"window-visit-torrent": {
"description": "Para assistência, visite a página de ajuda torrent",
"message": "Para assistência, visite a página de ajuda torrent"
},
"windowVisitConsole": {
"description": "Roteador Console rótulo.",
"message": "Console do roteador:"
},
"windowVisitHelppage": {
"description": "Página de ajuda para o rótulo de extensão.",
"message": "InformaçÃμes da WebExtension:"
},
"windowVisitHomepage": {
"description": "Página inicial para o rótulo de extensão.",
"message": "Página inicial:"
},
"windowVisitI2ptunnel": {
"description": "Título para i2ptunnel",
"message": "Gestor de Serviços Escondidos:"
},
"windowVisitReleases": {
"description": "Visite a página de lançamento",
"message": "Lançamentos de extensão:"
},
"windowVisitSnark": {
"description": "Título para Bittorrent",
"message": "Bittorrent:"
},
"windowVisitSources": {
"description": "Título para link de código fonte",
"message": "Código de fonte de extensão:"
},
"windowVisitSusimail": {
"description": "Título para e-mail",
"message": "E-Mail:"
},
"windowVisitWebPage": {
"description": "Visite a página inicial da extensão no Github",
"message": "Página inicial da extensão:"
}
}

738
_locales/ru/messages.json Normal file
View File

@@ -0,0 +1,738 @@
{
"CertLabel": {
"description": "Информация о сертификатах:",
"message": "Информация о сертификатах:"
},
"SignedLabel": {
"description": "Подписано:",
"message": "Подписано:"
},
"TorrentTypeLabel": {
"description": "Torrent Links:",
"message": "Torrent Links:"
},
"TypeLabel": {
"description": "Torrent Links:",
"message": "Torrent Links:"
},
"aboutconsole": {
"description": "Чтобы получить доступ к домашней странице консоли маршрутизатора, идите сюда:",
"message": "Чтобы получить доступ к домашней странице консоли маршрутизатора, идите сюда:"
},
"abouthome": {
"description": "Описание страницы кнопки распространения.",
"message": "Для получения дополнительной информации об этом продлении посетите эту страницу."
},
"addresstype": {
"description": "Тип адреса:",
"message": "Тип адреса:"
},
"applicationExplain": {
"description": "Описание раздела приложения.",
"message": "Консоль маршрутизатора I2P и приложения открываются на своей вкладке, предоставляя им те же преимущества безопасности, что и просмотр с этим расширением. Это добавляет большую защиту, изолируя каждое приложение и предотвращая другие вкладки (т.е. социальные сети и т.д.) от отпечатков пальцев или сценариев. Все вкладки используют идентификационные цвета для отслеживания вашего рабочего процесса I2P."
},
"applicationHeader": {
"description": "Заголовок для секции приложений.",
"message": "Приложения"
},
"beta": {
"description": "Это экспериментальный продукт.",
"message": "Это экспериментальный продукт."
},
"blogPreface": {
"description": "Предисловие для заголовка браузера",
"message": "Блог"
},
"blogPrefacePrivate": {
"description": "Предисловие для заголовка браузера",
"message": "Блог (Private)"
},
"bookmarksButton": {
"description": "Re-Create Закладки",
"message": "Re-Create Закладки"
},
"botePreface": {
"description": "Предисловие для заголовка браузера",
"message": "I2P-Bote Mail"
},
"botePrefacePrivate": {
"description": "Предисловие для заголовка браузера",
"message": "I2P-Bote Mail (Private)"
},
"browser-action": {
"description": "Просмотреть",
"message": "Просмотреть"
},
"btRpcHostText": {
"description": "Torrent RPC Хосте:",
"message": "Torrent RPC Хосте:"
},
"btRpcPathText": {
"description": "Torrent RPC Путь:",
"message": "Torrent RPC Путь:"
},
"btRpcPortText": {
"description": "Torrent RPC Порт:",
"message": "Torrent RPC Порт:"
},
"certAbsent": {
"description": "Содержание для справки, если отсутствует",
"message": "Этот сайт не использует HTTPS. Это все еще проверяется криптографически I2P."
},
"certPresent": {
"description": "Содержание для справки, если присутствует",
"message": "Этот сайт использует HTTPS. HTTPS над I2P является экспериментальным и требует самоподписанных сертификатов или альтернативных корневых авторитов."
},
"clearData": {
"description": "Чистый пункт меню Browsing Data.",
"message": "Четкие данные по хранению:"
},
"clearDesc": {
"description": "Очистить описание действий просмотра данных.",
"message": "Используйте это, чтобы стереть данные просмотра I2P."
},
"controlExplain": {
"description": "Введите панель управления.",
"message": "Эти управления используются для адаптации вашего I2P Browsing Experience"
},
"controlHeader": {
"description": "Заголовок для панели управления.",
"message": "Контроль"
},
"controlHelpText": {
"description": "Помощь в настройке опций для кнопки Reset Tunnel",
"message": "Настройте консоль маршрутизатора здесь."
},
"controlHostText": {
"description": "Host for the Router Console",
"message": "Управляющий хост:"
},
"controlHostValue": {
"description": "Host for the Router Console",
"message": "127.0.0.1"
},
"controlPortText": {
"description": "Port for the Router Console",
"message": "Порт управления:"
},
"controlPortValue": {
"description": "Port for the Router Console",
"message": "7657"
},
"description": {
"description": "Теперь вы можете использовать I2P в этом браузере.",
"message": "Теперь вы можете использовать I2P в этом браузере."
},
"description2": {
"description": "Если вы видите эту страницу, это потому, что произошла ошибка прокси. Была предоставлена определенная информация, которая поможет вам диагностировать проблему.",
"message": "Если вы видите эту страницу, это потому, что произошла ошибка прокси. Была предоставлена определенная информация, которая поможет вам диагностировать проблему."
},
"disableHistory": {
"description": "Историческая этикетка.",
"message": "Disable History in I2P Tabs?"
},
"enableWebRTC": {
"description": "WebRTC флажок.",
"message": "Включить WebRTC с прокси?"
},
"extensionDescription": {
"description": "Описание расширения.",
"message": "Поиск сети I2P был легким."
},
"extensionName": {
"description": "Название расширения.",
"message": "I2P В частном рысе"
},
"extensionNameVariant": {
"description": "Название расширения.",
"message": "I2P в частном браузере - Rhizome Variant"
},
"extensionPreface": {
"description": "Предисловие для заголовка браузера",
"message": "Управление I2P"
},
"extensionVersion": {
"description": "Версия расширения.",
"message": "1.28"
},
"fliplinks": {
"description": "Расширение и I2P",
"message": "Расширение и I2P"
},
"forumMessage": {
"description": "Сообщение",
"message": "Посетите форум I2P, чтобы узнать больше или попросить помощи"
},
"headline": {
"description": "Невидимый интернет-браузер",
"message": "Невидимый интернет-браузер"
},
"help": {
"description": "Описание страницы кнопки распространения.",
"message": "Для получения дополнительной информации об этом продлении посетите эту страницу."
},
"helpMessage": {
"description": "Сообщение",
"message": "Получить дополнительную помощь"
},
"histDesc": {
"description": "Описание действия истории",
"message": "История автоматически очищается, когда ваши вкладки I2P закрыты. Если вы хотите очистить историю, когда вы идете, проверьте эту коробку."
},
"homepage": {
"description": "Найти больше информации",
"message": "Больше информации здесь"
},
"hostText": {
"description": "Хост для HTTP или SOCKS5 Proxy",
"message": "Хосте:"
},
"i2ppage": {
"description": "Больше информации доступно здесь.",
"message": "Больше информации доступно здесь."
},
"i2ptunnel": {
"description": "Описание i2ptunnel",
"message": "Просмотр сообщений о состоянии прокси и настройка служб и туннелей."
},
"i2ptunnelPreface": {
"description": "Предисловие для заголовка браузера",
"message": "Hidden Services Manager"
},
"i2ptunnelPrefacePrivate": {
"description": "Предисловие для заголовка браузера",
"message": "Hidden Services Manager (Private)"
},
"infoMessage": {
"description": "Сообщение",
"message": "Теперь вы можете просмотреть eepWeb! Теперь ваш браузер настроен для анонимного просмотра в сети I2P. По мере просмотра ваш трафик будет маршрутизирован через другие сетевые узлы, чтобы замаскировать его происхождение, как с сервера, так и с самих узлов."
},
"infoTitle": {
"description": "Название для меню справки",
"message": "I2P Помощь"
},
"ircPreface": {
"description": "Предисловие для заголовка браузера",
"message": "Dispatch IRC"
},
"ircPrefacePrivate": {
"description": "Предисловие для заголовка браузера",
"message": "Dispatch IRC (Private)"
},
"isBase32": {
"description": "Сообщение для информационной панели сайта32",
"message": "I2P Base32-Formatted Address"
},
"isHostName": {
"description": "Сообщение для хостинга информационной панели сайта",
"message": "I2P Имя хоста"
},
"label-router-activepeers": {
"description": "Активные пивки:",
"message": "Активные пивки:"
},
"label-router-bandwidth": {
"description": "Bandwidth",
"message": "Bandwidth"
},
"label-router-bw-inbound-15s": {
"description": "Inbound bw 15s:",
"message": "Inbound bw 15s:"
},
"label-router-bw-inbound-1s": {
"description": "Inbound bw 1s:",
"message": "Inbound bw 1s:"
},
"label-router-bw-outbound-15s": {
"description": "15-е:",
"message": "15-е:"
},
"label-router-bw-outbound-1s": {
"description": "1s:",
"message": "1s:"
},
"label-router-net-tunnels-participating": {
"description": "Транзитные туннели:",
"message": "Транзитные туннели:"
},
"label-router-netdb-fastpeers": {
"description": "Быстрое пиво:",
"message": "Быстрое пиво:"
},
"label-router-netdb-highcapacitypeers": {
"description": "Высокая мощность Пьеса:",
"message": "Высокая мощность Пьеса:"
},
"label-router-netdb-isreseeding": {
"description": "Статус ресисел:",
"message": "Статус ресисел:"
},
"label-router-netdb-knownpeers": {
"description": "Известные пэры:",
"message": "Известные пэры:"
},
"label-router-peers": {
"description": "Пи",
"message": "Пи"
},
"label-router-status": {
"description": "Статус Маршрутизатора состояния:",
"message": "Статус Маршрутизатора состояния:"
},
"label-router-uptime": {
"description": "Маршрутизатор Uptime(Ms):",
"message": "Маршрутизатор Uptime(Ms):"
},
"label-router-version": {
"description": "Версия маршрутизатора:",
"message": "Версия маршрутизатора:"
},
"links": {
"description": "Расширение и I2P",
"message": "Расширение и I2P"
},
"linksExplain": {
"description": "Если вы хотите получить больше информации о I2P, вы можете посетить эти ссылки.",
"message": "Если вы хотите получить больше информации о I2P, вы можете посетить эти ссылки."
},
"mailPreface": {
"description": "Предисловие для заголовка браузера",
"message": "Веб-почта"
},
"mailPrefacePrivate": {
"description": "Предисловие для заголовка браузера",
"message": "Web Mail (Private)"
},
"muwirePreface": {
"description": "Предисловие для заголовка браузера",
"message": "MuWire"
},
"muwirePrefacePrivate": {
"description": "Предисловие для заголовка браузера",
"message": "MuWire (Private)"
},
"newsMessage": {
"description": "Сообщение",
"message": "Посетите I2P Blog to learn the latest about i2p."
},
"onboardingButtonFive": {
"description": "Совершенствование Опыт",
"message": "Совершенствование Опыт"
},
"onboardingButtonFour": {
"description": "Обмен файлами",
"message": "Обмен файлами"
},
"onboardingButtonOne": {
"description": "I2P Network Browsing and Non-I2P Network Browsing",
"message": "I2P Network Browsing and Non-I2P Network Browsing"
},
"onboardingButtonThree": {
"description": "Скрытая электронная почта",
"message": "Скрытая электронная почта"
},
"onboardingButtonTwo": {
"description": "Защита сетевых границ",
"message": "Защита сетевых границ"
},
"onboardingButtonZero": {
"description": "Защита вашей конфиденциальности",
"message": "Защита вашей конфиденциальности"
},
"onboardingContentFive": {
"description": "Это расширение может быть объединено с другими расширениями, которые иногда улучшают его функциональность. uBlock Origin, LocalCDN и jShelter полезны для ускорения загрузки страницы, блокировки рекламы и ограничения мощности Javascript. Для пользователей, которые хотят заблокировать все Javascript, рекомендуется NoScript.",
"message": "Это расширение может быть объединено с другими расширениями, которые иногда улучшают его функциональность. uBlock Origin, LocalCDN и jShelter полезны для ускорения загрузки страницы, блокировки рекламы и ограничения мощности Javascript. Для пользователей, которые хотят заблокировать все Javascript, рекомендуется NoScript."
},
"onboardingContentFour": {
"description": "I2P способен использовать одноранговые приложения, такие как BitTorrent, защищая вашу личность, когда вы делитесь файлами. Наш анонимный битторрент-клиент доступен в браузере.",
"message": "I2P способен использовать одноранговые приложения, такие как BitTorrent, защищая вашу личность, когда вы делитесь файлами. Наш анонимный битторрент-клиент доступен в браузере."
},
"onboardingContentOne": {
"description": "Это расширение работает автоматически при просмотре сайтов I2P. Если вы хотите использовать I2P в качестве прокси-сервера для не-I2P-сайтов, используйте кнопку I2P In Private Browsing в панели инструментов и нажмите на вкладку New I2P Browser для перехода на I2P Browsing в новой вкладке. Ваш опыт во время просмотра Интернета может быть немного другим. Вещи могут быть немного медленнее, и в зависимости от уровня безопасности некоторые элементы могут не работать или не загружаться. Вас также могут попросить доказать, что вы человек, а не робот.",
"message": "Это расширение работает автоматически при просмотре сайтов I2P. Если вы хотите использовать I2P в качестве прокси-сервера для не-I2P-сайтов, используйте кнопку I2P In Private Browsing в панели инструментов и нажмите на вкладку New I2P Browser для перехода на I2P Browsing в новой вкладке. Ваш опыт во время просмотра Интернета может быть немного другим. Вещи могут быть немного медленнее, и в зависимости от уровня безопасности некоторые элементы могут не работать или не загружаться. Вас также могут попросить доказать, что вы человек, а не робот."
},
"onboardingContentThree": {
"description": "Существует также анонимный сервис электронной почты, доступный внутри I2P, который доступен из нашего браузера через меню непосредственно справа.",
"message": "Существует также анонимный сервис электронной почты, доступный внутри I2P, который доступен из нашего браузера через меню непосредственно справа."
},
"onboardingContentTwo": {
"description": "I2P обычно вводится через веб-UI (The «Router Console»), который пользователь иногда рассматривает в том же браузере, который он использует для посещения удаленных сайтов. Важно не допустить, чтобы сайты могли получать доступ к информации из этого веб-UI и других местных сервисов. Сайты Clearnet остаются в контейнере Firefox-default, но как только контейнер Firefox-default запрашивает *.onion или *.i2p сайт, он будет мгновенно контейнеризирован. Инструменты управления идентификацией Tor Browser контролируют вкладки Clearnet, и они проксиируются с помощью плагина I2P outproxy или outproxy.",
"message": "I2P обычно вводится через веб-UI (The «Консоль маршрутизатора»), который пользователь иногда рассматривает в том же браузере, который он использует для посещения удаленных сайтов. Важно не допустить, чтобы сайты могли получать доступ к информации из этого веб-UI и других местных сервисов. Сайты Clearnet остаются в контейнере Firefox-default, но как только контейнер Firefox-default запрашивает *.onion или *.i2p сайт, он будет мгновенно контейнеризирован. Инструменты управления идентификацией Tor Browser контролируют вкладки Clearnet, и они проксиируются с помощью плагина I2P outproxy или outproxy."
},
"onboardingContentZero": {
"description": "При использовании I2P в режиме частного просмотра вы защищены от отслеживания и наблюдения. I2P Browser изолирует печенье и удаляет историю браузера после сеанса. Эти изменения гарантируют, что ваша конфиденциальность и безопасность защищены как ваш просмотр.",
"message": "При использовании I2P в режиме частного просмотра вы защищены от отслеживания и наблюдения. I2P Browser изолирует печенье и удаляет историю браузера после сеанса. Эти изменения гарантируют, что ваша конфиденциальность и безопасность защищены как ваш просмотр."
},
"onboardingFive": {
"description": "Опыт Советы",
"message": "Опыт Советы"
},
"onboardingFour": {
"description": "Просмотр Интернета",
"message": "Просмотр Интернета"
},
"onboardingOne": {
"description": "Настроить Опыт",
"message": "Настроить Опыт"
},
"onboardingThree": {
"description": "Скрытая электронная почта",
"message": "Скрытая электронная почта"
},
"onboardingTitle": {
"description": "О I2P в частном брови",
"message": "О I2P в частном брови"
},
"onboardingTwo": {
"description": "Общие файлы",
"message": "Общие файлы"
},
"onboardingZero": {
"description": "Защита вашей конфиденциальности",
"message": "Защита вашей конфиденциальности"
},
"portText": {
"description": "Порт для HTTP или SOCKS5 Proxy",
"message": "Порт:"
},
"protocolHandlerValue": {
"description": "Значение для обработчика протокола магнита",
"message": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%s\u0026action=Add\u0026foo=Add+torrent"
},
"proxy-check": {
"description": "Прокси готов.",
"message": "Прокси готов."
},
"proxyFailedStatus": {
"description": "Прокси потерпел неудачу.",
"message": "Прокси не готов"
},
"proxyHelpText": {
"description": "Помощь в настройке опций для кнопки Reset Tunnel",
"message": "Настройте прокси I2P здесь."
},
"proxySuccessStatus": {
"description": "Прокси потерпел неудачу.",
"message": "Прокси готов"
},
"readyness": {
"description": "Прокси готов.",
"message": "Прокси готов."
},
"releases": {
"description": "Описание новой страницы",
"message": "Проверьте новые релизы здесь"
},
"resetMessage": {
"description": "Сообщение для кнопки \"Загрузить туннель\"",
"message": "Сброс тоннеля"
},
"returnhome": {
"description": "/",
"message": "/"
},
"router-net-bw-inbound-15s": {
"description": "Заменить на Router Bandwidth Outbound 15s",
"message": "Заменить на Router Bandwidth Outbound 15s"
},
"router-net-bw-inbound-1s": {
"description": "Заменить на Router Bandwidth Inbound 1s",
"message": "Заменить на Router Bandwidth Inbound 1s"
},
"router-net-bw-outbound-15s": {
"description": "Заменить на Router Bandwidth Outbound 15s",
"message": "Заменить на Router Bandwidth Outbound 15s"
},
"router-net-bw-outbound-1s": {
"description": "Заменить на Router Bandwidth Outbound 1s",
"message": "Заменить на Router Bandwidth Outbound 1s"
},
"router-net-tunnels-participating": {
"description": "Заменить \"маршрутизатор\"",
"message": "Заменить \"маршрутизатор\""
},
"router-netdb-activepeers": {
"description": "Заменить \"маршрутизатор\"",
"message": "Заменить \"маршрутизатор\""
},
"router-netdb-fastpeers": {
"description": "Заменить \"маршрутизатор\"",
"message": "Заменить \"маршрутизатор\""
},
"router-netdb-highcapacitypeers": {
"description": "Заменить на пьесы высокой емкости",
"message": "Заменить на пьесы высокой емкости"
},
"router-netdb-isreseeding": {
"description": "Заменить \"маршрутизатор\"",
"message": "Заменить \"маршрутизатор\""
},
"router-netdb-knownpeers": {
"description": "Заменить \"маршрутизатором\"",
"message": "Заменить \"маршрутизатором\""
},
"router-restart": {
"description": "Изящный перезапуск маршрутизатора",
"message": "Изящный перезапуск маршрутизатора"
},
"router-shutdown": {
"description": "Изящный роутер",
"message": "Изящный роутер"
},
"router-status": {
"description": "Заменить статус маршрутизатора",
"message": "Заменить статус маршрутизатора"
},
"router-uptime": {
"description": "Заменить на Маршрутизатор",
"message": "Заменить на Маршрутизатор"
},
"router-version": {
"description": "Заменить на Маршрутизатор",
"message": "Заменить на Маршрутизатор"
},
"routerConsole": {
"description": "Описание консоли маршрутизатора.",
"message": "Доступ к консоли маршрутизатора I2P и его полному спектру приложений и конфигураций."
},
"routerPreface": {
"description": "Предисловие для заголовка браузера",
"message": "Консоль"
},
"routerPrefacePrivate": {
"description": "Предисловие для заголовка браузера",
"message": "Консоль маршрутизатора (Private)"
},
"rpcHelpText": {
"description": "Настройте параметры I2PControl здесь. Настройте параметры Bittorrent здесь.",
"message": "Настройте параметры I2PControl здесь. Настройте параметры Bittorrent здесь."
},
"rpcHostText": {
"description": "Порт управления:",
"message": "Порт управления:"
},
"rpcPassText": {
"description": "Control Password: Torrent RPC Пароль:",
"message": "Control Password: Torrent RPC Пароль:"
},
"rpcPathText": {
"description": "Путь управления:",
"message": "Путь управления:"
},
"rpcPortText": {
"description": "Управляющий хост:",
"message": "Управляющий хост:"
},
"rtcDesc": {
"description": "Описание действия WebRTC",
"message": "WebRTC отключен по умолчанию, но вы можете включить его обратно и заставить его почтить прокси. Если вы являетесь пользователем расширения браузера Snowflake, эта опция отключена, и WebRTC включен по умолчанию."
},
"signingcert": {
"description": "Подписано:",
"message": "Подписано:"
},
"siteLabel": {
"description": "Маркировка на сайте i2p",
"message": "Адрес / Сайт Информация:"
},
"sitecert": {
"description": "Информация о сертификатах:",
"message": "Информация о сертификатах:"
},
"snark": {
"description": "Описание Bittorrent",
"message": "Quick access to Snark, the Peer-to-peer I2P network specific file sharing application."
},
"sourcehead": {
"description": "Получить исходный код:",
"message": "Получить исходный код:"
},
"sources": {
"description": "Описание ссылки Исходного кода",
"message": "Просмотр исходного кода здесь"
},
"susimail": {
"description": "Описание электронной почты",
"message": "Быстрый доступ к сетевому почтовому клиенту SusiMail I2P."
},
"text-section-header": {
"description": "Невидимый интернет-браузер",
"message": "Невидимый интернет-браузер"
},
"text-section-proxyerr-header": {
"description": "Ошибка прокси",
"message": "Ошибка прокси"
},
"text-section-torrents-header": {
"description": "Скачать Torrent",
"message": "Скачать Torrent"
},
"titlePreface": {
"description": "Предисловие для заголовка браузера",
"message": "I2P браузер"
},
"titlePrefacePrivate": {
"description": "Предисловие для заголовка браузера",
"message": "I2P Browser (Private)"
},
"toopie": {
"description": "Для информации о вашем статусе маршрутизатора I2P, идите сюда:",
"message": "Для информации о вашем статусе маршрутизатора I2P, идите сюда:"
},
"toopieHtmlHeadline": {
"description": "Информация о маршруте I2P",
"message": "Информация о маршруте I2P"
},
"toopieName": {
"description": "Имя боковой панели.",
"message": "тоже. html"
},
"toopieTLS": {
"description": "Название группы безопасности.",
"message": "Свойства сайта"
},
"topbar": {
"description": "Скачать",
"message": "Скачать"
},
"torPreface": {
"description": "Предисловие для заголовка браузера",
"message": "Tor Manager"
},
"torPrefacePrivate": {
"description": "Предисловие для заголовка браузера",
"message": "Tor Manager (Private)"
},
"torrent-action": {
"description": "Скачать",
"message": "Скачать"
},
"torrentControls": {
"description": "Торрент-контроль",
"message": "Торрент-контроль"
},
"torrentDownloads": {
"description": "Скачать Torrent",
"message": "Скачать Torrent"
},
"torrentPreface": {
"description": "Предисловие для заголовка браузера",
"message": "Bittorrent"
},
"torrentPrefacePrivate": {
"description": "Предисловие для заголовка браузера",
"message": "Bittorrent (Private)"
},
"torrentui-opener": {
"description": "Open WebUI",
"message": "Open WebUI"
},
"visit-irc": {
"description": "Посетите IRC",
"message": "Посетите IRC"
},
"webPreface": {
"description": "Предисловие для заголовка браузера",
"message": "Веб-браузер"
},
"webPrefacePrivate": {
"description": "Предисловие для заголовка браузера",
"message": "Web Browser (Private)"
},
"webpage": {
"description": "Больше информации доступно здесь.",
"message": "Больше информации доступно здесь."
},
"window-visit-console": {
"description": "Консоль маршрутизатора I2P",
"message": "Консоль маршрутизатора I2P"
},
"window-visit-help": {
"description": "Страница справки",
"message": "Страница справки"
},
"window-visit-homepage": {
"description": "Невидимый интернет-браузер",
"message": "Невидимый интернет-браузер"
},
"window-visit-i2p": {
"description": "I2P Главная страница проекта:",
"message": "I2P Главная страница проекта:"
},
"window-visit-i2ptunnel": {
"description": "Hidden Services Manager",
"message": "Hidden Services Manager"
},
"window-visit-index": {
"description": "Веб-сайт:",
"message": "Веб-сайт:"
},
"window-visit-releases": {
"description": "Выпущено:",
"message": "Выпущено:"
},
"window-visit-router": {
"description": "Консоль",
"message": "Консоль"
},
"window-visit-settings": {
"description": "Откройте настройки",
"message": "Откройте настройки"
},
"window-visit-snark": {
"description": "BitTorrent",
"message": "BitTorrent"
},
"window-visit-sources": {
"description": "Код источника:",
"message": "Код источника:"
},
"window-visit-susimail": {
"description": "E-Mail",
"message": "E-Mail"
},
"window-visit-toopie": {
"description": "Toopie",
"message": "Toopie"
},
"window-visit-torrent": {
"description": "Для помощи посетите страницу помощи торренту",
"message": "Для помощи посетите страницу помощи торренту"
},
"windowVisitConsole": {
"description": "Маркировка Router Console.",
"message": "Консоль маршрутизатора:"
},
"windowVisitHelppage": {
"description": "Страница справки для ярлыка расширения.",
"message": "Информация о расширении сети:"
},
"windowVisitHomepage": {
"description": "Главная страница для ярлыка расширения.",
"message": "Главная страница:"
},
"windowVisitI2ptunnel": {
"description": "Название i2ptunnel",
"message": "Hidden Services Manager:"
},
"windowVisitReleases": {
"description": "Посетите страницу релиза",
"message": "Расширение:"
},
"windowVisitSnark": {
"description": "Название для Bittorrent",
"message": "Bittorrent:"
},
"windowVisitSources": {
"description": "Название для ссылки исходного кода",
"message": "Код источника распространения:"
},
"windowVisitSusimail": {
"description": "Название для электронной почты",
"message": "E-Mail:"
},
"windowVisitWebPage": {
"description": "Продление посещения на сайте Github",
"message": "Главная страница:"
}
}

738
_locales/zh/messages.json Normal file
View File

@@ -0,0 +1,738 @@
{
"CertLabel": {
"description": "证明信息:",
"message": "证明信息:"
},
"SignedLabel": {
"description": "常驻代表",
"message": "常驻代表"
},
"TorrentTypeLabel": {
"description": "引证联系:",
"message": "引证联系:"
},
"TypeLabel": {
"description": "引证联系:",
"message": "引证联系:"
},
"aboutconsole": {
"description": "进入路线者的主页。",
"message": "进入路线者的主页。"
},
"abouthome": {
"description": "展期页。.",
"message": "关于这一扩展的更多信息,本页访问。."
},
"addresstype": {
"description": "处理类型:",
"message": "处理类型:"
},
"applicationExplain": {
"description": "申请款的说明。.",
"message": "I2P路线r console and application in their自己的tab,为他们提供与延长这一期限相同的安全利益。 这增加了保护力度,将每项申请分开,并防止其他表格(社会媒体等)不指纹或文字。 所有表格都用来确定颜色,以跟踪你的I2P工作流。."
},
"applicationHeader": {
"description": "申请科长。.",
"message": "申请"
},
"beta": {
"description": "这是试验产品。.",
"message": "这是试验产品。."
},
"blogPreface": {
"description": "代页标题的序言",
"message": "评 注"
},
"blogPrefacePrivate": {
"description": "代页标题的序言",
"message": "Blog (Private)"
},
"bookmarksButton": {
"description": "Re-Create Books",
"message": "Re-Create Books"
},
"botePreface": {
"description": "代页标题的序言",
"message": "I2P-Bote Mail"
},
"botePrefacePrivate": {
"description": "代页标题的序言",
"message": "I2P-Bote Mail(Private)"
},
"browser-action": {
"description": "Browse",
"message": "Browse"
},
"btRpcHostText": {
"description": "D. 捕获方案 东道国:",
"message": "D. 捕获方案 东道国:"
},
"btRpcPathText": {
"description": "D. 捕获方案 Path:",
"message": "D. 捕获方案 Path:"
},
"btRpcPortText": {
"description": "D. 捕获方案 港口:",
"message": "D. 捕获方案 港口:"
},
"certAbsent": {
"description": "无证件的处理",
"message": "该网站没有使用HTTPS。 仍然由I2P核实。."
},
"certPresent": {
"description": "证明的内容",
"message": "该网站使用HTTPS。 在I2P的技转设备是试验性的,需要自发证书或副根基。."
},
"clearData": {
"description": "清点数据男性u项目。.",
"message": "数据交换:"
},
"clearDesc": {
"description": "数据行动说明。.",
"message": "利用这一手段使你的I2Prows数据消失。."
},
"controlExplain": {
"description": "介绍控制小组。.",
"message": "这些管制用来适应你的I2Prows的经历"
},
"controlHeader": {
"description": "控制小组负责人。.",
"message": "控制"
},
"controlHelpText": {
"description": "B. 帮助精简重新启动的Tunnel但顿办法",
"message": "调整你的路线。."
},
"controlHostText": {
"description": "B. 勒索的旅舍",
"message": "控制旅舍:"
},
"controlHostValue": {
"description": "B. 勒索的旅舍",
"message": "1270.0.1"
},
"controlPortText": {
"description": "Router Console港",
"message": "管制港:"
},
"controlPortValue": {
"description": "Router Console港",
"message": "7657"
},
"description": {
"description": "你现在能够在本代行使用I2P。.",
"message": "你现在能够在本代行使用I2P。."
},
"description2": {
"description": "如果你看到这一页,就是因为出现了一种错误。 已经提供了一些资料,以帮助你查明该问题。.",
"message": "如果你看到这一页,就是因为出现了一种错误。 已经提供了一些资料,以帮助你查明该问题。."
},
"disableHistory": {
"description": "历史检查箱标签。.",
"message": "I2P Tabs可观的历史?"
},
"enableWebRTC": {
"description": "RTC检查箱标签。.",
"message": "传真:?"
},
"extensionDescription": {
"description": "说明延期。.",
"message": "I2P网络的增速。."
},
"extensionName": {
"description": "延期名称。.",
"message": "I2P 私人成长"
},
"extensionNameVariant": {
"description": "延期名称。.",
"message": "I2P in Private Brows - Rhizome Variant"
},
"extensionPreface": {
"description": "代页标题的序言",
"message": "I2 管理"
},
"extensionVersion": {
"description": "延长。.",
"message": "1.28"
},
"fliplinks": {
"description": "A. 推广和增加资源",
"message": "A. 推广和增加资源"
},
"forumMessage": {
"description": "求助者",
"message": "访问伊加特论坛学习更多或要求援助"
},
"headline": {
"description": "易读的因特网Browser",
"message": "易读的因特网Browser"
},
"help": {
"description": "展期页。.",
"message": "关于这一扩展的更多信息,本页访问。."
},
"helpMessage": {
"description": "求助者",
"message": "增加帮助"
},
"histDesc": {
"description": "历史行动说明",
"message": "当你的I2Ptab被关闭时,历史就自动明确。 如果你想像你那样明确历史,检查这个箱。."
},
"homepage": {
"description": "更多信息",
"message": "这方面的更多资料"
},
"hostText": {
"description": "HTTP或SOCKS5 Proxy",
"message": "东道国:"
},
"i2ppage": {
"description": "这里有更多资料。.",
"message": "这里有更多资料。."
},
"i2ptunnel": {
"description": "说明",
"message": "很少有电报和配置服务及隧道。."
},
"i2ptunnelPreface": {
"description": "代页标题的序言",
"message": "Hidden服务主管"
},
"i2ptunnelPrefacePrivate": {
"description": "代页标题的序言",
"message": "Hidden Services经理(Private)"
},
"infoMessage": {
"description": "求助者",
"message": "你们现在可以自由地打下“我们”! 你的代行现在被安排在I2P网络上匿名。 正如你所想象的那样,你的交通将通过其他网络连接起来,使他们的起源,无论是从服务器还是从自己出发。."
},
"infoTitle": {
"description": "帮助男性的标题",
"message": "I2P 帮助"
},
"ircPreface": {
"description": "代页标题的序言",
"message": "副渔民协会"
},
"ircPrefacePrivate": {
"description": "代页标题的序言",
"message": "IRC(Private)"
},
"isBase32": {
"description": "F. 集群小组基地网站的邮件32",
"message": "I2P基地32-Format地址"
},
"isHostName": {
"description": "集群小组所在地的传单",
"message": "I2P Jump人质"
},
"label-router-activepeers": {
"description": "精算师:",
"message": "精算师:"
},
"label-router-bandwidth": {
"description": "Bandwith",
"message": "Bandwith"
},
"label-router-bw-inbound-15s": {
"description": "有15人:",
"message": "有15人:"
},
"label-router-bw-inbound-1s": {
"description": "有1人:",
"message": "有1人:"
},
"label-router-bw-outbound-15s": {
"description": "第15条:",
"message": "第15条:"
},
"label-router-bw-outbound-1s": {
"description": "无限的桶1:",
"message": "无限的桶1:"
},
"label-router-net-tunnels-participating": {
"description": "过境渠道:",
"message": "过境渠道:"
},
"label-router-netdb-fastpeers": {
"description": "Fast Peers:",
"message": "Fast Peers:"
},
"label-router-netdb-highcapacitypeers": {
"description": "高能力 作者:",
"message": "高能力 作者:"
},
"label-router-netdb-isreseeding": {
"description": "重新定性:",
"message": "重新定性:"
},
"label-router-netdb-knownpeers": {
"description": "Known Peers:",
"message": "Known Peers:"
},
"label-router-peers": {
"description": "导 言",
"message": "导 言"
},
"label-router-status": {
"description": "现状:",
"message": "现状:"
},
"label-router-uptime": {
"description": "时间:",
"message": "时间:"
},
"label-router-version": {
"description": "Router Version:",
"message": "Router Version:"
},
"links": {
"description": "A. 推广和增加资源",
"message": "A. 推广和增加资源"
},
"linksExplain": {
"description": "如果你想获得更多关于I2P的资料,你可以访问这些联系。.",
"message": "如果你想获得更多关于I2P的资料,你可以访问这些联系。."
},
"mailPreface": {
"description": "代页标题的序言",
"message": "网站"
},
"mailPrefacePrivate": {
"description": "代页标题的序言",
"message": "网址:Mail(Private)"
},
"muwirePreface": {
"description": "代页标题的序言",
"message": "MuWire"
},
"muwirePrefacePrivate": {
"description": "代页标题的序言",
"message": "MuWire(Private)"
},
"newsMessage": {
"description": "求助者",
"message": "访问I2P 学习最新一倍。."
},
"onboardingButtonFive": {
"description": "改进 经验",
"message": "改进 经验"
},
"onboardingButtonFour": {
"description": "分享电影",
"message": "分享档案"
},
"onboardingButtonOne": {
"description": "I2P网络",
"message": "I2P网络"
},
"onboardingButtonThree": {
"description": "Hidden email",
"message": "Hidden email"
},
"onboardingButtonTwo": {
"description": "B. 保护网络 Bounds",
"message": "B. 保护网络 Bounds"
},
"onboardingButtonZero": {
"description": "保护你的隐私",
"message": "保护你的隐私"
},
"onboardingContentFive": {
"description": "这种扩展可以与其他延期结合起来,有时会改善其功能。 地方非传染性疾病和珠宝是加速装页、堵塞器和限制瓦斯文字的权力的有用。 对于想要阻止所有贾瓦文的用户,建议不附加说明。.",
"message": "这种扩展可以与其他延期结合起来,有时会改善其功能。 地方非传染性疾病和珠宝是加速装页、堵塞器和限制瓦斯文字的权力的有用。 对于想要阻止所有贾瓦文的用户,建议不附加说明。."
},
"onboardingContentFour": {
"description": "I2P在你分享档案时能够使用像BitTorrent这样的同侪对用户的应用,保护你的身份。 我们一个匿名的客户可在代管处获得。.",
"message": "I2P在你分享档案时能够使用像BitTorrent这样的同侪对用户的应用,保护你的身份。 我们一个匿名的客户可在代管处获得。."
},
"onboardingContentOne": {
"description": "这一扩展工作自然,因为你正在掠夺I2P地点。 如果你想把I2P用作非I2P地点的辅助性,则使用I2P的私人Browsing button在工具bar和点击新I2PBrowser Tab转向新的表格。 你在浏览互联网方面的经验可能很小。 口号可能是缓慢的,取决于你的安全水平,有些要素可能不会工作或装载。 也请你证明你是人类,而不是一种抢劫。.",
"message": "这一扩展工作自然,因为你正在掠夺I2P地点。 如果你想把I2P用作非I2P地点的辅助性,则使用I2P的私人Browsing button在工具bar和点击新I2PBrowser Tab转向新的表格。 你在浏览互联网方面的经验可能很小。 口号可能是缓慢的,取决于你的安全水平,有些要素可能不会工作或装载。 也请你证明你是人类,而不是一种抢劫。."
},
"onboardingContentThree": {
"description": "在I2P内也可提供匿名电子邮件服务,这直接通过男性获得。.",
"message": "在I2P内也可提供匿名电子邮件服务,这直接通过男性获得。."
},
"onboardingContentTwo": {
"description": "I2P通常通过UI(“Router Console”(“Router Console”)进行管理,用户有时在使用同一浏览地点访问边远地点时会发表意见。 必须防止网站能够从这个万维网和其他当地经营服务获得信息。 直截网地点仍然在消防器上,但一旦防火药集装箱请求 *.onion或*.i2p地点,便将安装集装箱。 Tor Browser的身份证管理工具控制了明确的网上表格,并且使用了“I2P”号信,或“Inprio plugin”。.",
"message": "I2P通常通过UI(“Router Console”(“Router Console”)进行管理,用户有时在使用同一浏览地点访问边远地点时会发表意见。 必须防止网站能够从这个万维网和其他当地经营服务获得信息。 直截网地点仍然在消防器上,但一旦防火药集装箱请求 *.onion或*.i2p地点,便将安装集装箱。 Tor Browser的身份证管理工具控制了明确的网上表格,并且使用了“I2P”号信,或“Inprio plugin”。."
},
"onboardingContentZero": {
"description": "在使用I2P的私人Browsing Mode时,你受到保护,不受跟踪和监测。 I2PBrowser是厨房,在你届会之后删除了你的代行历史。 这些修改确保你的隐私权和安全受到保护,因为你的代言。.",
"message": "在使用I2P的私人Browsing Mode时,你受到保护,不受跟踪和监测。 I2PBrowser是厨房,在你届会之后删除了你的代行历史。 这些修改确保你的隐私权和安全受到保护,因为你的代言。."
},
"onboardingFive": {
"description": "经验",
"message": "经验"
},
"onboardingFour": {
"description": "B. 网站的浏览",
"message": "B. 网站的浏览"
},
"onboardingOne": {
"description": "你们 经验",
"message": "你们 经验"
},
"onboardingThree": {
"description": "Hidden email",
"message": "Hidden email"
},
"onboardingTitle": {
"description": "约I2P 私人旅舍",
"message": "约I2P 私人旅舍"
},
"onboardingTwo": {
"description": "Share Files",
"message": "Share Files"
},
"onboardingZero": {
"description": "保护你的隐私",
"message": "保护你的隐私"
},
"portText": {
"description": "HTTP或SOCKS5 Proxy港",
"message": "港口:"
},
"protocolHandlerValue": {
"description": "对磁带议定书手的价值",
"message": "http://127.0.0.1:7657/i2psnark/吗?nofilter_newURL=%s\u0026action=Add\u0026foo=Add+torrentrenttorrent"
},
"proxy-check": {
"description": "准备好。.",
"message": "准备好。."
},
"proxyFailedStatus": {
"description": "失败状况。.",
"message": "没有准备好的。"
},
"proxyHelpText": {
"description": "B. 帮助精简重新启动的Tunnel但顿办法",
"message": "调整你的I2P proxy。."
},
"proxySuccessStatus": {
"description": "失败状况。.",
"message": "准备好"
},
"readyness": {
"description": "准备好。.",
"message": "准备好。."
},
"releases": {
"description": "新发行页的说明",
"message": "这里新排放的检查"
},
"resetMessage": {
"description": "Reset Tunnel但顿先生",
"message": "B. 重新定位"
},
"returnhome": {
"description": "/",
"message": "/"
},
"router-net-bw-inbound-15s": {
"description": "将Router Bandwidth外语改为15",
"message": "将Router Bandwidth外语改为15"
},
"router-net-bw-inbound-1s": {
"description": "第1条",
"message": "第1条"
},
"router-net-bw-outbound-15s": {
"description": "将Router Bandwidth外语改为15",
"message": "将Router Bandwidth外语改为15"
},
"router-net-bw-outbound-1s": {
"description": "改为Router Bandwidth外1",
"message": "改为Router Bandwidth外1"
},
"router-net-tunnels-participating": {
"description": "改为:",
"message": "改为:"
},
"router-netdb-activepeers": {
"description": "改为:",
"message": "改为:"
},
"router-netdb-fastpeers": {
"description": "将Router Fast Peers改为",
"message": "将Router Fast Peers改为"
},
"router-netdb-highcapacitypeers": {
"description": "高容量器的更换",
"message": "高容量器的更换"
},
"router-netdb-isreseeding": {
"description": "改为:",
"message": "改为:"
},
"router-netdb-knownpeers": {
"description": "将Router Known Peers改为",
"message": "将Router Known Peers改为"
},
"router-restart": {
"description": "宽恕",
"message": "宽恕"
},
"router-shutdown": {
"description": "穿梭关闭路线",
"message": "穿梭关闭路线"
},
"router-status": {
"description": "改为:",
"message": "改为:"
},
"router-uptime": {
"description": "改为:",
"message": "改为:"
},
"router-version": {
"description": "将Router Version改为",
"message": "将Router Version改为"
},
"routerConsole": {
"description": "标示路线。.",
"message": "你的I2P路线r console及其各种应用和配置。."
},
"routerPreface": {
"description": "代页标题的序言",
"message": "Router Console"
},
"routerPrefacePrivate": {
"description": "代页标题的序言",
"message": "Router Console(Private)"
},
"rpcHelpText": {
"description": "调整你的I2PControl备选办法。 调整你在这方面的可支配性选择。.",
"message": "调整你的I2PControl备选办法。 调整你在这方面的可支配性选择。."
},
"rpcHostText": {
"description": "管制港:",
"message": "管制港:"
},
"rpcPassText": {
"description": "管制护照前言:逮捕证 护照:",
"message": "管制护照前言:逮捕证 护照:"
},
"rpcPathText": {
"description": "控制包:",
"message": "控制包:"
},
"rpcPortText": {
"description": "控制旅舍:",
"message": "控制旅舍:"
},
"rtcDesc": {
"description": "海报业务说明",
"message": "RTC网站因违约而残疾,但你可以回到它身上并迫使它名誉。 如果你是Snowflake browser展的用户,这一选择是残疾的,而网络检查中心则以违约方式提出。."
},
"signingcert": {
"description": "常驻代表",
"message": "常驻代表"
},
"siteLabel": {
"description": "Label for i2psite info",
"message": "地址/新闻:"
},
"sitecert": {
"description": "证明信息:",
"message": "证明信息:"
},
"snark": {
"description": "对Bittor的通知",
"message": "快速进入Snark, Peer-to-peer I2P网络的具体档案分享申请。."
},
"sourcehead": {
"description": "来源守则:",
"message": "来源守则:"
},
"sources": {
"description": "源代码联系的说明",
"message": "加入本源代码"
},
"susimail": {
"description": "电子邮件说明",
"message": "快速进入苏西马·伊2P网络电子邮件用户。."
},
"text-section-header": {
"description": "易读的因特网Browser",
"message": "易读的因特网Browser"
},
"text-section-proxyerr-header": {
"description": "A Proxy Error公司",
"message": "A Proxy Error公司"
},
"text-section-torrents-header": {
"description": "卸货",
"message": "卸货"
},
"titlePreface": {
"description": "代页标题的序言",
"message": "I2PBrowser"
},
"titlePrefacePrivate": {
"description": "代页标题的序言",
"message": "I2P Browser(Private)"
},
"toopie": {
"description": "关于你的I2P路线地位的资料,见下文:",
"message": "关于你的I2P路线地位的资料,见下文:"
},
"toopieHtmlHeadline": {
"description": "I2P Router Information",
"message": "I2P Router Information"
},
"toopieName": {
"description": "一方的名字。.",
"message": "也是这样。 评 注"
},
"toopieTLS": {
"description": "安全小组名称。.",
"message": "特 费"
},
"topbar": {
"description": "Browse Down",
"message": "Browse Down"
},
"torPreface": {
"description": "代页标题的序言",
"message": "管理人员"
},
"torPrefacePrivate": {
"description": "代页标题的序言",
"message": "导 言"
},
"torrent-action": {
"description": "D. 所有权",
"message": "D. 所有权"
},
"torrentControls": {
"description": "前体管制",
"message": "前体管制"
},
"torrentDownloads": {
"description": "卸货",
"message": "卸货"
},
"torrentPreface": {
"description": "代页标题的序言",
"message": "Bittorrent"
},
"torrentPrefacePrivate": {
"description": "代页标题的序言",
"message": "Bittorrent (Private)"
},
"torrentui-opener": {
"description": "开放网站",
"message": "开放网站"
},
"visit-irc": {
"description": "B. 访问索马里",
"message": "B. 访问索马里"
},
"webPreface": {
"description": "代页标题的序言",
"message": "Browser"
},
"webPrefacePrivate": {
"description": "代页标题的序言",
"message": "网站Browser(Private)"
},
"webpage": {
"description": "这里有更多资料。.",
"message": "这里有更多资料。."
},
"window-visit-console": {
"description": "I2P Router Console",
"message": "I2P Router Console"
},
"window-visit-help": {
"description": "推广助产",
"message": "推广助产"
},
"window-visit-homepage": {
"description": "易读的因特网Browser",
"message": "易读的因特网Browser"
},
"window-visit-i2p": {
"description": "I2P 项目家页:",
"message": "I2P 项目家页:"
},
"window-visit-i2ptunnel": {
"description": "Hidden服务主管",
"message": "Hidden服务主管"
},
"window-visit-index": {
"description": "网页:",
"message": "网页:"
},
"window-visit-releases": {
"description": "产出:",
"message": "产出:"
},
"window-visit-router": {
"description": "Router Console",
"message": "Router Console"
},
"window-visit-settings": {
"description": "开放环境",
"message": "开放环境"
},
"window-visit-snark": {
"description": "BitTorrent",
"message": "BitTorrent"
},
"window-visit-sources": {
"description": "资料来源法典:",
"message": "资料来源法典:"
},
"window-visit-susimail": {
"description": "E-Mail",
"message": "E-Mail"
},
"window-visit-toopie": {
"description": "通 力",
"message": "通 力"
},
"window-visit-torrent": {
"description": "关于援助,访问亲临帮助页",
"message": "关于援助,访问亲临帮助页"
},
"windowVisitConsole": {
"description": "Router Console标签。.",
"message": "Router Console:"
},
"windowVisitHelppage": {
"description": "推广标签的助页。.",
"message": "网址:"
},
"windowVisitHomepage": {
"description": "推广标签的主页。.",
"message": "家庭页:"
},
"windowVisitI2ptunnel": {
"description": "标题一二",
"message": "Hidden服务经理:"
},
"windowVisitReleases": {
"description": "访问释放页",
"message": "推广:"
},
"windowVisitSnark": {
"description": "Bittorrent勋爵",
"message": "Bitt:"
},
"windowVisitSources": {
"description": "源码联系的标题",
"message": "推广源法典:"
},
"windowVisitSusimail": {
"description": "电子邮件的标题",
"message": "E-Mail:"
},
"windowVisitWebPage": {
"description": "B. 访问吉隆布的主页",
"message": "推广家庭页:"
}
}

BIN
alternate-address.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

View File

@@ -1,3 +1,7 @@
/* eslint-disable no-continue */
/* eslint-disable no-await-in-loop */
/* eslint-disable max-len */
/* eslint-disable no-ternary */
var titlepref = chrome.i18n.getMessage("titlePreface");
var titleprefpriv = chrome.i18n.getMessage("titlePrefacePrivate");
var webpref = chrome.i18n.getMessage("webPreface");
@@ -10,373 +14,465 @@ var torrentpref = chrome.i18n.getMessage("torrentPreface");
var torrentprefpriv = chrome.i18n.getMessage("torrentPrefacePrivate");
var tunnelpref = chrome.i18n.getMessage("i2ptunnelPreface");
var tunnelprefpriv = chrome.i18n.getMessage("i2ptunnelPrefacePrivate");
var ircpref = chrome.i18n.getMessage("ircPreface");
var ircprefpriv = chrome.i18n.getMessage("ircPrefacePrivate");
var extensionpref = chrome.i18n.getMessage("extensionPreface");
var muwirepref = chrome.i18n.getMessage("muwirePreface");
var muwireprefpriv = chrome.i18n.getMessage("muwirePrefacePrivate");
var botepref = chrome.i18n.getMessage("botePreface");
var blogpref = chrome.i18n.getMessage("blogPreface");
var blogprefpriv = chrome.i18n.getMessage("blogPrefacePrivate");
var torpref = chrome.i18n.getMessage("torPreface");
var torprefpriv = chrome.i18n.getMessage("torPrefacePrivate");
function onError(err) {
console.log("(background)", err);
}
function logContexts(contexts) {
if (contexts) {
console.log(contexts);
}
}
function onContextsGot(contexts) {
var ids = [];
for (let context of contexts) {
console.log(`Name: ${context.name}`);
ids.push(context.name);
}
const prefList = [
{ name: titlepref, color: "orange", icon: "fingerprint" },
{ name: blogpref, color: "pink", icon: "pet" },
{ name: webpref, color: "red", icon: "circle" },
{ name: routerpref, color: "blue", icon: "briefcase" },
{ name: tunnelpref, color: "green", icon: "tree" },
{ name: mailpref, color: "yellow", icon: "briefcase" },
{ name: torrentpref, color: "purple", icon: "chill" },
{ name: ircpref, color: "red", icon: "vacation" },
{ name: torpref, color: "purple", icon: "circle" },
{ name: muwirepref, color: "turquoise", icon: "gift" },
{ name: botepref, color: "blue", icon: "fence" },
];
const ids = contexts.map((context) => context.name);
console.log("Checking new contexts");
if (ids.indexOf(titlepref) == -1) {
browser.contextualIdentities
.create({
name: titlepref,
color: "orange",
icon: "fingerprint"
})
.then(onCreated, onError);
}
if (ids.indexOf(webpref) == -1) {
browser.contextualIdentities
.create({
name: webpref,
color: "red",
icon: "circle"
})
.then(onCreated, onError);
}
if (ids.indexOf(routerpref) == -1) {
browser.contextualIdentities
.create({
name: routerpref,
color: "blue",
icon: "briefcase"
})
.then(onCreated, onError);
}
if (ids.indexOf(tunnelpref) == -1) {
browser.contextualIdentities
.create({
name: tunnelpref,
color: "green",
icon: "tree"
})
.then(onCreated, onError);
}
if (ids.indexOf(mailpref) == -1) {
browser.contextualIdentities
.create({
name: mailpref,
color: "yellow",
icon: "briefcase"
})
.then(onCreated, onError);
}
if (ids.indexOf(torrentpref) == -1) {
browser.contextualIdentities
.create({
name: torrentpref,
color: "purple",
icon: "chill"
})
.then(onCreated, onError);
}
prefList.forEach((pref) => {
if (ids.indexOf(pref.name) === -1) {
browser.contextualIdentities.create(pref).then(onCreated, onNotCreated);
}
});
}
browser.windows.onCreated.addListener(onContextsGot);
// every time a window opens, call onContextsGot
browser.tabs.onCreated.addListener(onContextsGot);
function onContextsError() {
console.log("Error finding contextual identities, is the API enabled?");
}
function onCreated(context) {
console.log(`New identity's ID: ${context.cookieStoreId}.`);
console.log(" ID:", context.cookieStoreId, "created.");
}
browser.contextualIdentities.query({}).then(onContextsGot, onError);
function onNotCreated(context) {
console.log("ID:", context.cookieStoreId, "not created.");
}
browser.contextualIdentities.query({}).then(onContextsGot, onContextsError);
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os == "android") {
} else {
gettingInfo.then((got) => {
if (got.os != "android") {
browser.windows.onCreated.addListener(themeWindow);
browser.windows.onFocusChanged.addListener(themeWindow);
browser.windows.onRemoved.addListener(themeWindow);
browser.tabs.onUpdated.addListener(themeWindowByTab);
browser.tabs.onActivated.addListener(themeWindowByTab);
browser.tabs.onUpdated.addListener(themeWindow);
browser.tabs.onActivated.addListener(themeWindow);
}
});
function themeWindowByTab(tabId) {
function tabWindow(tab) {
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os == "android") {
getwindow = browser.tabs.get(tab.tabId);
getwindow.then(themeWindow);
} else {
getwindow = browser.windows.get(tab.windowId);
getwindow.then(themeWindow);
}
});
}
if (typeof tabId === "number") {
tab = browser.tabs.get(tabId);
tab.then(tabWindow);
} else {
tabWindow(tabId);
}
}
function themeWindow(window) {
// Check if the window is in private browsing
function logTabs(tabInfo) {
function onContextGotTheme(context) {
if (context.name == titlepref) {
console.log("Active in I2P window");
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: "#FFC56D",
toolbar: "#FFC56D"
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: "#FFC56D",
toolbar: "#FFC56D"
}
});
}
} else if (context.name == routerpref) {
console.log("Active in Router Console window");
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: "#A4C8E1",
toolbar: "#A4C8E1"
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: "#A4C8E1",
toolbar: "#A4C8E1"
}
});
}
} else if (context.name == tunnelpref) {
console.log("Active in Hidden Services Manager window");
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: "#D9D9D6",
toolbar: "#D9D9D6"
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: "#D9D9D6",
toolbar: "#D9D9D6"
}
});
}
} else if (context.name == mailpref) {
console.log("Active in Web Mail window");
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: "#F7E59A",
toolbar: "#F7E59A"
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: "#F7E59A",
toolbar: "#F7E59A"
}
});
}
} else if (context.name == torrentpref) {
console.log("Active in Bittorrent window");
if (window.incognito) {
browser.theme.update(window.id, {
colors: {
frame: "#A48FE1",
toolbar: "#A48FE1"
}
});
} else {
browser.theme.update(window.id, {
colors: {
frame: "#A48FE1",
toolbar: "#A48FE1"
}
});
}
} else {
console.log("Not active in I2P window");
browser.theme.reset(window.id);
}
}
if (
tabInfo[0].cookieStoreId != "firefox-default" &&
tabInfo[0].cookieStoreId != "firefox-private"
) {
browser.contextualIdentities
.get(tabInfo[0].cookieStoreId)
.then(onContextGotTheme, onError);
} else {
browser.theme.reset(window.id);
}
}
var querying = browser.tabs.query({
currentWindow: true,
active: true
});
querying.then(logTabs, onError);
}
function setTitle(window) {
function logTabs(tabInfo) {
console.log(tabInfo);
function onContextGotTitle(context) {
if (context.name == titlepref) {
console.log("Active in I2P window");
if (window.incognito) {
browser.windows.update(window.id, {
titlePreface: titleprefpriv + ": "
});
} else {
browser.windows.update(window.id, {
titlePreface: titlepref + ": "
});
}
} else if (context.name == webpref) {
console.log("Active in Web window");
if (window.incognito) {
browser.windows.update(window.id, {
titlePreface: ""
});
} else {
browser.windows.update(window.id, {
titlePreface: ""
});
}
} else if (context.name == routerpref) {
console.log("Active in Router Console window");
if (window.incognito) {
browser.windows.update(window.id, {
titlePreface: titleprefpriv + " - " + routerprefpriv + ": "
});
} else {
browser.windows.update(window.id, {
titlePreface: titlepref + " - " + routerpref + ": "
});
}
} else if (context.name == tunnelpref) {
console.log("Active in Hidden Services Manager window");
if (window.incognito) {
browser.windows.update(window.id, {
titlePreface: titleprefpriv + " - " + tunnelprefpriv + ": "
});
} else {
browser.windows.update(window.id, {
titlePreface: titlepref + " - " + tunnelpref + ": "
});
}
} else if (context.name == mailpref) {
console.log("Active in Web Mail window");
if (window.incognito) {
browser.windows.update(window.id, {
titlePreface: titleprefpriv + " - " + mailprefpriv + ": "
});
} else {
browser.windows.update(window.id, {
titlePreface: titlepref + " - " + mailpref + ": "
});
}
} else if (context.name == torrentpref) {
console.log("Active in I2P window");
if (window.incognito) {
browser.windows.update(window.id, {
titlePreface: titleprefpriv + " - " + torrentprefpriv + ": "
});
} else {
browser.windows.update(window.id, {
titlePreface: titlepref + " - " + torrentpref + ": "
});
}
}
}
if (
tabInfo[0].cookieStoreId != "firefox-default" &&
tabInfo[0].cookieStoreId != "firefox-private"
) {
browser.contextualIdentities
.get(tabInfo[0].cookieStoreId)
.then(onContextGotTitle, onError);
} else {
function dynamicTheme() {
console.log("(theme)Active in I2P App window");
let ctheme = browser.theme.getCurrent();
ctheme.then(setDynamicTheme);
function setDynamicTheme(oldtheme) {
if (window.incognito) {
browser.windows.update(window.id, {
titlePreface: ""
});
browser.theme.update(window.id, dtheme);
} else {
browser.windows.update(window.id, {
titlePreface: ""
});
browser.theme.update(window.id, dtheme);
}
}
}
function browserTheme() {
console.log("(theme)Active in I2P window");
let ctheme = browser.theme.getCurrent();
ctheme.then(setBrowserTheme);
function setBrowserTheme(oldtheme) {
btheme.images = oldtheme.images;
if (window.incognito) {
browser.theme.update(window.id, btheme);
} else {
browser.theme.update(window.id, btheme);
}
}
}
function logTabs(tabInfo) {
for (const tab of tabInfo) {
console.debug("(theme) logging tab", tab);
}
function onContextGotTheme(context) {
console.debug("(theme) deciding theme for context", context);
if (context.name == titlepref) {
browserTheme();
browser.pageAction.show(tabInfo[0].id);
} else if (context.name == routerpref) {
console.log("(theme) Active in Router Console window");
dynamicTheme();
} else if (context.name == tunnelpref) {
console.log("(theme) Active in Hidden Services Manager window");
dynamicTheme();
} else if (context.name == mailpref) {
console.log("(theme) Active in Web Mail window");
dynamicTheme();
} else if (context.name == torrentpref) {
console.log("(theme) Active in Bittorrent window");
dynamicTheme();
} else if (context.name == botepref) {
console.log("(theme) Active in Bote window");
dynamicTheme();
} else if (context.name == ircpref) {
console.log("(theme) Active in IRC window");
dynamicTheme();
} else if (context.name == torpref) {
console.log("(theme) Active in Tor Manager window");
dynamicTheme();
} else if (context.name == blogpref) {
console.log("(theme) (theme) Active in Blog window");
dynamicTheme();
} else if (context.name == muwirepref) {
console.log("(theme) Active in MuWire window");
dynamicTheme();
} else {
console.log("(theme) Not active in I2P Window");
unsetTheme();
}
}
if (
tabInfo[0].cookieStoreId != "firefox-default" &&
tabInfo[0].cookieStoreId != "firefox-private"
) {
browser.contextualIdentities
.get(tabInfo[0].cookieStoreId)
.then(onContextGotTheme, onThemeError);
} else {
console.log("(theme) default context identified");
unsetTheme();
}
}
var querying = browser.tabs.query({
currentWindow: true,
active: true
active: true,
});
querying.then(logTabs, onError);
querying.then(logTabs, onThemeError);
}
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os == "android") {
} else {
browser.windows.onCreated.addListener(() => {
/* var gettingStoredSettings = chrome.storage.local.get();
gettingStoredSettings.then(setupProxy, onError); */
chrome.storage.local.get(function(got) {
setupProxy();
});
});
function queryTitle(window) {
// Check if the window is in private browsing
function onContextError() {
console.log("(theme) Error finding context");
}
});
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os == "android") {
} else {
function setTitle(title, privTitle) {
const titlePreface = window.incognito ? privTitle : title;
browser.windows.update(window.id, { titlePreface });
}
function onContextGotTitle(context) {
const titleMap = {
titlepref: "Active in I2P window",
muwirepref: "Active in MuWire window",
routerpref: "Active in Router Console window",
botepref: "Active in Bote window",
tunnelpref: "Active in Hidden Services Manager window",
mailpref: "Active in I2P Web Mail window",
blogpref: "Active in I2P Blog window",
torrentpref: "Active in I2P Torrent window",
ircpref: "Active in IRC window",
torpref: "Active in Tor Manager window",
};
const { name } = context;
console.log(titleMap[name]);
setTitle(name, `${name}priv`);
}
function logTabs(tabInfo) {
const { cookieStoreId } = tabInfo[0];
if (
cookieStoreId === "firefox-default" ||
cookieStoreId === "firefox-private"
) {
setTitle("", "");
} else {
browser.contextualIdentities
.get(cookieStoreId)
.then(onContextGotTitle, onContextError);
}
}
const querying = browser.tabs.query({ currentWindow: true, active: true });
querying.then(logTabs, onContextError);
}
var gettingListenerInfo = browser.runtime.getPlatformInfo();
gettingListenerInfo.then((got) => {
function onPlatformError() {
console.log("Error finding platform info");
}
if (got.os != "android") {
browser.tabs.onCreated.addListener(() => {
var getting = browser.windows.getCurrent({
populate: true
populate: true,
});
getting.then(setTitle, onError);
getting.then(queryTitle, onPlatformError);
});
}
});
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os == "android") {
} else {
browser.tabs.onActivated.addListener(() => {
var getting = browser.windows.getCurrent({
populate: true
populate: true,
});
getting.then(setTitle, onError);
getting.then(queryTitle, onPlatformError);
});
}
});
function handleUpdated(updateInfo) {
if (updateInfo.theme.colors) {
console.log(`Theme was applied: ${updateInfo.theme}`);
} else {
console.log(`Theme was removed`);
function handleClick() {
console.log("Opening page action");
browser.pageAction.openPopup();
}
browser.pageAction.onClicked.addListener(handleClick);
async function checkCertificate(details) {
if (!details.url.startsWith("https") || !details.url.includes(".i2p")) {
return;
}
const activeTabs = await browser.tabs.query({ active: true });
if (!activeTabs) {
return;
}
for (const tab of activeTabs) {
if (details.url !== tab.url) {
continue;
}
try {
const securityInfo = await browser.webRequest.getSecurityInfo(
details.requestId,
{ certificateChain: true }
);
console.log("(cert) state is complete", securityInfo);
console.log("(cert) certificates", securityInfo.certificates);
} catch (error) {
console.error(error);
}
}
}
browser.theme.onUpdated.addListener(handleUpdated);
/* Listen for onHeaderReceived for the target page.
Set "blocking" and "responseHeaders". */
browser.webRequest.onHeadersReceived.addListener(
checkCertificate,
{ urls: ["<all_urls>"] },
["blocking", "responseHeaders"]
);
function onClosedWindowCheck() {
const contextQuery = browser.contextualIdentities.query({
name: "titlepref",
});
function checkTabs(context) {
for (let ctx of context) {
function deleteIfEmpty(tabs) {
if (tabs.length === 0) {
browser.contextualIdentities.remove(ctx.cookieStoreId);
}
}
const tabs = browser.tabs.query({ cookieStoreId: ctx.cookieStoreId });
tabs.then(deleteIfEmpty, onError);
}
}
contextQuery.then(checkTabs, onError);
}
async function onOpenedWindowCheck() {
const contexts = await browser.contextualIdentities.query({
name: titlepref,
});
function deleteContextIfNoTabs(tabs, context) {
if (tabs.length == 0 && context != 0) {
browser.contextualIdentities.remove(context.cookieStoreId);
}
// once we're done, re-create all the contexts
browser.contextualIdentities.query({}).then(onContextsGot, onContextsError);
}
async function checkTabs(context) {
const tabs = await browser.tabs.query({
cookieStoreId: context.cookieStoreId,
});
await deleteContextIfNoTabs(tabs, context);
}
for (const context of contexts) {
await checkTabs(context);
}
}
onOpenedWindowCheck();
onContextsGot();
browser.tabs.onRemoved.addListener(onClosedWindowCheck);
if (browser.windows === undefined) {
console.log("windows unavailable on android", browser.runtime.PlatformOs);
browser.windows.onRemoved.addListener(onClosedWindowCheck);
browser.windows.onCreated.addListener(onOpenedWindowCheck);
}
function putCurrentThemeInLocalStorage() {
let mine = isMyTheme();
mine.then(processTheme, themeStoreError);
function processTheme(mineval) {
console.debug("(theme) validating the current theme:", !mineval);
if (mineval) {
return;
}
// get the current theme:
const currentTheme = browser.theme.getCurrent();
currentTheme.then(storeTheme, themeStoreError);
function storeTheme(theme) {
console.debug("(theme) stored the current theme:", theme);
browser.storage.local.set({ name: "theme", theme });
}
}
function themeStoreError(err) {
console.warn("(theme) theme storage error", err);
}
}
function putLatestThemeIDInLocalStorage(extensionInfo) {
let mine = isMyTheme();
mine.then(processTheme, themeStoreError);
function processTheme(mineval) {
console.debug("(theme) validating the current constant theme:", !mineval);
if (mineval) {
return;
}
console.debug("(theme) storing theme by ID", extensionInfo.id);
if (extensionInfo.type === "theme") {
let themeID = extensionInfo.id;
browser.storage.local.set({ themeID });
}
}
function themeStoreError(err) {
console.warn("(theme) theme ID storage error", err);
}
}
function restoreLatestThemeIDInLocalStorage() {
const storedTheme = browser.storage.local.get("themeID");
storedTheme.then(restoreTheme, restoreThemeError);
function restoreTheme(theme) {
if (theme.themeID) {
let dis = browser.management.setEnabled(theme.themeID, false);
dis.then(function () {
console.debug("(theme) theme restored by ID", theme.themeID);
browser.management.setEnabled(theme.themeID, true);
});
}
}
function restoreThemeError(err) {
console.warn("(theme) theme restore error", err);
}
}
browser.management.onEnabled.addListener(putLatestThemeIDInLocalStorage);
function onThemeError(err) {
console.warn("(theme) theme error", err);
}
browser.theme.onUpdated.addListener(putCurrentThemeInLocalStorage);
browser.windows.onCreated.addListener(putCurrentThemeInLocalStorage);
browser.tabs.onCreated.addListener(putCurrentThemeInLocalStorage);
function unsetTheme() {
const storedTheme = browser.storage.local.get("theme");
storedTheme.then(restoreTheme, restoreThemeError);
async function restoreTheme(theme) {
let mt = await isMyTheme();
if (mt) {
if (theme.theme) {
console.debug("(theme) analyzing theme", theme.theme);
if (theme.theme.colors) {
theme.theme.images = {};
console.warn(
"(theme) There's not a way to restore theme images yet."
);
browser.theme.update(theme.theme);
console.log("(theme) restored the stored theme", theme);
} else {
browser.theme.reset();
}
}
restoreLatestThemeIDInLocalStorage();
}
}
function restoreThemeError(err) {
console.debug("(theme) theme restore error", err);
}
}
let btheme = {
colors: {
frame: "#363A68",
toolbar: "#363A68",
tab_text: "#ECF3FF",
},
};
let dtheme = {
colors: {
frame: "#4456B7",
toolbar: "#4456B7",
tab_text: "#ECF3FF",
},
};
async function isMyTheme() {
function hasMatchingColors(theme, targetColors) {
console.debug("(theme) comparison", theme.colors, targetColors.colors);
if (theme.colors === null || targetColors.colors === null) {
return false;
}
return (
theme.colors.frame == targetColors.colors.frame &&
theme.colors.toolbar == targetColors.colors.toolbar &&
theme.colors.tab_text == targetColors.colors.tab_text
);
}
const currentTheme = await browser.theme.getCurrent();
const isLightTheme = hasMatchingColors(currentTheme, dtheme);
const isDarkTheme = hasMatchingColors(currentTheme, btheme);
console.debug(`Is current theme a dynamic theme? ${isLightTheme}`);
console.debug(`Is current theme a browser theme? ${isDarkTheme}`);
return isLightTheme || isDarkTheme;
}

View File

@@ -1,172 +1,210 @@
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os != "android") {
function bookmarks(bookmarkToolbar) {
console.log("Setting up bookmark toolbar", bookmarkToolbar);
function bookHome(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let host = info.value.http.split(":")[0];
let port = info.value.http.split(":")[1];
if (port == "7644") {
var createBookmark = browser.bookmarks.create({
url: "about:I2p",
title: "I2P Home Page",
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
} else {
var createBookmark = browser.bookmarks.create({
url: browser.runtime.getURL("home.html"),
title: "I2P Home Page",
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
}
console.log("(bookmarks) adding home page bookmark");
}
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
var gettingInfo = browser.proxy.settings.get({});
gettingInfo.then(gotProxyInfo);
}
}
function bookTorrent(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let host = info.value.http.split(":")[0];
let port = info.value.http.split(":")[1];
if (port == "7644") {
var createBookmark = browser.bookmarks.create({
url: "http://localhost:7657/i2psnark",
title: "Bittorrent",
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
} else {
var createBookmark = browser.bookmarks.create({
url:
"http://" + control_host + ":" + control_port + "/i2psnark",
title: "Bittorrent",
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
}
}
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
var gettingInfo = browser.proxy.settings.get({});
gettingInfo.then(gotProxyInfo);
}
}
function bookMail(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let host = info.value.http.split(":")[0];
let port = info.value.http.split(":")[1];
if (port == "7644") {
var createBookmark = browser.bookmarks.create({
url: "http://localhost:7657/webmail",
title: "Web Mail",
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
} else {
var createBookmark = browser.bookmarks.create({
url: "http://" + control_host + ":" + control_port + "/webmail",
title: "Web Mail",
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
}
console.log("(bookmarks) adding webmail bookmark");
}
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
var gettingInfo = browser.proxy.settings.get({});
gettingInfo.then(gotProxyInfo);
}
}
function bookI2PTunnel(bookmarkItems) {
if (!bookmarkItems.length) {
function gotProxyInfo(info) {
let host = info.value.http.split(":")[0];
let port = info.value.http.split(":")[1];
if (port == "7644") {
var createBookmark = browser.bookmarks.create({
url: "http://localhost:7657/i2ptunnelmgr",
title: "Hidden Services Manager",
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
} else {
var createBookmark = browser.bookmarks.create({
url:
"http://" +
control_host +
":" +
control_port +
"/i2ptunnelmgr",
title: "Hidden Services Manager",
parentId: bookmarkToolbar[0].id
});
createBookmark.then(onCreated);
}
console.log("(bookmarks) adding i2ptunnel bookmark");
}
console.log(
"(bookmarks) checking if we're running in an I2P Browser"
);
var gettingInfo = browser.proxy.settings.get({});
gettingInfo.then(gotProxyInfo);
}
}
/**
* @fileoverview I2P Bookmark Manager
* Handles bookmark creation and management for I2P extension toolbar
*/
function onRejected(error) {
console.log(`An error: ${error}`);
}
function onCreated(node) {
console.log("Bookmarked", node);
}
// Constants for bookmark configuration
const BOOKMARK_CONFIG = {
TOOLBAR_NAME: "I2P Toolbar",
DEFAULT_BOOKMARKS: [
{
title: "I2P Extension Home Page",
getUrl: () => browser.runtime.getURL("home.html"),
},
{
title: "Bittorrent",
getUrl: (host, port) => `http://${host}:${port}/i2psnark`,
},
{
title: "Hidden Services Manager",
getUrl: (host, port) => `http://${host}:${port}/i2ptunnel`,
},
{
title: "Web Mail",
getUrl: (host, port) => `http://${host}:${port}/webmail`,
},
{
title: "I2P Console",
getUrl: (host, port) => `http://${host}:${port}/home`,
},
],
};
var b0 = browser.bookmarks.search({
title: "I2P Home Page"
});
b0.then(bookHome, onRejected);
/**
* Bookmark Manager class for handling I2P bookmarks
*/
class I2PBookmarkManager {
constructor() {
this.controlHost = control_host();
this.controlPort = control_port();
}
var b1 = browser.bookmarks.search({
title: "Bittorrent"
});
b1.then(bookTorrent, onRejected);
var b2 = browser.bookmarks.search({
title: "Hidden Services Manager"
});
b2.then(bookI2PTunnel, onRejected);
var b3 = browser.bookmarks.search({
title: "Web Mail"
});
b3.then(bookMail, onRejected);
/**
* Creates a bookmark with error handling
* @param {Object} params Bookmark parameters
* @return {Promise<browser.bookmarks.BookmarkTreeNode>}
*/
async createBookmark({ url, title, parentId }) {
try {
const bookmark = await browser.bookmarks.create({ url, title, parentId });
console.info("Created bookmark:", title);
return bookmark;
} catch (error) {
console.error(`Failed to create bookmark ${title} :`, error);
throw error;
}
}
var bt = browser.bookmarks.search({
query: "Toolbar"
});
bt.then(bookmarks);
function handleCreated(id, bookmarkInfo) {
var propValue;
for (var propName in bookmarkInfo) {
propValue = bookmarkInfo[propName];
console.log(propName, propValue);
/**
* Creates the I2P toolbar folder
* @param {browser.bookmarks.BookmarkTreeNode} toolbar Parent toolbar node
* @return {Promise<browser.bookmarks.BookmarkTreeNode>}
*/
async createToolbarFolder(toolbar) {
try {
const existing = await browser.bookmarks.search(
BOOKMARK_CONFIG.TOOLBAR_NAME
);
if (existing.length) {
return existing[0];
}
}
browser.bookmarks.onCreated.addListener(handleCreated);
const folder = await this.createBookmark({
title: BOOKMARK_CONFIG.TOOLBAR_NAME,
parentId: toolbar.id,
});
await this.populateToolbar(folder);
return folder;
} catch (error) {
console.error("Failed to create toolbar folder:", error);
throw error;
}
}
/**
* Creates a single default bookmark if it doesn't exist
* @param {Object} bookmark Bookmark configuration
* @param {string} parentId Parent folder ID
*/
async createDefaultBookmark(bookmark, parentId) {
try {
const existing = await browser.bookmarks.search({
title: bookmark.title,
});
if (!existing.length) {
await this.createBookmark({
url: bookmark.getUrl(this.controlHost, this.controlPort),
title: bookmark.title,
parentId,
});
}
} catch (error) {
console.error(
`Failed to create default bookmark ${bookmark.title}:`,
error
);
}
}
/**
* Populates toolbar with default bookmarks
* @param {browser.bookmarks.BookmarkTreeNode} toolbar Toolbar folder node
*/
async populateToolbar(toolbar) {
try {
await Promise.all(
BOOKMARK_CONFIG.DEFAULT_BOOKMARKS.map((bookmark) =>
this.createDefaultBookmark(bookmark, toolbar.id)
)
);
await this.updateBookmarkState(true);
} catch (error) {
console.error("Failed to populate toolbar:", error);
}
}
/**
* Updates bookmark state in storage
* @param {boolean} state New bookmark state
*/
async updateBookmarkState(state) {
try {
await browser.storage.local.set({ bookmarks_state: state });
if (typeof defaultSettings !== "undefined") {
defaultSettings.bookmarks_state = state;
}
} catch (error) {
console.error("Failed to update bookmark state:", error);
}
}
/**
* Initializes bookmark setup
* @returns {Promise<void>}
*/
async initialize() {
try {
const platform = await browser.runtime.getPlatformInfo();
if (platform.os === "android") {
console.info("Skipping bookmark setup on Android");
return;
}
const toolbars = await browser.bookmarks.search({ query: "Toolbar" });
if (!toolbars.length) {
throw new Error("Browser toolbar not found");
}
await this.createToolbarFolder(toolbars[0]);
} catch (error) {
console.error("Bookmark initialization failed:", error);
}
}
/**
* Checks if bookmarks need to be initialized
* @param {Object} state Current bookmark state
*/
async checkInitialization(state = {}) {
if (!state.bookmarks_state) {
await this.initialize();
}
}
}
// Singleton instance
const bookmarkManager = new I2PBookmarkManager();
/**
* Initialize bookmarks system
*/
async function initializeBookmarks() {
if (!browser?.windows) {
console.warn("Browser windows API not available");
return;
}
try {
const state = await browser.storage.local.get("bookmarks_state");
await bookmarkManager.checkInitialization(state);
} catch (error) {
console.error("Failed to initialize bookmarks:", error);
await bookmarkManager.initialize();
}
}
// Setup event listeners
document.addEventListener("DOMContentLoaded", () => {
const bookmarksButton = document.getElementById("bookmarksButton");
if (bookmarksButton) {
bookmarksButton.addEventListener("click", () =>
bookmarkManager.initialize()
);
}
});
// Initialize if browser API is available
if (browser) {
initializeBookmarks();
}

150
cert.js Normal file
View File

@@ -0,0 +1,150 @@
/**
* @fileoverview Certificate and Host Verification Module
* Handles I2P certificate verification and host information display
*/
// Constants
const I2P_SUFFIX = ".i2p";
const B32_SUFFIX = "b32.i2p";
const HTTPS_PREFIX = "https";
const HOST_LENGTH_THRESHOLD = 51;
/**
* Message keys for i18n
* @enum {string}
*/
const MessageKeys = {
SITE_LABEL: "siteLabel",
CERT_LABEL: "CertLabel",
IS_HOSTNAME: "isHostName",
IS_BASE32: "isBase32",
CERT_PRESENT: "certPresent",
CERT_ABSENT: "certAbsent",
};
/**
* DOM element IDs
* @enum {string}
*/
const ElementIds = {
TYPE_LABEL: "TypeLabel",
CERT_LABEL: "CertLabel",
ADDRESS_INFO: "AddressInfo",
ADDRESS_CERT_INFO: "AddressCertInfo",
SIGNED_LABEL: "SignedLabel",
};
/**
* Updates element content with i18n message
* @param {string} elementId - Target DOM element ID
* @param {string} messageKey - i18n message key
* @return {void}
*/
function updateContent(elementId, messageKey) {
const element = document.getElementById(elementId);
if (!element) {
console.warn(`Element not found : ${elementId}`);
return;
}
const message = chrome.i18n.getMessage(messageKey);
if (!message) {
console.warn(`Translation missing for: ${messageKey}`);
return;
}
element.textContent = message;
}
/**
* Clears content of specified element
* @param {string} elementId - Target DOM element ID
* @return {void}
*/
function clearContent(elementId) {
const element = document.getElementById(elementId);
if (!element) {
console.warn(`Element not found : ${elementId}`);
return;
}
element.textContent = "";
}
/**
* Extracts I2P host from URL
* @param {string} url - Full URL
* @return {string} I2P host
*/
function extractI2PHost(url) {
const baseHost = url.split(I2P_SUFFIX)[0] + I2P_SUFFIX;
return baseHost;
}
/**
* Determines host type and updates UI
* @param {string} host - I2P host
* @return {void}
*/
function updateHostTypeInfo(host) {
if (host.length < HOST_LENGTH_THRESHOLD) {
updateContent(ElementIds.ADDRESS_INFO, MessageKeys.IS_HOSTNAME);
} else if (host.endsWith(B32_SUFFIX)) {
updateContent(ElementIds.ADDRESS_INFO, MessageKeys.IS_BASE32);
}
}
/**
* Handles certificate verification and UI updates
* @param {string} url - Page URL
* @param {string} host - I2P host
* @return {Promise<void>}
*/
async function handleCertificateVerification(url, host) {
if (url.startsWith(HTTPS_PREFIX)) {
updateContent(ElementIds.ADDRESS_CERT_INFO, MessageKeys.CERT_PRESENT);
try {
const response = await fetch(host);
console.info("Certificate verification completed:", response);
} catch (error) {
console.error("Certificate verification failed:", error);
}
} else {
updateContent(ElementIds.ADDRESS_CERT_INFO, MessageKeys.CERT_ABSENT);
clearContent(ElementIds.SIGNED_LABEL);
}
}
/**
* Processes active tab information
* @param {browser.tabs.Tab[]} tabs - Active tab information
* @return {Promise<void>}
*/
async function processActiveTab(tabs) {
if (!tabs || !tabs[0] || !tabs[0].url) {
console.error("Invalid tab information");
return;
}
const url = tabs[0].url;
const host = extractI2PHost(url);
updateHostTypeInfo(host);
await handleCertificateVerification(url, host);
}
/**
* Initializes the certificate verification UI
* @return {void}
*/
function initializeCertUI() {
updateContent(ElementIds.TYPE_LABEL, MessageKeys.SITE_LABEL);
updateContent(ElementIds.CERT_LABEL, MessageKeys.CERT_LABEL);
browser.tabs
.query({ active: true })
.then(processActiveTab)
.catch((error) => console.error("Tab processing failed:", error));
}
// Initialize certificate verification
initializeCertUI();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 215 KiB

62
config.js Normal file
View File

@@ -0,0 +1,62 @@
function proxy_scheme() {
console.info("(config)Got i2p:", getFuncName());
return getFromStorageProxyScheme();
}
function proxy_host() {
console.info("(config)Got i2p:", getFuncName());
return getFromStorageHost();
}
function proxy_port() {
console.info("(config)Got i2p:", getFuncName());
return getFromStoragePort();
}
function control_host() {
console.info("(config)Got i2p:", getFuncName());
return getFromStorageControlHost();
}
function control_port() {
console.info("(config)Got i2p:", getFuncName());
return getFromStorageControlPort();
}
function rpc_host() {
console.info("(config)Got i2p:", getFuncName());
return getFromStorageRPCHost();
}
function rpc_port() {
console.info("(config)Got i2p:", getFuncName());
return getFromStorageRPCPort();
}
function rpc_path() {
console.info("(config)Got i2p:", getFuncName());
getFromStorageRPCPath();
}
function rpc_pass() {
console.info("(config)Got i2p:", getFuncName());
return getFromStorageRPCPass();
}
function bt_rpc_host() {
console.info("(config)Got i2p:", getFuncName());
return getFromStorageBTRPCHost();
}
function bt_rpc_port() {
console.info("(config)Got i2p:", getFuncName());
return getFromStorageBTRPCPort();
}
function bt_rpc_path() {
console.info("(config)Got i2p:", getFuncName());
return getFromStorageBTRPCPath();
}
function bt_rpc_pass() {
console.info("(config)Got i2p:", getFuncName());
return getFromStorageBTRPCPass();
}
function getFuncName() {
return getFuncName.caller.name;
}
var disable_history = false;

193
consoleinfo.js Normal file
View File

@@ -0,0 +1,193 @@
/**
* @fileoverview I2P Router Console Status Manager
* Handles router console connectivity checking and UI updates
*/
// Constants
const CONSOLE_CONFIG = {
ROUTER_URL: "http://127.0.0.1:7657",
WELCOME_PATH: "/welcome",
FETCH_OPTIONS: {
method: "GET",
cache: "no-store",
redirect: "follow",
},
};
const UI_ELEMENTS = {
ROUTER_STATUS: "router-check",
ROUTER_CLASS: ".routerness",
HIDDEN_CLASS: "hidden",
};
const MESSAGE_KEYS = {
SUCCESS: "consoleSuccessStatus",
FAILURE: "consoleFailedStatus",
};
/**
* UI Manager for handling element visibility
*/
class UIManager {
/**
* Toggle element visibility
* @param {Element|NodeList} elements - Elements to modify
* @param {boolean} show - Whether to show or hide
*/
static toggleVisibility(elements, show) {
try {
if (!elements) {
throw new Error("Elements parameter is null or undefined");
}
const elementArray =
elements instanceof NodeList ? Array.from(elements) : [elements];
elementArray.forEach((element) => {
if (element && element.style !== undefined && element.style !== null) {
const action = show ? "remove" : "add";
element.classList[action](UI_ELEMENTS.HIDDEN_CLASS);
console.debug(`(consoleinfo) ${show ? "showing" : "hiding"} element`);
} else {
console.warn(
"(consoleinfo) Invalid element encountered during visibility toggle"
);
}
});
} catch (error) {
console.error("Visibility toggle failed:", error);
throw error;
}
}
/**
* Update element content by ID
* @param {string} elementId - Target element ID
* @param {string} messageKey - i18n message key
*/
static updateContent(elementId, messageKey) {
try {
const element = document.getElementById(elementId);
if (!element) {
throw new Error(`Element not found : ${elementId}`);
}
element.textContent = chrome.i18n.getMessage(messageKey);
} catch (error) {
console.error("Content update failed:", error);
}
}
/**
* Get elements by selector
* @param {string} selector - CSS selector
* @return {?NodeList}
*/
static getElements(selector) {
try {
return document.querySelectorAll(selector);
} catch (error) {
console.error("Element selection failed:", error);
return null;
}
}
}
/**
* Router Console Manager
*/
class RouterConsoleManager {
/**
* Check router console connectivity
* @return {Promise<void>}
*/
static async checkConsoleStatus() {
console.info("(consoleinfo) Checking router console status");
try {
const response = await fetch(
`${CONSOLE_CONFIG.ROUTER_URL}${CONSOLE_CONFIG.WELCOME_PATH}`,
CONSOLE_CONFIG.FETCH_OPTIONS
);
if (!response.ok) {
throw new Error(`Console response not OK : ${response.status}`);
}
await this.handleConsoleSuccess(response);
} catch (error) {
await this.handleConsoleError(error);
}
}
/**
* Handle successful console connection
* @param {Response} response - Fetch response
*/
static async handleConsoleSuccess(response) {
console.info("(consoleinfo) Router console check successful");
try {
UIManager.updateContent(UI_ELEMENTS.ROUTER_STATUS, MESSAGE_KEYS.SUCCESS);
const routerElements = UIManager.getElements(UI_ELEMENTS.ROUTER_CLASS);
if (routerElements) {
UIManager.toggleVisibility(routerElements, true);
}
} catch (error) {
console.error("Console success handling failed:", error);
}
}
/**
* Handle console connection failure
* @param {Error} error - Connection error
*/
static async handleConsoleError(error) {
console.error("(consoleinfo) Router console check failed:", error);
try {
UIManager.updateContent(UI_ELEMENTS.ROUTER_STATUS, MESSAGE_KEYS.FAILURE);
const routerElements = UIManager.getElements(UI_ELEMENTS.ROUTER_CLASS);
if (routerElements) {
UIManager.toggleVisibility(routerElements, false);
}
} catch (additionalError) {
console.error("Console error handling failed:", additionalError);
}
}
/**
* Initialize console monitoring
*/
static initialize() {
try {
this.checkConsoleStatus();
console.info("(consoleinfo) Router console monitoring initialized");
} catch (error) {
console.error("Console initialization failed:", error);
}
}
}
// Event Listeners
document.addEventListener(
"DOMContentLoaded",
() => {
RouterConsoleManager.initialize();
},
{
passive: true,
capture: false,
}
);
// Export for testing
if (typeof module !== "undefined" && module.exports) {
module.exports = {
RouterConsoleManager,
UIManager,
CONSOLE_CONFIG,
UI_ELEMENTS,
MESSAGE_KEYS,
};
}

View File

@@ -1,35 +1,71 @@
var infoTitle = document.getElementById("text-section-header");
infoTitle.textContent = chrome.i18n.getMessage("infoTitle");
/*
var helpMessage = document.getElementById("window-create-forum-panel");
helpMessage.textContent = chrome.i18n.getMessage("forumMessage");
*/
/*
var helpMessage = document.getElementById('window-create-help-panel');
helpMessage.textContent = chrome.i18n.getMessage("helpMessage")
*/
/*
var newsMessage = document.getElementById("window-create-news-panel");
newsMessage.textContent = chrome.i18n.getMessage("newsMessage");
*/
var clearData = document.getElementById("clear-browser-data");
clearData.textContent = chrome.i18n.getMessage("clearData");
/*
document.addEventListener("click", e => {
browser.runtime.sendMessage({ url: "http://proxy.i2p" });
});
function proxyContent(message) {
var proxyData = document.getElementById("proxy-health");
proxyData.textContent = message;
console.log("Event occurred", message);
function contentUpdateById(id, message) {
let infoTitle = document.getElementById(id);
let messageContent = chrome.i18n.getMessage(message);
if (infoTitle === null) {
console.log("content error", id, messageContent);
return;
}
infoTitle.textContent = messageContent;
}
browser.runtime.onMessage.addListener(proxyContent);
*/
// Information Section
contentUpdateById("text-section-header", "extensionName");
contentUpdateById("description", "extensionDescription");
contentUpdateById("i2pbrowser-version", browser.runtime.getManifest().version);
/*
function signalWebRTC(val){
console.log("signal", val)
// Control Section
contentUpdateById("controlHeader", "controlHeader");
contentUpdateById("controlExplain", "controlExplain");
contentUpdateById("clear-browser-data", "clearData");
contentUpdateById("clear-desc", "clearDesc");
contentUpdateById("enable-web-rtc", "enableWebRTC");
contentUpdateById("rtcDesc", "rtcDesc");
contentUpdateById("disable-history", "disableHistory");
//contentUpdateById("disable-referers", "disableReferers");
contentUpdateById("histDesc", "histDesc");
// Application Section
contentUpdateById("applicationHeader", "applicationHeader");
contentUpdateById("applicationExplain", "applicationExplain");
contentUpdateById("window-visit-index", "windowVisitHelppage");
contentUpdateById("help", "help");
contentUpdateById("window-visit-router", "windowVisitConsole");
contentUpdateById("routerConsole", "routerConsole");
contentUpdateById("window-visit-homepage", "extensionName");
contentUpdateById("abouthome", "abouthome");
contentUpdateById("window-visit-i2ptunnel", "windowVisitI2ptunnel");
contentUpdateById("i2ptunnel", "i2ptunnel");
contentUpdateById("window-visit-susimail", "windowVisitSusiMail");
contentUpdateById("susimail", "susimail");
contentUpdateById("window-visit-snark", "windowVisitSnark");
contentUpdateById("snark", "snark");
// Homepage Section
contentUpdateById("window-visit-webpage", "windowVisitWebPage");
contentUpdateById("webpage", "help");
contentUpdateById("window-visit-sources", "windowVisitSources");
contentUpdateById("sources", "sources");
contentUpdateById("window-visit-releases", "windowVisitReleases");
contentUpdateById("releases", "releases");
function hide(elements) {
const elems = Array.isArray(elements) ? elements : [elements];
for (let i = 0; i < elems.length; i++) {
const el = elems[i];
if (el.style) {
console.log("(content) hiding");
el.classList.add("hidden");
}
}
}
function unhide(elements) {
const elems = Array.isArray(elements) ? elements : [elements];
elems.forEach((el) => {
if (el.style) {
//el.style.display = "inline-block";
console.log("(content) unhiding");
el.classList.remove("hidden");
}
});
}
*/

View File

@@ -1,75 +1,161 @@
//var windowIds = []
var titlepref = chrome.i18n.getMessage("titlePreface");
/**
* @fileoverview I2P Container Context Manager
* Handles container tab creation and management for I2P browsing contexts
*/
function onError(error) {
console.log(`Error: ${error}`);
// Constants
const UI_STRINGS = {
TITLE_PREFACE: chrome.i18n.getMessage("titlePreface"),
API_ERROR_MESSAGE:
"browser.contextualIdentities not available. Check that the privacy.userContext.enabled pref is set to true, and reload the add-on.",
NO_IDENTITIES_MESSAGE: "No identities returned from the API.",
};
const TAB_ACTIONS = {
NEW_TAB: "new-i2p browser tab",
CLOSE_ALL: "close-all i2p browser tabs",
};
const TAB_OPTIONS = [
{
text: "New I2P Browser Tab",
action: TAB_ACTIONS.NEW_TAB,
},
{
text: "Close All I2P Browser Tabs",
action: TAB_ACTIONS.CLOSE_ALL,
},
];
/**
* Handles browser operation errors
* @param {Error} error - Browser operation error
*/
function handleError(error) {
console.error("Container operation failed:", error);
}
function eventHandler(event) {
function onCreated(windowInfo) {
console.log(`Created window: ${windowInfo.id}`);
browser.tabs.create({
/**
* Creates a new tab in specified container window
* @param {Object} windowInfo - Window information
* @param {string} cookieStoreId - Container identity
*/
async function createContainerTab(windowInfo, cookieStoreId) {
try {
await browser.tabs.create({
windowId: windowInfo.id,
url: "about:blank",
cookieStoreId: event.target.dataset.identity
cookieStoreId: cookieStoreId,
});
console.info(`Created container tab in window : ${windowInfo.id}`);
} catch (error) {
handleError(error);
}
if (event.target.dataset.action == "create") {
var creating = browser.tabs.create({
cookieStoreId: event.target.dataset.identity
});
creating.then(onCreated, onError);
}
if (event.target.dataset.action == "close-all") {
browser.tabs
.query({
cookieStoreId: event.target.dataset.identity
})
.then(tabs => {
browser.tabs.remove(tabs.map(i => i.id));
});
}
}
/**
* Handles container tab operations
* @param {Event} event - UI event
*/
async function handleContainerAction(event) {
event.preventDefault();
}
const { action, identity } = event.target.dataset;
function createOptions(node, identity) {
for (let option of ["Create", "Close All"]) {
let a = document.createElement("a");
a.href = "#";
a.innerText = option;
a.dataset.action = option.toLowerCase().replace(" ", "-");
a.dataset.identity = identity.cookieStoreId;
a.addEventListener("click", eventHandler);
node.appendChild(a);
try {
switch (action) {
case TAB_ACTIONS.NEW_TAB:
const window = await browser.windows.create();
await createContainerTab(window, identity);
break;
case TAB_ACTIONS.CLOSE_ALL:
const tabs = await browser.tabs.query({ cookieStoreId: identity });
await browser.tabs.remove(tabs.map((tab) => tab.id));
break;
default:
console.warn("Unknown container action:", action);
}
} catch (error) {
handleError(error);
}
}
var div = document.getElementById("identity-list");
if (browser.contextualIdentities === undefined) {
div.innerText =
"browser.contextualIdentities not available. Check that the privacy.userContext.enabled pref is set to true, and reload the add-on.";
} else {
browser.contextualIdentities
.query({
name: titlepref
})
.then(identities => {
if (!identities.length) {
div.innerText = "No identities returned from the API.";
return;
}
for (let identity of identities) {
let row = document.createElement("div");
let span = document.createElement("span");
span.className = "identity";
span.innerText = identity.name;
span.style = `color: ${identity.color}`;
console.log(identity);
row.appendChild(span);
createOptions(row, identity);
div.appendChild(row);
}
/**
* Creates UI elements for container options
* @param {HTMLElement} parentNode - Container for options
* @param {Object} identity - Container identity
*/
function createContainerOptions(parentNode, identity) {
TAB_OPTIONS.forEach((option) => {
const link = document.createElement("a");
Object.assign(link, {
href: "#",
innerText: option.text,
dataset: {
action: option.action,
identity: identity.cookieStoreId,
},
});
link.addEventListener("click", handleContainerAction);
parentNode.appendChild(link);
});
}
/**
* Creates UI element for container identity
* @param {Object} identity - Container identity
* @returns {HTMLElement}
*/
function createIdentityElement(identity) {
const row = document.createElement("div");
const span = document.createElement("div");
span.className = "identity";
span.innerText = identity.name;
row.appendChild(span);
createContainerOptions(row, identity);
return row;
}
/**
* Initializes container UI
* @param {HTMLElement} containerList - Container list element
*/
async function initializeContainerUI(containerList) {
if (!browser.contextualIdentities) {
containerList.innerText = UI_STRINGS.API_ERROR_MESSAGE;
return;
}
try {
const identities = await browser.contextualIdentities.query({
name: UI_STRINGS.TITLE_PREFACE,
});
if (!identities.length) {
containerList.innerText = UI_STRINGS.NO_IDENTITIES_MESSAGE;
return;
}
identities.forEach((identity) => {
const element = createIdentityElement(identity);
containerList.appendChild(element);
console.debug("Added container identity:", identity.name);
});
} catch (error) {
handleError(error);
containerList.innerText = error.message;
}
}
// Initialize container management
const identityList = document.getElementById("identity-list");
if (identityList) {
initializeContainerUI(identityList);
} else {
console.error("Identity list container not found");
}

357
debian/changelog vendored
View File

@@ -1,3 +1,360 @@
i2psetproxy.js (2.8.3-1) UNRELEASED; urgency=low
* Fix context recreation bug
-- idk <hankhill19580@gmail.com> Fri, 20 Feb 2025 12:00:00 -0000
i2psetproxy.js (2.8.1-1) UNRELEASED; urgency=low
* 2.8.0/1 release
-- idk <hankhill19580@gmail.com> Fri, 07 Feb 2025 12:00:00 -0000
i2psetproxy.js (2.7.1-1) UNRELEASED; urgency=low
* Make `Referer:` header handling more fine-grained
-- idk <hankhill19580@gmail.com> Fri, 04 Sep 2024 17:38:04 -0400
i2psetproxy.js (2.6.1-1) UNRELEASED; urgency=low
* Fix bug where all local services were routed to the routerconsole container
-- idk <hankhill19580@gmail.com> Sun, 18 Aug 2024 21:20:04 -0400
i2psetproxy.js (2.5.9-1) UNRELEASED; urgency=low
* Minor refactoring, simplifications
-- idk <hankhill19580@gmail.com> Thu, 10 Jul 2024 13:40:40 -0400
i2psetproxy.js (1.49-1) UNRELEASED; urgency=low
* Fix proxy error page load.
* lots of cleanup
-- idk <hankhill19580@gmail.com> Tue, 20 Jun 2023 15:40:40 -0400
i2psetproxy.js (1.47-1) UNRELEASED; urgency=low
* only reset the theme if we're resetting from one we own
-- idk <hankhill19580@gmail.com> Sun, 11 Jun 2023 14:05:08 -0400
i2psetproxy.js (1.45-1) UNRELEASED; urgency=low
* Refactor scrub-and-capture code
* Fix issue where user themes were overwritten
-- idk <hankhill19580@gmail.com> Sat, 10 Jun 2023 23:51:21 -0400
i2psetproxy.js (1.43-1) UNRELEASED; urgency=low
* Fix wrong color pageAction icon
* Add router status to proxy error page
-- idk <hankhill19580@gmail.com> Sun, 24 Oct 2022 09:35:20 -0400
i2psetproxy.js (1.41-1) UNRELEASED; urgency=low
* Fix wrong color pageAction icon
* Add router status to proxy error page
-- idk <hankhill19580@gmail.com> Sun, 24 Oct 2022 09:21:20 -0400
i2psetproxy.js (0.135-1) UNRELEASED; urgency=low
* Style update
* Fix compatibility with third-party themes
* Update text
* Improve translation coverage
* Descriptive proxy error page
-- idk <hankhill19580@gmail.com> Sun, 16 Oct 2022 09:21:20 -0400
i2psetproxy.js (0.133-1) UNRELEASED; urgency=low
* Add machine translations for several languages
-- idk <hankhill19580@gmail.com> Mon, 31 May 2022 16:28:06 -0400
i2psetproxy.js (0.131-1) UNRELEASED; urgency=low
* Add several new contextual identities for plugin apps
* Add option to set the homepage and new tab page on the first run
-- idk <hankhill19580@gmail.com> Fri, 11 Feb 2022 20:28:16 -0400
i2psetproxy.js (0.125-1) UNRELEASED; urgency=low
* Bump and resubmit to mozilla.
-- idk <hankhill19580@gmail.com> Wed, 3 Nov 2021 00:20:33 -0400
i2psetproxy.js (0.123-1) UNRELEASED; urgency=low
* Bump and resubmit to mozilla.
* I am not going to optionally keep cookies.
* That would be introducing a pointless security issue.
-- idk <hankhill19580@gmail.com> Wed, 30 Oct 2021 10:11:51 -0400
i2psetproxy.js (0.121-1) UNRELEASED; urgency=low
* switch to browser_specific_settings manifest key
-- idk <hankhill19580@gmail.com> Wed, 13 Oct 2021 21:28:28 -0400
i2psetproxy.js (0.119-1) UNRELEASED; urgency=low
* Fixes to ease releasing via AMO
-- idk <hankhill19580@gmail.com> Wed, 13 Oct 2021 20:37:30 -0400
i2psetproxy.js (0.117-1) UNRELEASED; urgency=low
* Switch to legwork for search provider.
* admin isn't answering, but the service is up unlike yacy.idk.i2p.
-- idk <hankhill19580@gmail.com> Mon, 4 Oct 2021 20:38:59 -0400
i2psetproxy.js (0.115-1) UNRELEASED; urgency=low
* Improve functionality of X-I2P-Location and X-I2P-Torrentlocation
* Fix usage of browser.theme.reset()
* Add checks to disable features that are broken on Android
-- idk <hankhill19580@gmail.com> Fri, 1 Oct 2021 15:29:22 -0400
i2psetproxy.js (0.113-1) UNRELEASED; urgency=low
* Fix checks on BRB, railroad containers
-- idk <hankhill19580@gmail.com> Sun, 26 Sep 2021 00:37:22 -0400
i2psetproxy.js (0.111-1) UNRELEASED; urgency=low
* simplify background theme issue fix
-- idk <hankhill19580@gmail.com> Wed, 07 Jul 2021 23:27:27 -0400
i2psetproxy.js (0.109-1) UNRELEASED; urgency=low
* connection interrupted mid release, retry failed validation. Bump and retry
-- idk <hankhill19580@gmail.com> Wed, 07 Jul 2021 22:00:25 -0400
connection interrupted mid release, retry failed validation. Bump and retry
i2psetproxy.js (0.107-1) UNRELEASED; urgency=low
* Small code fixes
* Fix for interference with non-I2P containers
-- idk <hankhill19580@gmail.com> Wed, 07 Jul 2021 22:00:25 -0400
i2psetproxy.js (0.105-1) UNRELEASED; urgency=low
* Add help page for configuring i2pcontrol
* Add help page for configuring i2psnark-rpc
* Update the icons
-- idk <hankhill19580@gmail.com> Wed, 26 May 2021 12:56:56 -0400
i2psetproxy.js (0.103-1) UNRELEASED; urgency=low
* Fix for double-test issue on /home.html page in the extension
* Fix for broken options menu
-- idk <hankhill19580@gmail.com> Wed, 26 May 2021 12:56:56 -0400
i2psetproxy.js (0.101-1) UNRELEASED; urgency=low
* Sweeping changes to styles
* fix for issue when using noscript and visiting susimail
-- idk <hankhill19580@gmail.com> Mon, 24 May 2021 3:41:35 -0400
i2psetproxy.js (0.99-1) UNRELEASED; urgency=low
* Sweeping changes to styles
* fix for issue when using noscript and visiting susimail
-- idk <hankhill19580@gmail.com> Mon, 24 May 2021 2:05:21 -0400
i2psetproxy.js (0.97-1) UNRELEASED; urgency=low
* Fix theme issue, add x-i2p-torrentlocation HEADER support
-- idk <hankhill19580@gmail.com> FRI, 5 FEB 2021 1:02:55 -0400
i2psetproxy.js (0.95-1) UNRELEASED; urgency=low
* Fix github #102 and #103
-- idk <hankhill19580@gmail.com> Sat, 21 DEC 2020 6:15:05 -0400
i2psetproxy.js (0.93-1) UNRELEASED; urgency=low
* Emergency fix of the first one
-- idk <hankhill19580@gmail.com> Sat, 14 DEC 2020 5:18:53 -0400
i2psetproxy.js (0.91-1) UNRELEASED; urgency=low
* Exclude clearnet code hosting sites from scrub checks
-- idk <hankhill19580@gmail.com> Sat, 14 DEC 2020 2:46:23 -0400
i2psetproxy.js (0.89-1) UNRELEASED; urgency=low
* Pages with lots of AJAX requests could trigger a performance degradation
* Improve performance of x-i2p-* headers and meta tags
-- idk <hankhill19580@gmail.com> Sat, 13 DEC 2020 2:22:00 -0400
i2psetproxy.js (0.87-1) UNRELEASED; urgency=low
* Disable searching for i2p sites in non-i2p search engines
* Add contexts for i2pbote and Dispatch
* Remain in tighter control of x-i2p-torrentlocation priority
-- idk <hankhill19580@gmail.com> Sat, 10 NOV 2020 1:33:50 -0400
i2psetproxy.js (0.85-1) UNRELEASED; urgency=low
* Fix a bug which was causing i2psnark to fail to isolate.
-- idk <hankhill19580@gmail.com> Sat, 10 NOV 2020 1:33:50 -0400
i2psetproxy.js (0.83-1) UNRELEASED; urgency=low
* Add a tab for I2P-Native Dispatch
-- idk <hankhill19580@gmail.com> Sat, 10 NOV 2020 22:00:01 -0400
i2psetproxy.js (0.81-1) UNRELEASED; urgency=low
* X-I2P-TorrentLocation header
* Visual tweaks
* Deprecate localhost browser container permanently
* Isolation rules improvements
-- idk <hankhill19580@gmail.com> Sat, 07 NOV 2020 21:34:25 -0400
i2psetproxy.js (0.79-1) UNRELEASED; urgency=low
* Pin application tabs to the front of the tab order
* Refine pageaction behavior
-- idk <hankhill19580@gmail.com> Mon, 24 SEP 2020 20:18:03 -0400
i2psetproxy.js (0.77-1) UNRELEASED; urgency=low
* Implement x-i2p-location header
-- idk <hankhill19580@gmail.com> Mon, 24 SEP 2020 20:18:03 -0400
i2psetproxy.js (0.73-1) UNRELEASED; urgency=low
* Update bookmarks format
* Deprecate WebRTC State Management
-- idk <hankhill19580@gmail.com> Mon, 22 JUN 2020 11:22:37 -0400
i2psetproxy.js (0.73-1) UNRELEASED; urgency=low
* Update bookmarks format
-- idk <hankhill19580@gmail.com> Mon, 22 JUN 2020 19:21:23 -0400
i2psetproxy.js (0.71-1) UNRELEASED; urgency=low
* Fix incomplete bugfix from 0.69
-- idk <hankhill19580@gmail.com> Tue, 24 MAR 2020 0:19:59 -0400
i2psetproxy.js (0.71-1) UNRELEASED; urgency=low
* Fix incomplete bugfix from 0.69
-- idk <hankhill19580@gmail.com> Tue, 24 MAR 2020 0:19:59 -0400
i2psetproxy.js (0.69-1) UNRELEASED; urgency=low
* Add MuWire contextual ID
* Fix bug occurring on certain modded I2P installs
-- idk <hankhill19580@gmail.com> Tue, 24 MAR 2020 0:12:02 -0400
i2psetproxy.js (0.67-1) UNRELEASED; urgency=low
* Tweak some default settings that should have gone into 65
-- idk <hankhill19580@gmail.com> Tue, 17 MAR 2020 22:58:55 -0400
i2psetproxy.js (0.65-1) UNRELEASED; urgency=low
* Initial prototype of certs implementation
* Use "pinned apptabs" to minimize the number of tabs occupied by an app
* Get ready for self-hosted updates but with bittorrent because it's cooler
-- idk <hankhill19580@gmail.com> Tue, 17 MAR 2020 22:58:55 -0400
i2psetproxy.js (0.63-1) UNRELEASED; urgency=low
* other containerizers bugfix
-- idk <hankhill19580@gmail.com> Mon, 02 MAR 2020 17:54:26 -0400
i2psetproxy.js (0.61-1) UNRELEASED; urgency=low
* other containerizers bugfix
-- idk <hankhill19580@gmail.com> Mon, 02 MAR 2020 17:46:24 -0400
i2psetproxy.js (0.59-1) UNRELEASED; urgency=low
* transmission-rpc based torrent controls
* bugfixes
-- idk <hankhill19580@gmail.com> Tue, 25 FEB 2020 20:52:19 -0400
i2psetproxy.js (0.57-1) UNRELEASED; urgency=low
* Snowflake compatibility
* Lots of small compatibility fixes
* More linter errors
* Make it multilingual again
* Distribute a torrent and a magnet link with the plugin of the plugin
-- idk <hankhill19580@gmail.com> Thu, 4 JAN 2020 16:43:58 -0400
i2psetproxy.js (0.55-1) UNRELEASED; urgency=low
* Get rid of Web Browsing context launcher
* Fix linter errors
* Tolerate themes
* Tolerate other containerizers
-- idk <hankhill19580@gmail.com> Thu, 2 JAN 2020 16:47:33 -0400
i2psetproxy.js (0.53-1) UNRELEASED; urgency=low
* Quick Fix
-- idk <hankhill19580@gmail.com> Sat, 23 NOV 2019 20:11:30 -0400
i2psetproxy.js (0.51-1) UNRELEASED; urgency=low
* Numerous code cleanups, compatibility fixes
* enable-disable history
* better homepage, better control panel, saner options
-- idk <hankhill19580@gmail.com> Sat, 23 NOV 2019 20:10:30 -0400
i2psetproxy.js (0.49-1) UNRELEASED; urgency=low
* fix tabs

6
debian/postinst vendored Normal file
View File

@@ -0,0 +1,6 @@
#! /bin/sh
ln -sf /usr/share/webext/i2ppb@eyedeekay.github.io \
/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/i2ppb@eyedeekay.github.io
touch /usr/share/webext/i2ppb@eyedeekay.github.io/manifest.json

18
debian/rules vendored
View File

@@ -3,19 +3,7 @@
%:
dh $@
export PREFIX=debian/i2psetproxy.js/usr
override_dh_auto_install:
mkdir -p $$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io \
$$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io/i2pcontrol \
$$(pwd)/debian/i2psetproxy.js/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
cp -r ./icons/ $$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io/
cp -r ./options/ $$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io/
cp -r ./_locales/ $$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io/
cp ./*.js $$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io/
cp ./i2pcontrol/i2pcontrol.js $$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io/i2pcontrol/
cp ./*.html $$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io/
cp ./*.css $$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io/
cp ./*.md $$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io/
cp ./manifest.json $$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io/
cp ./LICENSE $$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io/
ln -sf $$(pwd)/debian/i2psetproxy.js/usr/share/webext/i2ppb@eyedeekay.github.io \
$$(pwd)/debian/i2psetproxy.js/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
make install

View File

@@ -1 +1,3 @@
i2psetproxy.js.gif
i2psetproxy.js.gif
smartlander.pdf
browser.pdf

BIN
drag-sidebar-after.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 KiB

BIN
drag-sidebar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 KiB

View File

@@ -1,3 +0,0 @@
Private Browsing with I2P Tab
=============================

View File

@@ -1,45 +0,0 @@
Usage with standalone HTTP Proxy
--------------------------------
This functionality is currently disabled.
I developed a simple HTTP proxy that can be used with this extension to enable the
user to initiate a re-start of the HTTP proxy tunnel, with a new set of keys and a
new destination. This, combined with re-setting the browser settings back to the
original defaults(which is also done by the HTTP Proxy when re-initiated), amounts
to a "Fresh Identity" feature for the I2P browser.
Before you begin, get the [Standalone HTTP proxy from here](http://github.com/eyedeekay/httptunnel)
and run it like so:
httpproxy -littleboss=start
You can also use 'go get'
go get -u github.com/eyedeekay/httptunnel/httpproxy
If you change the default host and port, you will need to alter the following guide.
In order to use it with the custom HTTP proxy, open the "Add-On's" menu and select
the options for the i2psetproxy.js plugin. Change the "Proxy" configuration from
Host: 127.0.0.1
Port: 4444
to
Host: 127.0.0.1
Port: 7950
and change the "Control" configuration from:
Host: 127.0.0.1
Port: 4444
to
Host: 127.0.0.1
Port: 7951
Now, when you press the Toopie button in the toolbar, you will see in the output
of the HTTP proxy that it has been re-started.

View File

@@ -1,17 +1,3 @@
function identifyProtocolHandler(url) {
//console.log("looking for handler-able requests")
if (routerHost(url)) {
if (url.includes(encodeURIComponent("ext+rc:"))) {
return url.replace(encodeURIComponent("ext+rc:"), "");
} else if (url.includes("ext+rc:")) {
return url.replace("ext+rc:", "");
}
} else if (url.includes("ext+rc:")) {
return url;
}
return false;
}
function trimHost(url) {
let hostname = "";
let prefix = "";
@@ -26,9 +12,9 @@ function trimHost(url) {
return path;
}
var handlerSetup = async function(requestDetails) {
function handlerSetup(requestDetails) {
//console.log("checking protocol handler listener")
var rwurl = identifyProtocolHandler(requestDetails.url);
let rwurl = identifyProtocolHandler(requestDetails.url);
if (rwurl != false) {
console.log("(handler) rewrite URL requested", rwurl);
requestDetails.redirectUrl = rwurl;
@@ -36,10 +22,9 @@ var handlerSetup = async function(requestDetails) {
requestDetails.originUrl = trimHost(rwurl);
}
return requestDetails;
};
browser.webRequest.onBeforeRequest.addListener(
handlerSetup,
{ urls: ["<all_urls>"] },
["blocking"]
);
}
/*
browser.webRequest.onBeforeRequest.addListener(handlerSetup, {
urls: ['<all_urls>'],
});
*/

326
home.css
View File

@@ -3,27 +3,116 @@
margin: 0
}
html {
height: 100%
margin: 0 4%;
padding: 0 20px;
min-height: 100%;
background: #9ab;
background: #fff;
scrollbar-color: #bcd #789
}
body {
margin: 0;
padding: 20px 40px;
font-family: Open Sans,Noto Sans,Segoe UI,sans-serif;
font-size: 12pt;
color: #fff;
text-decoration: none;
word-wrap: break-word;
background: #f2f2f2
}
h1,
h2,
h3,
h4 {
display: block;
font-weight: 700
}
h1 {
text-transform: uppercase;
font-weight: 900;
font-size: 200%
}
h2 {
font-size: 140%
}
h3 {
font-size: 120%
}
h4 {
margin-bottom: 5px;
text-align: right;
text-transform: none;
font-size: 90%;
font-weight: 600;
font-style: italic
}
p {
margin-bottom: 15px;
width: 100%;
line-height: 1.4;
word-wrap: break-word;
text-align: justify;
text-decoration: none
}
ul {
margin: 10px 20px;
list-style: none
}
li {
margin-left: 0;
padding: 12px 15px 20px;
width: calc(100% - 40px);
text-align: justify;
border: 1px solid #363a68;
border-radius: 25px;
box-shadow: inset 0 0 0 1px #363a68;
background: #4456b7
}
li li {
padding-bottom: 0;
width: calc(100% - 40px);
text-align: left;
border: none;
border-top: 1px solid #9ab;
box-shadow: none
}
li li:first-of-type {
margin-top: 15px;
border-top: none
}
li a:first-of-type {
display: block;
width: 100%
}
#applicationExplain {
float: unset
}
li+li {
margin-top: 15px
}
h3+ul,
ul+h2,
ul+h3 {
margin-top: 20px
}
a,
button {
color: #3b6bbf;
color: #f9f7dc;
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
outline: 0
}
.applicationDesc {
color: #81888f;
color: #fff;
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
outline: 0
}
.applicationDesc:hover,
a:hover,
button:hover {
color: #495057;
color: #ff9e7a;
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
@@ -32,111 +121,49 @@ button:hover {
button {
border: none;
cursor: pointer;
color: #3b6bbf;
color: #fff;
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
outline: 0
}
body {
display: flex;
flex-direction: column;
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
width: 100%;
height: 100%;
margin: 0 auto;
padding: 0;
color: #495057;
background-attachment: fixed;
background-size: 100% 100%;
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
outline: 0
outline: 0;
background: unset
}
.background {
background-color: #f8f8ff;
height: 100%
}
p {
line-height: 32px;
font-size: 17px;
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
text-decoration: none;
color: #495057;
font-weight: 700;
word-wrap: break-word;
outline: 0
}
.content {
min-height: 3rem;
padding: 1rem;
margin: 1.5rem;
display: inline-block;
border: 1px solid #d9d9d6;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc;
background: #f8f8ff;
min-width: 95%
}
.application-info,
.extended-info {
min-height: 3rem;
padding: 1rem;
margin-top: 1.5rem;
min-height: 3rem;
min-width: 95%;
display: inline-block;
border: 1px solid #d9d9d6;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc;
background: #f8f8ff;
min-width: 95%
border: 1px solid #363a68;
border-radius: 25px;
background: #363a68
}
h1 {
margin-right: auto;
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
font-weight: 600;
font-size: 32px;
text-transform: uppercase;
color: #41465f;
border: 1px solid #dee2e6;
border-radius: 2px 2px 0 0;
width: 90%;
padding-left: 5%
}
h2,
h3 {
margin-right: auto;
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
font-weight: 600;
font-size: 25px;
text-transform: uppercase;
color: #41465f;
border: 1px solid #dee2e6;
border-radius: 2px 2px 0 0;
width: 90%;
padding-left: 5%
}
h4 {
margin-right: auto;
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
font-weight: 600;
font-size: 20px!important;
text-transform: uppercase;
color: #41465f;
border: 1px solid #dee2e6;
border-radius: 2px 2px 0 0;
width: 90%;
padding-left: 5%
#header,
.application-info,
.browser-info,
.extended-info,
.search-info {
margin-top: 1.5rem;
padding: 1rem;
min-height: 3rem;
min-width: 95%;
display: inline-block;
border: 1px solid #787ff6;
border-radius: 25px;
box-shadow: inset 0 0 0 1px #787ff6,0 0 1px #ccc;
background: #363a68
}
.showhider {
margin-right: auto;
font-family: "Droid Sans","Noto Sans",Ubuntu,"Segoe UI","Lucida Grande",Verdana,Helvetica,sans-serif;
text-transform: uppercase;
background: 0 0!important;
border: none;
padding: 0!important;
text-transform: uppercase;
background: none!important;
border: none;
width: 90%;
color: #3b6bbf;
color: #fff;
text-decoration: none;
font-weight: 700;
word-wrap: break-word;
@@ -151,71 +178,50 @@ h4 {
flex-direction: row;
margin-bottom: 80px
}
ul {
margin-left: 2rem;
list-style: none
}
li {
min-height: 3rem;
padding: .5rem;
background: #dee2e6;
border: 1px solid #dee2e6;
width: 64%;
min-width: 64%;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc;
margin: .5rem .5rem .5rem 32%
}
#readyness {
min-height: 5rem;
padding: .5rem;
margin: .5rem;
#readyness,
#routerness {
padding-top: 1rem;
padding-bottom: 1rem;
margin: 1rem;
width: 42%;
min-width: 42%;
background: #dee2e6;
text-align: center!important;
border: 1px solid #dee2e6;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
min-width: 42%
}
#onboarding {
min-height: 5rem;
padding: .5rem;
margin: .5rem;
margin-top: 4rem;
width: 42%;
min-width: 42%;
font-size: 2rem;
background: #a48fe1;
background: #4456b7;
text-align: center!important;
border: 1px solid #a48fe1;
border-radius: 2px;
border: 2px solid #787ff6;
border-radius: 25px;
float: left;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
}
#i2pbrowser-description {
padding-top: 1rem;
padding-bottom: 1rem;
width: 50%;
min-width: 50%;
min-height: 5rem;
padding: .5rem;
display: inline;
background: #dee2e6;
float: right;
border: 1px solid #dee2e6;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
display: inline-block
}
#applicationExplain,
#linksExplain {
min-height: 5rem;
padding: .5rem;
margin: .5rem;
width: 30%;
min-width: 30%;
background: #dee2e6;
float: left;
text-align: center!important;
border: 1px solid #dee2e6;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
width: 100%;
min-width: 100%
}
#applicationExplain,
#controlExplain {
min-height: 5rem;
padding: .5rem;
margin: .5rem;
width: 98%;
min-width: 98%
}
#proxyReady {
min-height: 3rem;
@@ -223,12 +229,12 @@ li {
margin: .2rem;
width: 38%;
min-width: 38%;
display: inline;
background: #d9d9d6;
display: inline-block;
background: #363a68;
float: right;
text-align: center!important;
border: 1px solid #d9d9d6;
border-radius: 2px;
border: 2px solid #787ff6;
border-radius: 25px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
}
#proxyUnready {
@@ -237,13 +243,12 @@ li {
margin: .2rem;
width: 38%;
min-width: 38%;
display: inline;
display: inline-block;
background: #363a68;
float: right;
text-align: center!important;
border: 1px solid #ffc56d;
border-radius: 2px;
background: #ffc56d;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
border: 2px solid #787ff6;
border-radius: 25px
}
#consoleOn {
min-height: 3rem;
@@ -251,7 +256,7 @@ li {
margin: .2rem;
width: 38%;
min-width: 38%;
display: inline;
display: inline-block;
float: left;
text-align: center!important;
border: 1px solid #f7e59a;
@@ -264,9 +269,6 @@ li {
text-align: left;
display: none
}
#proxy-check {
visibility: hidden
}
#info-content {
display: none
}
@@ -275,6 +277,9 @@ li {
visibility: visible;
opacity: 1
}
img {
max-width: 100%
}
img.readyness {
height: 100%;
width: auto
@@ -283,4 +288,21 @@ img.readyness {
.application-info {
display: none
}
}
@media screen and (max-width: 1200px) {
body {
font-size: 10.5pt
}
}
video {
width: 100%
}
.hidden {
visibility: none;
display: none
}
.application-info {
min-width: 45%;
max-width: 45%;
float: right
}

224
home.html
View File

@@ -1,114 +1,126 @@
<!DOCTYPE html>
<html>
<head>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="home.css"/>
</head>
<link href="home.css" rel="stylesheet">
<link href="search.css" rel="stylesheet">
<link href="sidebar.css" rel="stylesheet">
<title>
</title>
</head>
<body>
<!--<div>-->
<script src="home.js" type="text/javascript"></script>
<!--<div>-->
<div class='background'>
<div class='content'>
<div class='section-header'>
<h1>I2P In Private Browsing</h1>
<div class='content'>
<div class="text-section-header">
<img height="30px" src="icons/i2plogo.png" width="30px">
<h1 id="text-section-header">I2P Browsing</h1>
</div>
<div id="i2pbrowser-version">
</div>
<div id="i2pbrowser-description">
<p id="description">I2P network browsing made easy.</p>
</div>
<div id="readyness">
<div class="hideIfI2PProxyOff" id="readyness">
<img class="readyness" src="icons/local_up.png"> <span id="proxy-check">Proxy is ready.</span>
</div>
<div class="hideIfI2PProxyOff" id="visit-url">
<form action="" method="get">
<input id="url-query" name="query" placeholder="Open a URL in an I2P tab:" type="search"> <input id="url-submit" text="Submit" type="submit">
</form>
</div>
</div>
<div class="hideIfI2PConsoleOff" id="onboarding">
<h3 id="onboardingTitle">New to I2P? Learn more here.</h3>
<button class="showhider" id="onboardingButtonZero">Protect your Privacy</button>
<p class="onboardingContent" id="onboardingContentZero">I2P Browser allows you to surf the internet using the private and secure I2P network. When using it, you are protected against tracking, surveillance, and censorship as a first-class participant in the I2P network. I2P Browser isolates cookies and deletes your browser history after your session. These modifications ensure your privacy and security are protected in the browser.</p>
<button class="showhider" id="onboardingButtonOne">Configure your Experience</button>
<p class="onboardingContent" id="onboardingContentOne">We also provide you with additional settings for bumping up your browser security. Our Security Settings allow you to block elements that could be used to attack your computer. Click below to see what the different options do. Note: By default, NoScript and HTTPS Everywhere are not included on the toolbar, but you can customize your toolbar to add them. With all the security and privacy features provided by I2P, your experience while browsing the internet may be a little different. Things may be a bit slower, and depending on your security level, some elements may not work or load. You may also be asked to prove you are a human and not a robot.</p>
<button class="showhider" id="onboardingButtonTwo">Share Files</button>
<p class="onboardingContent" id="onboardingContentTwo">I2P is capable of using peer-to-peer applications like BitTorrent, protecting your identity when you share files. Our anonymous bittorrent client is available in the browser.</p>
<button class="showhider" id="onboardingButtonThree">Hidden e-mail</button>
<p class="onboardingContent" id="onboardingContentThree">There is also an anonymous e-mail service available inside of I2P, which is accessible from our browser via the menu directly below.</p>
<button class="showhider" id="onboardingButtonFour">Browsing the Web</button>
<p class="onboardingContent" id="onboardingContentFour">This extension works automatically when you are browsing I2P sites. If you want to use I2P as a proxy to non-I2P sites, use the I2P In Private Browsing button in the toolbar and click New I2P Browser Tab to switch to I2P Browsing in a new tab.</p>
<button class="showhider" id="onboardingButtonFive">Experience Tips</button>
<p class="onboardingContent" id="onboardingContentFive">With all the security and privacy features provided by I2P, your experience while browsing the internet may be a little different. Things may be a bit slower, and depending on your security level, some elements may not work or load. You may also be asked to prove you are a human and not a robot.</p>
</div>
<!--<p class="hideIfI2POn">&aboutI2p.warn_not_running; <a href="about:i2p">&aboutI2p.refresh_text;</a> &aboutI2p.reccommend_not_running;</p>-->
<div class="application-info">
<p class="hideIfI2PConsoleOff">
</p>
<h3 id="applicationHeader">Applications</h3>
<p id="applicationExplain">These applications use I2P to provide them with security and privacy.</p>
<ul>
<li class="application">
<a class="applicationName" href="http://127.0.0.1:7657/" id="window-visit-router">Router Console</a> <span class="applicationDesc" id="routerConsole">The entrypoint for all other I2P applications is the I2P Router Console. To visit it, click here.</span>
</li>
<li class="application">
<a class="applicationName" href="http://127.0.0.1:7657/i2ptunnel" id="window-visit-i2ptunnel">Hidden Services Manager</a> <span class="applicationDesc" id="i2ptunnel">I2P has a web-based interface for configuring .i2p services like web sites, to set up your own web sites, go here:</span>
</li>
<li class="application">
<a class="applicationName" href="http://127.0.0.1:7657/susimail" id="window-visit-susimail">E-Mail</a> <span class="applicationDesc" id="susimail">I2P also bundles a webmail client which can be used to access in-I2P e-mail. To use it, go here:</span>
</li>
<li class="application">
<a class="applicationName" href="http://127.0.0.1:7657/i2psnark" id="window-visit-snark">BitTorrent</a> <span class="applicationDesc" id="snark">I2P is capable of anonymous Peer-to-Peer file sharing, to use the built-in bittorrent client go here:</span>
</li>
</ul>
<p>
</p>
</div>
<div class="extended-info">
<button class="showhider" id="fliplinks">Extension and I2P Resources</button>
<div id="info-content">
<p id="linksExplain">If you want to get more information about I2P, you can visit these links.</p>
<p>
</p>
<ul>
<li class="application">
<a href="/index.html" id="window-visit-index">Webextension Homepage:</a> <span class="applicationDesc" id="webpage">More information is available here.</span>
</li>
<li class="application">
<a href="http://git.idk.i2p/idk/I2P-in-Private-Browsing-Mode-Firefox" id="window-visit-sources">Source Code:</a> <span class="applicationDesc" id="sources">Browse the source of this webextension or contribute here.</span>
</li>
<li class="application">
<a href="http://git.idk.i2p/idk/I2P-in-Private-Browsing-Mode-Firefox/-/releases" id="window-visit-releases">Releases:</a> <span class="applicationDesc" id="releases">Check for new releases here.</span>
</li>
<li class="application">
<a href="http://i2p-projekt.i2p/" id="window-visit-i2p" target="_blank">I2P Project Homepage:</a> <span class="applicationDesc" id="i2ppage">More information is available here.</span>
</li>
</ul>
<p>
</p>
</div>
</div>
</div>
<div id="i2pbrowser-version"></div>
<div id="i2pbrowser-description">
<p id="description">I2P in Private Browsing is a webextension to secure and enhance your I2P use in the browser.</p>
<p class="beta">This is an experimental product.</p>
</div>
<div id="readyness">
<div id="consoleOn" class="hideIfI2PConsoleOff">
<img class="readyness" src="http://proxy.i2p/themes/console/images/local_up.png" alt="Proxy is not ready."/>
<span id="proxy-check">Proxy is ready.</span>
</div>
<!--<div id="proxyUnready" class="hideIfI2PProxyOn">The proxy is not ready yet.</div>-->
<div id="proxyReady" class="hideIfI2PProxyOff">
<img class="readyness" src="http://proxy.i2p/themes/console/images/local_up.png" alt="Proxy is not ready."/>
<span id="proxy-check">Proxy is ready.</span>
</div>
</div>
<div id="onboarding" class="hideIfI2PConsoleOff">
<h3 id="onboardingTitle">New to I2P? Learn more here.</h3>
<h4 id="onboardingZero"><button id="onboardingButtonZero" class="showhider" onclick="flipVisibility('onboardingContentZero')">Protect your Privacy</button></h4>
<p id="onboardingContentZero" class="onboardingContent">I2P Browser allows you to surf the internet using the private and secure I2P network. When using it, you are protected against tracking, surveillance, and censorship as a first-class participant in the I2P network. I2P Browser isolates cookies and deletes your browser history after your session. These modifications ensure your privacy and security are protected in the browser.</p>
<h4 id="onboardingOne"><button id="onboardingButtonOne" class="showhider" onclick="flipVisibility('onboardingContentOne')">Configure your Experience</button></h4>
<p id="onboardingContentOne" class="onboardingContent">We also provide you with additional settings for bumping up your browser security. Our Security Settings allow you to block elements that could be used to attack your computer. Click below to see what the different options do. Note: By default, NoScript and HTTPS Everywhere are not included on the toolbar, but you can customize your toolbar to add them. With all the security and privacy features provided by I2P, your experience while browsing the internet may be a little different. Things may be a bit slower, and depending on your security level, some elements may not work or load. You may also be asked to prove you are a human and not a robot.</p>
<h4 id="onboardingTwo"><button id="onboardingButtonTwo" class="showhider" onclick="flipVisibility('onboardingContentTwo')">Share Files</button></h4>
<p id="onboardingContentTwo" class="onboardingContent">I2P is capable of using peer-to-peer applications like BitTorrent, protecting your identity when you share files. Our anonymous bittorrent client is available in the browser.</p>
<h4 id="onboardingThree"><button id="onboardingButtonThree" class="showhider" onclick="flipVisibility('onboardingContentThree')">Hidden e-mail</button></h4>
<p id="onboardingContentThree" class="onboardingContent">There is also an anonymous e-mail service available inside of I2P, which is accessible from our browser via the menu directly below.</p>
<h4 id="onboardingFour"><button id="onboardingButtonFour" class="showhider" onclick="flipVisibility('onboardingContentFour')">Experience Tips</button></h4>
<p id="onboardingContentFour" class="onboardingContent">With all the security and privacy features provided by I2P, your experience while browsing the internet may be a little different. Things may be a bit slower, and depending on your security level, some elements may not work or load. You may also be asked to prove you are a human and not a robot.</p>
</div>
<!--<p class="hideIfI2POn">&aboutI2p.warn_not_running; <a href="about:i2p">&aboutI2p.refresh_text;</a> &aboutI2p.reccommend_not_running;</p>-->
<div class="application-info">
<p class="hideIfI2PConsoleOff">
<h3>Applications</h3>
<p id="applicationExplain">These applications use I2P to provide them with security and privacy.</p>
<ul>
<a class="applicationName" target="_blank" href="http://127.0.0.1:7657/i2ptunnel">
<li class="application">
Hidden Services Manager <span class="applicationDesc">I2P has a web-based interface for configuring .i2p services like web sites, to set up your own web sites, go here:</span>
</li>
</a>
<a class="applicationName" target="_blank" href="http://127.0.0.1:7657/susimail">
<li class="application">
E-Mail <span class="applicationDesc">I2P also bundles a webmail client which can be used to access in-I2P e-mail. To use it, go here:</span>
</li>
</a>
<a class="applicationName" target="_blank" href="http://127.0.0.1:7657/i2psnark">
<li class="application">
BitTorrent <span class="applicationDesc">I2P is capable of anonymous Peer-to-Peer file sharing, to use the built-in bittorrent client go here:</span>
</li>
</a>
</ul>
</p>
</div>
<div class="extended-info">
<h3 id="links"><button id="fliplinks" class="showhider">Links</button></h3>
<div id="info-content">
<p id="linksExplain">If you want to get more information about I2P, you can visit these links.</p>
<p>
<ul>
<a href="https://github.com/i2p/i2p-browser">
<li>
I2P Browser Source Code: <span class="applicationDesc">Go here to browse the source code of our Firefox fork.</span>
</li>
</a>
<a href="https://github.com/i2p/i2pbutton">
<li>
I2P Button Source Code: <span class="applicationDesc">Much of the functionality of the I2P Browser is implemented in the I2PButton plugin.</span>
</li>
</a>
<a href="https://github.com/mikalv/i2p-browser-build-scripts">
<li>
I2P Browser Build Scripts: <span class="applicationDesc">These scripts are used to build the browser.</span>
</li>
</a>
<a href="https://github.com/mikalv/i2p-browser-design-docs">
<li>
I2P Browser Design Document: <span class="applicationDesc">This is the I2P Browser Design Document.</span>
</li>
</a>
<a href="http://trac.i2p2.i2p/">
<li>
Trac Wiki: <span class="applicationDesc">To report a bug, visit the Trac Wiki.</span>
</li>
</a>
<a href="http://i2p-projekt.i2p/get-involved/donate">
<li>
<em>Support Us: </em> <span class="applicationDesc">I2P is funded by donations. In order to make a donation visit the project web site.</span>
</li>
</a>
</ul>
</p>
</div>
</div>
</div>
</div>
<!--</div>-->
</div>
<script src="home.js" type="text/javascript"></script>
<script src="info.js" type="text/javascript"></script>
<script src="messages.js" type="text/javascript"></script>
<script src="content.js" type="text/javascript"></script>
<script src="i2pd.js"></script>
<script src="proxyinfo.js" type="text/javascript"></script>
</body>
</html>

25
home.js
View File

@@ -1,24 +1,27 @@
document.addEventListener("click", e => {
if (e.target.id === "onboardingButtonZero") {
document.addEventListener("click", (clickEvent) => {
if (clickEvent.target.id === "onboardingButtonZero") {
flipVisibility("onboardingContentZero");
} else if (e.target.id === "onboardingButtonOne") {
} else if (clickEvent.target.id === "onboardingButtonOne") {
flipVisibility("onboardingContentOne");
} else if (e.target.id === "onboardingButtonTwo") {
} else if (clickEvent.target.id === "onboardingButtonTwo") {
flipVisibility("onboardingContentTwo");
} else if (e.target.id === "onboardingButtonThree") {
} else if (clickEvent.target.id === "onboardingButtonThree") {
flipVisibility("onboardingContentThree");
} else if (e.target.id === "onboardingButtonFour") {
} else if (clickEvent.target.id === "onboardingButtonFour") {
flipVisibility("onboardingContentFour");
} else if (e.target.id === "fliplinks") {
} else if (clickEvent.target.id === "onboardingButtonFive") {
flipVisibility("onboardingContentFive");
} else if (clickEvent.target.id === "fliplinks") {
flipVisibility("info-content");
}
});
function flipVisibility(div) {
var x = document.getElementById(div);
if (x.style.display === "none") {
x.style.display = "block";
console.log("(home) seeking flippable", div);
let flippable = document.getElementById(div);
if (flippable.style.display !== "block") {
flippable.style.display = "block";
} else {
x.style.display = "none";
flippable.style.display = "none";
}
}

332
host.js
View File

@@ -1,111 +1,249 @@
function proxyHost(url) {
let hostname = "";
if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
} else {
hostname = url.split("/")[0];
}
if (hostname == "proxy.i2p") {
return true;
}
return false;
}
/**
* @fileoverview I2P Host Management Module
* Handles host verification, routing, and application paths for I2P browser extension
*/
function localHost(url) {
let hostname = "";
if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
} else {
hostname = url.split("/")[0];
}
hostname = hostname.split(":")[0];
if (hostname === "127.0.0.1") {
return true;
} else if (hostname === "localhost") {
return true;
}
// Constants for URL patterns and ports
const URL_PATTERNS = {
I2P_SUFFIX: ".i2p",
PROXY_HOST: "proxy.i2p",
LOCALHOST: ["localhost", "127.0.0.1"],
PROTOCOL_PREFIX: "ext+rc:",
};
return false;
}
const PORT_APPLICATIONS = {
TOR: "7695",
BLOG: "8084",
IRC: "7669",
};
function extensionHost(url) {
var res = url.startsWith(browser.runtime.getURL(""));
console.log("Extension URL?", res, url, browser.runtime.getURL(""));
return res;
}
const ROUTER_PATHS = {
TUNNEL_MGR: ["i2ptunnelmgr", "i2ptunnel"],
TORRENT: ["i2psnark", "torrents", "transmission", "tracker"],
MAIL: ["webmail", "susimail"],
MUWIRE: ["MuWire"],
BOTE: ["i2pbote"],
CONSOLE: ["home", "console", "dns", "susidns", "config", "sitemap", ""],
};
function i2pHostName(url) {
let hostname = "";
if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
} else {
hostname = url.split("/")[0];
}
return hostname;
}
function i2pHost(url) {
let hostname = i2pHostName(url);
return hostname.endsWith(".i2p");
}
function routerHost(url) {
let hostname = "";
let path = "";
function pathcheck(str) {
if (str != undefined) {
let final = str.split("/")[0];
if (final === "i2ptunnelmgr" || final === "i2ptunnel") {
console.log("(urlcheck) application path", final);
return "i2ptunnelmgr";
} else if (final === "i2psnark" || final === "torrents") {
console.log("(urlcheck) application path", final);
return "i2psnark";
} else if (final === "webmail" || final === "susimail") {
console.log("(urlcheck) application path", final);
return "webmail";
} else if (
final === "home" ||
final === "console" ||
final.startsWith("config")
) {
console.log("(urlcheck) application path", final);
return "routerconsole";
/**
* Validates and processes URLs for host checking
* @param {string|URL|Object} urlInput - URL to process
* @return {URL} Processed URL object
* @throws {Error} If URL is invalid
*/
function processURL(urlInput) {
try {
if (typeof urlInput === "string") {
if (!urlInput.startsWith("http")) {
urlInput = "http://" + urlInput;
}
return new URL(urlInput);
}
return true;
}
if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
prefix = url.substr(0, url.indexOf("://") + 3);
path = url.replace(prefix + hostname + "/", "");
} else if (identifyProtocolHandler(url)) {
url = identifyProtocolHandler(url);
return routerHost(url);
} else {
hostname = url.split("/")[0];
path = url.replace(hostname + "/", "");
}
if (hostname === control_host + ":" + control_port) {
console.log("(hostcheck) router console found on configured ports");
return pathcheck(path);
} else if (hostname === "127.0.0.1:7657") {
return pathcheck(path);
} else if (hostname === "localhost:7657") {
return pathcheck(path);
if (urlInput instanceof URL) {
return urlInput;
}
return new URL(urlInput.url);
} catch (error) {
console.error("Invalid URL processing:", error);
throw new Error("Invalid URL format");
}
}
if (hostname === "127.0.0.1:7657") {
return pathcheck(path);
} else if (hostname === "localhost:7657") {
return pathcheck(path);
/**
* Checks if request is for proxy host
* @param {Object} requestDetails - Request details object
* @return {boolean}
*/
function isProxyHost(requestDetails) {
try {
const requestUrl = processURL(requestDetails);
const isProxy = requestUrl.hostname === URL_PATTERNS.PROXY_HOST;
console.debug("(proxy) proxyinfo check:", requestUrl.hostname, isProxy);
return isProxy;
} catch (error) {
console.error("Proxy host check failed:", error);
return false;
}
}
if (hostname === "127.0.0.1:7070") {
return pathcheck(path);
} else if (hostname === "localhost:7070") {
return pathcheck(path);
/**
* Validates if URL points to localhost
* @param {string|URL} url
* @return {string|false} Host:port if local, false otherwise
*/
function isLocalHost(url) {
try {
const requestUrl = processURL(url);
if (URL_PATTERNS.LOCALHOST.includes(requestUrl.hostname)) {
return `${requestUrl.hostname}:${requestUrl.port}`;
}
return false;
} catch (error) {
console.error("Local host check failed:", error);
return false;
}
}
/**
* Standardizes localhost representation
* @param {string|URL} url
* @return {string}
*/
function tidyLocalHost(url) {
const hostPort = isLocalHost(url);
if (hostPort) {
return hostPort.replace("127.0.0.1", "localhost");
}
const processedUrl = processURL(url);
return `${processedUrl.hostname}:${processedUrl.port}`;
}
/**
* Service-specific host checks
* @param {string|URL} url
* @param {string} port
* @param {string} service
* @return {string|false}
*/
function checkServiceHost(url, port, service) {
const host = isLocalHost(url);
if (!host) {
return false;
}
return host.includes(` : ${port}`) ? service : false;
}
const isTorHost = (url) => checkServiceHost(url, PORT_APPLICATIONS.TOR, "tor");
const isBlogHost = (url) =>
checkServiceHost(url, PORT_APPLICATIONS.BLOG, "blog");
const isIRCHost = (url) => checkServiceHost(url, PORT_APPLICATIONS.IRC, "irc");
/**
* Verifies if request comes from extension
* @param {Object} url - Request URL object
* @return {boolean}
*/
function isExtensionHost(url) {
const extensionPrefix = browser.runtime
.getURL("")
.replace("moz-extension://", "")
.replace("/", "");
const checkUrl = (sourceUrl) => {
if (!sourceUrl) return false;
return sourceUrl
.replace("moz-extension://", "")
.replace("/", "")
.startsWith(extensionPrefix);
};
return checkUrl(url.originUrl) || checkUrl(url.documentUrl);
}
/**
* Extracts I2P hostname from URL
* @param {string|URL} url
* @returns {string|false}
*/
function i2pHostName(url) {
try {
const requestUrl = processURL(url);
return requestUrl.host.endsWith(URL_PATTERNS.I2P_SUFFIX)
? requestUrl.host
: false;
} catch (error) {
console.error("I2P hostname extraction failed:", error);
return false;
}
}
/**
* Validates I2P host
* @param {Object} url
* @returns {boolean}
*/
function i2pHost(url) {
if (isProxyHost(url)) {
console.warn("(host) proxy.i2p detected");
return false;
}
const requestUrl = processURL(url.url);
return requestUrl.hostname.endsWith(URL_PATTERNS.I2P_SUFFIX);
}
/**
* Gets first path element from URL
* @param {string|URL} url
* @returns {string}
*/
function getFirstPathElement(url) {
const requestUrl = processURL(url);
const path = requestUrl.pathname.replace(/^\/+/, "");
return path.split("/")[0];
}
/**
* Identifies application from path
* @param {string|URL} url
* @returns {string|boolean}
*/
function getPathApplication(url) {
const path = getFirstPathElement(url);
if (ROUTER_PATHS.TUNNEL_MGR.includes(path)) return "i2ptunnelmgr";
if (ROUTER_PATHS.TORRENT.includes(path)) return "i2psnark";
if (ROUTER_PATHS.MAIL.includes(path)) return "webmail";
if (path.startsWith("MuWire")) return "muwire";
if (path.startsWith("i2pbote")) return "i2pbote";
if (ROUTER_PATHS.CONSOLE.includes(path)) return "routerconsole";
console.warn("(host) unknown path:", path);
return true;
}
/**
* Verifies router host status
* @param {string|URL} url
* @returns {string|boolean}
*/
function isRouterHost(url) {
try {
const protocolUrl = identifyProtocolHandler(url);
if (protocolUrl) {
return isRouterHost(protocolUrl);
}
const requestUrl = processURL(url);
const { hostname, port } = requestUrl;
const controlHost = control_host();
const controlPort = control_port();
if (
tidyLocalHost(`${hostname}:${port}`) ===
tidyLocalHost(`${controlHost}:${controlPort}`)
) {
return getPathApplication(url);
}
return false;
} catch (error) {
console.error("Router host check failed:", error);
return false;
}
}
/**
* Identifies protocol handler in URL
* @param {string} url
* @returns {string|false}
*/
function identifyProtocolHandler(url) {
const encoded = encodeURIComponent(URL_PATTERNS.PROTOCOL_PREFIX);
if (url.includes(encoded)) {
return url.replace(encoded, "");
}
if (url.includes(URL_PATTERNS.PROTOCOL_PREFIX)) {
return url.replace(URL_PATTERNS.PROTOCOL_PREFIX, "");
}
return false;
}

BIN
i2p-https.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

View File

@@ -1,47 +0,0 @@
function send(json) {
const Http = new XMLHttpRequest();
Http.withCredentials = false;
const url = "http://" + "127.0.0.1" + ":" + "7650";
Http.open("POST", url);
Http.send(json);
//console.log(Http);
return Http;
}
function authenticate(user, password) {
var json = {
jsonrpc: "2.0",
id: user,
method: "Authenticate",
params: {
API: 1,
Password: password
}
};
return send(json);
}
var username = "";
var password = "";
function echo(string, section) {
var xhr = authenticate(username, password);
console.log("(i2pcontrol) echo", xhr);
xhr.onload = function() {
resp = JSON.Parse(xhr.responseText);
json = {
jsonrpc: "2.0",
id: username,
method: "Echo",
params: {
Token: resp.Token,
Echo: string
}
};
var controlMessage = document.getElementById(section);
console.log("(i2pcontrol) reply", xhr.responseText);
infoMessage.textContent = xhr.responseText;
};
}
echo("test", "test");

12
i2pd.js Normal file
View File

@@ -0,0 +1,12 @@
// stuff required specifically to be compatible with i2pd
//TODO: Don't hard-code this.
fetch("http://127.0.0.1:7657/themes/console/light/images/i2plogo.png")
.then((myJson) => {
var consoleLinks = document.querySelectorAll(".application-info");
unhide(consoleLinks);
})
.catch((error) => {
var consoleLinks = document.querySelectorAll(".application-info");
hide(consoleLinks);
});

BIN
i2plogo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

After

Width:  |  Height:  |  Size: 327 KiB

BIN
i2psnark-integrate.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 KiB

After

Width:  |  Height:  |  Size: 197 KiB

BIN
icons/InfoToopie.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
icons/InfoToopieHTTPS.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

0
icons/README.md Normal file
View File

BIN
icons/browse.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
icons/i2plogo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -1,119 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="109.95727mm"
height="27.706699mm"
viewBox="0 0 109.95727 27.706699"
version="1.1"
id="svg4773"
inkscape:version="0.92.1 r"
sodipodi:docname="horizontal_color.svg">
<defs
id="defs4767" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.98994949"
inkscape:cx="125.25987"
inkscape:cy="51.24018"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1366"
inkscape:window-height="740"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata4770">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-55.768389,-115.63486)">
<g
id="g5355">
<path
inkscape:connector-curvature="0"
id="path4516"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.46456254"
d="m 55.768389,116.32817 h 5.625388 v 26.53071 h -5.625388 z" />
<path
inkscape:connector-curvature="0"
id="path4528"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.46456254"
d="M 83.567492,142.85915 H 64.806129 v -3.94692 l 6.737086,-6.81049 c 1.994831,-2.04361 3.297929,-3.46052 3.910222,-4.24981 0.611829,-0.78977 1.052235,-1.52051 1.321681,-2.19367 0.268981,-0.67315 0.403705,-1.37046 0.403705,-2.09285 0,-1.07686 -0.296392,-1.8787 -0.890103,-2.40504 -0.593711,-0.52589 -1.38579,-0.78929 -2.377165,-0.78929 -1.040621,0 -2.050116,0.23877 -3.028948,0.71589 -0.979764,0.47756 -2.001336,1.15675 -3.066113,2.03756 l -3.083766,-3.65285 c 1.321681,-1.1261 2.416654,-1.92143 3.285851,-2.38646 0.868731,-0.46502 1.817367,-0.8232 2.845444,-1.07406 1.028078,-0.25087 2.178334,-0.3763 3.451235,-0.3763 1.676607,0 3.157633,0.30615 4.442612,0.91798 1.284979,0.61229 2.282403,1.46848 2.992248,2.56995 0.709385,1.10148 1.064782,2.36231 1.064782,3.78154 0,1.23667 -0.217415,2.39575 -0.651785,3.47912 -0.434369,1.08288 -1.107514,2.19365 -2.01946,3.33183 -0.911472,1.13818 -2.517923,2.75997 -4.818901,4.86443 l -3.451235,3.24962 v 0.2569 h 11.693973 z" />
<path
inkscape:connector-curvature="0"
id="path4532"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.46456254"
d="m 92.213601,128.81343 h 1.850822 c 1.730025,0 3.024298,-0.34145 3.88374,-1.02529 0.858507,-0.68337 1.288228,-1.67846 1.288228,-2.98528 0,-1.31843 -0.360032,-2.29215 -1.079636,-2.92164 -0.720078,-0.62854 -1.848504,-0.94352 -3.384343,-0.94352 h -2.558811 z m 12.703009,-4.21033 c 0,2.85566 -0.89243,5.03911 -2.67682,6.55126 -1.78485,1.51261 -4.322284,2.26845 -7.612787,2.26845 h -2.413402 v 9.43621 h -5.625393 v -26.53071 h 8.474561 c 3.218022,0 5.664411,0.69266 7.340551,2.078 1.6752,1.38532 2.51329,3.45076 2.51329,6.19679" />
<path
inkscape:connector-curvature="0"
id="path4536"
style="fill:#ffc434;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.46456254"
d="m 121.18308,137.09597 c 0,-3.44937 -2.79621,-6.24557 -6.24559,-6.24557 -3.44937,0 -6.24557,2.7962 -6.24557,6.24557 0,3.44939 2.7962,6.24559 6.24557,6.24559 3.44938,0 6.24559,-2.7962 6.24559,-6.24559" />
<path
inkscape:connector-curvature="0"
id="path4540"
style="fill:#60ab60;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.46456254"
d="m 121.18308,122.24846 c 0,-3.44937 -2.79621,-6.24557 -6.24559,-6.24557 -3.44937,0 -6.24557,2.7962 -6.24557,6.24557 0,3.44938 2.7962,6.24559 6.24557,6.24559 3.44938,0 6.24559,-2.79621 6.24559,-6.24559" />
<path
inkscape:connector-curvature="0"
id="path4544"
style="fill:#e15647;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.46456254"
d="m 136.03063,137.09597 c 0,-3.44937 -2.7962,-6.24557 -6.24557,-6.24557 -3.44939,0 -6.24559,2.7962 -6.24559,6.24557 0,3.44939 2.7962,6.24559 6.24559,6.24559 3.44937,0 6.24557,-2.7962 6.24557,-6.24559" />
<path
inkscape:connector-curvature="0"
id="path4548"
style="fill:#ffc434;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.46456254"
d="m 136.03063,122.24846 c 0,-3.44937 -2.7962,-6.24557 -6.24557,-6.24557 -3.44939,0 -6.24559,2.7962 -6.24559,6.24557 0,3.44938 2.7962,6.24559 6.24559,6.24559 3.44937,0 6.24557,-2.79621 6.24557,-6.24559" />
<path
inkscape:connector-curvature="0"
id="path4552"
style="fill:#ffc434;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.46456254"
d="m 150.87814,137.09597 c 0,-3.44937 -2.7962,-6.24557 -6.24557,-6.24557 -3.44938,0 -6.24559,2.7962 -6.24559,6.24557 0,3.44939 2.79621,6.24559 6.24559,6.24559 3.44937,0 6.24557,-2.7962 6.24557,-6.24559" />
<path
inkscape:connector-curvature="0"
id="path4556"
style="fill:#60ab60;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.46456254"
d="m 150.87814,122.24846 c 0,-3.44937 -2.7962,-6.24557 -6.24557,-6.24557 -3.44938,0 -6.24559,2.7962 -6.24559,6.24557 0,3.44938 2.79621,6.24559 6.24559,6.24559 3.44937,0 6.24557,-2.79621 6.24557,-6.24559" />
<path
inkscape:connector-curvature="0"
id="path4560"
style="fill:#60ab60;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.46456254"
d="m 165.72566,137.09597 c 0,-3.44937 -2.7962,-6.24557 -6.24559,-6.24557 -3.44937,0 -6.24557,2.7962 -6.24557,6.24557 0,3.44939 2.7962,6.24559 6.24557,6.24559 3.44939,0 6.24559,-2.7962 6.24559,-6.24559" />
<path
inkscape:connector-curvature="0"
id="path4564"
style="fill:#e15647;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.46456254"
d="m 165.72566,122.24846 c 0,-3.44937 -2.7962,-6.24557 -6.24559,-6.24557 -3.44937,0 -6.24557,2.7962 -6.24557,6.24557 0,3.44938 2.7962,6.24559 6.24557,6.24559 3.44939,0 6.24559,-2.79621 6.24559,-6.24559" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.9 KiB

BIN
icons/local_up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

BIN
icons/torrents.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
images/gear.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

59
images/restart.svg Normal file
View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="restart.svg"
id="svg22"
version="1.1"
viewBox="0 0 512 512"
role="img"
class="svg-inline--fa fa-sync-alt fa-w-16"
data-icon="sync-alt"
data-prefix="fas"
focusable="false"
aria-hidden="true">
<metadata
id="metadata28">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs26" />
<sodipodi:namedview
inkscape:current-layer="svg22"
inkscape:window-maximized="1"
inkscape:window-y="31"
inkscape:window-x="0"
inkscape:cy="256"
inkscape:cx="256"
inkscape:zoom="1.6757812"
showgrid="false"
id="namedview24"
inkscape:window-height="1026"
inkscape:window-width="1920"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<path
style="fill:#526bce;fill-opacity:1"
id="path20"
d="M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z"
fill="currentColor" />
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

59
images/shutdown.svg Normal file
View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="shutdown.svg"
id="svg32"
version="1.1"
viewBox="0 0 512 512"
role="img"
class="svg-inline--fa fa-power-off fa-w-16"
data-icon="power-off"
data-prefix="fas"
focusable="false"
aria-hidden="true">
<metadata
id="metadata38">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs36" />
<sodipodi:namedview
inkscape:current-layer="svg32"
inkscape:window-maximized="1"
inkscape:window-y="31"
inkscape:window-x="0"
inkscape:cy="256"
inkscape:cx="256"
inkscape:zoom="1.6757812"
showgrid="false"
id="namedview34"
inkscape:window-height="1026"
inkscape:window-width="1920"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<path
style="fill:#526bce;fill-opacity:1"
id="path30"
d="M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z"
fill="currentColor" />
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -1,106 +1,238 @@
<strong>i2psetproxy.js</strong>
<!DOCTYPE html>
<html>
<head>
<title>I2P in Private Browsing Mode</title>
<link href="home.css" rel="stylesheet" type="text/css">
<link href="sidebar.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="content" id="browserpanel">
<h1>I2P in Private Browsing Mode(Firefox-Only)</h1>
WebExtension that does extended configuration of a dedicated I2P browser. While
<strong>experimental</strong>, it's capable of enforcing the use of the I2P Proxy without
needing to touch about:config and disables several
fingerprinting/de-anonymization vectors on it's own. It is also the easiest way
to configure an I2P browser on Android without requiring the user to root their
device.
<ul>
<li>
<p><strong>This extension requires a running I2P Router on the Host System</strong>
</p>
</li>
<strong>The Old Version</strong>
<li>
<p><a href="https://geti2p.net/en/download/easyinstall"><strong>This extension comes pre-installed in the Easy-Install Beta for Windows</strong></a>
</p>
</li>
</ul>
New versions of this extension create an I2P in Private Browsing mode instead.
Since this is a drastic change to the behavior of the old plugin, a new entry
for the new plugin has been made at a new location on addons.mozilla.org.
<p>This is an webextension which introduces a set of new "Private Browsing" modes to Firefox-based browsers(Supporting webextensions, must be current ESR or greater) that makes it easier to configure a browser to use I2P securely and adds features for making I2P applications easier to use. It does this by isolating I2P-specific settings to Contextual Identities within Firefox, then loading them automatically when the user requests them. It also adds convenience and management features, like an embedded I2P console and Bittorrent integration with clients using the transmission-rpc API and via in-browser protocol handling integrations.</p>
<ul>
<li>This is the new version: <a href="https://addons.mozilla.org/en-US/firefox/addon/i2p-in-private-browsing/">[link]</a></li>
<li>This is the old version: <a href="https://addons.mozilla.org/en-US/firefox/addon/I2P-Proxy/">[link]</a></li>
</ul>
<h2>Privacy Policy</h2>
<strong>Android usage:</strong>
<p>This browser extension does not collect any personal information. It requires access to local storage and browsing data permissions in order to delete them when directed to by the user. This browser extension does not transmit any information to any third party, nor will it, ever.</p>
Open the following link
<a href="https://github.com/eyedeekay/i2psetproxy.js/releases/">Github Releases Version</a>
in the browser you want to use for I2P. Firefox will warn you that it is about
to install an extension and indicate the permissions required. Read them over
and when you're ready, accept them. That's all it should take, your browser is
now configured to use I2P.
<p>This browser extension cannot influence telemetry carried out by browser vendors to determine performance in their distribution channels, nor can it mitigate any other browser vendor telemetry.</p>
<strong>addons.mozilla.org</strong>
<p>This browser extension is entirely Free, Open-Source software.</p>
If you would prefer to recieve automatic updates from AMO, the correct product
page for this plugin is
<a href="https://addons.mozilla.org/en-US/firefox/addon/i2p-in-private-browsing/">I2P In Private Browsing</a>.
This absolutely requires a working outproxy. If you want to avoid the use of AMO
for updates, you can download the identical plugin from this repository's
releases page. The latest AMO Plugin will always be identical to the latest
github release, except for the version number, which must be incremented for
submission to AMO.
<h2>Installation(Cross-Platform):</h2>
<strong>Features</strong>
<p>For desktop users this addon is available from addons.mozilla.org, where you will be able to recive automatic updates: <a href="https://addons.mozilla.org/en-US/firefox/addon/i2p-in-private-browsing/">I2P in Private Browsing</a>.</p>
<ul>
<li>[done] <strong>Provide</strong> a way to launch into an I2P-Specific contextual identity
(container). Intercept requests to .i2p domains and automatically route them
to the I2P container. Isolate the router console from other local
applications by automatically intercepting requests to the router console to
another container.</li>
<li>[done/wip] <strong>Indicate</strong> the I2P browser is in use visually. Find an
acceptable way to indicate it on Android.</li>
<li>[done] <strong>Set</strong> the http proxy to use the local I2P proxy automatically.
Provide specific configuration for other types of I2P proxies(SOCKS,
isolating HTTP)</li>
<li>[done/wip] <strong>Disable</strong> risky webRTC features/offer the option to re-enable
them with the proxy enforced.</li>
<li>[done] <strong>Change</strong> the color of the browser window to indicate that I2P is in
use</li>
<li>[done-ish] <strong>Reset</strong> the HTTP Proxy tunnel to generate a new destination
on-demand
<ul>
<li>it does this by working in conjunction with this
<a href="https://github.com/eyedeekay/httptunnel">standalone HTTP proxy</a>, currently
disabled*.</li>
</ul></li>
<li>[ready] <strong>Provide</strong> help in a variety of languages.</li>
<li>[wip] <strong>Monitor</strong> the health and readiness of the I2P router it is
instructed to use.</li>
<li>[1/2] <strong>Handle</strong> router console applications under their own origins and
within their own contextual identity. (1) The router console is automatically
confined to it's own container tab. (2) Use a custom protocol handler to
place each i2p application/plugin under it's own origin, shortening router
console URL's and placing applications under their own origin.</li>
<li>[not started] <strong>Handle Torrents</strong> by talking to i2psnark-rpc plugin and then
adding them directly into the Firefox downloads drop-downs, menus, etc. If I
can.</li>
</ul>
<h3>Setting the Homepage</h3>
<strong>Screenshot</strong>
<p>The first time you run the extension, Firefox will offer you the option of setting your homepage and new tab page to the homepage contained <em>within</em> the extension. You can decline this or edit it later and it will not affect your anonymity. Enabling this feature allows the extension to set your homepage to a local document with a number of useful I2P links.</p>
<h2>Debian Installation:</h2>
<p>Should you prefer, it is possible to install this extension system-wide by side-loading it into Debian. You can generate your own deb file by running the command:</p>
<strong>Super Extra Important Background Info:</strong>
<pre><code> make deb
</code></pre>
<p>and then you can install it with:</p>
This plugin's viability is directly related to the viability of Mozilla and
Tor's work on hardening Firefox itself and of particular interest are the
"Uplift" and "Fusion(Firefox Using Onions)" projects.
<pre><code> sudo apt install ../i2psetproxy.js_*.deb
</code></pre>
<h2>Bittorrent Download:</h2>
<strong>Links about Project Uplift</strong>
<p>The self-hosted plugin is available from bittorrent both within the I2P and Clearnet Bittorrent network(With a web seed to support it in case one goes dead).</p>
<ul>
<li>https://wiki.mozilla.org/Security/Tor_Uplift</li>
<li>https://wiki.mozilla.org/Security/FirstPartyIsolation</li>
<li>https://wiki.mozilla.org/Security/Fingerprinting</li>
<li>https://wiki.mozilla.org/Security/Fennec%2BTor_Project</li>
<li>https://wiki.mozilla.org/Security/Tor_Uplift/Tracking</li>
</ul>
<ul>
<li>
<a href="magnet:?xl=1246magnetsubdn=i2ppb%40eyedeekay.github.io.xpi.torrentmagnetsubxt=urn:tree:tiger:eyme2fkldmntehx4m7ujho6fgxklugx2bfsnztimagnetsubxt=urn:ed2k:1bd6f65a3dc2027c9ac265da2c61e6d6magnetsubxt=urn:aich:t7hfnrsgwjjeh5nctj5qe7kwaclnahbc">Magnet Link</a>
</li>
Project uplift seems to have largely been accomplished?
<li>
<a href="./i2ppb@eyedeekay.github.io.xpi.torrent">Get the .torrent file</a>
</li>
</ul>
<strong>Links about Project Fusion</strong>
<h2>Usage:</h2>
<ul>
<li>https://wiki.mozilla.org/Security/Fusion</li>
<li>https://trac.torproject.org/projects/tor/wiki/org/meetings/2018Rome/Notes/FusionProject</li>
<li>https://blog.torproject.org/tor-heart-firefox</li>
</ul>
<ul>
<li>Basically, it "Just Works." After you install the plugin, browsing to an I2P domain will automatically stop the current tab and re-open the I2P site in an I2P Browser tab.</li>
<li>Besides that, four bookmarks are added to the "Bookmarks Toolbar," which will take you to visit your Java I2P applications, or the "Simplified I2P Landing Page" embedded in the plugin:</li>
<li><img alt="Landing page" src="lander.png" title="">
</li>
<li>Also, there's a menu for accessing I2P functionality while you're browsing. It lets you control a few settings in a granular way.</li>
<li><img alt="Menu" src="menu.png" title="">
</li>
<li>You can re-enable WebRTC but force it to always use the proxy that is enforced by the tab.</li>
<li>You can either force the browser to delete all history for I2P sites immediately, or you can close all your I2P Browser tabs at once and delete the history for I2P browsing when you're done.</li>
<li>That's all there is to it! Your browser is configured to safely use and administer I2P.</li>
<li>Optionally, you can add I2PSnark-RPC and use Bittorrent-over-I2P via the transmission-rpc interface. To do this, have a look at the torrent guide: <a href="torrent/index.html">Torrent guide</a>
</li>
</ul>
<h3>Features</h3>
<ul>
<li>[done] <strong>Provide</strong> a way to launch into an I2P-Specific contextual identity (container). Intercept requests to .i2p domains and automatically route them to the I2P container. Isolate the router console from other local applications by automatically intercepting requests to the router console to another container.</li>
<li><img alt="Visiting i2p-projekt.i2p" src="i2psetproxy.js.png" title="">
</li>
<li>[done] <strong>Indicate</strong> the I2P browser is in use visually. Find an acceptable way to indicate it on Android.</li>
<li><img alt="Visiting webmail" src="susimail.png" title="">
</li>
<li>[done] <strong>Set</strong> the http proxy to use the local I2P proxy automatically. Provide specific configuration for other types of I2P proxies(SOCKS, isolating HTTP)</li>
<li>[done] <strong>Disable</strong> risky webRTC features/offer the option to re-enable them with the proxy enforced.</li>
<li>[done] <strong>Change</strong> the color of the browser window to indicate that I2P is in use</li>
<li><img alt="Visiting i2ptunnel" src="i2ptunnel.png" title="">
</li>
<li>[ready] <strong>Provide</strong> help in a variety of languages.</li>
<li>[Done] <strong>Handle</strong> router console applications under their own origins and within their own contextual identity. (1) The router console is automatically confined to it's own container tab. (2) Use a custom protocol handler to place each i2p application/plugin under it's own origin, shortening router console URL's and placing applications under their own origin.</li>
<li><img alt="Visiting routerconsole" src="routerconsole.png" title="">
</li>
<li>[Done] <strong>Handle Torrents</strong> by talking to i2psnark-rpc plugin and then adding them directly into the Firefox downloads drop-downs, menus, etc. Enable the use of I2PSnark as a peer-to-peer delivery mechanism for media files.</li>
<li><img alt="Visiting i2psnark" src="i2psnark.png" title="">
</li>
<li><img alt="Monitoring torrents" src="transmissionrpc.png" title="">
</li>
<li>[Done] <strong>Enhance</strong> the I2P browsing experience by allowing site developers distribute some or all of their resources as torrents, allowing the torrents to be treated effectively as a CDN.</li>
<li><img alt="Distribute your site as a torrent." src="x-i2p-torrentlocation.png" title="">
</li>
<li>[Done] <strong>Indicate</strong> the level of authenticity provided by TLS. TLS is optional on I2P for now, but some sites offer it anyway. TLS support is experimental and in the works.</li>
<li><img alt="Use HTTPS with your I2P Site." src="i2p-https.png" title="">
</li>
<li>[Done] <strong>Provide</strong> alternate, in-I2P destinations for web sites that want to mirror their content within I2P.</li>
<li>[barely started] <strong>Isolate</strong> traffic by contextual identity to it's own HTTP Proxy tunnel, each reflecting it's own pseudonymous identity within I2P. The contextual identities. For now, the contextual identities used to manage browsing are "I2P Browsing" and "Web Browsing" where I2P Browsing is capable of using an outproxy but in the case of traffic destined for the clearnet does not do header rewriting, and Web Browsing falls back to the Proxy configured in Firefox. The I2P Browsing will be expanded to
<ul>
<li>I2P Amnesiac Browsing: Use for General Browsing, stores no history and uses an HTTP Proxy with a very short tunnel-close timeout and no key-reuse.</li>
<li>I2P Social Networking: Use this for logging into social network accounts, forums, and other interactive asynchronous public communication platforms where your identity is behaviorally linkable. This has a very long tunnel-close timeout and key-reuse until specifically invoked.</li>
<li>I2P Blogging: Use this for posting content to the web interface of your blog or to other similar websites that you create content on.</li>
</ul>
</li>
<li><img alt="Visiting clearweb" src="clearweb.png" title="">
</li>
</ul>
<h3>Video</h3>
<ul>
<li><img alt="Video of the plugin in action" src="i2psetproxy.js.gif" title="">
</li>
</ul>
<h2>Documents</h2>
<ul>
<li><strong><a href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/download/docs/Browser.Design.Documentation.pdf">Browser Outline</a></strong>: This document is an outline of each of the browser extension's feature panels in presentation form.</li>
<li><strong><a href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/download/docs/Landing.Page.Documentation.pdf">Smart Lander Design</a></strong>: This is the original outline of the smart landing page which became the I2P home page within the browser and the drop-down control panel.</li>
<li><strong><a href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/wiki/Other-Extensions">Other extensions</a></strong>: and how they work with this one.</li>
</ul>
<h2>Super Extra Important Background Info:</h2>
<p>This plugin's viability is directly related to the viability of Mozilla and Tor's work on hardening Firefox itself and of particular interest are the "Uplift" and "Fusion(Firefox Using Onions)" projects.</p>
<h3>Links about Project Uplift</h3>
<ul>
<li>
<a href="https://wiki.mozilla.org/Security/Tor_Uplift">Tor Uplift</a> is a project which brings important features of the Tor Browser to the mainstream of Firefox users by including patches from Tor Browser Bundle into Firefox where it is appropriate.
</li>
<li>
<a href="https://wiki.mozilla.org/Security/FirstPartyIsolation">First Party Isolation</a> is a feature in Firefox and other browsers which keeps information from leaking across first-party domains.
</li>
<li>
<a href="https://wiki.mozilla.org/Security/Fingerprinting">Fingerprinting</a> is a technique where a tracker attempts to extract unique information about a user from a side-channel in order to create an identifier that can be used to correlate the user across many sites.
</li>
<li>
<a href="https://wiki.mozilla.org/Security/Fennec%2BTor_Project">Fennec</a> is Firefox for Android and this link has some analysis of the privacy consequences of the Android platform.
</li>
<li>
<a href="https://wiki.mozilla.org/Security/Tor_Uplift/Tracking">Tracking</a> in Firefox is surveyed here.
</li>
</ul>
<p>Project uplift seems to have largely been accomplished?</p>
<h3>Links about Project Fusion</h3>
<ul>
<li>
<a href="https://wiki.mozilla.org/Security/Fusion">Project Fusion</a> or Firefox using Onions is a joint Mozilla/Tor effort to create an enhanced Private Browsing mode for Firefox which uses Tor.
</li>
<li>
<a href="https://trac.torproject.org/projects/tor/wiki/org/meetings/2018Rome/Notes/FusionProject">Notes</a> from a meeting about Fusion.
</li>
<li>
<a href="https://blog.torproject.org/tor-heart-firefox">Tor at the Heart: Firefox</a> is a blog about Tor and the relationship they have to Firefox re: TBB, Fusion.
</li>
</ul>
<h2>The <strong>Other</strong> Version</h2>
<p>New versions of this extension create an I2P in Private Browsing mode instead, using container tabs.</p>
<p>Since this is a drastic change to the behavior of the old plugin, and since there is no UI a new entry for the new plugin has been made at a new location on addons.mozilla.org.</p>
<ul>
<li>
<p>This is the new version: <a href="https://addons.mozilla.org/en-US/firefox/addon/i2p-in-private-browsing/">[link]</a></p>
</li>
<li>
<p>This is the old version: <a href="https://addons.mozilla.org/en-US/firefox/addon/I2P-Proxy/">[link]</a></p>
</li>
</ul>
<h2>Android usage:</h2>
<p>Use the old version, on either an old version of Firefox(pre-68) or by enabling this custom collection: [Recommended Plugins] https://addons.mozilla.org/en-US/firefox/collections/14614396/I2P-Browser-Fork/</p>
</div>
</body>
</html>

View File

@@ -1,24 +1,26 @@
body,
html {
width: 50rem
}
a {
margin: 10px
width: 600px
}
.panel {
margin: 5px
margin: 5px;
width: 500px
}
.panel-section-header {
width: 500px
}
#text-section-torrents-header {
width: 500px
}
span.identity {
width: 100px;
width: 500px;
display: inline-block;
margin-left: 1em
}
figcaption {
display: inline
display: inline-block
}
.section-header {
display: flex;
flex-direction: row;
margin-bottom: 8px
}
p {
@@ -51,4 +53,18 @@ img.readyness {
}
#consoleOn {
min-height: 2rem
}
#torrentpanel {
display: none
}
.torrent-progress {
width: 90%
}
.tabicon {
width: 32px
}
.application-info {
min-width: unset;
max-width: unset;
float: right
}

470
info.js
View File

@@ -1,173 +1,333 @@
function checkPeerConnection() {
var getting = browser.privacy.network.peerConnectionEnabled.get({});
getting.then(got => {
webrtc = got.value;
console.log("checking webrtc", webrtc);
document.getElementById("enable-web-rtc").checked = webrtc;
});
/**
* @fileoverview I2P Browser Information Manager
* Handles browser settings, privacy features, and navigation for I2P extension
*/
// Constants
const CONFIG = {
TITLE_PREFACE: chrome.i18n.getMessage("titlePreface"),
ROUTER: {
DEFAULT_HOST: "127.0.0.1",
DEFAULT_PORT: "7657",
},
SNOWFLAKE_ID: "{b11bea1f-a888-4332-8d8a-cec2be7d24b9}",
UPDATE_INTERVAL: 0.2 * 60 * 1000,
IRC_URL: "http://127.0.0.1:7669",
};
const UI_ELEMENTS = {
PANELS: {
BROWSER: "browserpanel",
TORRENT: "torrentpanel",
},
LISTS: {
PEERS: "label-peers-list",
BANDWIDTH: "label-bandwidth-list",
},
};
/**
* Privacy Manager for handling browser privacy settings
*/
class PrivacyManagerInfo {
/**
* Check WebRTC peer connection status
*/
static async checkPeerConnection() {
try {
const { value: webrtc } =
await browser.privacy.network.peerConnectionEnabled.get({});
const webrtcToggle = document.getElementById("enable-web-rtc");
if (webrtcToggle) {
webrtcToggle.checked = webrtc;
}
console.info("(info) WebRTC status:", webrtc);
} catch (error) {
console.error("WebRTC check failed:", error);
}
}
/**
* Check Snowflake plugin status
*/
static async checkSnowflake() {
try {
const snowflake = await browser.management.get(CONFIG.SNOWFLAKE_ID);
console.info("(info) Snowflake plugin found:", snowflake);
await this.assurePeerConnection();
} catch (error) {
console.info("(info) Snowflake not found:", error);
}
}
/**
* Check history settings
*/
static async checkHistory() {
try {
const { disable_history = false } = await browser.storage.local.get(
"disable_history"
);
const historyToggle = document.getElementById("disable-history");
if (historyToggle) {
historyToggle.checked = disable_history;
}
console.info("(info) History disabled:", disable_history);
} catch (error) {
console.error("History check failed:", error);
}
}
/**
* Check referer settings
*/
static async checkReferer() {
try {
const { disable_referer = false } = await browser.storage.local.get(
"disable_referer"
);
const refererToggle = document.getElementById("disable-referer");
if (refererToggle) {
refererToggle.checked = disable_referer;
}
console.info("(info) Referer disabled:", disable_referer);
} catch (error) {
console.error("Referer check failed:", error);
}
}
}
checkPeerConnection();
/**
* Tab Manager for handling browser navigation
*/
class TabManager {
/**
* Create a new browser tab
* @param {Object} options Tab creation options
* @return {Promise<browser.tabs.Tab>}
*/
static async createTab(options) {
try {
const tab = await browser.tabs.create(options);
console.info("(info) Tab created:", options.url);
return tab;
} catch (error) {
console.error("Tab creation failed:", error);
throw error;
}
}
function checkHistory() {
var getting = browser.storage.local.get("disable_history");
getting.then(got => {
disable_history = got.disable_history;
if (disable_history == undefined) disable_history = false;
console.log("checking history", disable_history);
document.getElementById("disable-history").checked = disable_history;
});
/**
* Create a tab in I2P container
* @param {string} url Destination URL
*/
static async createContainerTab(url) {
try {
const contexts = await browser.contextualIdentities.query({
name: CONFIG.TITLE_PREFACE,
});
if (!contexts.length) {
throw new Error("No I2P container found");
}
return this.createTab({
url,
cookieStoreId: contexts[0].cookieStoreId,
});
} catch (error) {
console.error("Container tab creation failed:", error);
throw error;
}
}
/**
* Navigate to local I2P service
* @param {string} path Service path
*/
static async goToService(path) {
try {
const routerAddress = await RouterManager.getRouterAddress();
await this.createTab({
url: `http://${routerAddress}${path}`,
});
} catch (error) {
console.error(`Service navigation failed : ${path}`, error);
}
}
}
checkHistory();
/**
* Router Manager for I2P router operations
*/
class RouterManager {
/**
* Get router address
* @return {string}
*/
static getRouterAddress() {
try {
return `${control_host()}:${control_port()}`;
} catch {
return `${CONFIG.ROUTER.DEFAULT_HOST}:${CONFIG.ROUTER.DEFAULT_PORT}`;
}
}
document.addEventListener("click", e => {
if (e.target.id === "window-create-help-panel") {
let createData = {
type: "panel",
incognito: true
/**
* Generate new identity
*/
static async generateNewIdentity() {
try {
const routerAddress = this.getRouterAddress();
const response = await fetch(`http ://${routerAddress}`);
console.info("(info) New identity generated");
return response;
} catch (error) {
console.error("Identity generation failed:", error);
throw error;
}
}
}
/**
* UI Manager for handling interface elements
*/
class UIManager {
/**
* Toggle panel visibility
* @param {string} showPanel Panel to show
* @param {string} hidePanel Panel to hide
*/
static togglePanels(showPanel, hidePanel) {
try {
const show = document.getElementById(showPanel);
const hide = document.getElementById(hidePanel);
if (show && hide) {
show.style.display = "block";
hide.style.display = "none";
}
} catch (error) {
console.error("Panel toggle failed:", error);
}
}
/**
* Initialize UI elements
*/
static initializeUI() {
Object.values(UI_ELEMENTS.LISTS).forEach((listId) => {
const list = document.getElementById(listId);
if (list) {
list.style.display = "none";
}
});
}
}
/**
* Click Handler for UI interactions
*/
class ClickHandler {
/**
* Handle click events
* @param {MouseEvent} event Click event
*/
static async handleClick(event) {
event.preventDefault();
const { id: targetId } = event.target;
try {
// Panel creation
if (targetId.startsWith("window-create-")) {
await TabManager.createTab({
type: "panel",
incognito: true,
});
}
// Service navigation
else if (targetId.startsWith("window-visit-")) {
const service = targetId.split("-")[2];
await this.handleServiceNavigation(service);
}
// Settings toggles
else if (targetId === "enable-web-rtc") {
await this.handleWebRTCToggle(event.target.checked);
}
// Other actions
else if (targetId === "generate-fresh-tunnel") {
await RouterManager.generateNewIdentity();
}
} catch (error) {
console.error("Click handling failed:", error);
}
}
/**
* Handle service navigation
* @param {string} service Service identifier
*/
static async handleServiceNavigation(service) {
const serviceMap = {
console: "/home",
i2ptunnel: "/i2ptunnel",
susimail: "/susimail",
snark: "/i2psnark",
};
let creating = browser.tabs.create(createData);
creating.then(() => {
console.log("The help panel has been created");
});
} else if (e.target.id === "window-create-news-panel") {
let createData = {
type: "panel",
incognito: true
};
let creating = browser.tabs.create(createData);
creating.then(() => {
console.log("The news panel has been created");
});
} else if (e.target.id === "generate-fresh-tunnel") {
function RefreshIdentity() {
console.log("Generating new identity");
const Http = new XMLHttpRequest();
const url = "http://" + controlHost + ":" + controlPort;
Http.open("GET", url);
Http.send();
Http.onreadystatechange = e => {
console.log(Http.responseText);
};
if (serviceMap[service]) {
await TabManager.goToService(serviceMap[service]);
}
RefreshIdentity();
} else if (e.target.id === "window-preface-title") {
} else if (e.target.id === "window-visit-homepage") {
console.log("attempting to create homepage tab");
goHome();
} else if (e.target.id === "window-visit-i2ptunnel") {
console.log("attempting to create i2ptunnel tab");
goTunnel();
} else if (e.target.id === "window-visit-susimail") {
console.log("attempting to create susimail tab");
goMail();
} else if (e.target.id === "window-visit-snark") {
console.log("attempting to create snark tab");
goSnark();
} else if (e.target.id === "clear-browser-data") {
forgetBrowsingData();
} else if (e.target.id === "check-i2p-control") {
echo("I2P Router Detected", "panel-section-i2pcontrol-check");
} else if (e.target.id === "enable-web-rtc") {
if (e.target.checked) {
browser.runtime.sendMessage({ rtc: "enableWebRTC" });
} else {
browser.runtime.sendMessage({ rtc: "disableWebRTC" });
}
//checkPeerConnection()
return;
} else if (e.target.id === "disable-history") {
if (e.target.checked) {
browser.runtime.sendMessage({ history: "disableHistory" });
} else {
browser.runtime.sendMessage({ history: "enableHistory" });
}
//checkHistory()
return;
}
e.preventDefault();
});
function proxyReadiness() {
console.log(this.responseText);
}
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os != "android") {
browser.history.onVisited.addListener(onVisited);
}
});
/**
* Initialize the information manager
*/
async function initialize() {
try {
// Initialize privacy settings
await Promise.all([
PrivacyManagerInfo.checkPeerConnection(),
PrivacyManagerInfo.checkSnowflake(),
PrivacyManagerInfo.checkHistory(),
PrivacyManagerInfo.checkReferer(),
]);
function goHome() {
function gotProxyInfo(info) {
let host = info.value.http.split(":")[0];
let port = info.value.http.split(":")[1];
if (port == "7644") {
let createData = {
url: "about:I2p"
};
console.log("visiting homepage");
let creating = browser.tabs.create(createData);
} else {
let createData = {
url: "home.html"
};
console.log("visiting homepage");
let creating = browser.tabs.create(createData);
// Initialize UI
UIManager.initializeUI();
document.addEventListener(
"click",
ClickHandler.handleClick.bind(ClickHandler)
);
// Set up content updates
if (typeof UpdateContents !== "undefined") {
setInterval(UpdateContents, CONFIG.UPDATE_INTERVAL);
}
console.log("(bookmarks) adding home page bookmark");
console.info("(info) Information manager initialized");
} catch (error) {
console.error("Initialization failed:", error);
}
console.log("(bookmarks) checking if we're running in an I2P Browser");
var gettingInfo = browser.proxy.settings.get({});
gettingInfo.then(gotProxyInfo);
}
function goTunnel() {
let createData = {
url: "http://" + control_host + ":" + control_port + "/i2ptunnel"
// Initialize if browser API is available
if (browser?.windows) {
initialize();
}
// Export for testing
if (typeof module !== "undefined" && module.exports) {
module.exports = {
PrivacyManager: PrivacyManagerInfo,
TabManager,
RouterManager,
UIManager,
ClickHandler,
CONFIG,
};
console.log("visiting homepage");
let creating = browser.tabs.create(createData);
}
function goMail() {
let createData = {
url: "http://" + control_host + ":" + control_port + "/susimail"
};
console.log("visiting homepage");
let creating = browser.tabs.create(createData);
}
function goSnark() {
let createData = {
url: "http://" + control_host + ":" + control_port + "/i2psnark"
};
console.log("visiting homepage");
let creating = browser.tabs.create(createData);
}
function onVisited(historyItem) {
function onCleaned(results) {
if (!results.length) {
console.log(" was removed");
} else {
console.log(" was not removed");
}
}
function onRemoved() {
var searching = browser.history.search({
text: historyItem.url,
startTime: 0
});
searching.then(onCleaned);
}
if (!history) {
if (i2pHost(historyItem.url))
var deletingUrl = browser.history.deleteUrl(historyItem.url);
deletingUrl.then(onRemoved);
}
}

8
irc.js Normal file
View File

@@ -0,0 +1,8 @@
fetch("http://127.0.0.1:7669").then((myJson) => {
if (myJson.status == 200) {
let irc = document.getElementById("visit-irc");
if (irc != null) {
irc.classList.remove("hidden");
}
}
});

76
issues.csv Normal file
View File

@@ -0,0 +1,76 @@
"title","description"
"Moar Bookmarks","A larger set of default bookmarks in their own directory would probably be good. Stuff like the forums, zzz's forums, gitlab, stats, identiguy, postman, echobot test, fingerprint test, etc."
"privacy-breach-generic false positive with lintian","We make a request to proxy.i2p, a sort of loopback site, to ensure that the proxy is ready for the browser and provide user feedback. Lintian sees proxy.i2p as a remote site, which it isn't. Given this, the Warning issued by lintian is a false positive. This should be handled somehow."
"App-tabs for Project sites?","Not sure if this is a good idea. May want to talk to Simply Secure about it."
"Descriptive Proxy Error Page","When the proxy isn't ready, but the user enters an I2P browsing tab, provide a descriptive error page to guide the user to a solution, even if that solution is to tell them to wait 2 minutes.
States should be described:
- Router Not Present: There is no indication that I2P is installed on the system. Direct them to an I2P distribution.
- HTTP Proxy Not Ready: The router is present, but the HTTP Proxy is not up yet. Wait 2 minutes, if t>2 minutes, direct them to /i2ptunnel to troubleshoot."
"More intuitive history management, better programming interface","Right now history management is from before it used contextual identities, with some hacks on top. It needs to be changed to a better interface, which simply takes a contextual identity and clears history based on that information. This will improve security, reliability, and be useful in non-I2P contexts in the future."
"Reseed over WebRTC Data Channel","This can't be done in just this extension, but this extension is probably an important component of a future plan in which this is straightforward. This is the trickiest thing I've tried so far, K, let's define some phases here...
Phase 0: Design
=============
We're pretty different from Tor in the places where Snowflake would really matter, but it's an inspiring effort and a cool product. This process probably won't bear much resemblance to Snowflake when it's all designed, but Snowflake was the original inspiration for the idea.
What we want to do is make it possible for I2P users to easily reseed eachother in a peer-to-peer way when necessary. It must be done no more often than a normal reseed, and it must only ever be client initiated.
This is **not** a webRTC transport for I2P. That would be an entirely different project. Especially if it were to do something genuinely insane like try to incorporate browser users not otherwise running I2P into the routing process. That would be crazy, right? Right? (It might not actually be that crazy but I have enough to think about right now). This is only for reseeds.
Questions
--------------
- Where to get the reseed file? Locally or from a reseed server? Probably a server, and we act as a proxy, but we need to examine advantages and disadvantages of each. Maybe both, server then a local fallback?
- Do we need to geolocate and never fetch a reseed file for a user in a country which is already automatically in hidden mode? Probably yes. Might want to never make them reseed helpers anyway.
- How to distribute the reseed file? If it comes from a server it will be signed by a key we already trust, that's fine, but if it comes from somewhere local we may want to use an interstitial
Components
-----------------
- Browser Extension - This repo. We use it because we can to some extent assume that people using this extension are also using I2P and can thus provide a reseed from a local source if need be.
- Javascript Import - Placed on web pages, a'la Snowflake and or Flashproxy. Shows a download link that says Download reseed file over WebRTC, uses a (random?) extension user.
- Native Proxy - Runs locally, obviates the need to download the reseed in a browser by fetching it over WebRTC on behalf of the router. Will start out as a Bridge but eventually be incorporated into I2P if successful.
1. Go version, using pion/webrtc
2. Java version, using whatever that Guardian Project library is probably
Phase 1: Manual Mode
=================
Components required
-----------------------------
- Browser Extension
- Javascript Import
Phase 2: Bridged Prototype
====================
- Native Proxy, Go Version
Phase 3: Router Incorporation
======================
- Native Proxy, Java Version
"
"Torbrowser","Are there any plans to support the Torbrowser?
"
"Use pageAction to indicate Security Status of I2P Sites(TLS, etc)","https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction"
"SSH in the Browser?","TODO"
"Dat Support?","TODO"
"Secure configuration of tunnels for RPC remotes","Eventually we'll have to have configuration for different RPC endpoints for I2PControl and Bittorrent, from there it's not a stretch to let remote clients be controlled over i2p tunnels as well, but in this case we need to make sure that we require the password to be changed from the default and possibly look into using encrypted leasesets here too."
"Tidy up the settings and document where they come from and what they do","Now that this is getting more and cooler features, I need to go over what all the settings are, how they're configured, which ones are obsolete and which ones needs to be created to fully realize all the cool stuff this plugin can do. This should be done before I even introduce settings for the torrent RPC protocols which makes it another blocker for the next version."
"Internationalize website","The plugin itself supports multiple languages, but the website does not. I should fix that up ASAP."
"Plugin Tab: I2P-Bote","An I2P-Bote plugin tab is a good idea too, but a low priority since Bote isn't very active right now."
"Style Guide","Develop a consistent style guide."
"Cool idea: tab or window.privacy API","Design webextension experiment."
"Uplifting 3: Letterboxing","I dunno what's up here. This setting is privacy.resistFingerprinting.letterboxing=true or something like that. If seems like the privacy.websites.resistFingerprinting API should enables privacy.resistFingerprinting."
"Uplifting 2: audio stuff","Work with Mozilla to disable fingerprintable audio API's when privacy.resistFingerprinting=true."
"Uplifting 1: webgl","Work with Mozilla to finish webgl requirements for resistFingerprinting."
"FoxyProxy Compatibility?","This extension currently *Breaks the expected behavior of FoxyProxy* by enforcing it's rules over those described by FoxyProxy. This one might be more trouble than it's worth, in fact I think it probably is, but if it isn't, this is a nice-to-have for some of the longtime Foxy users to ease their transition. "
"Android","Somewhere in the past few releases I broke Android, probably while I was making the window-management less irritating. Find+fix."
"Whonix","I2P integration in Whonix is running into the problem of making the router console available(Which requires either a proxy exception or an extra proxy like Privoxy) without making the whole localhost available. Since that's a problem this can solve, after I deal with the linting stuff I need to get back in touch with them. Right now I'm also (ab)using include-binaries, I'll need to resolve that too."
"Update channel for non-AMO Webextension","TODO:"
1 title description
2 Moar Bookmarks A larger set of default bookmarks in their own directory would probably be good. Stuff like the forums, zzz's forums, gitlab, stats, identiguy, postman, echobot test, fingerprint test, etc.
3 privacy-breach-generic false positive with lintian We make a request to proxy.i2p, a sort of loopback site, to ensure that the proxy is ready for the browser and provide user feedback. Lintian sees proxy.i2p as a remote site, which it isn't. Given this, the Warning issued by lintian is a false positive. This should be handled somehow.
4 App-tabs for Project sites? Not sure if this is a good idea. May want to talk to Simply Secure about it.
5 Descriptive Proxy Error Page When the proxy isn't ready, but the user enters an I2P browsing tab, provide a descriptive error page to guide the user to a solution, even if that solution is to tell them to wait 2 minutes. States should be described: - Router Not Present: There is no indication that I2P is installed on the system. Direct them to an I2P distribution. - HTTP Proxy Not Ready: The router is present, but the HTTP Proxy is not up yet. Wait 2 minutes, if t>2 minutes, direct them to /i2ptunnel to troubleshoot.
6 More intuitive history management, better programming interface Right now history management is from before it used contextual identities, with some hacks on top. It needs to be changed to a better interface, which simply takes a contextual identity and clears history based on that information. This will improve security, reliability, and be useful in non-I2P contexts in the future.
7 Reseed over WebRTC Data Channel This can't be done in just this extension, but this extension is probably an important component of a future plan in which this is straightforward. This is the trickiest thing I've tried so far, K, let's define some phases here... Phase 0: Design ============= We're pretty different from Tor in the places where Snowflake would really matter, but it's an inspiring effort and a cool product. This process probably won't bear much resemblance to Snowflake when it's all designed, but Snowflake was the original inspiration for the idea. What we want to do is make it possible for I2P users to easily reseed eachother in a peer-to-peer way when necessary. It must be done no more often than a normal reseed, and it must only ever be client initiated. This is **not** a webRTC transport for I2P. That would be an entirely different project. Especially if it were to do something genuinely insane like try to incorporate browser users not otherwise running I2P into the routing process. That would be crazy, right? Right? (It might not actually be that crazy but I have enough to think about right now). This is only for reseeds. Questions -------------- - Where to get the reseed file? Locally or from a reseed server? Probably a server, and we act as a proxy, but we need to examine advantages and disadvantages of each. Maybe both, server then a local fallback? - Do we need to geolocate and never fetch a reseed file for a user in a country which is already automatically in hidden mode? Probably yes. Might want to never make them reseed helpers anyway. - How to distribute the reseed file? If it comes from a server it will be signed by a key we already trust, that's fine, but if it comes from somewhere local we may want to use an interstitial Components ----------------- - Browser Extension - This repo. We use it because we can to some extent assume that people using this extension are also using I2P and can thus provide a reseed from a local source if need be. - Javascript Import - Placed on web pages, a'la Snowflake and or Flashproxy. Shows a download link that says Download reseed file over WebRTC, uses a (random?) extension user. - Native Proxy - Runs locally, obviates the need to download the reseed in a browser by fetching it over WebRTC on behalf of the router. Will start out as a Bridge but eventually be incorporated into I2P if successful. 1. Go version, using pion/webrtc 2. Java version, using whatever that Guardian Project library is probably Phase 1: Manual Mode ================= Components required ----------------------------- - Browser Extension - Javascript Import Phase 2: Bridged Prototype ==================== - Native Proxy, Go Version Phase 3: Router Incorporation ====================== - Native Proxy, Java Version
8 Torbrowser Are there any plans to support the Torbrowser?
9 Use pageAction to indicate Security Status of I2P Sites(TLS, etc) https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction
10 SSH in the Browser? TODO
11 Dat Support? TODO
12 Secure configuration of tunnels for RPC remotes Eventually we'll have to have configuration for different RPC endpoints for I2PControl and Bittorrent, from there it's not a stretch to let remote clients be controlled over i2p tunnels as well, but in this case we need to make sure that we require the password to be changed from the default and possibly look into using encrypted leasesets here too.
13 Tidy up the settings and document where they come from and what they do Now that this is getting more and cooler features, I need to go over what all the settings are, how they're configured, which ones are obsolete and which ones needs to be created to fully realize all the cool stuff this plugin can do. This should be done before I even introduce settings for the torrent RPC protocols which makes it another blocker for the next version.
14 Internationalize website The plugin itself supports multiple languages, but the website does not. I should fix that up ASAP.
15 Plugin Tab: I2P-Bote An I2P-Bote plugin tab is a good idea too, but a low priority since Bote isn't very active right now.
16 Style Guide Develop a consistent style guide.
17 Cool idea: tab or window.privacy API Design webextension experiment.
18 Uplifting 3: Letterboxing I dunno what's up here. This setting is privacy.resistFingerprinting.letterboxing=true or something like that. If seems like the privacy.websites.resistFingerprinting API should enables privacy.resistFingerprinting.
19 Uplifting 2: audio stuff Work with Mozilla to disable fingerprintable audio API's when privacy.resistFingerprinting=true.
20 Uplifting 1: webgl Work with Mozilla to finish webgl requirements for resistFingerprinting.
21 FoxyProxy Compatibility? This extension currently *Breaks the expected behavior of FoxyProxy* by enforcing it's rules over those described by FoxyProxy. This one might be more trouble than it's worth, in fact I think it probably is, but if it isn't, this is a nice-to-have for some of the longtime Foxy users to ease their transition.
22 Android Somewhere in the past few releases I broke Android, probably while I was making the window-management less irritating. Find+fix.
23 Whonix I2P integration in Whonix is running into the problem of making the router console available(Which requires either a proxy exception or an extra proxy like Privoxy) without making the whole localhost available. Since that's a problem this can solve, after I deal with the linting stuff I need to get back in touch with them. Right now I'm also (ab)using include-binaries, I'll need to resolve that too.
24 Update channel for non-AMO Webextension TODO:

BIN
lander.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

36
location.html Normal file
View File

@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="search.css" rel="stylesheet">
<link href="home.css" rel="stylesheet">
<!--<link href="info.css" rel="stylesheet">--><!--<link href="torrent/popup.css" rel="stylesheet">-->
<title>
</title>
</head>
<body>
<div id="browserpanel" class="content">
<div class="panel">
<div class="section-header panel-section panel-section-header" id="headline">
<div class="text-section-header" id="text-section-header">
<h1 id="text-section-header">This site offers an anonymous mirror on I2P</h1>
</div>
</div>
</div>
<div class="panel">
<ul>
<li>
<div class="address-info">
<span id="TypeLabel">Alternate Addresses:</span> <span id="Type"></span>
<div id="TypeInfo">
</div>
</div>
</li>
</ul>
</div>
</div>
<script src="location.js"></script>
</body>
</html>

19
location.js Normal file
View File

@@ -0,0 +1,19 @@
function gotCurrent(tab) {
function gotTitle(title) {
let addr = title;
document.getElementById("TypeInfo").innerHTML =
'<div class="AddressInfo"><a href="' + addr + '">' + addr + "</a></div>";
}
console.log(tab);
var gettingTitle = browser.pageAction.getTitle({
tabId: tab[0].id,
});
gettingTitle.then(gotTitle);
}
function tabError(error) {
console.log(`Error : ${error}`);
}
const gettingCurrent = browser.tabs.query({ active: true });
gettingCurrent.then(gotCurrent, tabError);

View File

@@ -1,18 +1,22 @@
{
"applications": {
"browser_specific_settings": {
"gecko": {
"id": "i2ppb@eyedeekay.github.io",
"strict_min_version": "60.0"
"strict_min_version": "91.1.0"
}
},
"permissions": [
"theme",
"alarms",
"browsingData",
"bookmarks",
"contextMenus",
"management",
"notifications",
"proxy",
"privacy",
"storage",
"webNavigation",
"webRequest",
"webRequestBlocking",
"contextualIdentities",
@@ -23,33 +27,53 @@
],
"manifest_version": 2,
"name": "__MSG_extensionName__",
"version": "0.49",
"version_name": "0.49",
"version": "2.8.0",
"description": "__MSG_extensionDescription__",
"homepage_url": "https://github.com/eyedeekay/i2psetproxy.js",
"homepage_url": "https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox",
"icons": {
"48": "icons/toopie.png"
"48": "icons/i2plogo.png"
},
"browser_action": {
"browser_style": true,
"default_icon": "icons/toopie.png",
"default_icon": "icons/i2plogo.png",
"default_title": "__MSG_extensionName__",
"default_popup": "window.html"
"default_popup": "window.html",
"default_area": "navbar"
},
"page_action": {
"browser_style": true,
"default_title": "__MSG_toopieTLS__",
"default_icon": "icons/i2plogo.png",
"show_matches": [
"http://*.i2p/*",
"https://*.i2p/*",
"http://*.b32.i2p/*",
"https://*.b32.i2p/*"
],
"pinned": true
},
"options_ui": {
"page": "options/options.html"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["script.js"]
}
],
"background": {
"persistent": false,
"scripts": [
"options/options.js",
"config.js",
"host.js",
"privacy.js",
"platform.js",
"background.js",
"host.js",
"handler.js",
"proxy.js",
"info.js",
"home.js",
"i2pcontrol/i2pcontrol.js",
"scrub.js",
"bookmarks.js"
]
@@ -60,16 +84,17 @@
"name": "RouterConsole",
"uriTemplate": "http://127.0.0.1:7657/%s"
},
{
"protocol": "ext+dati2p",
"name": "Dat over I2P",
"uriTemplate": "/dat.html#!/%s"
},
{
"protocol": "magnet",
"name": "I2PTorrent",
"uriTemplate": "__MSG_protocolHandlerValue__"
"uriTemplate": "http://127.0.0.1:7657/i2psnark/?nofilter_newURL=%s&action=Add&foo=Add+torrent"
}
],
"default_locale": "en"
"default_locale": "en",
"chrome_settings_overrides": {
"homepage": "home.html"
},
"chrome_url_overrides": {
"newtab": "home.html"
}
}

BIN
menu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

152
messages.js Normal file
View File

@@ -0,0 +1,152 @@
function contentUpdateById(id, message) {
let infoTitle = document.getElementById(id);
let messageContent = chrome.i18n.getMessage(message);
if (infoTitle === null) {
console.log("content error", id, messageContent);
return;
}
infoTitle.textContent = messageContent;
}
contentUpdateById("CertLabel", "CertLabel");
contentUpdateById("SignedLabel", "SignedLabel");
contentUpdateById("TorrentTypeLabel", "TorrentTypeLabel");
contentUpdateById("TypeLabel", "TypeLabel");
contentUpdateById("aboutconsole", "aboutconsole");
contentUpdateById("abouthome", "abouthome");
contentUpdateById("addresstype", "addresstype");
contentUpdateById("applicationExplain", "applicationExplain");
contentUpdateById("applicationHeader", "applicationHeader");
contentUpdateById("beta", "beta");
contentUpdateById("bookmarksButton", "bookmarksButton");
contentUpdateById("btRpcHostText", "btRpcHostText");
contentUpdateById("btRpcPathText", "btRpcPathText");
contentUpdateById("btRpcPortText", "btRpcPortText");
contentUpdateById("controlExplain", "controlExplain");
contentUpdateById("controlHeader", "controlHeader");
contentUpdateById("controlHelpText", "controlHelpText");
contentUpdateById("controlHostText", "controlHostText");
contentUpdateById("controlPortText", "controlPortText");
contentUpdateById("description", "description");
contentUpdateById("description2", "description2");
contentUpdateById("fliplinks", "fliplinks");
contentUpdateById("headline", "headline");
contentUpdateById("histDesc", "histDesc");
contentUpdateById("hostText", "hostText");
contentUpdateById("i2ppage", "i2ppage");
contentUpdateById("i2ptunnel", "i2ptunnel");
contentUpdateById("label-router-activepeers", "label-router-activepeers");
contentUpdateById("label-router-bandwidth", "label-router-bandwidth");
contentUpdateById("label-router-bw-inbound-15s", "label-router-bw-inbound-15s");
contentUpdateById("label-router-bw-inbound-1s", "label-router-bw-inbound-1s");
contentUpdateById(
"label-router-bw-outbound-15s",
"label-router-bw-outbound-15s"
);
contentUpdateById("label-router-bw-outbound-1s", "label-router-bw-outbound-1s");
contentUpdateById(
"label-router-net-tunnels-participating",
"label-router-net-tunnels-participating"
);
contentUpdateById(
"label-router-netdb-fastpeers",
"label-router-netdb-fastpeers"
);
contentUpdateById(
"label-router-netdb-highcapacitypeers",
"label-router-netdb-highcapacitypeers"
);
contentUpdateById(
"label-router-netdb-isreseeding",
"label-router-netdb-isreseeding"
);
contentUpdateById(
"label-router-netdb-knownpeers",
"label-router-netdb-knownpeers"
);
contentUpdateById("label-router-peers", "label-router-peers");
contentUpdateById("label-router-status", "label-router-status");
contentUpdateById("label-router-uptime", "label-router-uptime");
contentUpdateById("label-router-version", "label-router-version");
contentUpdateById("links", "links");
contentUpdateById("linksExplain", "linksExplain");
contentUpdateById("onboardingButtonFive", "onboardingButtonFive");
contentUpdateById("onboardingButtonFour", "onboardingButtonFour");
contentUpdateById("onboardingButtonOne", "onboardingButtonOne");
contentUpdateById("onboardingButtonThree", "onboardingButtonThree");
contentUpdateById("onboardingButtonTwo", "onboardingButtonTwo");
contentUpdateById("onboardingButtonZero", "onboardingButtonZero");
contentUpdateById("onboardingContentFive", "onboardingContentFive");
contentUpdateById("onboardingContentFour", "onboardingContentFour");
contentUpdateById("onboardingContentOne", "onboardingContentOne");
contentUpdateById("onboardingContentThree", "onboardingContentThree");
contentUpdateById("onboardingContentTwo", "onboardingContentTwo");
contentUpdateById("onboardingContentZero", "onboardingContentZero");
contentUpdateById("onboardingFive", "onboardingFive");
contentUpdateById("onboardingFour", "onboardingFour");
contentUpdateById("onboardingOne", "onboardingOne");
contentUpdateById("onboardingThree", "onboardingThree");
contentUpdateById("onboardingTitle", "onboardingTitle");
contentUpdateById("onboardingTwo", "onboardingTwo");
contentUpdateById("onboardingZero", "onboardingZero");
contentUpdateById("portText", "portText");
contentUpdateById("proxy-check", "proxy-check");
contentUpdateById("releases", "releases");
contentUpdateById("returnhome", "returnhome");
contentUpdateById("router-net-bw-inbound-15s", "router-net-bw-inbound-15s");
contentUpdateById("router-net-bw-inbound-1s", "router-net-bw-inbound-1s");
contentUpdateById("router-net-bw-outbound-15s", "router-net-bw-outbound-15s");
contentUpdateById("router-net-bw-outbound-1s", "router-net-bw-outbound-1s");
contentUpdateById(
"router-net-tunnels-participating",
"router-net-tunnels-participating"
);
contentUpdateById("router-netdb-activepeers", "router-netdb-activepeers");
contentUpdateById("router-netdb-fastpeers", "router-netdb-fastpeers");
contentUpdateById(
"router-netdb-highcapacitypeers",
"router-netdb-highcapacitypeers"
);
contentUpdateById("router-netdb-isreseeding", "router-netdb-isreseeding");
contentUpdateById("router-netdb-knownpeers", "router-netdb-knownpeers");
contentUpdateById("router-restart", "router-restart");
contentUpdateById("router-shutdown", "router-shutdown");
contentUpdateById("router-status", "router-status");
contentUpdateById("router-uptime", "router-uptime");
contentUpdateById("router-version", "router-version");
contentUpdateById("routerConsole", "routerConsole");
contentUpdateById("rpcHelpText", "rpcHelpText");
contentUpdateById("rpcHostText", "rpcHostText");
contentUpdateById("rpcPassText", "rpcPassText");
contentUpdateById("rpcPathText", "rpcPathText");
contentUpdateById("rpcPortText", "rpcPortText");
contentUpdateById("signingcert", "signingcert");
contentUpdateById("sitecert", "sitecert");
contentUpdateById("snark", "snark");
contentUpdateById("sourcehead", "sourcehead");
contentUpdateById("sources", "sources");
contentUpdateById("susimail", "susimail");
contentUpdateById("text-section-header", "text-section-header");
contentUpdateById(
"text-section-proxyerr-header",
"text-section-proxyerr-header"
);
contentUpdateById(
"text-section-torrents-header",
"text-section-torrents-header"
);
contentUpdateById("toopie", "toopie");
contentUpdateById("torrentui-opener", "torrentui-opener");
contentUpdateById("visit-irc", "visit-irc");
contentUpdateById("webpage", "webpage");
contentUpdateById("window-visit-console", "window-visit-console");
contentUpdateById("window-visit-help", "window-visit-help");
contentUpdateById("window-visit-homepage", "window-visit-homepage");
contentUpdateById("window-visit-i2p", "window-visit-i2p");
contentUpdateById("window-visit-i2ptunnel", "window-visit-i2ptunnel");
contentUpdateById("window-visit-index", "window-visit-index");
contentUpdateById("window-visit-releases", "window-visit-releases");
contentUpdateById("window-visit-router", "window-visit-router");
contentUpdateById("window-visit-snark", "window-visit-snark");
contentUpdateById("window-visit-sources", "window-visit-sources");
contentUpdateById("window-visit-susimail", "window-visit-susimail");
contentUpdateById("window-visit-torrent", "window-visit-torrent");

View File

@@ -1,62 +1,52 @@
body {
width: 25em;
font-family: "Open Sans Light", sans-serif;
font-family: "Open Sans Light",sans-serif;
font-size: 0.9em;
font-weight: 300;
font-weight: 300
}
section.scheme-options {
padding: 0.5em 0;
margin: 1em 0;
margin: 1em 0
}
#clear-button {
margin: 0 1.3em 1em 0;
margin: 0 1.3em 1em 0
}
#clear-button,
section.scheme-options input,
section.scheme-options>select,
#clear-button {
float: right;
section.scheme-options>select {
}
label {
display: block;
padding: 0.2em 0;
margin-top: 1em
}
label:hover {
background-color: #EAEFF2;
background-color: #eaeff2
}
.title {
font-size: 1.2em;
margin-bottom: 0.5em;
width: 100%
}
html, body {
width: 350px;
body,
html {
width: 100%
}
a {
margin: 10px;
display: inline-block;
margin: 10px
}
.panel {
margin: 5px;
margin: 5px
}
span.identity {
width: 100px;
display: inline-block;
margin-left: 1em;
margin-left: 1em
}
.control-options {
display: none;
}
.identity-options {
display: none;
display: none
}
input {
}
div {
width: 100%!important
}

View File

@@ -1,51 +1,61 @@
<!DOCTYPE html>
<html>
<head>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="options.css"/>
</head>
<body>
<link href="/home.css" rel="stylesheet">
<link href="options.css" rel="stylesheet">
<title>
</title>
</head>
<body>
<section class="scheme-options">
<span class="title">Proxy Scheme:</span> <select id="proxy_scheme">
<option selected value="http">
HTTP
</option>
<option value="socks5">
SOCKS5
</option>
</select>
</section>
<section class="scheme-options">
<span class="title">Proxy Scheme:</span>
<select id="proxy_scheme">
<option value="http" selected="selected">HTTP</option>
<option value="socks5">SOCKS5</option>
</select>
<span class="title">Bookmarks Status:</span> <input id="bookmarksState" name="bookmarksstate" type="checkbox" value="bookmarksstate"> <label for="bookmarksState">Bookmarks were created at install-time. <button id="bookmarksButton" type="submit">Re-Create Bookmarks</button></label>
</section>
<section class="scheme-options proxy-options">
<div class="title" >Proxy Options</div>
<label id="portText">Host: </label>
<input type="text" data="host" id="host" value="127.0.0.1"/>
<br>
<label id="hostText">Port: </label>
<input type="text" data="port" id="port" value="4444"/>
<section class="scheme-options proxy-options" id="proxy-options">
<label for="bookmarksState"></label>
<div class="title">
<label for="bookmarksState">Proxy Options</label>
</div>
<label for="bookmarksState"></label>
<p id="proxyHelpText"><label for="bookmarksState"></label>
</p>
<label for="bookmarksState"><label id="portText">Host:</label> <input data="host" id="host" type="text" value="127.0.0.1">
<br>
<label id="hostText">Port:</label> <input data="port" id="port" type="text" value="4444"></label>
</section>
<section class="scheme-options identity-options">
<!--<section class="scheme-options identity-options">
<div class="panel">
<div id="identity-list">Identity list?</div>
</div>
</section>-->
<section class="scheme-options console-options" id="console-options">
<div>
<div class="title">
Router Console Options
</div>
<p id="controlHelpText">Configure your router console options here.</p>
<label id="controlPortText">Console Host:</label> <input data="controlhost" id="controlhost" type="text" value="127.0.0.1">
<br>
<label id="controlHostText">Console Port:</label> <input data="controlport" id="controlport" type="text" value="7657">
</div>
</section>
<section class="scheme-options control-options">
<div class="title" >Controller Options</div>
<p id="controlHelpText"> These options will be inert if used with the default i2p HTTP or SOCKS
proxy. </p>
<label id="controlPortText">Control Host: </label>
<input type="text" data="controlhost" id="controlhost" value="127.0.0.1"/>
<br>
<label id="controlHostText">Control Port: </label>
<input type="text" data="controlport" id="controlport" value="4444"/>
</section>
<input type="button" value="Save preferences" id="save-button"/>
<script src="options.js"></script>
</body>
<input id="save-button" type="button" value="Save preferences">
<script src="options.js"></script>
<script src="/bookmarks.js"></script> <!--<script src="/torrent/browser-polyfill.min.js"></script>
<script src="/torrent/options.js"></script>-->
</body>
</html>

View File

@@ -1,291 +1,311 @@
function SetHostText() {
var hostid = document.getElementById("hostText");
hostid.textContent = chrome.i18n.getMessage("hostText");
}
/**
* @fileoverview I2P Browser Extension Options Management
* Handles proxy configuration and UI settings for I2P container contexts
*/
function SetPortText() {
var portid = document.getElementById("portText");
portid.textContent = chrome.i18n.getMessage("portText");
}
// Constants and Types
const DEFAULT_SETTINGS = {
proxy_scheme: 'http',
proxy_host: '127.0.0.1',
proxy_port: 4444,
control_host: '127.0.0.1',
control_port: 7657,
bookmarks_state: false,
};
function SetControlHostText() {
var controlhostid = document.getElementById("controlHostText");
controlhostid.textContent = chrome.i18n.getMessage("controlHostText");
}
/**
* Gets proxy scheme from HTML select element
* @return {string}
*/
function getFromHTMLValueScheme() {
const proxy_scheme = document.querySelector('#proxy_scheme');
if (!proxy_scheme) return 'http';
function SetControlPortText() {
var controlportid = document.getElementById("controlPortText");
controlportid.textContent = chrome.i18n.getMessage("controlPortText");
}
function SetControlHelpText() {
var portid = document.getElementById("controlHelpText");
portid.textContent = chrome.i18n.getMessage("controlHelpText");
}
function getScheme() {
const proxy_scheme = document.querySelector("#proxy_scheme");
console.log("Got i2p proxy scheme:", proxy_scheme.value);
if (proxy_scheme == "HTTP") {
return "http";
switch (proxy_scheme.value.toLowerCase()) {
case 'http':
case 'socks':
return proxy_scheme.value.toLowerCase();
default:
return 'http';
}
if (proxy_scheme == "SOCKS") {
return "socks";
}
return proxy_scheme.value;
}
function getHost() {
proxy_host = document.getElementById("host").value;
console.log("Got i2p proxy host:", proxy_host);
if (proxy_host == undefined) {
return "127.0.0.1";
/**
* Checks stored settings and applies defaults if necessary
* @param {Object} storedSettings
* @return {Promise<Object>}
*/
async function checkStoredSettings(storedSettings) {
try {
const proxyInfo = await browser.proxy.settings.get({});
const { http } = proxyInfo.value;
if (!http) {
return DEFAULT_SETTINGS;
}
const[host, portStr] = http.split(":");
const port = parseInt(portStr);
return {
bookmarks_state: storedSettings.bookmarks_state || false,
proxy_scheme: storedSettings.proxy_scheme || "http",
proxy_host: storedSettings.proxy_host || host || "127.0.0.1",
proxy_port: storedSettings.proxy_port || (port === 7644 ? port : 4444),
control_host: storedSettings.control_host || host || "127.0.0.1",
control_port: storedSettings.control_port || 7657,
};
} catch (error) {
console.error("Error in checkStoredSettings:", error);
return DEFAULT_SETTINGS;
}
return proxy_host;
}
function getPort() {
proxy_port = document.getElementById("port").value;
console.log("Got i2p proxy port:", proxy_port);
if (proxy_port == undefined) {
return "4444";
/**
* Checks and applies Android-specific stored settings
* @param {Object} settings
* @returns {Object}
*/
function checkAndroidStoredSettings(settings) {
const mergedSettings = {
...DEFAULT_SETTINGS,
...settings,
};
// Determine correct proxy port with clear logic
function determineProxyPort(port) {
if (!port) {
return 4444;
}
if (port === 7644) {
return 7644;
}
return 4444;
}
return proxy_port;
mergedSettings.proxy_port = determineProxyPort(mergedSettings.proxy_port);
console.info("Android settings merged:", mergedSettings);
chrome.storage.local.set(mergedSettings);
return mergedSettings;
}
function getControlHost() {
control_host = document.getElementById("controlhost").value;
console.log("Got i2p control host:", control_host);
if (control_host == undefined) {
return "127.0.0.1";
}
return control_host;
}
/**
* Updates UI text elements with localized messages
*/
function initializeUI() {
const textElements = [
{ id: "hostText", msgKey: "hostText" },
{ id: "portText", msgKey: "portText" },
{ id: "proxyHelpText", msgKey: "proxyHelpText" },
{ id: "controlHostText", msgKey: "controlHostText" },
{ id: "controlPortText", msgKey: "controlPortText" },
{ id: "controlHelpText", msgKey: "controlHelpText" },
];
function getControlPort() {
control_port = document.getElementById("controlport").value;
console.log("Got i2p control port:", control_port);
if (control_port == undefined) {
return "4444";
}
return control_port;
}
function checkStoredSettings(storedSettings) {
function gotProxyInfo(info) {
let defaultSettings = {};
let host = info.value.http.split(":")[0];
let port = info.value.http.split(":")[1];
console.log("proxy", "'" + host + "'", ":", port);
if (!storedSettings.proxy_scheme) {
defaultSettings["proxy_scheme"] = "http";
textElements.forEach(({ id, msgKey }) => {
const element = document.getElementById(id);
if (element) {
element.textContent = chrome.i18n.getMessage(msgKey);
}
if (!storedSettings.proxy_host) {
if (host == "") {
defaultSettings["proxy_host"] = "127.0.0.1";
} else {
defaultSettings["proxy_host"] = host;
}
} else {
if (host != "") {
defaultSettings["proxy_host"] = host;
} else {
defaultSettings["proxy_host"] = storedSettings.proxy_host;
}
}
if (!storedSettings.proxy_port) {
if (port == undefined) {
defaultSettings["proxy_port"] = 4444;
} else {
defaultSettings["proxy_port"] = port;
}
} else {
if (port != undefined) {
defaultSettings["proxy_port"] = port;
} else {
defaultSettings["proxy_port"] = storedSettings.proxy_port;
}
}
if (!storedSettings.control_host) {
if (host == "") {
defaultSettings["control_host"] = "127.0.0.1";
} else {
defaultSettings["control_host"] = host;
}
} else {
if (host != "") {
defaultSettings["control_host"] = host;
} else {
defaultSettings["control_host"] = storedSettings.control_host;
}
}
if (!storedSettings.control_port) {
if (port == undefined) {
defaultSettings["control_port"] = 4444;
} else {
defaultSettings["control_port"] = port;
}
} else {
if (port != undefined) {
defaultSettings["control_port"] = port;
} else {
defaultSettings["control_port"] = storedSettings.control_port;
}
}
console.log("(browserinfo) NATIVE PROXYSETTINGS", info.value);
console.log(
defaultSettings["proxy_host"],
defaultSettings["proxy_port"],
defaultSettings["control_host"],
defaultSettings["control_port"]
);
chrome.storage.local.set(defaultSettings);
}
var gettingInfo = browser.proxy.settings.get({});
gettingInfo.then(gotProxyInfo);
}
function checkAndroidStoredSettings(storedSettings) {
let defaultSettings = {};
let host = "";
let port = "";
console.log("proxy", "'" + host + "'", ":", port);
if (!storedSettings.proxy_scheme) {
defaultSettings["proxy_scheme"] = "http";
}
if (!storedSettings.proxy_host) {
if (host == "") {
defaultSettings["proxy_host"] = "127.0.0.1";
} else {
defaultSettings["proxy_host"] = host;
}
} else {
if (host != "") {
defaultSettings["proxy_host"] = host;
} else {
defaultSettings["proxy_host"] = storedSettings.proxy_host;
}
}
if (!storedSettings.proxy_port) {
if (port == undefined) {
defaultSettings["proxy_port"] = 4444;
} else {
defaultSettings["proxy_port"] = port;
}
} else {
if (port != undefined) {
defaultSettings["proxy_port"] = port;
} else {
defaultSettings["proxy_port"] = storedSettings.proxy_port;
}
}
if (!storedSettings.control_host) {
if (host == "") {
defaultSettings["control_host"] = "127.0.0.1";
} else {
defaultSettings["control_host"] = host;
}
} else {
if (host != "") {
defaultSettings["control_host"] = host;
} else {
defaultSettings["control_host"] = storedSettings.control_host;
}
}
if (!storedSettings.control_port) {
if (port == undefined) {
defaultSettings["control_port"] = 4444;
} else {
defaultSettings["control_port"] = port;
}
} else {
if (port != undefined) {
defaultSettings["control_port"] = port;
} else {
defaultSettings["control_port"] = storedSettings.control_port;
}
}
console.log(
defaultSettings["proxy_host"],
defaultSettings["proxy_port"],
defaultSettings["control_host"],
defaultSettings["control_port"]
);
chrome.storage.local.set(defaultSettings);
}
function onError(e) {
console.error(e);
}
function storeSettings() {
let proxy_scheme = getScheme();
let proxy_host = getHost();
let proxy_port = getPort();
let control_host = getControlHost();
let control_port = getControlPort();
chrome.storage.local.set({
proxy_scheme,
proxy_host,
proxy_port,
control_host,
control_port
});
console.log("storing proxy scheme:", proxy_scheme);
console.log("storing proxy host:", proxy_host);
console.log("storing proxy port:", proxy_port);
console.log("storing control host:", control_host);
console.log("storing control port:", control_port);
}
function updateUI(restoredSettings) {
const selectList = document.querySelector("#proxy_scheme");
selectList.value = restoredSettings.proxy_scheme;
console.log("showing proxy scheme:", selectList.value);
/**
* Updates UI elements with stored settings
* @param {Object} settings
*/
function updateUI(settings) {
const elements = {
proxy_scheme: document.querySelector("#proxy_scheme"),
bookmarks_state: document.getElementById("bookmarksState"),
host: document.getElementById("host"),
port: document.getElementById("port"),
controlhost: document.getElementById("controlhost"),
controlport: document.getElementById("controlport"),
};
const hostitem = document.getElementById("host");
hostitem.value = restoredSettings.proxy_host;
console.log("showing proxy host:", hostitem.value);
Object.entries(elements).forEach(([key, element]) => {
if (element === null || element === undefined) {
return;
}
const portitem = document.getElementById("port");
portitem.value = restoredSettings.proxy_port;
console.log("showing proxy port:", portitem.value);
if (element.type === "checkbox") {
element.checked = settings[key];
} else {
element.value = settings[key];
}
});
const controlhostitem = document.getElementById("controlhost");
controlhostitem.value = restoredSettings.control_host;
console.log("showing control host:", controlhostitem.value);
const controlportitem = document.getElementById("controlport");
controlportitem.value = restoredSettings.control_port;
console.log("showing control port:", controlportitem.value);
SetHostText();
SetPortText();
SetControlHostText();
SetControlPortText();
SetControlHelpText();
initializeUI();
}
function onError(e) {
console.error(e);
}
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os != "android") {
chrome.storage.local.get(function(got) {
checkStoredSettings(got);
updateUI(got);
});
} else {
chrome.storage.local.get(function(got) {
checkAndroidStoredSettings(got);
updateUI(got);
});
/**
* Gets value from element with fallback to default
* @param {HTMLElement|null} element
* @param {string|number} defaultValue
* @returns {string|number}
*/
function getElementValueWithDefault(element, defaultValue) {
if (!element) {
return defaultValue;
}
});
return element.value || defaultValue;
}
/**
* Gets numeric value from element with fallback to default
* @param {HTMLElement|null} element
* @param {number} defaultValue
* @returns {number}
*/
function getNumericValueWithDefault(element, defaultValue) {
if (!element || !element.value) {
return defaultValue;
}
return parseInt(element.value) || defaultValue;
}
/**
* Stores current settings to browser storage
* @returns {Promise<void>}
*/
async function storeSettings() {
const elements = {
host: document.getElementById("host"),
port: document.getElementById("port"),
controlhost: document.getElementById("controlhost"),
controlport: document.getElementById("controlport"),
bookmarks: document.getElementById("bookmarksState"),
};
const settings = {
proxy_scheme: getFromHTMLValueScheme(),
proxy_host: getElementValueWithDefault(
elements.host,
DEFAULT_SETTINGS.proxy_host
),
proxy_port: getNumericValueWithDefault(
elements.port,
DEFAULT_SETTINGS.proxy_port
),
control_host: getElementValueWithDefault(
elements.controlhost,
DEFAULT_SETTINGS.control_host
),
control_port: getNumericValueWithDefault(
elements.controlport,
DEFAULT_SETTINGS.control_port
),
bookmarks_state: elements.bookmarks ? elements.bookmarks.checked : false,
};
try {
await browser.storage.local.set(settings);
console.info("Settings stored successfully:", settings);
} catch (error) {
console.error("Failed to store settings:", error);
throw error;
}
}
/**
* Error handler for async operations
* @param {Error} error
*/
function onError(error) {
console.error("Operation failed:", error);
}
/**
* Initializes settings based on platform
*/
async function initializeSettings() {
try {
const platform = await browser.runtime.getPlatformInfo();
if (platform.os === "android") {
chrome.storage.local.get(function (gotSettings) {
const settings = checkAndroidStoredSettings(gotSettings);
updateUI(settings);
});
} else {
chrome.storage.local.get(function (gotSettings) {
checkStoredSettings(gotSettings).then(updateUI).catch(onError);
});
}
} catch (error) {
console.error("Platform detection failed:", error);
onError(error);
}
}
/**
* Retrieves a setting from local storage
* @param {string} key - The key to retrieve
* @param {any} defaultValue - Default value if key doesn't exist
* @returns {any} The stored value or default value
*/
function getSetting(key, defaultValue) {
try {
const value = localStorage.getItem(key);
if (value === null || value === undefined) {
return defaultValue;
}
return value;
} catch (error) {
console.error(`Failed to get setting: ${key}`, error);
return defaultValue;
}
}
function getFromStorageProxyScheme() {
return getSetting("proxy_scheme", DEFAULT_SETTINGS.proxy_scheme);
}
function getFromStorageHost() {
return getSetting("proxy_host", DEFAULT_SETTINGS.proxy_host);
}
function getFromStoragePort() {
return getSetting("proxy_port", DEFAULT_SETTINGS.proxy_port);
}
function getFromStorageControlHost() {
return getSetting("control_host", DEFAULT_SETTINGS.control_host);
}
function getFromStorageControlPort() {
return getSetting("control_port", DEFAULT_SETTINGS.control_port);
}
function getFromStorageRPCHost() {
return getSetting("rpc_host", DEFAULT_SETTINGS.rpc_host);
}
function getFromStorageRPCPort() {
return getSetting("rpc_port", DEFAULT_SETTINGS.rpc_port);
}
function getFromStorageRPCPath() {
return getSetting("rpc_path", DEFAULT_SETTINGS.rpc_path);
}
function getFromStorageRPCPass() {
return getSetting("rpc_pass", DEFAULT_SETTINGS.rpc_pass);
}
function getFromStorageBTRPCHost() {
return getSetting("bt_rpc_host", DEFAULT_SETTINGS.bt_rpc_host);
}
function getFromStorageBTRPCPort() {
return getSetting("bt_rpc_port", DEFAULT_SETTINGS.bt_rpc_port);
}
function getFromStorageBTRPCPath() {
return getSetting("bt_rpc_path", DEFAULT_SETTINGS.bt_rpc_path);
}
function getFromStorageBTRPCPass() {
return getSetting("bt_rpc_pass", DEFAULT_SETTINGS.bt_rpc_pass);
}
function getFromStorageBookmarksState() {
return getSetting("bookmarks_state", DEFAULT_SETTINGS.bookmarks_state);
}
// Event Listeners
const saveButton = document.querySelector("#save-button");
saveButton.addEventListener("click", storeSettings);
//EXPERIMENTAL: Open in I2P Tab
if (saveButton) {
saveButton.addEventListener("click", storeSettings);
}
document.addEventListener("DOMContentLoaded", initializeSettings);

View File

@@ -1,30 +1,132 @@
var titlepref = chrome.i18n.getMessage("titlePreface");
var titleprefpriv = chrome.i18n.getMessage("titlePrefacePrivate");
var webpref = chrome.i18n.getMessage("webPreface");
var webprefpriv = chrome.i18n.getMessage("webPrefacePrivate");
var routerpref = chrome.i18n.getMessage("routerPreface");
var routerprefpriv = chrome.i18n.getMessage("routerPrefacePrivate");
var mailpref = chrome.i18n.getMessage("mailPreface");
var mailprefpriv = chrome.i18n.getMessage("mailPrefacePrivate");
var torrentpref = chrome.i18n.getMessage("torrentPreface");
var torrentprefpriv = chrome.i18n.getMessage("torrentPrefacePrivate");
var tunnelpref = chrome.i18n.getMessage("i2ptunnelPreface");
var tunnelprefpriv = chrome.i18n.getMessage("i2ptunnelPrefacePrivate");
/**
* @fileoverview I2P Platform Detection Manager
* Handles platform detection and feature support for Firefox WebExtensions
*/
var android = false;
// Platform configuration constants
const PLATFORM_CONFIG = {
PLATFORMS: {
ANDROID: "android",
DESKTOP: "desktop",
},
FEATURES: {
CLOSABLE: "closable",
CONTAINER_TABS: "containerTabs",
SIDEBAR: "sidebar",
},
};
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os == "android") {
console.log("Running in Android detected");
android = true;
return true;
} else {
console.log("Running in Desktop detected");
return false;
/**
* Platform Manager for handling platform-specific functionality
*/
class PlatformManager {
constructor() {
// Platform state
this.platformState = {
isAndroid: false,
isInitialized: false,
};
// Initialize platform detection
this.initialize();
}
});
function isDroid() {
return android;
/**
* Initialize platform detection
* @private
* @return {Promise<void>}
*/
async initialize() {
try {
const platformInfo = await browser.runtime.getPlatformInfo();
this.platformState.isAndroid =
platformInfo.os === PLATFORM_CONFIG.PLATFORMS.ANDROID;
this.platformState.isInitialized = true;
console.info(
`(platform) Running in ${
this.platformState.isAndroid ? "Android" : "Desktop"
} detected`
);
} catch (error) {
console.error("Platform detection failed:", error);
this.platformState.isAndroid = false;
this.platformState.isInitialized = true;
}
}
/**
* Check if running on Android
* @return {boolean}
*/
isAndroid() {
if (!this.platformState.isInitialized) {
console.warn("Platform detection not yet initialized");
return false;
}
return this.platformState.isAndroid;
}
/**
* Check if running on Desktop
* @return {boolean}
*/
isDesktop() {
return !this.isAndroid();
}
/**
* Check if windows are closable
* @return {boolean}
*/
isClosable() {
return this.isDesktop();
}
/**
* Get current platform state
* @return {Object}
*/
getPlatformState() {
return { ...this.platformState };
}
}
// Create singleton instance
const platformManager = new PlatformManager();
/**
* Legacy API compatibility layer
*/
const PlatformAPI = {
/**
* Check if running on Android (legacy support)
* @return {boolean}
*/
isDroid() {
const isAndroid = platformManager.isAndroid();
console.log("(platform) android?", isAndroid);
return isAndroid;
},
/**
* Check if windows are not closable (legacy support)
* @return {boolean}
*/
notClosable() {
return !platformManager.isClosable();
},
};
// Export legacy API functions to window
window.isDroid = PlatformAPI.isDroid;
window.notClosable = PlatformAPI.notClosable;
// Export for testing
if (typeof module !== "undefined" && module.exports) {
module.exports = {
platformManager,
PLATFORM_CONFIG,
PlatformAPI,
};
}

View File

@@ -1,412 +1,364 @@
var webpref = chrome.i18n.getMessage("webPreface");
var webprefpriv = chrome.i18n.getMessage("webPrefacePrivate");
var routerpref = chrome.i18n.getMessage("routerPreface");
var routerprefpriv = chrome.i18n.getMessage("routerPrefacePrivate");
var mailpref = chrome.i18n.getMessage("mailPreface");
var mailprefpriv = chrome.i18n.getMessage("mailPrefacePrivate");
var torrentpref = chrome.i18n.getMessage("torrentPreface");
var torrentprefpriv = chrome.i18n.getMessage("torrentPrefacePrivate");
var tunnelpref = chrome.i18n.getMessage("i2ptunnelPreface");
var tunnelprefpriv = chrome.i18n.getMessage("i2ptunnelPrefacePrivate");
/**
* @fileoverview I2P Privacy Manager
* Handles Firefox privacy settings and data cleanup for I2P container tabs
*/
function onSet(result) {
if (result) {
console.log("->: Value was updated");
} else {
console.log("-X: Value was not updated");
const PRIVACY_CONFIG = {
TITLE_PREFACE: chrome.i18n.getMessage("titlePreface"),
SNOWFLAKE_ID: "{b11bea1f-a888-4332-8d8a-cec2be7d24b9}",
WINDOWS: {
OS: "win",
},
BROWSING_DATA: {
SINCE: "forever",
TYPES: ["downloads", "passwords", "formData", "localStorage", "history"],
},
};
/**
* Privacy Manager for handling browser privacy settings
*/
class PrivacyManager {
/**
* Set browser privacy settings
* @param {Object} settings Privacy setting configuration
* @return {Promise<boolean>}
*/
static async setSetting(setting, value) {
try {
const result = await setting.set({ value });
console.info(`Privacy setting updated : ${value}`);
return true;
} catch (error) {
console.error("Privacy setting failed:", error);
return false;
}
}
}
/* This disables queries to centralized databases of bad URLs to screen for
risky sites in your browser */
function disableHyperlinkAuditing() {
var setting = browser.privacy.websites.hyperlinkAuditingEnabled.set({
value: false
});
console.log("Disabling hyperlink auditing/val=", {
value: false
});
setting.then(onSet);
}
/**
* Configure hyperlink auditing
* @param {boolean} enabled Whether to enable auditing
*/
static async configureHyperlinkAuditing(enabled = false) {
await this.setSetting(
browser.privacy.websites.hyperlinkAuditingEnabled,
enabled
);
}
// This enables first-party isolation
function enableFirstPartyIsolation() {
var setting = browser.privacy.websites.firstPartyIsolate.set({
value: true
});
console.log("Enabling first party isolation/val=", {
value: true
});
setting.then(onSet);
}
/**
* Configure first party isolation
* @param {boolean} enabled Whether to enable isolation
*/
static async configureFirstPartyIsolation(enabled = true) {
await this.setSetting(browser.privacy.websites.firstPartyIsolate, enabled);
}
/* This rejects tracking cookies and third-party cookies but it
LEAVES "Persistent" Cookies unmodified in favor of an option in the content
interface for now */
function disableEvilCookies() {
var getting = browser.privacy.websites.cookieConfig.get({});
getting.then(got => {
var setting = browser.privacy.websites.cookieConfig.set({
value: {
behavior: "reject_third_party",
nonPersistentCookies: got.value.nonPersistentCookies
}
});
console.log("Setting cookie behavior/val=", {
value: {
behavior: "reject_third_party",
nonPersistentCookies: got.value.nonPersistentCookies
}
});
setting.then(onSet);
});
}
// Make sure that they're gone
/*function disableBadCookies(){
var setting = browser.privacy.websites.thirdPartyCookiesAllowed.set({
value: false
});
console.log("Disabling third party cookies/val=", {
value: false
})
setting.then(onSet);
}*/
// this disables the use of referrer headers
function disableReferrers() {
var setting = browser.privacy.websites.referrersEnabled.set({
value: false
});
console.log("Disabling referrer headers/val=", {
value: false
});
setting.then(onSet);
}
// enable fingerprinting resistent features(letterboxing and stuff)
function enableResistFingerprinting() {
var setting = browser.privacy.websites.resistFingerprinting.set({
value: true
});
console.log("Enabling resist fingerprinting/val=", {
value: true
});
setting.then(onSet);
}
// This is essentially a blocklist of clearnet web-sites known to do bad tracking
function enableTrackingProtection() {
var setting = browser.privacy.websites.trackingProtectionMode.set({
value: "always"
});
console.log("Enabling tracking protection/val=", {
value: "always"
});
setting.then(onSet);
}
/* This disables protected content, which is a form of digital restrictions
management dependent on identifying information */
function disableDigitalRestrictionsManagement() {
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os == "win") {
var setting = browser.privacy.websites.protectedContentEnabled.set({
value: false
/**
* Configure cookie behavior
* @param {boolean} allowThirdParty Whether to allow third party cookies
*/
static async configureCookies(allowThirdParty = false) {
try {
const cookieConfig = await browser.privacy.websites.cookieConfig.get({});
await browser.privacy.websites.cookieConfig.set({
value: {
behavior: allowThirdParty ? "allow_all" : "reject_third_party",
nonPersistentCookies: cookieConfig.value.nonPersistentCookies,
},
});
console.log(
"Setting Protected Content(Digital Restrictions Management) false/val=",
{
value: false
}
} catch (error) {
console.error("Cookie configuration failed:", error);
}
}
/**
* Configure referrer policy
* @param {boolean} enabled Whether to enable referrers
*/
static async configureReferrers(enabled = false) {
await this.setSetting(browser.privacy.websites.referrersEnabled, enabled);
}
/**
* Configure fingerprinting resistance
* @param {boolean} enabled Whether to enable resistance
*/
static async configureFingerprinting(enabled = true) {
await this.setSetting(
browser.privacy.websites.resistFingerprinting,
enabled
);
}
/**
* Configure tracking protection
* @param {boolean} enabled Whether to enable protection
*/
static async configureTrackingProtection(enabled = true) {
await this.setSetting(
browser.privacy.websites.trackingProtectionMode,
enabled ? "always" : "never"
);
}
/**
* Configure DRM content
* @param {boolean} enabled Whether to enable DRM
*/
static async configureDRM(enabled = false) {
const platformInfo = await browser.runtime.getPlatformInfo();
if (platformInfo.os === PRIVACY_CONFIG.WINDOWS.OS) {
await this.setSetting(
browser.privacy.websites.protectedContentEnabled,
enabled
);
setting.then(onSet);
}
});
}
function setAllPrivacy() {
disableHyperlinkAuditing();
enableFirstPartyIsolation();
disableEvilCookies();
disableReferrers();
enableTrackingProtection();
enableResistFingerprinting();
disableDigitalRestrictionsManagement();
}
setAllPrivacy();
function ResetPeerConnection() {
var webrtc = false;
var rtc = browser.privacy.network.peerConnectionEnabled.set({
value: webrtc
});
rtc.then(AssurePeerConnection);
}
function EnablePeerConnection() {
var webrtc = false;
var rtc = browser.privacy.network.peerConnectionEnabled.set({
value: webrtc
});
rtc.then(SetupPeerConnection);
console.log("Enabled WebRTC");
}
function SetupPeerConnection() {
var webrtc = true;
console.log("Pre-disabled WebRTC");
rtc = browser.privacy.network.peerConnectionEnabled.set({
value: webrtc
});
rtc.then(AssurePeerConnection);
}
function AssurePeerConnection() {
function assure(webrtc) {
browser.privacy.network.peerConnectionEnabled.set({
value: webrtc.value
});
browser.privacy.network.networkPredictionEnabled.set({
value: false
});
chrome.privacy.network.webRTCIPHandlingPolicy.set({
value: "proxy_only"
});
}
rtc = browser.privacy.network.peerConnectionEnabled.get({});
rtc.then(assure);
}
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os == "android") {
browser.tabs.onCreated.addListener(ResetPeerConnection);
} else {
browser.windows.onCreated.addListener(ResetPeerConnection);
}
});
//AssurePeerConnection();
function ResetDisableSavePasswords() {
browser.privacy.services.passwordSavingEnabled.set({
value: false
});
console.log("Re-disabled saved passwords");
}
function EnableSavePasswords() {
browser.privacy.services.passwordSavingEnabled.set({
value: true
});
console.log("Enabled saved passwords");
}
//ResetDisableSavePasswords()
var defaultSettings = {
since: "forever",
dataTypes: ["downloads", "passwords", "formData", "localStorage", "history"]
};
var appSettings = {
since: "forever",
dataTypes: [""]
};
function onError(e) {
console.error(e);
}
function clearCookiesContext(cookieStoreId) {}
function forgetBrowsingData(storedSettings) {
function getSince(selectedSince) {
if (selectedSince === "forever") {
return 0;
/**
* Configure WebRTC
* @param {boolean} enabled Whether to enable WebRTC
*/
static async configureWebRTC(enabled = false) {
try {
const snowflake = await browser.management.get(
PRIVACY_CONFIG.SNOWFLAKE_ID
);
console.info("Snowflake detected, preserving WebRTC");
return;
} catch {
await this.setSetting(
browser.privacy.network.peerConnectionEnabled,
enabled
);
await this.setSetting(
chrome.privacy.network.webRTCIPHandlingPolicy,
enabled ? "disable_non_proxied_udp" : "default"
);
}
}
/**
* Configure password saving
* @param {boolean} enabled Whether to enable password saving
*/
static async configurePasswordSaving(enabled = false) {
await this.setSetting(
browser.privacy.services.passwordSavingEnabled,
enabled
);
}
/**
* Apply recommended privacy settings
*/
static async applyRecommendedSettings() {
await Promise.all([
this.configureHyperlinkAuditing(false),
this.configureFirstPartyIsolation(true),
this.configureCookies(false),
this.configureFingerprinting(true),
this.configureTrackingProtection(true),
this.configureDRM(false),
this.configureWebRTC(false),
this.configurePasswordSaving(false),
]);
}
/**
* Reset all privacy settings to defaults
*/
static async resetAllSettings() {
await Promise.all([
browser.privacy.websites.hyperlinkAuditingEnabled.clear(),
browser.privacy.websites.firstPartyIsolate.clear(),
browser.privacy.websites.cookieConfig.clear(),
browser.privacy.websites.referrersEnabled.clear(),
browser.privacy.websites.resistFingerprinting.clear(),
browser.privacy.websites.trackingProtectionMode.clear(),
browser.privacy.websites.protectedContentEnabled.clear(),
browser.privacy.network.peerConnectionEnabled.clear(),
browser.privacy.services.passwordSavingEnabled.clear(),
]);
}
}
/**
* Data Cleanup Manager for handling browsing data
*/
class DataCleanupManager {
/**
* Clean browsing data for I2P domains
* @param {Object} options Cleanup options
*/
static async cleanBrowsingData(options = {}) {
const since = this.calculateCleanupTime(
options.since || PRIVACY_CONFIG.BROWSING_DATA.SINCE
);
try {
const i2pHistory = await browser.history.search({
text: "i2p",
startTime: 0,
});
for (const item of i2pHistory) {
if (this.isI2PUrl(item.url)) {
await this.cleanupForDomain(item.url, since);
}
}
await this.notifyCleanup();
} catch (error) {
console.error("Data cleanup failed:", error);
}
}
/**
* Calculate cleanup timestamp
* @param {string} timeframe Cleanup timeframe
* @returns {number} Timestamp
*/
static calculateCleanupTime(timeframe) {
const times = {
hour: () => 1000 * 60 * 60,
day: () => 1000 * 60 * 60 * 24,
week: () => 1000 * 60 * 60 * 24 * 7
week: () => 1000 * 60 * 60 * 24 * 7,
forever: () => 0,
};
const sinceMilliseconds = times[selectedSince].call();
return Date.now() - sinceMilliseconds;
return timeframe === "forever"
? 0
: Date.now() - (times[timeframe] || times.forever)();
}
function getTypes(selectedTypes) {
let dataTypes = {};
for (let item of selectedTypes) {
dataTypes[item] = true;
}
return dataTypes;
/**
* Clean up data for specific domain
* @param {string} url Domain URL
* @param {number} since Timestamp
*/
static async cleanupForDomain(url, since) {
const hostname = this.extractI2PHostname(url);
await Promise.all([
browser.history.deleteUrl({ url }),
browser.browsingData.removeCache({}),
browser.browsingData.removePasswords({ hostnames: [hostname], since }),
browser.browsingData.removeDownloads({ hostnames: [hostname], since }),
browser.browsingData.removeFormData({ hostnames: [hostname], since }),
browser.browsingData.removeLocalStorage({ hostnames: [hostname], since }),
]);
await this.cleanupContainerCookies(url);
}
const since = getSince(defaultSettings.since);
const dataTypes = getTypes(defaultSettings.dataTypes);
function notify() {
let dataTypesString = Object.keys(dataTypes).join(", ");
let sinceString = new Date(since).toLocaleString();
browser.notifications.create({
type: "basic",
title: "Removed browsing data",
message: `Removed ${dataTypesString}\n for I2P Browsing`
/**
* Clean up container cookies
* @param {string} url Domain URL
*/
static async cleanupContainerCookies(url) {
const containers = await browser.contextualIdentities.query({
name: PRIVACY_CONFIG.TITLE_PREFACE,
});
}
function deepCleanHistory(historyItems) {
console.log("Deep cleaning history");
for (item of historyItems) {
if (i2pHost(item.url)) {
browser.history.deleteUrl({
url: item.url
for (const container of containers) {
const cookies = await browser.cookies.getAll({
firstPartyDomain: null,
storeId: container.cookieStoreId,
});
for (const cookie of cookies) {
await browser.cookies.remove({
firstPartyDomain: cookie.firstPartyDomain,
name: cookie.name,
url: url,
});
browser.browsingData.removeCache({});
console.log("cleared Cache");
browser.browsingData
.removePasswords({
hostnames: [i2pHostName(item.url)],
since
})
.then(onContextGotLog);
console.log("cleared Passwords");
browser.browsingData
.removeDownloads({
hostnames: [i2pHostName(item.url)],
since
})
.then(onContextGotLog);
console.log("cleared Downloads");
browser.browsingData
.removeFormData({
hostnames: [i2pHostName(item.url)],
since
})
.then(onContextGotLog);
console.log("cleared Form Data");
browser.browsingData
.removeLocalStorage({
hostnames: [i2pHostName(item.url)],
since
})
.then(onContextGotLog);
console.log("cleared Local Storage");
contexts = browser.contextualIdentities.query({
name: titlepref
});
function deepCleanCookies(cookies) {
for (cookie of cookies) {
var removing = browser.cookies.remove({
firstPartyDomain: cookie.firstPartyDomain,
name: cookie.name,
url: item.url
});
removing.then(onContextGotLog, onError);
}
console.log("Cleared cookies");
}
function deepCleanContext(cookieStoreIds) {
for (cookieStoreId of cookieStoreIds) {
var removing = browser.cookies.getAll({
firstPartyDomain: null,
storeId: cookieStoreId.cookieStoreId
});
removing.then(deepCleanCookies, onError);
}
}
contexts.then(deepCleanContext, onError);
}
}
notify();
}
var searching = browser.history.search({
text: "i2p",
startTime: 0
});
/**
* Extract I2P hostname from URL
* @param {string} url URL to parse
* @returns {string} I2P hostname
*/
static extractI2PHostname(url) {
try {
const urlObj = new URL(url);
if (urlObj.host.endsWith(".i2p")) {
return urlObj.host;
}
searching.then(deepCleanHistory);
if (url.includes(".i2p")) {
const parts = url.split("=");
for (const part of parts) {
const items = part.split("%");
for (const item of items) {
if (item.includes(".i2p")) {
return item.replace("3D", "");
}
}
}
}
setAllPrivacy();
ResetPeerConnection();
}
function i2pHostName(url) {
let hostname = "";
if (url.indexOf("://") > -1) {
hostname = url.split("/")[2];
} else {
hostname = url.split("/")[0];
}
return hostname;
}
function i2pHost(url) {
let hostname = i2pHostName(url);
return hostname.endsWith(".i2p");
}
function onContextGotLog(contexts) {
if (contexts != null) {
for (let context of contexts) {
console.log(context);
return url.split("/")[2] || url.split("/")[0];
} catch (error) {
console.error("Hostname extraction failed:", error);
return "";
}
}
}
browser.runtime.onMessage.addListener(message);
function enableHistory() {
function checkStoredSettings(storedSettings) {
storedSettings["disable_history"] = false;
console.log(storedSettings);
function enablehistory(settings) {
console.log("Store History:", storedSettings);
}
var setting = browser.storage.local.set(storedSettings);
setting.then(enablehistory);
/**
* Check if URL is I2P
* @param {string} url URL to check
* @returns {boolean}
*/
static isI2PUrl(url) {
const hostname = this.extractI2PHostname(url);
return hostname.split(":")[0].endsWith(".i2p");
}
const gettingStoredSettings = browser.storage.local.get();
gettingStoredSettings.then(checkStoredSettings, onError);
}
function disableHistory() {
function checkStoredSettings(storedSettings) {
storedSettings["disable_history"] = true;
console.log(storedSettings);
function enablehistory(settings) {
console.log("Store History:", storedSettings);
}
var setting = browser.storage.local.set(storedSettings);
setting.then(enablehistory);
}
const gettingStoredSettings = browser.storage.local.get();
gettingStoredSettings.then(checkStoredSettings, onError);
}
function message(message) {
console.log(message);
if (message.rtc === "enableWebRTC") {
console.log("enableWebRTC");
EnablePeerConnection();
} else if (message.rtc === "disableWebRTC") {
console.log("disableWebRTC");
ResetPeerConnection();
}
if (message.history === "enableHistory") {
console.log("enableHistory");
enableHistory();
} else if (message.history === "disableHistory") {
console.log("disableHistory");
disableHistory();
/**
* Send cleanup notification
*/
static async notifyCleanup() {
await browser.notifications.create({
type: "basic",
title: "Removed browsing data",
message: "Cleaned I2P browsing data and history",
});
}
}
// Initialize privacy settings
PrivacyManager.applyRecommendedSettings();
// Listen for uninstall
browser.management.onUninstalled.addListener(async (info) => {
const selfInfo = await browser.management.getSelf();
if (info.name === selfInfo.name) {
await PrivacyManager.resetAllSettings();
}
});
// Listen for messages
browser.runtime.onMessage.addListener(async (message) => {
switch (message.type) {
case "cleanupData":
await DataCleanupManager.cleanBrowsingData(message.options);
break;
case "updatePrivacy":
await PrivacyManager.applyRecommendedSettings();
break;
}
});
// Export for testing
if (typeof module !== "undefined" && module.exports) {
module.exports = {
PrivacyManager,
DataCleanupManager,
PRIVACY_CONFIG,
};
}

745
proxy.js
View File

@@ -1,382 +1,405 @@
var titlepref = chrome.i18n.getMessage("titlePreface");
var titleprefpriv = chrome.i18n.getMessage("titlePrefacePrivate");
var webpref = chrome.i18n.getMessage("webPreface");
var webprefpriv = chrome.i18n.getMessage("webPrefacePrivate");
var routerpref = chrome.i18n.getMessage("routerPreface");
var routerprefpriv = chrome.i18n.getMessage("routerPrefacePrivate");
var mailpref = chrome.i18n.getMessage("mailPreface");
var mailprefpriv = chrome.i18n.getMessage("mailPrefacePrivate");
var torrentpref = chrome.i18n.getMessage("torrentPreface");
var torrentprefpriv = chrome.i18n.getMessage("torrentPrefacePrivate");
var tunnelpref = chrome.i18n.getMessage("i2ptunnelPreface");
var tunnelprefpriv = chrome.i18n.getMessage("i2ptunnelPrefacePrivate");
/**
* @fileoverview I2P Proxy Manager
* Handles proxy configuration and routing for I2P container tabs
*/
browser.privacy.network.peerConnectionEnabled.set({
value: false
});
console.log("Preliminarily disabled WebRTC.");
chrome.privacy.network.networkPredictionEnabled.set({
value: false
});
chrome.privacy.network.webRTCIPHandlingPolicy.set({
value: "disable_non_proxied_udp"
});
function shouldProxyRequest(requestInfo) {
return requestInfo.parentFrameId != -1;
}
var handleContextProxyRequest = async function(requestDetails) {
console.log("(proxy)Searching for proxy by context");
try {
var handleProxyRequest = function(context) {
proxy = {
failoverTimeout: 0,
proxyDns: false
};
if (context == "firefox-default" || context == "firefox-private") {
proxy = null;
return proxy;
}
if (context != undefined) {
if (context.name == titlepref) {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort()
};
console.log(
"(proxy)",
context.name,
"Using",
proxy.type,
"proxy ",
proxy.host + ":" + proxy.port
);
return proxy;
} else if (context.name == routerpref) {
if (routerHost(requestDetails.url)) {
return proxy;
} else if (!routerHost(requestDetails.url)) {
proxy = {
type: "http",
host: "localhost",
port: "65535"
};
}
proxy = {
type: getScheme(),
host: getHost(),
port: getPort()
};
console.log(
"(proxy)",
context.name,
"Using",
proxy.type,
"proxy ",
proxy.host + ":" + proxy.port
);
return proxy;
} else if (context.name == webpref) {
if (localHost(requestDetails.url)) {
if (!routerHost(requestDetails.url)) {
proxy = {
type: "http",
host: "localhost",
port: "65535"
};
}
}
console.log(
"(proxy)",
context.name,
"Using",
proxy.type,
"proxy ",
proxy.host + ":" + proxy.port
);
return proxy;
}
}
if (!routerHost(requestDetails.url)) {
if (localHost(requestDetails.url)) {
console.log(
"(proxy) non-routerconsole localhost url, dropping",
requestDetails.url
);
proxy = {
type: "http",
host: "localhost",
port: "65535"
};
}
} else if (i2pHost(requestDetails.url)) {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort()
};
}
return proxy;
};
var contextGet = async function(tabInfo) {
try {
console.log("(proxy)Tab info from Function", tabInfo);
context = await browser.contextualIdentities.get(tabInfo.cookieStoreId);
return context;
} catch (error) {
return "firefox-default";
}
};
var tabGet = async function(tabId) {
try {
console.log("(proxy)Tab ID from Request", tabId);
let tabInfo = await browser.tabs.get(tabId);
return tabInfo;
} catch (error) {
console.log("(proxy)Tab error", error);
}
};
if (requestDetails.tabId > 0) {
console.log("manifest", requestDetails);
if (proxyHost(requestDetails.url)) {
proxy = {
type: getScheme(),
host: getHost(),
port: getPort()
};
return proxy;
} else if (i2pHost(requestDetails.url)) {
console.log("(Proxy)I2P URL detected, ");
var tab = tabGet(requestDetails.tabId);
requestDetails.tabId = tab;
var context = tab.then(contextGet);
var proxy = await context.then(handleProxyRequest);
console.log("(proxy)Returning I2P Proxy", proxy);
return proxy;
} else {
var tab = tabGet(requestDetails.tabId);
var context = tab.then(contextGet);
var proxy = await context.then(handleProxyRequest);
console.log("(proxy)Returning I2P Proxy", proxy);
return proxy;
}
proxy = {};
console.log("(proxy)Returning unset Proxy", proxy);
return proxy;
}
} catch (error) {
console.log("(proxy)Not using I2P Proxy.", error);
}
// Configuration constants
const PROXY_CONFIG = {
MESSAGES: {
TITLE: chrome.i18n.getMessage("titlePreface"),
WEB: chrome.i18n.getMessage("webPreface"),
ROUTER: chrome.i18n.getMessage("routerPreface"),
MAIL: chrome.i18n.getMessage("mailPreface"),
TORRENT: chrome.i18n.getMessage("torrentPreface"),
TUNNEL: chrome.i18n.getMessage("i2ptunnelPreface"),
IRC: chrome.i18n.getMessage("ircPreface"),
EXTENSION: chrome.i18n.getMessage("extensionPreface"),
MUWIRE: chrome.i18n.getMessage("muwirePreface"),
BOTE: chrome.i18n.getMessage("botePreface"),
BLOG: chrome.i18n.getMessage("blogPreface"),
BLOG_PRIVATE: chrome.i18n.getMessage("blogPrefacePrivate"),
TOR: chrome.i18n.getMessage("torPreface"),
},
PORTS: {
IRC: "7669",
TOR: "7695",
BLOG: "8084",
TORRENT: "7662",
},
};
var proxy_scheme = "HTTP";
var proxy_host = "127.0.0.1";
var proxy_port = "4444";
var control_host = "127.0.0.1";
var control_port = "4444";
var disable_history = false;
function SetupSettings() {
console.log("Initialising Settings");
//
function checkSchemeStoredSettings(storedSettings) {
if (storedSettings.proxy_scheme != undefined) {
proxy_scheme = storedSettings.proxy_scheme;
} else {
proxy_scheme = "http";
storedSettings.proxy_scheme = proxy_scheme;
/**
* Network Manager for handling WebRTC and network prediction
*/
class NetworkManager {
/**
* Initialize network settings
*/
static async initialize() {
try {
await Promise.all([
browser.privacy.network.peerConnectionEnabled.set({ value: true }),
chrome.privacy.network.networkPredictionEnabled.set({ value: false }),
chrome.privacy.network.webRTCIPHandlingPolicy.set({
value: "disable_non_proxied_udp",
}),
]);
console.info("Network settings initialized");
} catch (error) {
console.error("Network initialization failed:", error);
}
console.log("Initialising Proxy Scheme", storedSettings.proxy_scheme);
setupProxy();
}
var gettingSchemeStoredSettings = browser.storage.local.get("proxy_scheme");
gettingSchemeStoredSettings.then(checkSchemeStoredSettings, onError);
}
//
function checkHostStoredSettings(storedSettings) {
if (storedSettings.proxy_host != undefined) {
proxy_host = storedSettings.proxy_host;
} else {
proxy_host = "127.0.0.1";
storedSettings.proxy_host = proxy_host;
}
console.log("Initialising Host", storedSettings.proxy_host);
setupProxy();
/**
* Proxy Manager for handling proxy configuration
*/
class ProxyManager {
constructor() {
this.proxyConfig = {
type: proxy_scheme(),
host: proxy_host(),
port: proxy_port(),
};
this.initialize();
}
var gettingHostStoredSettings = browser.storage.local.get("proxy_host");
gettingHostStoredSettings.then(checkHostStoredSettings, onError);
//
function checkPortStoredSettings(storedSettings) {
if (storedSettings.proxy_port != undefined) {
proxy_port = storedSettings.proxy_port;
} else {
proxy_port = "4444";
storedSettings.proxy_port = proxy_port;
/**
* Initialize proxy settings
*/
async initialize() {
try {
await this.setupProxyListener();
await this.setupStorageListener();
await this.setupWindowListener();
console.info("Proxy manager initialized");
} catch (error) {
console.error("Proxy initialization failed:", error);
}
console.log("Initialising Port", storedSettings.proxy_port);
setupProxy();
}
var gettingPortStoredSettings = browser.storage.local.get("proxy_port");
gettingPortStoredSettings.then(checkPortStoredSettings, onError);
//
function checkControlHostStoredSettings(storedSettings) {
if (storedSettings.control_host != undefined) {
control_host = storedSettings.control_host;
} else {
control_host = "127.0.0.1";
storedSettings.control_host = control_host;
}
console.log("Initialising Control Host", storedSettings.control_host);
setupProxy();
/**
* Setup proxy request listener
*/
async setupProxyListener() {
browser.proxy.onRequest.addListener(this.handleProxyRequest.bind(this), {
urls: ["<all_urls>"],
});
browser.proxy.onError.addListener(this.handleProxyError.bind(this));
}
var gettingControlHostStoredSettings = browser.storage.local.get(
"control_host"
);
gettingControlHostStoredSettings.then(
checkControlHostStoredSettings,
onError
);
//
function checkControlPortStoredSettings(storedSettings) {
if (storedSettings.control_port != undefined) {
contro_port = storedSettings.control_port;
} else {
control_port = "7657";
storedSettings.control_port = control_port;
}
console.log("Initialising Control Port", storedSettings.control_port);
setupProxy();
/**
* Setup storage change listener
*/
async setupStorageListener() {
browser.storage.onChanged.addListener(this.handleStorageChange.bind(this));
}
var gettingControlPortStoredSettings = browser.storage.local.get(
"control_port"
);
gettingControlPortStoredSettings.then(
checkControlPortStoredSettings,
onError
);
//
function checkHistoryStoredSettings(storedSettings) {
if (storedSettings.disable_history != undefined) {
disable_history = storedSettings.disable_history;
} else {
disable_history = false;
storedSettings.disable_history = disable_history;
/**
* Setup window creation listener
*/
async setupWindowListener() {
const platformInfo = await browser.runtime.getPlatformInfo();
if (browser.windows) {
browser.windows.onCreated.addListener(
this.handleWindowCreation.bind(this)
);
}
console.log(
"Initialising Disabled History",
storedSettings.disable_history
}
/**
* Handle proxy requests
* @param {Object} requestDetails Request details
* @return {Object} Proxy configuration
*/
async handleProxyRequest(requestDetails) {
try {
// Handle proxy host requests
if (isProxyHost(requestDetails)) {
return this.proxyConfig;
}
// Handle extension requests
if (this.isExtensionRequest(requestDetails)) {
return this.proxyConfig;
}
// Handle container requests
if (requestDetails.tabId > 0) {
return await this.handleContainerRequest(requestDetails);
}
// Handle direct requests
return await this.handleDirectRequest(requestDetails);
} catch (error) {
console.error("Proxy request handling failed:", error);
return { type: "direct" };
}
}
/**
* Handle container-specific proxy requests
* @param {Object} requestDetails Request details
* @return {Object} Proxy configuration
*/
async handleContainerRequest(requestDetails) {
try {
const tab = await browser.tabs.get(requestDetails.tabId);
const context = await this.getContextIdentity(tab);
if (!context) {
return this.getDefaultProxy();
}
return await this.getContainerProxy(context, requestDetails);
} catch (error) {
console.error("Container request handling failed:", error);
return this.getDefaultProxy();
}
}
/**
* Handle direct (non-container) proxy requests
* @param {Object} requestDetails Request details
* @return {Object} Proxy configuration
*/
async handleDirectRequest(requestDetails) {
try {
// Check for local service ports first
if (isLocalHost(requestDetails.url)) {
const localProxyConfig = this.handleLocalServiceRequest(requestDetails);
if (localProxyConfig !== undefined) {
return localProxyConfig;
}
}
// Handle I2P and proxy hosts
if (i2pHost(requestDetails)) {
console.debug("(proxy) Direct I2P host request:", requestDetails.url);
return this.proxyConfig;
}
if (isProxyHost(requestDetails)) {
console.debug("(proxy) Direct proxy host request:", requestDetails.url);
return this.proxyConfig;
}
// Handle router console requests
if (isRouterHost(requestDetails.url)) {
console.debug(
"(proxy) Direct router console request:",
requestDetails.url
);
return null;
}
// RPC request handling
if (requestDetails.url.includes("rpc")) {
console.debug("(proxy) Direct RPC request:", requestDetails.url);
return this.proxyConfig;
}
// Default to direct connection for non-I2P traffic
console.debug("(proxy) Direct clearnet request:", requestDetails.url);
return { type: "direct" };
} catch (error) {
console.error("Direct request handling failed:", error);
return { type: "direct" };
}
}
/**
* Handle local service port requests
* @private
* @param {Object} requestDetails Request details
* @return {Object|undefined} Proxy configuration or undefined
*/
handleLocalServiceRequest(requestDetails) {
// Local service port mapping
const LOCAL_SERVICES = {
[PROXY_CONFIG.PORTS.IRC]: true, // IRC Console
[PROXY_CONFIG.PORTS.TOR]: true, // Tor Console
[PROXY_CONFIG.PORTS.BLOG]: true, // Blog Console
[PROXY_CONFIG.PORTS.TORRENT]: true, // Torrent Console
};
// Extract port from URL
const url = new URL(requestDetails.url);
const port = url.port;
// Return null proxy for local service ports
if (LOCAL_SERVICES[port]) {
console.debug(
`(proxy) Local service request on port ${port} :`,
requestDetails.url
);
return null;
}
// Let the main proxy logic handle other local requests
return undefined;
}
/**
* Get container identity
* @param {Object} tab Browser tab
* @return {Object} Container context
*/
async getContextIdentity(tab) {
try {
if (
tab.cookieStoreId === "firefox-default" ||
tab.cookieStoreId === "firefox-private"
) {
return null;
}
return await browser.contextualIdentities.get(tab.cookieStoreId);
} catch (error) {
console.error("Context identity lookup failed:", error);
return null;
}
}
/**
* Get container-specific proxy configuration
* @param {Object} context Container context
* @param {Object} requestDetails Request details
* @return {Object} Proxy configuration
*/
async getContainerProxy(context, requestDetails) {
const proxyMap = {
[PROXY_CONFIG.MESSAGES.IRC]: () => this.getIRCProxy(requestDetails),
[PROXY_CONFIG.MESSAGES.TOR]: () => this.getTorProxy(requestDetails),
[PROXY_CONFIG.MESSAGES.BLOG]: () => this.getBlogProxy(requestDetails),
[PROXY_CONFIG.MESSAGES.TITLE]: () => this.getMainProxy(requestDetails),
[PROXY_CONFIG.MESSAGES.ROUTER]: () => this.getRouterProxy(requestDetails),
[PROXY_CONFIG.MESSAGES.TORRENT]: () =>
this.getTorrentProxy(requestDetails),
};
const handler = proxyMap[context.name];
return handler ? await handler() : this.getDefaultProxy();
}
/**
* Get service-specific proxy configurations
*/
getIRCProxy(requestDetails) {
return !requestDetails.url.includes(PROXY_CONFIG.PORTS.IRC)
? this.proxyConfig
: null;
}
getTorProxy(requestDetails) {
return !requestDetails.url.includes(PROXY_CONFIG.PORTS.TOR)
? this.proxyConfig
: null;
}
getBlogProxy(requestDetails) {
return !requestDetails.url.includes(PROXY_CONFIG.PORTS.BLOG)
? this.proxyConfig
: null;
}
getMainProxy(requestDetails) {
if (
requestDetails.url.startsWith(
`http ://${proxy_host()}:${control_port()}/i2psnark/`
)
) {
return null;
}
return this.proxyConfig;
}
getRouterProxy(requestDetails) {
return isRouterHost(requestDetails.url) ? null : this.proxyConfig;
}
getTorrentProxy(requestDetails) {
return requestDetails.url.includes(PROXY_CONFIG.PORTS.TORRENT)
? null
: this.getRouterProxy(requestDetails);
}
/**
* Get default proxy configuration
* @return {Object} Default proxy
*/
getDefaultProxy() {
return { type: "direct" };
}
/**
* Handle proxy errors
* @param {Error} error Proxy error
*/
handleProxyError(error) {
if (error.includes("Invalid proxy server type")) {
console.warn("Invalid proxy configuration:", error);
} else {
console.error("Proxy error:", error);
}
}
/**
* Handle storage changes
*/
async handleStorageChange() {
try {
await this.updateConfig();
await this.setupProxyListener();
} catch (error) {
console.error("Storage update failed:", error);
}
}
/**
* Handle window creation
*/
async handleWindowCreation() {
try {
await this.updateConfig();
await this.setupProxyListener();
} catch (error) {
console.error("Window creation handling failed:", error);
}
}
/**
* Update proxy configuration
*/
async updateConfig() {
console.info(
"Updating proxy configuration:",
`Scheme : ${proxy_scheme()},`,
`Host : ${proxy_host()},`,
`Port : ${proxy_port()},`,
`Control : ${control_host()} :${control_port()}`
);
setupProxy();
}
var gettingHistoryStoredSettings = browser.storage.local.get(
"disable_history"
);
gettingHistoryStoredSettings.then(checkHistoryStoredSettings, onError);
/**
* Check if request is from extension
* @param {Object} requestDetails Request details
* @return {boolean}
*/
isExtensionRequest(requestDetails) {
return requestDetails.originUrl === browser.runtime.getURL("security.html");
}
}
function getScheme() {
if (proxy_scheme == undefined) {
proxy_scheme = "http";
}
if (proxy_scheme == "HTTP") {
proxy_scheme = "http";
}
if (proxy_scheme == "SOCKS") {
proxy_scheme = "socks";
}
if (proxy_scheme != "http" && proxy_scheme != "socks") {
proxy_scheme = "http";
}
//console.log("Got i2p proxy scheme:", proxy_scheme);
return proxy_scheme;
// Initialize managers
NetworkManager.initialize();
const proxyManager = new ProxyManager();
// Export for testing
if (typeof module !== "undefined" && module.exports) {
module.exports = {
NetworkManager,
ProxyManager,
PROXY_CONFIG,
};
}
function getHost() {
if (proxy_host == undefined) {
proxy_host = "127.0.0.1";
}
return proxy_host;
}
function getPort() {
if (proxy_port == undefined) {
var scheme = getScheme();
if (scheme == "socks") {
proxy_port = "4446";
} else {
proxy_port = "4444";
}
}
return proxy_port;
}
function getControlHost() {
if (control_host == undefined) {
return "127.0.0.1";
}
return control_host;
}
function getControlPort() {
if (control_port == undefined) {
return "7657";
}
return control_port;
}
function setupProxy() {
//var controlHost = getControlHost();
//var controlPort = getControlPort();
//var Host = getHost();
//var Port = getPort();
//var Scheme = getScheme();
/**/
console.log("Setting up Firefox WebExtension proxy");
browser.proxy.onRequest.addListener(handleContextProxyRequest, {
urls: ["<all_urls>"]
});
console.log("i2p settings created for WebExtension Proxy");
/**/
}
function update() {
console.log("restoring proxy scheme:", proxy_scheme);
console.log("restoring proxy host:", proxy_host);
console.log("restoring proxy port:", proxy_port);
console.log("restoring control host:", control_host);
console.log("restoring control port:", control_port);
}
function updateFromStorage() {
console.log("updating settings from storage");
var gettingInfo = browser.runtime.getPlatformInfo();
gettingInfo.then(got => {
if (got.os != "android") {
browser.windows.getAll().then(wins => wins.forEach(themeWindow));
chrome.storage.local.get(function(got) {
SetupSettings();
update();
setupProxy();
});
} else {
chrome.storage.local.get(function(got) {
SetupSettings();
update();
setupProxy();
});
}
});
}
browser.storage.onChanged.addListener(updateFromStorage);
SetupSettings();
setupProxy();

46
proxyerr.html Normal file
View File

@@ -0,0 +1,46 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="home.css" rel="stylesheet">
<link href="search.css" rel="stylesheet">
<link href="sidebar.css" rel="stylesheet">
<title>
</title>
</head>
<body>
<div class='background'>
<div class='content'>
<div class="text-section-proxyerr-header">
<h1 id="text-section-proxyerr-header">A Proxy Error has Occurred</h1>
</div>
<div id="i2pbrowser-version">
</div>
<div id="i2pbrowser-description">
<p id="description">I2P in Private Browsing is a webextension to secure and enhance your I2P use in the browser.</p>
<p id="beta">This is an experimental product.</p>
<p id="description2">
If you're seeing this page, it is because a proxy error has occurred. Some information has been provided to help you diagnose the issue.
</p>
</div>
<div id="routerness">
<div class="hideIfI2PRouterOff" id="routerness">
<span id="router-check">Router is ready. Check the proxy diagnostic.</span>
</div>
</div>
<div id="readyness">
<div class="hideIfI2PProxyOff" id="readyness">
<img class="readyness" src="icons/local_up.png"> <span id="proxy-check">Proxy is ready. Something has changed since you were redirected to this page, possibly your proxy connected. Please try your request again.</span>
</div>
</div>
</div>
</div>
<script src="home.js" type="text/javascript"></script>
<script src="messages.js" type="text/javascript"></script>
<script src="content.js" type="text/javascript"></script>
<script src="proxyinfo.js" type="text/javascript"></script>
<script src="consoleinfo.js" type="text/javascript"></script>
</body>
</html>

215
proxyinfo.js Normal file
View File

@@ -0,0 +1,215 @@
/**
* @fileoverview I2P Proxy Status Manager
* Handles proxy connectivity checking and UI updates for I2P extension
*/
// Constants
const PROXY_CONFIG = {
PROXY_URL: "http://proxy.i2p",
CONSOLE_URL: "http://127.0.0.1:7657",
LOGO_PATH: "/themes/console/light/images/i2plogo.png",
FETCH_OPTIONS: { cache: "no-store" },
};
const UI_ELEMENTS = {
PROXY_STATUS: "proxy-check",
READINESS_CLASS: ".readyness",
CONSOLE_LINKS: ".application-info",
HIDDEN_CLASS: "hidden",
};
const MESSAGE_KEYS = {
SUCCESS: "proxySuccessStatus",
FAILURE: "proxyFailedStatus",
};
/**
* UI Manager for handling element visibility
*/
class ProxyUIManager {
/**
* Toggle element visibility
* @param {Element|NodeList} elements - Elements to modify
* @param {boolean} show - Whether to show or hide
*/
/**
* Toggle element visibility with strict null checking
* @param {Element|NodeList} elements - Elements to modify
* @param {boolean} show - Whether to show or hide
*/
static toggleVisibility(elements, show) {
try {
// Validate input
if (!elements) {
throw new Error("Elements parameter is null or undefined");
}
// Convert to array if NodeList
const elementArray =
elements instanceof NodeList ? Array.from(elements) : [elements];
elementArray.forEach((element) => {
// Explicit null check for element and style property
if (element && element.style !== undefined && element.style !== null) {
const action = show ? "remove" : "add";
element.classList[action](UI_ELEMENTS.HIDDEN_CLASS);
console.debug(`(proxyinfo) ${show ? "showing" : "hiding"} element`);
} else {
console.warn(
"(proxyinfo) Invalid element encountered during visibility toggle"
);
}
});
} catch (error) {
console.error("Visibility toggle failed:", error);
throw error; // Re-throw for error boundary handling
}
}
/**
* Update element content by ID
* @param {string} elementId - Target element ID
* @param {string} messageKey - i18n message key
*/
static updateContent(elementId, messageKey) {
try {
const element = document.getElementById(elementId);
if (!element) {
throw new Error(`Element not found : ${elementId}`);
}
element.textContent = chrome.i18n.getMessage(messageKey);
} catch (error) {
console.error("Content update failed:", error);
}
}
/**
* Get elements by selector
* @param {string} selector - CSS selector
* @return {?NodeList}
*/
static getElements(selector) {
try {
return document.querySelectorAll(selector);
} catch (error) {
console.error("Element selection failed:", error);
return null;
}
}
}
/**
* Proxy Status Manager
*/
class ProxyStatusManager {
/**
* Check proxy connectivity
* @return {Promise<void>}
*/
static async checkProxyStatus() {
console.info("(proxyinfo) Checking proxy status");
try {
const response = await fetch(
PROXY_CONFIG.PROXY_URL,
PROXY_CONFIG.FETCH_OPTIONS
);
await this.handleProxySuccess(response);
} catch (error) {
await this.handleProxyError(error);
}
}
/**
* Handle successful proxy connection
* @param {Response} response - Fetch response
*/
static async handleProxySuccess(response) {
console.info("(proxyinfo) Proxy check successful");
ProxyUIManager.updateContent(
UI_ELEMENTS.PROXY_STATUS,
MESSAGE_KEYS.SUCCESS
);
const readinessElements = ProxyUIManager.getElements(
UI_ELEMENTS.READINESS_CLASS
);
if (readinessElements) {
ProxyUIManager.toggleVisibility(readinessElements, true);
}
}
/**
* Handle proxy connection failure
* @param {Error} error - Connection error
*/
static async handleProxyError(error) {
console.error("(proxyinfo) Proxy check failed:", error);
ProxyUIManager.updateContent(
UI_ELEMENTS.PROXY_STATUS,
MESSAGE_KEYS.FAILURE
);
const readinessElements = ProxyUIManager.getElements(
UI_ELEMENTS.READINESS_CLASS
);
if (readinessElements) {
ProxyUIManager.toggleVisibility(readinessElements, false);
}
}
/**
* Check console connectivity
* @return {Promise<void>}
*/
static async checkConsoleStatus() {
const logoUrl = `${PROXY_CONFIG.CONSOLE_URL}${PROXY_CONFIG.LOGO_PATH}`;
console.info("(proxyinfo) Checking console status");
try {
await fetch(logoUrl);
const consoleLinks = ProxyUIManager.getElements(
UI_ELEMENTS.CONSOLE_LINKS
);
if (consoleLinks) {
ProxyUIManager.toggleVisibility(consoleLinks, true);
}
console.info("(proxyinfo) Console check successful");
} catch (error) {
const consoleLinks = ProxyUIManager.getElements(
UI_ELEMENTS.CONSOLE_LINKS
);
if (consoleLinks) {
ProxyUIManager.toggleVisibility(consoleLinks, false);
}
console.error("(proxyinfo) Console check failed:", error);
}
}
}
/**
* Initialize proxy status checking
*/
function initializeProxyChecks() {
try {
ProxyStatusManager.checkProxyStatus();
ProxyStatusManager.checkConsoleStatus();
} catch (error) {
console.error("Proxy initialization failed:", error);
}
}
// Event Listeners
document.addEventListener("DOMContentLoaded", initializeProxyChecks, {
passive: true,
capture: false,
});
// Export for testing
if (typeof module !== "undefined" && module.exports) {
module.exports = {
ProxyStatusManager,
UIManager: ProxyUIManager,
PROXY_CONFIG,
UI_ELEMENTS,
};
}

164
releases.atom Normal file
View File

@@ -0,0 +1,164 @@
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xml:lang="en-US">
<id>tag:github.com,2008:https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases</id>
<link type="text/html" rel="alternate" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases"/>
<link type="application/atom+xml" rel="self" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases.atom"/>
<title>Release notes from I2P-in-Private-Browsing-Mode-Firefox</title>
<updated>2024-10-04T21:40:03Z</updated>
<entry>
<id>tag:github.com,2008:Repository/169256012/2.7.1</id>
<updated>2024-10-04T21:51:55Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/2.7.1"/>
<title>2.7.1</title>
<enclosure url="magnet:?xl=1246<title>2.7.1</title>dn=i2ppb%40eyedeekay.github.io.xpi.torrent<title>2.7.1</title>xt=urn:tree:tiger:eyme2fkldmntehx4m7ujho6fgxklugx2bfsnzti<title>2.7.1</title>xt=urn:ed2k:1bd6f65a3dc2027c9ac265da2c61e6d6<title>2.7.1</title>xt=urn:aich:t7hfnrsgwjjeh5nctj5qe7kwaclnahbc" type="application/x-bittorrent" />
<content>No content.</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/2.6.1</id>
<updated>2024-08-20T13:31:21Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/2.6.1"/>
<title>2.6.1</title>
<content>No content.</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/2.5.9</id>
<updated>2024-07-10T18:33:56Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/2.5.9"/>
<title>2.5.9</title>
<content type="html">&lt;p&gt;A simple plugin for configuring a Firefox based web browser to isolate I2P&lt;br&gt;
Browsing to a single contextual identity, thus creating an I2P in Private&lt;br&gt;
Browsing mode. It requires the use of a pre-installed I2P Router.&lt;br&gt;
i2psetproxy.js (2.5.9-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Minor refactoring, simplifications&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-- idk &lt;a href=&quot;mailto:hankhill19580@gmail.com&quot;&gt;hankhill19580@gmail.com&lt;/a&gt; Thu, 10 July 2024 13:40:40 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (1.49-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/1.49</id>
<updated>2023-12-26T18:39:31Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/1.49"/>
<title>1.49</title>
<content type="html">&lt;h1&gt;I2P in Private Browsing Mode&lt;/h1&gt;
&lt;p&gt;A simple plugin for configuring a Firefox based web browser to isolate I2P&lt;br&gt;
Browsing to a single contextual identity, thus creating an I2P in Private&lt;br&gt;
Browsing mode. It requires the use of a pre-installed I2P Router.&lt;br&gt;
i2psetproxy.js (1.49-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/1.47</id>
<updated>2023-06-11T18:11:50Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/1.47"/>
<title>1.47</title>
<content type="html">&lt;p&gt;A simple plugin for configuring a Firefox based web browser to isolate I2P&lt;br&gt;
Browsing to a single contextual identity, thus creating an I2P in Private&lt;br&gt;
Browsing mode. It requires the use of a pre-installed I2P Router.&lt;br&gt;
i2psetproxy.js (1.47-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;only reset the theme if we&#39;re resetting from one we own&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-- idk &lt;a href=&quot;mailto:hankhill19580@gmail.com&quot;&gt;hankhill19580@gmail.com&lt;/a&gt; Sun, 11 Jun 2023 14:05:08 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (1.45-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/1.45</id>
<updated>2023-06-11T04:18:50Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/1.45"/>
<title>1.45</title>
<content type="html">&lt;p&gt;-- idk &lt;a href=&quot;mailto:hankhill19580@gmail.com&quot;&gt;hankhill19580@gmail.com&lt;/a&gt; Sat, 10 Jun 2023 23:51:21 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (1.43-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix wrong color pageAction icon&lt;/li&gt;
&lt;li&gt;Add router status to proxy error page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-- idk &lt;a href=&quot;mailto:hankhill19580@gmail.com&quot;&gt;hankhill19580@gmail.com&lt;/a&gt; Sun, 24 Oct 2022 09:35:20 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (1.41-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/1.43</id>
<updated>2022-10-25T01:46:43Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/1.43"/>
<title>1.43</title>
<content type="html">&lt;p&gt;Browsing to a single contextual identity, thus creating an I2P in Private&lt;br&gt;
Browsing mode. It requires the use of a pre-installed I2P Router.&lt;br&gt;
i2psetproxy.js (1.43-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix wrong color pageAction icon&lt;/li&gt;
&lt;li&gt;Add router status to proxy error page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-- idk &lt;a href=&quot;mailto:hankhill19580@gmail.com&quot;&gt;hankhill19580@gmail.com&lt;/a&gt; Sun, 24 Oct 2022 09:35:20 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (1.41-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/1.41</id>
<updated>2022-10-25T00:06:24Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/1.41"/>
<title>1.41</title>
<content type="html">&lt;p&gt;restore manifest.json to desktop version, android still doesn&#39;t have …&lt;/p&gt;
&lt;p&gt;…the required APIs&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/0.133</id>
<updated>2022-05-23T20:31:26Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.133"/>
<title>0.133</title>
<content type="html">&lt;p&gt;A simple plugin for configuring a Firefox based web browser to isolate I2P&lt;br&gt;
Browsing to a single contextual identity, thus creating an I2P in Private&lt;br&gt;
Browsing mode. It requires the use of a pre-installed I2P Router.&lt;br&gt;
i2psetproxy.js (0.133-1) UNRELEASED; urgency=low&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add machine translations for several languages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-- idk &lt;a href=&quot;mailto:hankhill19580@gmail.com&quot;&gt;hankhill19580@gmail.com&lt;/a&gt; Mon, 32 May 2022 16:28:06 -0400&lt;/p&gt;
&lt;p&gt;i2psetproxy.js (0.131-1) UNRELEASED; urgency=low&lt;/p&gt;</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
<entry>
<id>tag:github.com,2008:Repository/169256012/0.131</id>
<updated>2022-02-12T01:38:22Z</updated>
<link rel="alternate" type="text/html" href="https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/tag/0.131"/>
<title>0.131</title>
<content>No content.</content>
<author>
<name>eyedeekay</name>
</author>
<media:thumbnail height="30" width="30" url="https://avatars.githubusercontent.com/u/8733713?s=60&amp;v=4"/>
</entry>
</feed>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 KiB

After

Width:  |  Height:  |  Size: 198 KiB

166
script.js Normal file
View File

@@ -0,0 +1,166 @@
function hasI2PLocation(request) {
let response = false;
if (request.req === "i2p-location") {
let tag = document.querySelector('meta[http-equiv="i2p-location"]');
if (tag != undefined) {
console.debug("(script) i2p site discovered", tag);
if (tag) response = tag.content;
}
tag = document.querySelector('meta[http-equiv="x-i2p-location"]');
if (tag != undefined) {
console.debug("(script) i2p site discovered", tag);
if (tag) response = tag.content;
}
}
return response;
}
function hasTorrentResource(request) {
let response = false;
if (!i2pHost(request.URL)) return response;
if (request.req === "i2p-torrentlocation") {
let tag = document.querySelector('meta[http-equiv="i2p-torrentlocation"]');
if (tag != undefined) {
console.debug("(script) torrent resource", tag);
response = i2pTorrent(tag);
}
tag = document.querySelector('meta[http-equiv="x-i2p-torrentlocation"]');
if (tag != undefined) {
console.debug("(script) torrent resource", tag);
response = i2pTorrent(tag);
}
}
return response;
}
function hasExtraLocation(request) {
var response = false;
console.info("(script) page" + request);
torrentLocation = hasTorrentResource(request);
if (torrentLocation) return torrentLocation;
i2pLocation = hasI2PLocation(request);
if (i2pLocation) return i2pLocation;
return Promise.resolve({ content: response });
}
browser.runtime.onMessage.addListener(hasExtraLocation);
window.document.onload = function (e) {
console.log("presetting x-i2p-torrentlocation");
var tag = document.querySelector('meta[http-equiv="i2p-torrentlocation"]');
if (tag != undefined) {
console.log(tag);
response = i2pTorrent(tag);
}
var tag = document.querySelector('meta[http-equiv="x-i2p-torrentlocation"]');
if (tag != undefined) {
console.log(tag);
response = i2pTorrent(tag);
}
};
console.log("presetting x-i2p-torrentlocation");
var tag = document.querySelector('meta[http-equiv="i2p-torrentlocation"]');
if (tag != undefined) {
console.log(tag);
response = i2pTorrent(tag);
}
var tag = document.querySelector('meta[http-equiv="x-i2p-torrentlocation"]');
if (tag != undefined) {
console.log(tag);
response = i2pTorrent(tag);
}
function i2pTorrent(tag) {
let response = "no-alt-location";
if (tag) {
response = tag.content;
var imgs = document.getElementsByTagName("img");
console.log("rewriting torrent link");
for (let img of imgs) {
let tmpsrc = new URL(img.src);
if (tmpsrc.host == location.host) {
img.src =
"http://127.0.0.1:7657/i2psnark/" + tmpsrc.host + tmpsrc.pathname;
img.onerror = function () {
img.src = tmpsrc;
};
}
}
var videos = document.getElementsByTagName("video");
for (let video of videos) {
video.setAttribute("preload", "none");
let tmpsrc = new URL(video.currentSrc);
if (tmpsrc.host == location.host) {
if (!video.innerHTML.includes("127.0.0.1")) {
innerHTML = video.innerHTML;
topInnerHTML = video.innerHTML.replace(
'src="',
'src="http://127.0.0.1:7657/i2psnark/' + location.host + "/"
);
// let url = new URL("http://127.0.0.1:7657/i2psnark/"+location.host+"/"location.path)
console.log(
"http://127.0.0.1:7657/i2psnark/" + tmpsrc.host + tmpsrc.pathname
); //+"/"location.path)
video.src =
"http://127.0.0.1:7657/i2psnark/" + tmpsrc.host + tmpsrc.pathname;
video.innerHTML = topInnerHTML; // + innerHTML;
video.onerror = function () {
console.log("video error");
video.innerHTML = topInnerHTML + innerHTML;
};
}
}
}
var audios = document.getElementsByTagName("audio");
for (let audio of audios) {
audio.setAttribute("preload", "none");
let tmpsrc = new URL(audio.currentSrc);
if (tmpsrc.host == location.host) {
if (!audio.innerHTML.includes("127.0.0.1")) {
innerHTML = audio.innerHTML;
topInnerHTML = audio.innerHTML.replace(
'src="',
'src="http://127.0.0.1:7657/i2psnark/' + location.host + "/"
);
//console.log("http://127.0.0.1:7657/i2psnark/" + location); //.host+"/"location.path)
console.log(
"http://127.0.0.1:7657/i2psnark/" + tmpsrc.host + tmpsrc.pathname
); //+"/"location.path)
audio.src =
"http://127.0.0.1:7657/i2psnark/" + tmpsrc.host + tmpsrc.pathname;
audio.innerHTML = topInnerHTML; // + innerHTML;
audio.onerror = function () {
console.log("audio error");
audio.innerHTML = topInnerHTML + innerHTML;
};
}
}
}
var links = document.getElementsByTagName("a");
for (let link of links) {
let tmpsrc = new URL(link.href);
if (tmpsrc.host == location.host) {
if (
!tmpsrc.pathname.endsWith("html") &&
!tmpsrc.pathname.endsWith("htm") &&
!tmpsrc.pathname.endsWith("php") &&
!tmpsrc.pathname.endsWith("jsp") &&
!tmpsrc.pathname.endsWith("asp") &&
!tmpsrc.pathname.endsWith("aspx") &&
!tmpsrc.pathname.endsWith("atom") &&
!tmpsrc.pathname.endsWith("rss") &&
!tmpsrc.pathname.endsWith("/") &&
tmpsrc.pathname.includes(".")
) {
link.href =
"http://127.0.0.1:7657/i2psnark/" + tmpsrc.host + tmpsrc.pathname;
link.onerror = function () {
window.location.href = tmpsrc.href;
};
}
}
}
}
return response;
}

1389
scrub.js

File diff suppressed because it is too large Load Diff

41
search.css Normal file
View File

@@ -0,0 +1,41 @@
.topnav {
overflow: hidden;
min-height: 3rem;
padding: .5rem;
min-width: 64%;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #fff,0 0 1px #ccc
}
.topnav a {
float: left;
display: inline-block;
text-align: center;
padding: 14px 16px
}
.topnav a:hover {
background-color: #ddd
}
.topnav a.active {
background-color: #2196f3;
color: #fff
}
.topnav input[type=search] {
padding: 6px;
border: none;
margin-top: 8px;
color: #e6e6e7
}
.topnav input[type=submit] {
float: right;
padding: 6px;
border: none;
margin-top: 8px;
color: #e6e6e7;
margin-right: 16px
}
#search-query {
color: #1f1a24
}
#search-submit {
color: #1f1a24
}

71
sectorrent.html Normal file
View File

@@ -0,0 +1,71 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="search.css" rel="stylesheet">
<link href="home.css" rel="stylesheet">
<link href="info.css" rel="stylesheet">
<title>
</title>
</head>
<body>
<div id="browserpanel" class="content">
<div class="panel">
<div class="section-header panel-section panel-section-header" id="headline">
<div class="text-section-header" id="text-section-header">
<h1 id="text-section-header">I2P Site Properties | This I2P Site has peer-to-peer resources.</h1>
</div>
</div>
</div>
<div class="panel">
<ul>
<li>
<div class="address-info">
<div id="addresstype">
<span id="TypeLabel">Address Type:</span> <span id="Type"></span>
<div id="TypeInfo">
<span id="AddressInfo"></span>
</div>
</div>
</div>
</li>
<li>
<div class="tls-info">
<div id="sitecert">
<span id="CertLabel">Certificate Information:</span> <span id="Cert"></span>
<div id="CertInfo">
<span id="AddressCertInfo"></span>
</div>
</div>
</div>
</li>
<li>
<div id="signingcert">
<span id="SignedLabel">Signed By:</span> <span id="Signed"></span>
</div>
</li>
</ul>
</div>
<div class="panel">
<p>
To help distribute the site content, use the links below to join the swarm.
</p>
<ul>
<li>
<div class="address-info">
<span id="TorrentTypeLabel">Torrent Links:</span> <span id="Type"></span>
<div id="TorrentTypeInfo">
</div>
</div>
</li>
</ul>
</div>
</div>
<script src="cert.js"></script>
<script src="torrent.js"></script>
</body>
</html>

55
security.html Normal file
View File

@@ -0,0 +1,55 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="search.css" rel="stylesheet">
<link href="home.css" rel="stylesheet">
<link href="info.css" rel="stylesheet">
<title>
</title>
</head>
<body>
<div class="content" id="browserpanel">
<div class="panel">
<div class="section-header panel-section panel-section-header" id="headline">
<div class="text-section-header" id="text-section-header">
<h1 id="text-section-header">I2P Site Properties</h1>
</div>
</div>
</div>
<div class="panel">
<ul>
<li>
<div class="address-info">
<div id="addresstype">
<span id="TypeLabel">Address Type:</span> <span id="Type"></span>
<div id="TypeInfo">
<span id="AddressInfo"></span>
</div>
</div>
</div>
</li>
<li>
<div class="tls-info">
<div id="sitecert">
<span id="CertLabel">Certificate Information:</span> <span id="Cert"></span>
<div id="CertInfo">
<span id="AddressCertInfo"></span>
</div>
</div>
</div>
</li>
<li>
<div id="signingcert">
<span id="SignedLabel">Signed By:</span> <span id="Signed"></span>
</div>
</li>
</ul>
</div>
</div>
<script src="cert.js"></script>
</body>
</html>

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; }

23
sidebar.css Normal file
View File

@@ -0,0 +1,23 @@
li {
width: 90%;
margin-left: 0
}
ul {
width: 100%
}
button {
width: 45%;
text-align: center
}
#applicationExplain {
float: unset
}
.button-list {
display: inline
}
#hidden {
display: none
}
.hidden {
display: none
}

165
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;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 65 KiB

BIN
toopie.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

39
torrent.html Normal file
View File

@@ -0,0 +1,39 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="search.css" rel="stylesheet">
<link href="home.css" rel="stylesheet">
<link href="info.css" rel="stylesheet">
<title>
</title>
</head>
<body>
<div id="browserpanel" class="content">
<div class="panel">
<div class="section-header panel-section panel-section-header" id="headline">
<div class="text-section-header" id="text-section-header">
<h1 id="text-section-header">This I2P Site has peer-to-peer resources.</h1>
</div>
</div>
</div>
<div class="panel">
<p>
To help distribute the site content, use the links below to join the swarm.
</p>
<ul>
<li>
<div class="address-info">
<span id="TypeLabel">Torrent Links:</span> <span id="Type"></span>
<div id="TypeInfo">
</div>
</div>
</li>
</ul>
</div>
</div>
<script src="torrent.js"></script>
</body>
</html>

19
torrent.js Normal file
View File

@@ -0,0 +1,19 @@
function gotCurrent(tab) {
function gotTitle(title) {
let addr = title;
document.getElementById("TypeInfo").innerHTML =
'<div class="AddressInfo"><a href="' + addr + '">' + addr + "</a></div>";
}
console.log(tab);
var gettingTitle = browser.pageAction.getTitle({
tabId: tab[0].id,
});
gettingTitle.then(gotTitle);
}
function tabError(error) {
console.log(`Error : ${error}`);
}
const gettingCurrent = browser.tabs.query({ active: true });
gettingCurrent.then(gotCurrent, tabError);

18
translate.sh Executable file
View File

@@ -0,0 +1,18 @@
#! /usr/bin/env sh
webext-translator -lang="ar"
git commit -am "checkin translations ar" && git push --all
webext-translator -lang="zh"
git commit -am "checkin translations zh" && git push --all
webext-translator -lang="fr"
git commit -am "checkin translations fr" && git push --all
webext-translator -lang="de"
git commit -am "checkin translations de" && git push --all
webext-translator -lang="it"
git commit -am "checkin translations it" && git push --all
webext-translator -lang="ja"
git commit -am "checkin translations ja" && git push --all
webext-translator -lang="pt"
git commit -am "checkin translations pt" && git push --all
webext-translator -lang="ru"
git commit -am "checkin translations ru" && git push --all
webext-translator -lang="es"

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